Z3
Loading...
Searching...
No Matches
optimize Class Reference

#include <z3++.h>

Inheritance diagram for optimize:

Data Structures

struct  translate
class  handle

Public Member Functions

 optimize (context &c)
 optimize (context &c, optimize const &src, translate)
 optimize (optimize const &o)
 optimize (context &c, optimize &src)
optimize & operator= (optimize const &o)
 ~optimize () override
 operator Z3_optimize () const
void add (expr const &e)
void add (expr_vector const &es)
void add (expr const &e, expr const &t)
void add (expr const &e, char const *p)
handle add_soft (expr const &e, unsigned weight)
handle add_soft (expr const &e, char const *weight)
handle add (expr const &e, unsigned weight)
void set_initial_value (expr const &var, expr const &value)
void set_initial_value (expr const &var, int i)
void set_initial_value (expr const &var, bool b)
handle maximize (expr const &e)
handle minimize (expr const &e)
void push ()
void pop ()
check_result check ()
check_result check (expr_vector const &asms)
model get_model () const
expr_vector unsat_core () const
void set (params const &p)
expr lower (handle const &h)
expr_vector lower_as_vector (handle const &h) const
expr upper (handle const &h)
expr_vector upper_as_vector (handle const &h) const
expr_vector assertions () const
expr_vector objectives () const
stats statistics () const
void from_file (char const *filename)
void from_string (char const *constraints)
std::string help () const
Public Member Functions inherited from object
 object (context &c)
virtual ~object ()=default
context & ctx () const
Z3_error_code check_error () const

Friends

std::ostream & operator<< (std::ostream &out, optimize const &s)

Additional Inherited Members

Protected Attributes inherited from object
context * m_ctx

Detailed Description

Definition at line 3672 of file z3++.h.

Constructor & Destructor Documentation

◆ optimize() [1/4]

optimize ( context & c)
inline

Definition at line 3683 of file z3++.h.

3683:object(c) { m_opt = Z3_mk_optimize(c); Z3_optimize_inc_ref(c, m_opt); }
void Z3_API Z3_optimize_inc_ref(Z3_context c, Z3_optimize d)
Increment the reference counter of the given optimize context.
Z3_optimize Z3_API Z3_mk_optimize(Z3_context c)
Create a new optimize context.

Referenced by operator<<, operator=(), optimize(), optimize(), and optimize().

◆ optimize() [2/4]

optimize ( context & c,
optimize const & src,
translate  )
inline

Definition at line 3684 of file z3++.h.

3684 : object(c) {
3685 Z3_optimize o = Z3_optimize_translate(src.ctx(), src, c);
3686 check_error();
3687 m_opt = o;
3688 Z3_optimize_inc_ref(c, m_opt);
3689 }
Z3_optimize Z3_API Z3_optimize_translate(Z3_context c, Z3_optimize o, Z3_context target)
Copy an optimization context from a source to a target context.

◆ optimize() [3/4]

optimize ( optimize const & o)
inline

Definition at line 3690 of file z3++.h.

3690 :object(o), m_opt(o.m_opt) {
3691 Z3_optimize_inc_ref(o.ctx(), o.m_opt);
3692 }

◆ optimize() [4/4]

optimize ( context & c,
optimize & src )
inline

Definition at line 3693 of file z3++.h.

3693 :object(c) {
3694 m_opt = Z3_mk_optimize(c);
3695 Z3_optimize_inc_ref(c, m_opt);
3696 add(expr_vector(c, src.assertions()));
3697 expr_vector v(c, src.objectives());
3698 for (expr_vector::iterator it = v.begin(); it != v.end(); ++it) minimize(*it);
3699 }
ast_vector_tpl< expr > expr_vector
Definition z3++.h:77

◆ ~optimize()

~optimize ( )
inlineoverride

Definition at line 3707 of file z3++.h.

3707{ Z3_optimize_dec_ref(ctx(), m_opt); }
void Z3_API Z3_optimize_dec_ref(Z3_context c, Z3_optimize d)
Decrement the reference counter of the given optimize context.

Member Function Documentation

◆ add() [1/5]

void add ( expr const & e)
inline

Definition at line 3709 of file z3++.h.

