Z3
Public Member Functions | Data Fields
Optimize Class Reference
+ Inheritance diagram for Optimize:

Public Member Functions

def __init__
 
def __deepcopy__
 
def __del__ (self)
 
def __enter__ (self)
 
def __exit__ (self, exc_info)
 
def set (self, args, keys)
 
def help (self)
 
def param_descrs (self)
 
def assert_exprs (self, args)
 
def add (self, args)
 
def __iadd__ (self, fml)
 
def assert_and_track (self, a, p)
 
def add_soft
 
def set_initial_value (self, var, value)
 
def maximize (self, arg)
 
def minimize (self, arg)
 
def push (self)
 
def pop (self)
 
def check (self, assumptions)
 
def reason_unknown (self)
 
def model (self)
 
def unsat_core (self)
 
def lower (self, obj)
 
def upper (self, obj)
 
def lower_values (self, obj)
 
def upper_values (self, obj)
 
def from_file (self, filename)
 
def from_string (self, s)
 
def assertions (self)
 
def objectives (self)
 
def __repr__ (self)
 
def sexpr (self)
 
def statistics (self)
 
def set_on_model (self, on_model)
 
- Public Member Functions inherited from Z3PPObject
def use_pp (self)
 

Data Fields

 ctx
 
 optimize
 

Detailed Description

Optimize API provides methods for solving using objective functions and weighted soft constraints

Definition at line 8194 of file z3py.py.

Constructor & Destructor Documentation

def __init__ (   self,
  optimize = None,
  ctx = None 
)

Definition at line 8197 of file z3py.py.

8197  def __init__(self, optimize=None, ctx=None):
8198  self.ctx = _get_ctx(ctx)
8199  if optimize is None:
8200  self.optimize = Z3_mk_optimize(self.ctx.ref())
8201  else:
8202  self.optimize = optimize
8203  self._on_models_id = None
8204  Z3_optimize_inc_ref(self.ctx.ref(), self.optimize)
8205 
Z3_optimize Z3_API Z3_mk_optimize(Z3_context c)
Create a new optimize context.
void Z3_API Z3_optimize_inc_ref(Z3_context c, Z3_optimize d)
Increment the reference counter of the given optimize context.
def __init__
Definition: z3py.py:8197
def __del__ (   self)

Definition at line 8209 of file z3py.py.

8209  def __del__(self):
8210  if self.optimize is not None and self.ctx.ref() is not None and Z3_optimize_dec_ref is not None:
8211  Z3_optimize_dec_ref(self.ctx.ref(), self.optimize)
8212  if self._on_models_id is not None:
8213  del _on_models[self._on_models_id]
8214 
void Z3_API Z3_optimize_dec_ref(Z3_context c, Z3_optimize d)
Decrement the reference counter of the given optimize context.
def __del__(self)
Definition: z3py.py:8209

Member Function Documentation

def __deepcopy__ (   self,
  memo = {} 
)

Definition at line 8206 of file z3py.py.

8206  def __deepcopy__(self, memo={}):
8207  return Optimize(self.optimize, self.ctx)
8208 
def __deepcopy__
Definition: z3py.py:8206
def __enter__ (   self)

Definition at line 8215 of file z3py.py.

8215  def __enter__(self):
8216  self.push()
8217  return self
8218 
def push(self)
Definition: z3py.py:8333
def __enter__(self)
Definition: z3py.py:8215
def __exit__ (   self,
  exc_info 
)

Definition at line 8219 of file z3py.py.

8219  def __exit__(self, *exc_info):
8220  self.pop()
8221 
def pop(self)
Definition: z3py.py:8337
def __exit__(self, exc_info)
Definition: z3py.py:8219
def __iadd__ (   self,
  fml 
)

Definition at line 8253 of file z3py.py.

8253  def __iadd__(self, fml):
8254  self.add(fml)
8255  return self
8256 
def add(self, args)
Definition: z3py.py:8249
def __iadd__(self, fml)
Definition: z3py.py:8253
def __repr__ (   self)
Return a formatted string with all added rules and constraints.

Definition at line 8400 of file z3py.py.

8400  def __repr__(self):
8401  """Return a formatted string with all added rules and constraints."""
8402  return self.sexpr()
8403 
def __repr__(self)
Definition: z3py.py:8400
def sexpr(self)
Definition: z3py.py:8404
def add (   self,
  args 
)
Assert constraints as background axioms for the optimize solver. Alias for assert_expr.

Definition at line 8249 of file z3py.py.

Referenced by Optimize.__iadd__().

8249  def add(self, *args):
8250  """Assert constraints as background axioms for the optimize solver. Alias for assert_expr."""
8251  self.assert_exprs(*args)
8252 
def add(self, args)
Definition: z3py.py:8249
def assert_exprs(self, args)
Definition: z3py.py:8237
def add_soft (   self,
  arg,
  weight = "1",
  id = None 
)
Add soft constraint with optional weight and optional identifier.
   If no weight is supplied, then the penalty for violating the soft constraint
   is 1.
   Soft constraints are grouped by identifiers. Soft constraints that are
   added without identifiers are grouped by default.

Definition at line 8286 of file z3py.py.

8286  def add_soft(self, arg, weight="1", id=None):
8287  """Add soft constraint with optional weight and optional identifier.
8288  If no weight is supplied, then the penalty for violating the soft constraint
8289  is 1.
8290  Soft constraints are grouped by identifiers. Soft constraints that are
8291  added without identifiers are grouped by default.
8292  """
8293  if _is_int(weight):
8294  weight = "%d" % weight
8295  elif isinstance(weight, float):
8296  weight = "%f" % weight
8297  if not isinstance(weight, str):
8298  raise Z3Exception("weight should be a string or an integer")
8299  if id is None:
8300  id = ""
8301  id = to_symbol(id, self.ctx)
8302 
8303  def asoft(a):
8304  v = Z3_optimize_assert_soft(self.ctx.ref(), self.optimize, a.as_ast(), weight, id)
8305  return OptimizeObjective(self, v, False)
8306  if sys.version_info.major >= 3 and isinstance(arg, Iterable):
8307  return [asoft(a) for a in arg]
8308  return asoft(arg)
8309 
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.
def to_symbol
Definition: z3py.py:132
def add_soft
Definition: z3py.py:8286
def assert_and_track (   self,
  a,
  p 
)
Assert constraint `a` and track it in the unsat core using the Boolean constant `p`.

If `p` is a string, it will be automatically converted into a Boolean constant.

>>> x = Int('x')
>>> p3 = Bool('p3')
>>> s = Optimize()
>>> s.assert_and_track(x > 0,  'p1')
>>> s.assert_and_track(x != 1, 'p2')
>>> s.assert_and_track(x < 0,  p3)
>>> print(s.check())
unsat
>>> c = s.unsat_core()
>>> len(c)
2
>>> Bool('p1') in c
True
>>> Bool('p2') in c
False
>>> p3 in c
True

Definition at line 8257 of file z3py.py.

8257  def assert_and_track(self, a, p):
8258  """Assert constraint `a` and track it in the unsat core using the Boolean constant `p`.
8259 
8260  If `p` is a string, it will be automatically converted into a Boolean constant.
8261 
8262  >>> x = Int('x')
8263  >>> p3 = Bool('p3')
8264  >>> s = Optimize()
8265  >>> s.assert_and_track(x > 0, 'p1')
8266  >>> s.assert_and_track(x != 1, 'p2')
8267  >>> s.assert_and_track(x < 0, p3)
8268  >>> print(s.check())
8269  unsat
8270  >>> c = s.unsat_core()
8271  >>> len(c)
8272  2
8273  >>> Bool('p1') in c
8274  True
8275  >>> Bool('p2') in c
8276  False
8277  >>> p3 in c
8278  True
8279  """
8280  if isinstance(p, str):
8281  p = Bool(p, self.ctx)
8282  _z3_assert(isinstance(a, BoolRef), "Boolean expression expected")
8283  _z3_assert(isinstance(p, BoolRef) and is_const(p), "Boolean expression expected")
8284  Z3_optimize_assert_and_track(self.ctx.ref(), self.optimize, a.as_ast(), p.as_ast())
8285 
def is_const(a)
Definition: z3py.py:1394
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.
def assert_and_track(self, a, p)
Definition: z3py.py:8257
def Bool
Definition: z3py.py:1861
def assert_exprs (   self,
  args 
)
Assert constraints as background axioms for the optimize solver.

