mirror of
https://github.com/Z3Prover/z3
synced 2025-08-09 04:31:24 +00:00
separate pre-processing, add callback parameter to push/pop in python API
This commit is contained in:
parent
f43d9d00d4
commit
c996a66da0
16 changed files with 287 additions and 200 deletions
|
@ -44,8 +44,8 @@ namespace opt {
|
|||
}
|
||||
|
||||
public:
|
||||
wmax(maxsat_context& c, weights_t& ws, expr_ref_vector const& soft):
|
||||
maxsmt_solver_base(c, ws, soft),
|
||||
wmax(maxsat_context& c, vector<soft>& s):
|
||||
maxsmt_solver_base(c, s),
|
||||
m_trail(m),
|
||||
m_defs(m) {}
|
||||
|
||||
|
@ -54,22 +54,18 @@ namespace opt {
|
|||
lbool operator()() override {
|
||||
TRACE("opt", tout << "weighted maxsat\n";);
|
||||
scoped_ensure_theory wth(*this);
|
||||
obj_map<expr, rational> soft;
|
||||
reset();
|
||||
lbool is_sat = find_mutexes(soft);
|
||||
if (is_sat != l_true) {
|
||||
return is_sat;
|
||||
}
|
||||
m_upper = m_lower;
|
||||
if (init())
|
||||
return l_undef;
|
||||
|
||||
lbool is_sat = l_true;
|
||||
|
||||
expr_ref_vector asms(m);
|
||||
vector<expr_ref_vector> cores;
|
||||
|
||||
for (auto const& kv : soft) {
|
||||
assert_weighted(wth(), kv.m_key, kv.m_value);
|
||||
if (!is_true(kv.m_key)) {
|
||||
m_upper += kv.m_value;
|
||||
}
|
||||
}
|
||||
for (auto const& [k, w, t] : m_soft)
|
||||
assert_weighted(wth(), k, w);
|
||||
|
||||
wth().init_min_cost(m_upper - m_lower);
|
||||
trace_bounds("wmax");
|
||||
|
||||
|
@ -308,8 +304,8 @@ namespace opt {
|
|||
|
||||
};
|
||||
|
||||
maxsmt_solver_base* mk_wmax(maxsat_context& c, weights_t& ws, expr_ref_vector const& soft) {
|
||||
return alloc(wmax, c, ws, soft);
|
||||
maxsmt_solver_base* mk_wmax(maxsat_context& c, vector<soft> & s) {
|
||||
return alloc(wmax, c, s);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue