3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 17:15:31 +00:00

update hitting set implementation

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2014-06-23 11:28:38 -07:00
parent 04407938be
commit 519c9dba25
2 changed files with 213 additions and 100 deletions

View file

@ -130,6 +130,7 @@ namespace simplex {
void simplex<Ext>::add_patch(var_t v) {
SASSERT(is_base(v));
if (outside_bounds(v)) {
TRACE("simplex", tout << "Add patch: v" << v << "\n";);
m_to_patch.insert(v);
}
}
@ -200,12 +201,18 @@ namespace simplex {
var_info& vi = m_vars[var];
em.set(vi.m_lower, b);
vi.m_lower_valid = true;
TRACE("simplex", em.display(tout << "v" << var << " lower: ", b);
em.display(tout << " value: ", vi.m_value););
SASSERT(!vi.m_upper_valid || em.le(b, vi.m_upper));
if (!vi.m_is_base && em.lt(vi.m_value, b)) {
scoped_eps_numeral delta(em);
em.sub(b, vi.m_value, delta);
update_value(var, delta);
}
else if (vi.m_is_base && em.lt(vi.m_value, b)) {
SASSERT(outside_bounds(var));
add_patch(var);
}
SASSERT(well_formed());
}
@ -220,6 +227,10 @@ namespace simplex {
em.sub(b, vi.m_value, delta);
update_value(var, delta);
}
else if (vi.m_is_base && em.lt(b, vi.m_value)) {
SASSERT(outside_bounds(var));
add_patch(var);
}
SASSERT(well_formed());
}