dwavebinarycsp.ConstraintSatisfactionProblem.add_constraint#
- ConstraintSatisfactionProblem.add_constraint(constraint, variables=())[source]#
Add a constraint.
- Parameters:
constraint (function/iterable/
Constraint
) –Constraint definition in one of the supported formats:
Function, with input arguments matching the order and
vartype
type of the variables argument, that evaluates True when the constraint is satisfied.List explicitly specifying each allowed configuration as a tuple.
Constraint
object built either explicitly or bydwavebinarycsp.factories
.
variables (iterable) – Variables associated with the constraint. Not required when constraint is a
Constraint
object.
Examples
This example defines a function that evaluates True when the constraint is satisfied. The function’s input arguments match the order and type of the variables argument.
>>> csp = dwavebinarycsp.ConstraintSatisfactionProblem(dwavebinarycsp.BINARY) >>> def all_equal(a, b, c): # works for both dwavebinarycsp.BINARY and dwavebinarycsp.SPIN ... return (a == b) and (b == c) >>> csp.add_constraint(all_equal, ['a', 'b', 'c']) >>> csp.check({'a': 0, 'b': 0, 'c': 0}) True >>> csp.check({'a': 0, 'b': 0, 'c': 1}) False
This example explicitly lists allowed configurations.
>>> csp = dwavebinarycsp.ConstraintSatisfactionProblem(dwavebinarycsp.SPIN) >>> eq_configurations = {(-1, -1), (1, 1)} >>> csp.add_constraint(eq_configurations, ['v0', 'v1']) >>> csp.check({'v0': -1, 'v1': +1}) False >>> csp.check({'v0': -1, 'v1': -1}) True
This example uses a
Constraint
object built bydwavebinarycsp.factories
.>>> import dwavebinarycsp.factories.constraint.gates as gates >>> csp = dwavebinarycsp.ConstraintSatisfactionProblem(dwavebinarycsp.BINARY) >>> csp.add_constraint(gates.and_gate(['a', 'b', 'c'])) # add an AND gate >>> csp.add_constraint(gates.xor_gate(['a', 'c', 'd'])) # add an XOR gate >>> csp.check({'a': 1, 'b': 0, 'c': 0, 'd': 1}) True