3709 {
3710 assert(e.is_bool());
3711 Z3_optimize_assert(ctx(), m_opt, e);
3712 }
void Z3_API Z3_optimize_assert(Z3_context c, Z3_optimize o, Z3_ast a)
Assert hard constraint to the optimization context.

Referenced by add(), add(), and optimize().

◆ add() [2/5]

void add ( expr const & e,
char const * p )
inline

Definition at line 3720 of file z3++.h.

3720 {
3721 assert(e.is_bool());
3722 add(e, ctx().bool_const(p));
3723 }

◆ add() [3/5]

void add ( expr const & e,
expr const & t )
inline

Definition at line 3716 of file z3++.h.

3716 {
3717 assert(e.is_bool());
3718 Z3_optimize_assert_and_track(ctx(), m_opt, e, t);
3719 }
void Z3_API Z3_optimize_assert_and_track(Z3_context c, Z3_optimize o, Z3_ast a, Z3_ast t)
Assert tracked hard constraint to the optimization context.

◆ add() [4/5]

handle add ( expr const & e,
unsigned weight )
inline

Definition at line 3733 of file z3++.h.

3733 {
3734 return add_soft(e, weight);
3735 }

◆ add() [5/5]

void add ( expr_vector const & es)
inline

Definition at line 3713 of file z3++.h.

3713 {
3714 for (expr_vector::iterator it = es.begin(); it != es.end(); ++it) add(*it);
3715 }

◆ add_soft() [1/2]

handle add_soft ( expr const & e,
char const * weight )
inline

Definition at line 3729 of file z3++.h.

3729 {
3730 assert(e.is_bool());
3731 return handle(Z3_optimize_assert_soft(ctx(), m_opt, e, weight, 0));
3732 }
unsigned Z3_API Z3_optimize_assert_soft(Z3_context c, Z3_optimize o, Z3_ast a, Z3_string weight, Z3_symbol id)
Assert soft constraint to the optimization context.

◆ add_soft() [2/2]

handle add_soft ( expr const & e,
unsigned weight )
inline

Definition at line 3724 of file z3++.h.

3724 {
3725 assert(e.is_bool());
3726 auto str = std::to_string(weight);
3727 return handle(Z3_optimize_assert_soft(ctx(), m_opt, e, str.c_str(), 0));
3728 }

Referenced by add().

◆ assertions()

expr_vector assertions ( ) const
inline

Definition at line 3794 of file z3++.h.

3794{ Z3_ast_vector r = Z3_optimize_get_assertions(ctx(), m_opt); check_error(); return expr_vector(ctx(), r); }
Z3_ast_vector Z3_API Z3_optimize_get_assertions(Z3_context c, Z3_optimize o)
Return the set of asserted formulas on the optimization context.

Referenced by optimize().

◆ check() [1/2]

check_result check ( )
inline

Definition at line 3759 of file z3++.h.

3759{ Z3_lbool r = Z3_optimize_check(ctx(), m_opt, 0, 0); check_error(); return to_check_result(r); }
Z3_lbool
Lifted Boolean type: false, undefined, true.
Definition z3_api.h:58
Z3_lbool Z3_API Z3_optimize_check(Z3_context c, Z3_optimize o, unsigned num_assumptions, Z3_ast const assumptions[])
Check consistency and produce optimal values.
check_result to_check_result(Z3_lbool l)
Definition z3++.h:178

◆ check() [2/2]

check_result check ( expr_vector const & asms)
inline

Definition at line 3760 of file z3++.h.

3760 {
3761 unsigned n = asms.size();
3762 array<Z3_ast> _asms(n);
3763 for (unsigned i = 0; i < n; ++i) {
3764 check_context(*this, asms[i]);
3765 _asms[i] = asms[i];
3766 }
3767 Z3_lbool r = Z3_optimize_check(ctx(), m_opt, n, _asms.ptr());
3768 check_error();
3769 return to_check_result(r);
3770 }
void check_context(object const &a, object const &b)
Definition z3++.h:571

◆ from_file()

void from_file ( char const * filename)
inline

Definition at line 3798 of file z3++.h.

