mirror of
https://github.com/Z3Prover/z3
synced 2025-04-13 12:28:44 +00:00
refactor weighted maxsmt
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
1db7e0a149
commit
00f45579cc
|
@ -27,29 +27,29 @@ Notes:
|
|||
|
||||
namespace opt {
|
||||
|
||||
lbool maxsmt::operator()(opt_solver& s) {
|
||||
lbool maxsmt::operator()(opt_solver* s) {
|
||||
lbool is_sat;
|
||||
m_msolver = 0;
|
||||
m_s = &s;
|
||||
m_s = s;
|
||||
IF_VERBOSE(1, verbose_stream() << "(maxsmt)\n";);
|
||||
if (m_soft_constraints.empty()) {
|
||||
TRACE("opt", tout << "no constraints\n";);
|
||||
m_msolver = 0;
|
||||
is_sat = s.check_sat(0, 0);
|
||||
is_sat = m_s->check_sat(0, 0);
|
||||
}
|
||||
else if (is_maxsat_problem(m_weights)) {
|
||||
if (m_maxsat_engine == symbol("core_maxsat")) {
|
||||
m_msolver = alloc(core_maxsat, m, s, m_soft_constraints);
|
||||
m_msolver = alloc(core_maxsat, m, *m_s, m_soft_constraints);
|
||||
}
|
||||
else if (m_maxsat_engine == symbol("weighted_maxsat")) {
|
||||
m_msolver = alloc(wmaxsmt, m, opt_solver::to_opt(s), m_soft_constraints, m_weights);
|
||||
m_msolver = alloc(wmaxsmt, m, m_s.get(), m_soft_constraints, m_weights);
|
||||
}
|
||||
else {
|
||||
m_msolver = alloc(fu_malik, m, s, m_soft_constraints);
|
||||
m_msolver = alloc(fu_malik, m, *m_s, m_soft_constraints);
|
||||
}
|
||||
}
|
||||
else {
|
||||
m_msolver = alloc(wmaxsmt, m, opt_solver::to_opt(s), m_soft_constraints, m_weights);
|
||||
m_msolver = alloc(wmaxsmt, m, m_s.get(), m_soft_constraints, m_weights);
|
||||
}
|
||||
|
||||
if (m_msolver) {
|
||||
|
|
|
@ -44,7 +44,7 @@ namespace opt {
|
|||
|
||||
class maxsmt {
|
||||
ast_manager& m;
|
||||
opt_solver* m_s;
|
||||
ref<opt_solver> m_s;
|
||||
volatile bool m_cancel;
|
||||
expr_ref_vector m_soft_constraints;
|
||||
expr_ref_vector m_answer;
|
||||
|
@ -58,7 +58,7 @@ namespace opt {
|
|||
public:
|
||||
maxsmt(ast_manager& m): m(m), m_s(0), m_cancel(false), m_soft_constraints(m), m_answer(m) {}
|
||||
|
||||
lbool operator()(opt_solver& s);
|
||||
lbool operator()(opt_solver* s);
|
||||
|
||||
void set_cancel(bool f);
|
||||
|
||||
|
|
|
@ -194,7 +194,7 @@ namespace opt {
|
|||
lbool context::execute_maxsat(symbol const& id, bool committed) {
|
||||
model_ref tmp;
|
||||
maxsmt& ms = *m_maxsmts.find(id);
|
||||
lbool result = ms(get_solver());
|
||||
lbool result = ms(m_solver.get());
|
||||
if (result == l_true && committed) ms.commit_assignment();
|
||||
if (result != l_false && (ms.get_model(tmp), tmp.get())) ms.get_model(m_model);
|
||||
return result;
|
||||
|
@ -381,7 +381,7 @@ namespace opt {
|
|||
params_ref lia_p;
|
||||
lia_p.set_bool("compile_equality", optp.pb_compile_equality());
|
||||
tac3->updt_params(lia_p);
|
||||
m_simplify = and_then(tac0.get(), tac2.get(), tac3.get(), mk_nnf_tactic(m));
|
||||
m_simplify = and_then(tac0.get(), tac2.get(), tac3.get());
|
||||
}
|
||||
else {
|
||||
m_simplify = tac0.get();
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -31,7 +31,10 @@ namespace opt {
|
|||
struct imp;
|
||||
imp* m_imp;
|
||||
public:
|
||||
wmaxsmt(ast_manager& m, opt_solver& s, expr_ref_vector& soft_constraints, vector<rational> const& weights);
|
||||
wmaxsmt(ast_manager& m,
|
||||
opt_solver* s,
|
||||
expr_ref_vector& soft_constraints,
|
||||
vector<rational> const& weights);
|
||||
~wmaxsmt();
|
||||
virtual lbool operator()();
|
||||
virtual rational get_lower() const;
|
||||
|
|
Loading…
Reference in a new issue