3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-24 09:35:32 +00:00

integrate v2 of lns

This commit is contained in:
Nikolaj Bjorner 2021-02-04 15:47:40 -08:00
parent dfb7c87448
commit 0ec567fe15
18 changed files with 254 additions and 105 deletions

View file

@ -1914,7 +1914,8 @@ namespace sat {
m_next_simplify = m_config.m_simplify_delay;
m_min_d_tk = 1.0;
m_search_lvl = 0;
m_conflicts_since_gc = 0;
if (m_learned.size() <= 2*m_clauses.size())
m_conflicts_since_gc = 0;
m_restart_next_out = 0;
m_asymm_branch.init_search();
m_stopwatch.reset();
@ -3784,6 +3785,14 @@ namespace sat {
}
}
void solver::move_to_front(bool_var b) {
if (b >= num_vars())
return;
bool_var next = m_case_split_queue.min_var();
auto next_act = m_activity[next];
set_activity(b, next_act + 1);
}
// -----------------------
//
// Iterators

View file

@ -352,8 +352,9 @@ namespace sat {
bool was_eliminated(bool_var v) const { return m_eliminated[v]; }
void set_eliminated(bool_var v, bool f) override;
bool was_eliminated(literal l) const { return was_eliminated(l.var()); }
void set_phase(literal l) override { m_best_phase[l.var()] = m_phase[l.var()] = !l.sign(); }
void set_phase(bool_var b, bool sign) { set_phase(literal(b, sign)); }
void set_phase(literal l) override { if (l.var() < num_vars()) m_best_phase[l.var()] = m_phase[l.var()] = !l.sign(); }
bool_var get_phase(bool_var b) { return m_phase.get(b, false); }
void move_to_front(bool_var b);
unsigned scope_lvl() const { return m_scope_lvl; }
unsigned search_lvl() const { return m_search_lvl; }
bool at_search_lvl() const { return m_scope_lvl == m_search_lvl; }

View file

@ -298,7 +298,27 @@ public:
bool is_not = m.is_not(e, e);
sat::bool_var b = m_map.to_bool_var(e);
if (b != sat::null_bool_var)
m_solver.set_phase(b, is_not);
m_solver.set_phase(sat::literal(b, is_not));
}
class sat_phase : public phase, public sat::literal_vector {};
phase* get_phase() override {
sat_phase* p = alloc(sat_phase);
for (unsigned v = m_solver.num_vars(); v-- > 0; ) {
p->push_back(sat::literal(v, !m_solver.get_phase(v)));
}
return p;
}
void set_phase(phase* p) override {
for (auto lit : *static_cast<sat_phase*>(p))
m_solver.set_phase(lit);
}
void move_to_front(expr* e) override {
bool is_not = m.is_not(e, e);
sat::bool_var b = m_map.to_bool_var(e);
if (b != sat::null_bool_var)
m_solver.move_to_front(b);
}
unsigned get_scope_level() const override {