3798{ Z3_optimize_from_file(ctx(), m_opt, filename); check_error(); }
void Z3_API Z3_optimize_from_file(Z3_context c, Z3_optimize o, Z3_string s)
Parse an SMT-LIB2 file with assertions, soft constraints and optimization objectives....

◆ from_string()

void from_string ( char const * constraints)
inline

Definition at line 3799 of file z3++.h.

3799{ Z3_optimize_from_string(ctx(), m_opt, constraints); check_error(); }
void Z3_API Z3_optimize_from_string(Z3_context c, Z3_optimize o, Z3_string s)
Parse an SMT-LIB2 string with assertions, soft constraints and optimization objectives....

◆ get_model()

model get_model ( ) const
inline

Definition at line 3771 of file z3++.h.

3771{ Z3_model m = Z3_optimize_get_model(ctx(), m_opt); check_error(); return model(ctx(), m); }
Z3_model Z3_API Z3_optimize_get_model(Z3_context c, Z3_optimize o)
Retrieve the model for the last Z3_optimize_check.

◆ help()

std::string help ( ) const
inline

Definition at line 3800 of file z3++.h.

3800{ char const * r = Z3_optimize_get_help(ctx(), m_opt); check_error(); return r; }
Z3_string Z3_API Z3_optimize_get_help(Z3_context c, Z3_optimize t)
Return a string containing a description of parameters accepted by optimize.

◆ lower()

expr lower ( handle const & h)
inline

Definition at line 3774 of file z3++.h.

3774 {
3775 Z3_ast r = Z3_optimize_get_lower(ctx(), m_opt, h.h());
3776 check_error();
3777 return expr(ctx(), r);
3778 }
Z3_ast Z3_API Z3_optimize_get_lower(Z3_context c, Z3_optimize o, unsigned idx)
Retrieve lower bound value or approximation for the i'th optimization objective.

◆ lower_as_vector()

expr_vector lower_as_vector ( handle const & h) const
inline

Definition at line 3779 of file z3++.h.

3779 {
3780 Z3_ast_vector r = Z3_optimize_get_lower_as_vector(ctx(), m_opt, h.h());
3781 check_error();
3782 return expr_vector(ctx(), r);
3783 }
Z3_ast_vector Z3_API Z3_optimize_get_lower_as_vector(Z3_context c, Z3_optimize o, unsigned idx)
Retrieve lower bound value or approximation for the i'th optimization objective. The returned vector ...

◆ maximize()

handle maximize ( expr const & e)
inline

Definition at line 3747 of file z3++.h.

3747 {
3748 return handle(Z3_optimize_maximize(ctx(), m_opt, e));
3749 }
unsigned Z3_API Z3_optimize_maximize(Z3_context c, Z3_optimize o, Z3_ast t)
Add a maximization constraint.

◆ minimize()

handle minimize ( expr const & e)
inline

Definition at line 3750 of file z3++.h.

3750 {
3751 return handle(Z3_optimize_minimize(ctx(), m_opt, e));
3752 }
unsigned Z3_API Z3_optimize_minimize(Z3_context c, Z3_optimize o, Z3_ast t)
Add a minimization constraint.

Referenced by optimize().

◆ objectives()

expr_vector objectives ( ) const
inline

Definition at line 3795 of file z3++.h.

3795{ Z3_ast_vector r = Z3_optimize_get_objectives(ctx(), m_opt); check_error(); return expr_vector(ctx(), r); }
Z3_ast_vector Z3_API Z3_optimize_get_objectives(Z3_context c, Z3_optimize o)
Return objectives on the optimization context. If the objective function is a max-sat objective it is...

Referenced by optimize().

◆ operator Z3_optimize()

operator Z3_optimize ( ) const
inline

Definition at line 3708 of file z3++.h.

3708{ return m_opt; }

◆ operator=()

optimize & operator= ( optimize const & o)
inline

Definition at line 3700 of file z3++.h.

3700 {
3701 Z3_optimize_inc_ref(o.ctx(), o.m_opt);
3702 Z3_optimize_dec_ref(ctx(), m_opt);
3703 m_opt = o.m_opt;
3704 object::operator=(o);
3705 return *this;
3706 }

◆ pop()

void pop ( )
inline

Definition at line 3756 of file z3++.h.

