From 8b7c73325078dbb290d536a7b6709e814127fc04 Mon Sep 17 00:00:00 2001 From: Arthur Bit-Monnot Date: Fri, 5 Jul 2024 11:27:47 +0200 Subject: [PATCH] fix(up): Maximization of final value was incorrect (minimizing the value instead) --- planning/planners/src/encode.rs | 3 ++- solver/src/model/lang/linear.rs | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/planning/planners/src/encode.rs b/planning/planners/src/encode.rs index 0dea2b26..f3a4f581 100644 --- a/planning/planners/src/encode.rs +++ b/planning/planners/src/encode.rs @@ -456,8 +456,9 @@ pub fn add_metric(pb: &FiniteProblem, model: &mut Model, metric: Metric) -> IAto Metric::MaximizeVar(to_maximize) => { // we must return a variable to minimize. // return a new variable constrained to be the negation of the one to maximize + // to_maximize = -to_minimize let to_minimize = model.new_ivar(INT_CST_MIN, INT_CST_MAX, VarLabel(Container::Base, VarType::Cost)); - let sum = LinearSum::zero() + to_maximize - to_minimize; + let sum = LinearSum::zero() + to_maximize + to_minimize; model.enforce(sum.clone().leq(0), []); model.enforce(sum.geq(0), []); to_minimize.into() diff --git a/solver/src/model/lang/linear.rs b/solver/src/model/lang/linear.rs index 7f930bb6..61a30bf8 100644 --- a/solver/src/model/lang/linear.rs +++ b/solver/src/model/lang/linear.rs @@ -426,6 +426,12 @@ impl std::fmt::Display for LinearLeq { } } +impl std::fmt::Debug for LinearLeq { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{self}") + } +} + impl LinearLeq { pub fn new(sum: LinearSum, ub: IntCst) -> LinearLeq { LinearLeq { sum, ub }