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

push blocking code to optimizer context

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2013-10-29 20:26:54 -07:00
parent b0fddd8e60
commit bc44bcad10
11 changed files with 152 additions and 49 deletions

View file

@ -6,10 +6,11 @@
namespace opt {
opt_solver::opt_solver(ast_manager & m, params_ref const & p, symbol const & l):
solver_na2as(m),
opt_solver::opt_solver(ast_manager & mgr, params_ref const & p, symbol const & l):
solver_na2as(mgr),
m_params(p),
m_context(m, m_params),
m_context(mgr, m_params),
m(mgr),
m_objective_enabled(false) {
m_logic = l;
if (m_logic != symbol::null)
@ -139,9 +140,21 @@ namespace opt {
return m_objective_vars.back();
}
vector<opt_solver::inf_value> const& opt_solver::get_objective_values() {
vector<inf_eps> const& opt_solver::get_objective_values() {
return m_objective_values;
}
expr_ref opt_solver::block_lower_bound(unsigned var, inf_eps const& val) {
if (val.get_infinity().is_pos()) {
return expr_ref(m.mk_false(), m);
}
else if (val.get_infinity().is_neg()) {
return expr_ref(m.mk_true(), m);
}
else {
return expr_ref(get_optimizer().block_lower_bound(m_objective_vars[var], val.get_numeral()), m);
}
}
void opt_solver::reset_objectives() {
m_objective_vars.reset();