Definition at line 8237 of file z3py.py.

Referenced by Optimize.add().

8237  def assert_exprs(self, *args):
8238  """Assert constraints as background axioms for the optimize solver."""
8239  args = _get_args(args)
8240  s = BoolSort(self.ctx)
8241  for arg in args:
8242  if isinstance(arg, Goal) or isinstance(arg, AstVector):
8243  for f in arg:
8244  Z3_optimize_assert(self.ctx.ref(), self.optimize, f.as_ast())
8245  else:
8246  arg = s.cast(arg)
8247  Z3_optimize_assert(self.ctx.ref(), self.optimize, arg.as_ast())
8248 
def BoolSort
Definition: z3py.py:1824
def assert_exprs(self, args)
Definition: z3py.py:8237
void Z3_API Z3_optimize_assert(Z3_context c, Z3_optimize o, Z3_ast a)
Assert hard constraint to the optimization context.
def assertions (   self)
Return an AST vector containing all added constraints.

Definition at line 8392 of file z3py.py.

8392  def assertions(self):
8393  """Return an AST vector containing all added constraints."""
8394  return AstVector(Z3_optimize_get_assertions(self.ctx.ref(), self.optimize), self.ctx)
8395 
def assertions(self)
Definition: z3py.py:8392
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.
def check (   self,
  assumptions 
)
Check consistency and produce optimal values.

Definition at line 8341 of file z3py.py.

8341  def check(self, *assumptions):
8342  """Check consistency and produce optimal values."""
8343  assumptions = _get_args(assumptions)
8344  num = len(assumptions)
8345  _assumptions = (Ast * num)()
8346  for i in range(num):
8347  _assumptions[i] = assumptions[i].as_ast()
8348  return CheckSatResult(Z3_optimize_check(self.ctx.ref(), self.optimize, num, _assumptions))
8349 
expr range(expr const &lo, expr const &hi)
Definition: z3++.h:4343
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.
def check(self, assumptions)
Definition: z3py.py:8341
def from_file (   self,
  filename 
)
Parse assertions and objectives from a file

Definition at line 8384 of file z3py.py.

8384  def from_file(self, filename):
8385  """Parse assertions and objectives from a file"""
8386  Z3_optimize_from_file(self.ctx.ref(), self.optimize, filename)
8387 
def from_file(self, filename)
Definition: z3py.py:8384
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. Add the parsed constraints and objectives to the optimization context.
def from_string (   self,
  s 
)
Parse assertions and objectives from a string

Definition at line 8388 of file z3py.py.

8388  def from_string(self, s):
8389  """Parse assertions and objectives from a string"""
8390  Z3_optimize_from_string(self.ctx.ref(), self.optimize, s)
8391 
def from_string(self, s)
Definition: z3py.py:8388
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. Add the parsed constraints and objectives to the optimization context.
def help (   self)
Display a string describing all available options.

Definition at line 8229 of file z3py.py.

8229  def help(self):
8230  """Display a string describing all available options."""
8231  print(Z3_optimize_get_help(self.ctx.ref(), self.optimize))
8232 
def help(self)
Definition: z3py.py:8229
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.
def lower (   self,
  obj 
)

Definition at line 8364 of file z3py.py.

8364  def lower(self, obj):
8365  if not isinstance(obj, OptimizeObjective):
8366  raise Z3Exception("Expecting objective handle returned by maximize/minimize")
8367  return obj.lower()
8368 
def lower(self, obj)
Definition: z3py.py:8364
def lower_values (   self,
  obj 
)

Definition at line 8374 of file z3py.py.

8374  def lower_values(self, obj):
8375  if not isinstance(obj, OptimizeObjective):
8376  raise Z3Exception("Expecting objective handle returned by maximize/minimize")
8377  return obj.lower_values()
8378 
def lower_values(self, obj)
Definition: z3py.py:8374
def maximize (   self,
  arg 
)
Add objective function to maximize.

Definition at line 8317 of file z3py.py.

