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:

    1. Function, with input arguments matching the order and vartype type of the variables argument, that evaluates True when the constraint is satisfied.
    2. List explicitly specifying each allowed configuration as a tuple.
    3. Constraint object built either explicitly or by dwavebinarycsp.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 by dwavebinarycsp.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