[PPL-devel] [GIT] ppl/ppl(pip): Fixed bugs.

François Galea francois.galea at uvsq.fr
Thu Oct 1 16:34:11 CEST 2009


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

Author: François Galea <francois.galea at uvsq.fr>
Date:   Thu Oct  1 16:32:23 2009 +0200

Fixed bugs.

---

 src/PIP_Tree.cc                  |    7 ++++++-
 src/PIP_Tree.inlines.hh          |    2 +-
 tests/PIP_Problem/pipproblem1.cc |    2 +-
 3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc
index 8da372e..08c6c83 100644
--- a/src/PIP_Tree.cc
+++ b/src/PIP_Tree.cc
@@ -430,6 +430,7 @@ PIP_Solution_Node::Rational_Matrix::scale(const Coefficient &ratio) {
   for (i=0; i<i_max; ++i)
     for (j=0; j<j_max; ++j)
       rows[i][j] *= ratio;
+  denominator *= ratio;
 }
 
 void
@@ -941,6 +942,7 @@ PIP_Solution_Node::solve(PIP_Tree_Node*& parent_ref, const Matrix& ctx,
             gcd_assign(gcd, mult, sij);
             Coefficient scale_factor = sij/gcd;
             tableau.s.scale(scale_factor);
+            tableau.t.scale(scale_factor);
             mult *= scale_factor;
           }
           tableau.s[k][j] -= mult / sij;
@@ -955,6 +957,7 @@ PIP_Solution_Node::solve(PIP_Tree_Node*& parent_ref, const Matrix& ctx,
             // Must scale matrix to stay in integer case
             gcd_assign(gcd, c, sij);
             Coefficient scale_factor = sij/gcd;
+            tableau.s.scale(scale_factor);
             tableau.t.scale(scale_factor);
             c *= scale_factor;
           }
@@ -992,6 +995,7 @@ PIP_Solution_Node::solve(PIP_Tree_Node*& parent_ref, const Matrix& ctx,
           gcd_assign(gcd, c, sij);
           Coefficient scale_factor = sij/gcd;
           tableau.s.scale(scale_factor);
+          tableau.t.scale(scale_factor);
         }
         c /= sij;
       }
@@ -1118,7 +1122,7 @@ PIP_Solution_Node::solve(PIP_Tree_Node*& parent_ref, const Matrix& ctx,
       if (tableau.s.is_integer() && tableau.t.is_integer()) {
         /* The solution is integer */
 #ifdef NOISY_PIP
-        std::cout << "Solution found for in current node."
+        std::cout << "Solution found for problem in current node."
                   << std::endl;
 #endif
         return OPTIMIZED_PIP_PROBLEM;
@@ -1130,6 +1134,7 @@ PIP_Solution_Node::solve(PIP_Tree_Node*& parent_ref, const Matrix& ctx,
         std::cout << "Cut generation required."
                   << std::endl;
 #endif
+        return OPTIMIZED_PIP_PROBLEM;
       }
     }
   } // Main loop of the simplex algorithm
diff --git a/src/PIP_Tree.inlines.hh b/src/PIP_Tree.inlines.hh
index c7f66bb..79f48c1 100644
--- a/src/PIP_Tree.inlines.hh
+++ b/src/PIP_Tree.inlines.hh
@@ -42,7 +42,7 @@ PIP_Solution_Node::Rational_Matrix::Rational_Matrix(dimension_type n_rows,
 inline
 PIP_Solution_Node::Rational_Matrix::Rational_Matrix(const Rational_Matrix& y)
   : Matrix(y),
-    denominator(1) {
+    denominator(y.denominator) {
 }
 
 inline bool
diff --git a/tests/PIP_Problem/pipproblem1.cc b/tests/PIP_Problem/pipproblem1.cc
index 4895eb8..5169f0f 100644
--- a/tests/PIP_Problem/pipproblem1.cc
+++ b/tests/PIP_Problem/pipproblem1.cc
@@ -105,7 +105,7 @@ test02() {
   cs.insert(3*j >= -2*i+8);
   cs.insert(j <= 4*i - 4);
   cs.insert(j <= m);
-  cs.insert(j >= 0);
+  //cs.insert(j >= 0);
   cs.insert(i <= n);
 
   PIP_Problem pip(cs.space_dimension(), cs.begin(), cs.end(), params);




More information about the PPL-devel mailing list