From 72130ac7b9c2d2cb5bfa69500fc064b43bccf971 Mon Sep 17 00:00:00 2001 From: Nikolaj Bjorner Date: Wed, 18 Dec 2013 05:49:43 +0200 Subject: [PATCH] fix lower bound update Signed-off-by: Nikolaj Bjorner --- src/opt/opt_context.cpp | 4 ++++ src/opt/optsmt.cpp | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/opt/opt_context.cpp b/src/opt/opt_context.cpp index 26ce2152b..599b6d7d2 100644 --- a/src/opt/opt_context.cpp +++ b/src/opt/opt_context.cpp @@ -424,6 +424,10 @@ namespace opt { objective const& obj = m_objectives[i]; switch(obj.m_type) { case O_MINIMIZE: + if (m_model->eval(obj.m_term, val) && a.is_numeral(val, r)) { + m_optsmt.update_lower(obj.m_index, -r); + } + break; case O_MAXIMIZE: if (m_model->eval(obj.m_term, val) && a.is_numeral(val, r)) { m_optsmt.update_lower(obj.m_index, r); diff --git a/src/opt/optsmt.cpp b/src/opt/optsmt.cpp index 97aec1e8c..19ea39521 100644 --- a/src/opt/optsmt.cpp +++ b/src/opt/optsmt.cpp @@ -117,6 +117,7 @@ namespace opt { void optsmt::update_lower(unsigned idx, rational const& r) { inf_eps v(r); + std::cout << "update lower: " << r << "\n"; if (m_lower[idx] < v) { m_lower[idx] = v; if (m_s) m_s->get_model(m_model); @@ -322,7 +323,6 @@ namespace opt { std::ostream& optsmt::display_objective(std::ostream& out, unsigned i) const { bool is_max = m_is_max[i]; - inf_eps val = get_lower(i); expr_ref obj(m_objs[i], m); if (!is_max) { arith_util a(m);