- Notifications
You must be signed in to change notification settings - Fork71
Constraint Solving Problem resolver for Python
License
python-constraint/python-constraint
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
The Python constraint module offers solvers forConstraint Satisfaction Problems (CSPs) over finite domains in simple and pure Python. 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, ...).
This interactive Python session demonstrates the module basic operation:
>>>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}]
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}, ...]
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+iforiinrange(4)])>>>forcolinrange(4):...problem.addConstraint(ExactSumConstraint(34), [col+4*iforiinrange(4)])>>>solutions=problem.getSolutions()
The following solvers are available:
- Backtracking solver
- Recursive backtracking solver
- Minimum conflicts solver
Predefined constraint types currently available:
FunctionConstraintAllDifferentConstraintAllEqualConstraintExactSumConstraintMaxSumConstraintMinSumConstraintInSetConstraintNotInSetConstraintSomeInSetConstraintSomeNotInSetConstraint
Documentation for the module is available at:http://labix.org/doc/constraint/
$ pip install python-constraint
This GitHub organization and repository is a global effort to help tomaintain python-constraint which was written by Gustavo Niemeyerand originaly located athttps://labix.org/python-constraint
- Create some unit tests - DONE
- Enable continuous integration - DONE
- Port to Python 3 (Python 2 being also supported) - DONE
- Respect Style Guide for Python Code (PEP8) - DONE
- Improve code coverage writting more unit tests - ToDo
- Move doc to Sphinx or MkDocs -https://readthedocs.org/ - ToDo
But it's probably better toopen an issue.
About
Constraint Solving Problem resolver for Python
Topics
Resources
License
Code of conduct
Contributing
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors10
Uh oh!
There was an error while loading.Please reload this page.