8317  def maximize(self, arg):
8318  """Add objective function to maximize."""
8319  return OptimizeObjective(
8320  self,
8321  Z3_optimize_maximize(self.ctx.ref(), self.optimize, arg.as_ast()),
8322  is_max=True,
8323  )
8324 
def maximize(self, arg)
Definition: z3py.py:8317
unsigned Z3_API Z3_optimize_maximize(Z3_context c, Z3_optimize o, Z3_ast t)
Add a maximization constraint.
def minimize (   self,
  arg 
)
Add objective function to minimize.

Definition at line 8325 of file z3py.py.

8325  def minimize(self, arg):
8326  """Add objective function to minimize."""
8327  return OptimizeObjective(
8328  self,
8329  Z3_optimize_minimize(self.ctx.ref(), self.optimize, arg.as_ast()),
8330  is_max=False,
8331  )
8332 
def minimize(self, arg)
Definition: z3py.py:8325
unsigned Z3_API Z3_optimize_minimize(Z3_context c, Z3_optimize o, Z3_ast t)
Add a minimization constraint.
def model (   self)
Return a model for the last check().

Definition at line 8354 of file z3py.py.

Referenced by FuncInterp.translate().

8354  def model(self):
8355  """Return a model for the last check()."""
8356  try:
8357  return ModelRef(Z3_optimize_get_model(self.ctx.ref(), self.optimize), self.ctx)
8358  except Z3Exception:
8359  raise Z3Exception("model is not available")
8360 
Z3_model Z3_API Z3_optimize_get_model(Z3_context c, Z3_optimize o)
Retrieve the model for the last Z3_optimize_check.
def model(self)
Definition: z3py.py:8354
def objectives (   self)
returns set of objective functions

Definition at line 8396 of file z3py.py.

8396  def objectives(self):
8397  """returns set of objective functions"""
8398  return AstVector(Z3_optimize_get_objectives(self.ctx.ref(), self.optimize), self.ctx)
8399 
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...
def objectives(self)
Definition: z3py.py:8396
def param_descrs (   self)
Return the parameter description set.

Definition at line 8233 of file z3py.py.

8233  def param_descrs(self):
8234  """Return the parameter description set."""
8235  return ParamDescrsRef(Z3_optimize_get_param_descrs(self.ctx.ref(), self.optimize), self.ctx)
8236 
def param_descrs(self)
Definition: z3py.py:8233
Z3_param_descrs Z3_API Z3_optimize_get_param_descrs(Z3_context c, Z3_optimize o)
Return the parameter description set for the given optimize object.
def pop (   self)
restore to previously created backtracking point

Definition at line 8337 of file z3py.py.

Referenced by Optimize.__exit__().

8337  def pop(self):
8338  """restore to previously created backtracking point"""
8339  Z3_optimize_pop(self.ctx.ref(), self.optimize)
8340 
def pop(self)
Definition: z3py.py:8337
void Z3_API Z3_optimize_pop(Z3_context c, Z3_optimize d)
Backtrack one level.
def push (   self)
create a backtracking point for added rules, facts and assertions

Definition at line 8333 of file z3py.py.

Referenced by Optimize.__enter__().

8333  def push(self):
8334  """create a backtracking point for added rules, facts and assertions"""
8335  Z3_optimize_push(self.ctx.ref(), self.optimize)
8336 
def push(self)
Definition: z3py.py:8333
void Z3_API Z3_optimize_push(Z3_context c, Z3_optimize d)
Create a backtracking point.
def reason_unknown (   self)
Return a string that describes why the last `check()` returned `unknown`.

Definition at line 8350 of file z3py.py.

8350  def reason_unknown(self):
8351  """Return a string that describes why the last `check()` returned `unknown`."""
8352  return Z3_optimize_get_reason_unknown(self.ctx.ref(), self.optimize)
8353 
def reason_unknown(self)
Definition: z3py.py:8350
Z3_string Z3_API Z3_optimize_get_reason_unknown(Z3_context c, Z3_optimize d)
Retrieve a string that describes the last status returned by Z3_optimize_check.
def set (   self,
  args,
  keys 
)
Set a configuration option.
The method `help()` return a string containing all available options.

Definition at line 8222 of file z3py.py.

