Getting Started
Introduction
Thepython-constraint module offers efficient solvers forConstraint Satisfaction Problems (CSPs) over finite domains in an accessible Python package.CSP is class of problems which may be represented in terms of variables (a, b, …), domains (a in [1, 2, 3], …), and constraints (a < b, …).
Examples
Basics
This interactive Python session demonstrates basic operations:
>>>fromconstraintimport*>>>problem=Problem()>>>problem.addVariable("a",[1,2,3])>>>problem.addVariable("b",[4,5,6])>>>problem.getSolutions()[{'a': 3, 'b': 6}, {'a': 3, 'b': 5}, {'a': 3, 'b': 4}, {'a': 2, 'b': 6}, {'a': 2, 'b': 5}, {'a': 2, 'b': 4}, {'a': 1, 'b': 6}, {'a': 1, 'b': 5}, {'a': 1, 'b': 4}]>>>problem.addConstraint(lambdaa,b:a*2==b, ("a", "b"))>>>problem.getSolutions()[{'a': 3, 'b': 6}, {'a': 2, 'b': 4}]>>>problem=Problem()>>>problem.addVariables(["a","b"],[1,2,3])>>>problem.addConstraint(AllDifferentConstraint())>>>problem.getSolutions()[{'a': 3, 'b': 2}, {'a': 3, 'b': 1}, {'a': 2, 'b': 3}, {'a': 2, 'b': 1}, {'a': 1, 'b': 2}, {'a': 1, 'b': 3}]
Rooks problem
The following example solves the classical Eight Rooks problem:
>>>problem=Problem()>>>numpieces=8>>>cols=range(numpieces)>>>rows=range(numpieces)>>>problem.addVariables(cols,rows)>>>forcol1incols:...forcol2incols:...ifcol1<col2:...problem.addConstraint(lambdarow1,row2:row1!=row2,...(col1,col2))>>>solutions=problem.getSolutions()>>>solutions>>>solutions[{0: 7, 1: 6, 2: 5, 3: 4, 4: 3, 5: 2, 6: 1, 7: 0}, {0: 7, 1: 6, 2: 5, 3: 4, 4: 3, 5: 2, 6: 0, 7: 1}, {0: 7, 1: 6, 2: 5, 3: 4, 4: 3, 5: 1, 6: 2, 7: 0}, {0: 7, 1: 6, 2: 5, 3: 4, 4: 3, 5: 1, 6: 0, 7: 2}, ... {0: 7, 1: 5, 2: 3, 3: 6, 4: 2, 5: 1, 6: 4, 7: 0}, {0: 7, 1: 5, 2: 3, 3: 6, 4: 1, 5: 2, 6: 0, 7: 4}, {0: 7, 1: 5, 2: 3, 3: 6, 4: 1, 5: 2, 6: 4, 7: 0}, {0: 7, 1: 5, 2: 3, 3: 6, 4: 1, 5: 4, 6: 2, 7: 0}, {0: 7, 1: 5, 2: 3, 3: 6, 4: 1, 5: 4, 6: 0, 7: 2}, ...]
Magic squares
This example solves a 4x4 magic square:
>>>problem=Problem()>>>problem.addVariables(range(0,16),range(1,16+1))>>>problem.addConstraint(AllDifferentConstraint(),range(0,16))>>>problem.addConstraint(ExactSumConstraint(34),[0,5,10,15])>>>problem.addConstraint(ExactSumConstraint(34),[3,6,9,12])>>>forrowinrange(4):...problem.addConstraint(ExactSumConstraint(34), [row * 4 + i for i in range(4)])>>>forcolinrange(4):...problem.addConstraint(ExactSumConstraint(34), [col + 4 * i for i in range(4)])>>>solutions=problem.getSolutions()
Features
The following solvers are available:
Predefined constraint types currently available:
Download and install
$pipinstallpython-constraint2