python约束是一个模块,实现了在有限域上处理csp(约束求解问题)的支持
python-constraint的Python项目详细描述
python约束
简介
python约束模块在简单和纯python中为有限域上的Constraint Satisfaction Problems (CSPs)提供解算器。csp是一类可以用变量(a,b,…)、域(a in[1,2,3],…)和约束(a<;b,…)来表示的问题。
示例
基础知识
此交互式python会话演示模块的基本操作:
>>>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}]
车问题
下面的示例解决了经典的八车问题:
>>>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},...]
幻方
此示例解决4x4幻方:
>>>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()
功能
提供以下解算器:
- 回溯解算器
- 递归回溯解算器
- 最小冲突解决程序
当前可用的预定义约束类型:
FunctionConstraint
AllDifferentConstraint
AllEqualConstraint
ExactSumConstraint
MaxSumConstraint
MinSumConstraint
InSetConstraint
NotInSetConstraint
SomeInSetConstraint
SomeNotInSetConstraint
API文档
该模块的文档位于:http://labix.org/doc/constraint/
下载并安装
$ pip install python-constraint
路线图
这个github组织和存储库是一个全球性的工作,旨在帮助 维护由gustavo niemeyer编写的python约束 最初位于https://labix.org/python-constraint
- 创建一些单元测试-完成
- 启用连续集成-完成
- 连接到Python3(也支持Python2)-完成
- python代码尊重风格指南(pep8)-完成
- 提高代码覆盖率编写更多单元测试-todo
- 将doc移动到sphinx或mkdocs-https://readthedocs.org/-todo
接触
但最好是open an issue。