8222  def set(self, *args, **keys):
8223  """Set a configuration option.
8224  The method `help()` return a string containing all available options.
8225  """
8226  p = args2params(args, keys, self.ctx)
8227  Z3_optimize_set_params(self.ctx.ref(), self.optimize, p.params)
8228 
def args2params
Definition: z3py.py:5695
void Z3_API Z3_optimize_set_params(Z3_context c, Z3_optimize o, Z3_params p)
Set parameters on optimization context.
def set(self, args, keys)
Definition: z3py.py:8222
def set_initial_value (   self,
  var,
  value 
)
initialize the solver's state by setting the initial value of var to value

Definition at line 8310 of file z3py.py.

8310  def set_initial_value(self, var, value):
8311  """initialize the solver's state by setting the initial value of var to value
8312  """
8313  s = var.sort()
8314  value = s.cast(value)
8315  Z3_optimize_set_initial_value(self.ctx.ref(), self.optimize, var.ast, value.ast)
8316 
def set_initial_value(self, var, value)
Definition: z3py.py:8310
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...
def set_on_model (   self,
  on_model 
)
Register a callback that is invoked with every incremental improvement to
objective values. The callback takes a model as argument.
The life-time of the model is limited to the callback so the
model has to be (deep) copied if it is to be used after the callback

Definition at line 8415 of file z3py.py.

8415  def set_on_model(self, on_model):
8416  """Register a callback that is invoked with every incremental improvement to
8417  objective values. The callback takes a model as argument.
8418  The life-time of the model is limited to the callback so the
8419  model has to be (deep) copied if it is to be used after the callback
8420  """
8421  id = len(_on_models) + 41
8422  mdl = Model(self.ctx)
8423  _on_models[id] = (on_model, mdl)
8424  self._on_models_id = id
8426  self.ctx.ref(), self.optimize, mdl.model, ctypes.c_void_p(id), _on_model_eh,
8427  )
8428 
8429 
void Z3_API Z3_optimize_register_model_eh(Z3_context c, Z3_optimize o, Z3_model m, void *ctx, Z3_model_eh model_eh)
register a model event handler for new models.
def Model
Definition: z3py.py:6948
def set_on_model(self, on_model)
Definition: z3py.py:8415
def sexpr (   self)
Return a formatted string (in Lisp-like format) with all added constraints.
We say the string is in s-expression format.

Definition at line 8404 of file z3py.py.

Referenced by Optimize.__repr__().

8404  def sexpr(self):
8405  """Return a formatted string (in Lisp-like format) with all added constraints.
8406  We say the string is in s-expression format.
8407  """
8408  return Z3_optimize_to_string(self.ctx.ref(), self.optimize)
8409 
Z3_string Z3_API Z3_optimize_to_string(Z3_context c, Z3_optimize o)
Print the current context as a string.
def sexpr(self)
Definition: z3py.py:8404
def statistics (   self)
Return statistics for the last check`.

Definition at line 8410 of file z3py.py.

8410  def statistics(self):
8411  """Return statistics for the last check`.
8412  """
8413  return Statistics(Z3_optimize_get_statistics(self.ctx.ref(), self.optimize), self.ctx)
8414 
Statistics.
Definition: z3py.py:6974
def statistics(self)
Definition: z3py.py:8410
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.
def unsat_core (   self)

Definition at line 8361 of file z3py.py.

8361  def unsat_core(self):
8362  return AstVector(Z3_optimize_get_unsat_core(self.ctx.ref(), self.optimize), self.ctx)
8363 
def unsat_core(self)
Definition: z3py.py:8361
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 ...
def upper (   self,
  obj 
)

Definition at line 8369 of file z3py.py.

8369  def upper(self, obj):
8370  if not isinstance(obj, OptimizeObjective):
8371  raise Z3Exception("Expecting objective handle returned by maximize/minimize")
8372  return obj.upper()
8373 
def upper(self, obj)
Definition: z3py.py:8369
def upper_values (   self,
  obj 
)

Definition at line 8379 of file z3py.py.

8379  def upper_values(self, obj):
8380  if not isinstance(obj, OptimizeObjective):
8381  raise Z3Exception("Expecting objective handle returned by maximize/minimize")
8382  return obj.upper_values()
8383 
def upper_values(self, obj)
Definition: z3py.py:8379

Field Documentation

ctx
optimize