3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-24 01:25:31 +00:00

add API for setting variable activity

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2019-02-15 12:05:24 -08:00
parent e4c6dcd84c
commit 89bf2d4368
22 changed files with 125 additions and 1 deletions

View file

@ -1619,6 +1619,12 @@ namespace sat {
return tracking_assumptions() && m_assumption_set.contains(l);
}
void solver::set_activity(bool_var v, unsigned act) {
unsigned old_act = m_activity[v];
m_activity[v] = act;
m_case_split_queue.activity_changed_eh(v, act > old_act);
}
bool solver::is_assumption(bool_var v) const {
return is_assumption(literal(v, false)) || is_assumption(literal(v, true));
}

View file

@ -387,6 +387,7 @@ namespace sat {
char const* get_reason_unknown() const { return m_reason_unknown.c_str(); }
bool check_clauses(model const& m) const;
bool is_assumption(bool_var v) const;
void set_activity(bool_var v, unsigned act);
lbool cube(bool_var_vector& vars, literal_vector& lits, unsigned backtrack_level);

View file

@ -341,6 +341,15 @@ public:
return result;
}
void set_activity(expr* var, double activity) override {
m.is_not(var, var);
sat::bool_var v = m_map.to_bool_var(var);
if (v == sat::null_bool_var) {
throw default_exception("literal does not correspond to a Boolean variable");
}
m_solver.set_activity(v, activity);
}
proof * get_proof() override {
UNREACHABLE();
return nullptr;