3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-29 03:45:51 +00:00

experiments with LNS

This commit is contained in:
Nikolaj Bjorner 2021-02-02 13:03:54 -08:00
parent 4ad95939b6
commit 489df0760f
4 changed files with 85 additions and 16 deletions

View file

@ -502,6 +502,7 @@ public:
for (auto const & c : cores) {
process_unsat(c.m_core, c.m_weight);
}
improve_model(m_model);
}
void update_model(expr* def, expr* value) {
@ -748,11 +749,28 @@ public:
std::function<void(model_ref&)> update_model = [&](model_ref& mdl) {
update_assignment(mdl);
};
std::function<void(vector<expr_ref_vector> const&)> _relax_cores = [&](vector<expr_ref_vector> const& cores) {
relax_cores(cores);
};
lns lns(s(), update_model);
lns.set_conflicts(m_lns_conflicts);
lns.set_relax(_relax_cores);
lns.climb(mdl, m_asms);
}
void relax_cores(vector<expr_ref_vector> const& cores) {
vector<weighted_core> wcores;
for (auto & core : cores) {
exprs _core(core.size(), core.c_ptr());
wcores.push_back(weighted_core(_core, core_weight(_core)));
remove_soft(_core, m_asms);
split_core(_core);
}
process_unsat(wcores);
}
void update_assignment(model_ref & mdl) {
improve_model(mdl);
mdl->set_model_completion(true);