3756 {
3757 Z3_optimize_pop(ctx(), m_opt);
3758 }
void Z3_API Z3_optimize_pop(Z3_context c, Z3_optimize d)
Backtrack one level.

◆ push()

void push ( )
inline

Definition at line 3753 of file z3++.h.

3753 {
3754 Z3_optimize_push(ctx(), m_opt);
3755 }
void Z3_API Z3_optimize_push(Z3_context c, Z3_optimize d)
Create a backtracking point.

◆ set()

void set ( params const & p)
inline

Definition at line 3773 of file z3++.h.

3773{ Z3_optimize_set_params(ctx(), m_opt, p); check_error(); }
void Z3_API Z3_optimize_set_params(Z3_context c, Z3_optimize o, Z3_params p)
Set parameters on optimization context, including parameters for the underlying SMT solver.

◆ set_initial_value() [1/3]

void set_initial_value ( expr const & var,
bool b )
inline

Definition at line 3743 of file z3++.h.

3743 {
3744 set_initial_value(var, ctx().bool_val(b));
3745 }

◆ set_initial_value() [2/3]

void set_initial_value ( expr const & var,
expr const & value )
inline

Definition at line 3736 of file z3++.h.

3736 {
3737 Z3_optimize_set_initial_value(ctx(), m_opt, var, value);
3738 check_error();
3739 }
void Z3_API Z3_optimize_set_initial_value(Z3_context c, Z3_optimize o, Z3_ast v, Z3_ast val)
provide an initialization hint to the solver. The initialization hint is used to calibrate an initial...

Referenced by set_initial_value(), and set_initial_value().

◆ set_initial_value() [3/3]

void set_initial_value ( expr const & var,
int i )
inline

Definition at line 3740 of file z3++.h.

3740 {
3741 set_initial_value(var, ctx().num_val(i, var.get_sort()));
3742 }

◆ statistics()

stats statistics ( ) const
inline

Definition at line 3796 of file z3++.h.

3796{ Z3_stats r = Z3_optimize_get_statistics(ctx(), m_opt); check_error(); return stats(ctx(), r); }
Z3_stats Z3_API Z3_optimize_get_statistics(Z3_context c, Z3_optimize d)
Retrieve statistics information from the last call to Z3_optimize_check.

◆ unsat_core()

expr_vector unsat_core ( ) const
inline

Definition at line 3772 of file z3++.h.

3772{ Z3_ast_vector r = Z3_optimize_get_unsat_core(ctx(), m_opt); check_error(); return expr_vector(ctx(), r); }
Z3_ast_vector Z3_API Z3_optimize_get_unsat_core(Z3_context c, Z3_optimize o)
Retrieve the unsat core for the last Z3_optimize_check The unsat core is a subset of the assumptions ...

◆ upper()

expr upper ( handle const & h)
inline

Definition at line 3784 of file z3++.h.

3784 {
3785 Z3_ast r = Z3_optimize_get_upper(ctx(), m_opt, h.h());
3786 check_error();
3787 return expr(ctx(), r);
3788 }
Z3_ast Z3_API Z3_optimize_get_upper(Z3_context c, Z3_optimize o, unsigned idx)
Retrieve upper bound value or approximation for the i'th optimization objective.

◆ upper_as_vector()

expr_vector upper_as_vector ( handle const & h) const
inline

Definition at line 3789 of file z3++.h.

3789 {
3790 Z3_ast_vector r = Z3_optimize_get_upper_as_vector(ctx(), m_opt, h.h());
3791 check_error();
3792 return expr_vector(ctx(), r);
3793 }
Z3_ast_vector Z3_API Z3_optimize_get_upper_as_vector(Z3_context c, Z3_optimize o, unsigned idx)
Retrieve upper bound value or approximation for the i'th optimization objective.

◆ operator<<

std::ostream & operator<< ( std::ostream & out,
optimize const & s )
friend

Definition at line 3802 of file z3++.h.

3802{ out << Z3_optimize_to_string(s.ctx(), s.m_opt); return out; }
Z3_string Z3_API Z3_optimize_to_string(Z3_context c, Z3_optimize o)
Print the current context as a string.

Referenced by operator<<.