[PPL-devel] [GIT] ppl/ppl(pip): Added code for selection of the deepest cut.
François Galea
francois.galea at uvsq.fr
Mon Oct 5 09:15:35 CEST 2009
Module: ppl/ppl
Branch: pip
Commit: 90400149d3e368041a6b6bd2e01e1455e0d0c4a8
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=90400149d3e368041a6b6bd2e01e1455e0d0c4a8
Author: François Galea <francois.galea at uvsq.fr>
Date: Mon Oct 5 08:46:45 2009 +0200
Added code for selection of the deepest cut.
---
src/PIP_Tree.cc | 22 +++++++++++++++++++++-
1 files changed, 21 insertions(+), 1 deletions(-)
diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc
index 0e7c211..bb47121 100644
--- a/src/PIP_Tree.cc
+++ b/src/PIP_Tree.cc
@@ -1213,11 +1213,32 @@ PIP_Solution_Node::solve(PIP_Tree_Node*& parent_ref, const Matrix& ctx,
}
else {
/* The solution is non-integer. We have to generate a cut. */
+ Coefficient mod;
+ /* Look for row which will generate the "deepest" cut */
+ Coefficient score;
+ Coefficient best = 0;
+ dimension_type best_i = i;
+ for (i_ = i; i_ < num_rows; ++i_) {
+ const Row& row = tableau.t[i_];
+ score = 0;
+ for (j = 0; j < num_params; ++j) {
+ mod_assign(mod, row[j], d);
+ if (mod != 0)
+ score += d - mod;
+ }
+ if (score > best) {
+ best = score;
+ best_i = i_;
+ }
+ }
+ i = best_i;
+
#ifdef NOISY_PIP
std::cout << "Row " << i << " contains non-integer coefficients. "
<< "Cut generation required."
<< std::endl;
#endif
+
tableau.t.add_zero_columns(1);
tableau.s.add_zero_rows(1, Row::Flags());
tableau.t.add_zero_rows(1, Row::Flags());
@@ -1227,7 +1248,6 @@ PIP_Solution_Node::solve(PIP_Tree_Node*& parent_ref, const Matrix& ctx,
const Row& row_t = tableau.t[i];
Linear_Expression e;
Variables_Set::const_iterator p;
- Coefficient mod;
mod_assign(mod, row_t[0], d);
if (mod != 0)
e += (d-mod);
More information about the PPL-devel
mailing list