diff --git a/src/opt/opt_context.cpp b/src/opt/opt_context.cpp index ceab047b7..f227d3c04 100644 --- a/src/opt/opt_context.cpp +++ b/src/opt/opt_context.cpp @@ -710,22 +710,25 @@ namespace opt { void context::update_lower(bool override) { expr_ref val(m); - rational r(0); for (unsigned i = 0; i < m_objectives.size(); ++i) { objective const& obj = m_objectives[i]; + rational r; switch(obj.m_type) { case O_MINIMIZE: if (m_model->eval(obj.m_term, val) && is_numeral(val, r)) { + r += obj.m_offset; m_optsmt.update_lower(obj.m_index, inf_eps(-r), override); } break; case O_MAXIMIZE: if (m_model->eval(obj.m_term, val) && is_numeral(val, r)) { + r += obj.m_offset; m_optsmt.update_lower(obj.m_index, inf_eps(r), override); } break; case O_MAXSMT: { bool ok = true; + r = obj.m_offset; for (unsigned j = 0; ok && j < obj.m_terms.size(); ++j) { if (m_model->eval(obj.m_terms[j], val)) { if (!m.is_true(val)) { diff --git a/src/opt/weighted_maxsat.cpp b/src/opt/weighted_maxsat.cpp index 112b0522a..f19c5c77e 100644 --- a/src/opt/weighted_maxsat.cpp +++ b/src/opt/weighted_maxsat.cpp @@ -111,6 +111,7 @@ namespace opt { if (!m_assignment.back()) { m_upper += m_weights[i]; } + TRACE("opt", tout << "evaluate: " << val << "\n";); } } expr* mk_not(expr* e) {