[PPL-devel] [GIT] ppl/ppl(pip): Changed the cut generation strategy in compatibility_check.

François Galea francois.galea at uvsq.fr
Thu Nov 26 11:04:56 CET 2009


Module: ppl/ppl
Branch: pip
Commit: b831631899ddb867d22ec073d93dabaefe3cb487
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=b831631899ddb867d22ec073d93dabaefe3cb487

Author: François Galea <francois.galea at uvsq.fr>
Date:   Thu Nov 26 08:37:43 2009 +0100

Changed the cut generation strategy in compatibility_check.
Now several cuts may be generated in a single pass.

---

 src/PIP_Tree.cc |   32 ++++++++++++++++++++------------
 1 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc
index a181521..139df97 100644
--- a/src/PIP_Tree.cc
+++ b/src/PIP_Tree.cc
@@ -1087,18 +1087,26 @@ PIP_Solution_Node::compatibility_check(const Matrix &ctx, const Row &cnst) {
         // Found an integer solution, thus the check is successful
         return true;
       }
-      // Generate a new cut
-      var_row.push_back(mapping.size());
-      basis.push_back(false);
-      mapping.push_back(num_rows);
-      s.add_zero_rows(1, Row::Flags());
-      const Row& row = s[i_];
-      Row& cut = s[num_rows++];
-      scaling.push_back(scaling[i_]);
-      const Coefficient& sc = scaling[i_];
-      for (j=0; j<num_cols; ++j)
-        mod_assign(cut[j], row[j], sc);
-      cut[0] -= sc;
+      for (i = 0; i < num_vars; ++i) {
+        if (basis[i])
+          // basic variable = 0 -> integer
+          continue;
+        i_ = mapping[i];
+        const Coefficient& d = scaling[i_];
+        if (s[i_][0] % d == 0)
+          continue;
+        // Constant term is not integer. Generate a new cut.
+        var_row.push_back(mapping.size());
+        basis.push_back(false);
+        mapping.push_back(num_rows);
+        s.add_zero_rows(1, Row::Flags());
+        const Row& row = s[i_];
+        Row& cut = s[num_rows++];
+        for (j = 0; j < num_cols; ++j)
+          mod_assign(cut[j], row[j], d);
+        cut[0] -= d;
+        scaling.push_back(d);
+      }
       continue;
     }
 




More information about the PPL-devel mailing list