CPMpy pysdd interface (cpmpy.solvers.pysdd)
Interface to PySDD’s API
Requires that the ‘PySDD’ python package is installed:
$ pip install PySDD
PySDD is a knowledge compilation package for Sentential Decision Diagrams (SDD) https://pysdd.readthedocs.io/en/latest/
This solver can ONLY be used for solution checking and enumeration over Boolean variables! That is, only logical constraints (and,or,implies,==,!=) and Boolean global constraints.
Documentation of the solver’s own Python API: https://pysdd.readthedocs.io/en/latest/classes/SddManager.html
List of classes
Interface to pysdd's API |
Module details
- class cpmpy.solvers.pysdd.CPM_pysdd(cpm_model=None, subsolver=None)[source]
Interface to pysdd’s API
Requires that the ‘PySDD’ python package is installed: $ pip install pysdd
See detailed installation instructions at: https://pysdd.readthedocs.io/en/latest/usage/installation.html
- Creates the following attributes (see parent constructor for more):
pysdd_vtree: a pysdd.sdd.Vtree
pysdd_manager: a pysdd.sdd.SddManager
pysdd_root: a pysdd.sdd.SddNode (changes whenever a formula is added)
The DirectConstraint, when used, calls a function on the pysdd_manager object and replaces the root node with a conjunction of the previous root node and the result of this function call.
- dot()[source]
Returns a graphviz Dot object
Display (in a notebook) with: import graphviz graphviz.Source(m.dot())
- get_core()
For use with s.solve(assumptions=[…]). Only meaningful if the solver returned UNSAT.
Typically implemented in SAT-based solvers
Returns a small subset of assumption literals that are unsat together. (a literal is either a _BoolVarImpl or a NegBoolView in case of its negation, e.g. x or ~x) Setting these literals to True makes the model UNSAT, setting any to False makes it SAT
- has_objective()
Returns whether the solver has an objective function or not.
- maximize(expr)
Post the given expression to the solver as objective to maximize
maximize() can be called multiple times, only the last one is stored
- minimize(expr)
Post the given expression to the solver as objective to minimize
minimize() can be called multiple times, only the last one is stored
- property native_model
Returns the solver’s underlying native model (for direct solver access).
- objective(expr, minimize)
Post the given expression to the solver as objective to minimize/maximize
expr: Expression, the CPMpy expression that represents the objective function
minimize: Bool, whether it is a minimization problem (True) or maximization problem (False)
‘objective()’ can be called multiple times, only the last one is stored
- objective_value()
Returns the value of the objective function of the latest solver run on this model
- Returns:
an integer or ‘None’ if it is not run, or a satisfaction problem
- solution_hint(cpm_vars, vals)
For warmstarting the solver with a variable assignment
Typically implemented in SAT-based solvers
- Parameters:
cpm_vars – list of CPMpy variables
vals – list of (corresponding) values for the variables
- solve(time_limit=None, assumptions=None)[source]
See if an arbitrary model exists
- This is a knowledge compiler:
building it is the (computationally) hard part
checking for a solution is trivial after that
- solveAll(display=None, time_limit=None, solution_limit=None, call_from_model=False, **kwargs)[source]
Compute all solutions and optionally display the solutions.
WARNING: setting ‘display’ will SIGNIFICANTLY slow down solution counting…
- Arguments:
- display: either a list of CPMpy expressions, OR a callback function, called with the variables after value-mapping
default/None: nothing displayed
time_limit, solution_limit, kwargs: not used
call_from_model: whether the method is called from a CPMpy Model instance or not
Returns: number of solutions found
- solver_vars(cpm_vars)
Like solver_var() but for arbitrary shaped lists/tensors
- status()
- static supported()[source]
Check for support in current system setup. Return True if the system has package installed or supports solver, else returns False.
- Returns:
[bool]: Solver support by current system setup.
- transform(cpm_expr)[source]
Transform arbitrary CPMpy expressions to constraints the solver supports
Implemented through chaining multiple solver-independent transformation functions from the cpmpy/transformations/ directory.
See the ‘Adding a new solver’ docs on readthedocs for more information.
For PySDD, it can be beneficial to add a big model (collection of constraints) at once…
- Parameters:
cpm_expr (Expression or list of Expression) – CPMpy expression, or list thereof
- Returns:
list of Expression