Package: python-constraint
python-constraintIntroductionThe 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, …).ExamplesBasicsThis 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}]Rooks problemThe 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 squaresThis 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()FeaturesThe following solvers are available:Backtracking solverRecursive backtracking solverMinimum conflicts solverPredefined constraint types currently available:FunctionConstraintAllDifferentConstraintAllEqualConstraintExactSumConstraintMaxSumConstraintMinSumConstraintInSetConstraintNotInSetConstraintSomeInSetConstraintSomeNotInSetConstraintAPI documentationDocumentation for the module is available at:http://labix.org/doc/constraint/Download and install$pipinstallpython-constraintRoadmapThis GitHub organization and repository is a global effort to help to
maintain python-constraint which was written by Gustavo Niemeyer
and originaly located athttps://labix.org/python-constraintCreate some unit tests - DONEEnable continuous integration - DONEPort to Python 3 (Python 2 being also supported) - DONERespect Style Guide for Python Code (PEP8) - DONEImprove code coverage writting more unit tests - ToDoMove doc to Sphinx or MkDocs -https://readthedocs.org/- ToDoContactGustavo Niemeyer<gustavo@niemeyer.net>Sébastien Celles<s.celles@gmail.com>But it’s probably better toopen an issue.