mirror of
https://github.com/Z3Prover/z3
synced 2025-06-05 21:53:23 +00:00
fix lower/upper bound estimate with respect to offset
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
9c4409a8fe
commit
252b9e8819
2 changed files with 5 additions and 1 deletions
|
@ -710,22 +710,25 @@ namespace opt {
|
||||||
|
|
||||||
void context::update_lower(bool override) {
|
void context::update_lower(bool override) {
|
||||||
expr_ref val(m);
|
expr_ref val(m);
|
||||||
rational r(0);
|
|
||||||
for (unsigned i = 0; i < m_objectives.size(); ++i) {
|
for (unsigned i = 0; i < m_objectives.size(); ++i) {
|
||||||
objective const& obj = m_objectives[i];
|
objective const& obj = m_objectives[i];
|
||||||
|
rational r;
|
||||||
switch(obj.m_type) {
|
switch(obj.m_type) {
|
||||||
case O_MINIMIZE:
|
case O_MINIMIZE:
|
||||||
if (m_model->eval(obj.m_term, val) && is_numeral(val, r)) {
|
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);
|
m_optsmt.update_lower(obj.m_index, inf_eps(-r), override);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case O_MAXIMIZE:
|
case O_MAXIMIZE:
|
||||||
if (m_model->eval(obj.m_term, val) && is_numeral(val, r)) {
|
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);
|
m_optsmt.update_lower(obj.m_index, inf_eps(r), override);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case O_MAXSMT: {
|
case O_MAXSMT: {
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
|
r = obj.m_offset;
|
||||||
for (unsigned j = 0; ok && j < obj.m_terms.size(); ++j) {
|
for (unsigned j = 0; ok && j < obj.m_terms.size(); ++j) {
|
||||||
if (m_model->eval(obj.m_terms[j], val)) {
|
if (m_model->eval(obj.m_terms[j], val)) {
|
||||||
if (!m.is_true(val)) {
|
if (!m.is_true(val)) {
|
||||||
|
|
|
@ -111,6 +111,7 @@ namespace opt {
|
||||||
if (!m_assignment.back()) {
|
if (!m_assignment.back()) {
|
||||||
m_upper += m_weights[i];
|
m_upper += m_weights[i];
|
||||||
}
|
}
|
||||||
|
TRACE("opt", tout << "evaluate: " << val << "\n";);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
expr* mk_not(expr* e) {
|
expr* mk_not(expr* e) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue