mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 09:05:31 +00:00
fixes to maxres/mss
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
b5bbf83847
commit
18b491eee0
10 changed files with 76 additions and 114 deletions
|
@ -32,6 +32,7 @@ namespace sat {
|
|||
m_core.reset();
|
||||
m_mus.reset();
|
||||
m_model.reset();
|
||||
m_best_value = 0;
|
||||
}
|
||||
|
||||
void mus::set_core() {
|
||||
|
@ -96,8 +97,15 @@ namespace sat {
|
|||
if (!core.empty()) {
|
||||
// mr(); // TBD: measure
|
||||
}
|
||||
double new_value = s.m_wsls.evaluate_model(s.m_model);
|
||||
if (m_model.empty()) {
|
||||
m_model.append(s.m_model);
|
||||
m_best_value = new_value;
|
||||
}
|
||||
else if (m_best_value > new_value) {
|
||||
m_model.reset();
|
||||
m_model.append(s.m_model);
|
||||
m_best_value = new_value;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ namespace sat {
|
|||
literal_vector m_mus;
|
||||
bool m_is_active;
|
||||
model m_model; // model obtained during minimal unsat core
|
||||
double m_best_value;
|
||||
|
||||
|
||||
solver& s;
|
||||
|
|
|
@ -354,7 +354,7 @@ namespace sat {
|
|||
//
|
||||
// Initialize m_clause_weights, m_hscore, m_sscore.
|
||||
//
|
||||
m_best_value = m_false.empty()?evaluate_model():-1.0;
|
||||
m_best_value = m_false.empty()?evaluate_model(m_model):-1.0;
|
||||
m_best_model.reset();
|
||||
m_clause_weights.reset();
|
||||
m_hscore.reset();
|
||||
|
@ -382,7 +382,7 @@ namespace sat {
|
|||
for (; !m_cancel && m_best_value > 0 && i < m_max_tries; ++i) {
|
||||
wflip();
|
||||
if (m_false.empty()) {
|
||||
double val = evaluate_model();
|
||||
double val = evaluate_model(m_model);
|
||||
if (val < m_best_value || m_best_value < 0.0) {
|
||||
m_best_value = val;
|
||||
m_best_model.reset();
|
||||
|
@ -511,12 +511,12 @@ namespace sat {
|
|||
DEBUG_CODE(check_invariant(););
|
||||
}
|
||||
|
||||
double wsls::evaluate_model() {
|
||||
double wsls::evaluate_model(model& mdl) {
|
||||
SASSERT(m_false.empty());
|
||||
double result = 0.0;
|
||||
for (unsigned i = 0; i < m_soft.size(); ++i) {
|
||||
literal lit = m_soft[i];
|
||||
if (value_at(lit, m_model) != l_true) {
|
||||
if (value_at(lit, mdl) != l_true) {
|
||||
result += m_weights[i];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -99,12 +99,12 @@ namespace sat {
|
|||
void opt(unsigned sz, literal const* tabu, bool reuse_model);
|
||||
model const& get_model() { return m_best_model; }
|
||||
virtual void display(std::ostream& out) const;
|
||||
double evaluate_model(model& mdl);
|
||||
private:
|
||||
void wflip();
|
||||
void wflip(literal lit);
|
||||
void update_hard_weights();
|
||||
bool pick_wflip(literal & lit);
|
||||
double evaluate_model();
|
||||
virtual void check_invariant();
|
||||
void refresh_scores(bool_var v);
|
||||
int compute_hscore(bool_var v);
|
||||
|
|
|
@ -1737,7 +1737,7 @@ namespace sat {
|
|||
|
||||
m_mus(); // ignore return value on cancelation.
|
||||
m_model.reset();
|
||||
m_model.append(m_mus.get_model());
|
||||
m_model.append(m_mus.get_model());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -372,7 +372,9 @@ struct goal2sat::imp {
|
|||
SASSERT(m_result_stack.empty());
|
||||
}
|
||||
|
||||
void insert_dep(expr* dep, bool sign) {
|
||||
void insert_dep(expr* dep0, expr* dep, bool sign) {
|
||||
SASSERT(sign || dep0 == dep); // !sign || (not dep0) == dep.
|
||||
SASSERT(!sign || m.is_not(dep0));
|
||||
expr_ref new_dep(m), fml(m);
|
||||
if (is_uninterp_const(dep)) {
|
||||
new_dep = dep;
|
||||
|
@ -386,7 +388,7 @@ struct goal2sat::imp {
|
|||
}
|
||||
convert_atom(new_dep, false, false);
|
||||
sat::literal lit = m_result_stack.back();
|
||||
m_dep2asm.insert(dep, sign?(~lit):lit);
|
||||
m_dep2asm.insert(dep0, sign?~lit:lit);
|
||||
m_result_stack.pop_back();
|
||||
}
|
||||
|
||||
|
@ -411,7 +413,7 @@ struct goal2sat::imp {
|
|||
SASSERT(m.is_bool(d));
|
||||
bool sign = m.is_not(d, d1);
|
||||
|
||||
insert_dep(d1, sign);
|
||||
insert_dep(d, d1, sign);
|
||||
if (d == f) {
|
||||
goto skip_dep;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue