mirror of
https://github.com/Z3Prover/z3
synced 2025-04-29 03:45:51 +00:00
experiments with LNS
This commit is contained in:
parent
4ad95939b6
commit
489df0760f
4 changed files with 85 additions and 16 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue