3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-05-04 22:35:45 +00:00

debugging simplex/pb

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2014-02-21 14:39:54 -08:00
parent ea65f32914
commit e2db1418f9
7 changed files with 235 additions and 73 deletions

View file

@ -47,10 +47,12 @@ namespace simplex {
m.set(b, m_vars[v].m_base_coeff);
m.lcm(a, b, c);
TRACE("simplex",
m.display(tout << "a: ", a);
m.display(tout << "b v" << v << " : ", b);
m.display(tout << "c: ", c);
m.display(tout << " a: ", a);
m.display(tout << " b v" << v << " : ", b);
m.display(tout << " c: ", c);
tout << "\n";
M.display_row(tout, r);
M.display_row(tout, row(m_vars[v].m_base2row));
if (m.is_zero(b)) {
display(tout);
});
@ -58,11 +60,11 @@ namespace simplex {
m.abs(c);
m.div(c, a, b);
m.div(c, m_vars[v].m_base_coeff, a);
m.set(mul, a);
m.abs(mul);
m.mul(mul, b, mul);
M.mul(r, b);
m.neg(a);
M.add(r, a, row(m_vars[v].m_base2row));
TRACE("simplex", M.display_row(tout, r););
}
scoped_numeral base_coeff(m);
@ -136,6 +138,18 @@ namespace simplex {
M.del(r);
}
template<typename Ext>
bool simplex<Ext>::above_lower(var_t var, eps_numeral const& b) const {
var_info const& vi = m_vars[var];
return !vi.m_lower_valid || em.gt(b, vi.m_lower);
}
template<typename Ext>
bool simplex<Ext>::below_upper(var_t var, eps_numeral const& b) const {
var_info const& vi = m_vars[var];
return !vi.m_upper_valid || em.lt(b, vi.m_upper);
}
template<typename Ext>
void simplex<Ext>::set_lower(var_t var, eps_numeral const& b) {
var_info& vi = m_vars[var];
@ -206,6 +220,26 @@ namespace simplex {
}
}
template<typename Ext>
void simplex<Ext>::display_row(std::ostream& out, row const& r, bool values) {
row_iterator it = M.row_begin(r), end = M.row_end(r);
for (; it != end; ++it) {
m.display(out, it->m_coeff);
out << "*v" << it->m_var << " ";
if (values) {
var_info const& vi = m_vars[it->m_var];
out << em.to_string(vi.m_value);
out << " [";
if (vi.m_lower_valid) out << em.to_string(vi.m_lower); else out << "-oo";
out << ":";
if (vi.m_upper_valid) out << em.to_string(vi.m_upper); else out << "oo";
out << "] ";
}
}
out << "\n";
}
template<typename Ext>
void simplex<Ext>::ensure_var(var_t v) {
while (v >= m_vars.size()) {
@ -344,6 +378,8 @@ namespace simplex {
return vi.m_lower_valid && em.lt(vi.m_value, vi.m_lower);
}
template<typename Ext>
bool simplex<Ext>::above_upper(var_t v) const {
var_info const& vi = m_vars[v];