python约束是一个模块,实现了在有限域上处理csp(约束求解问题)的支持

python-constraint的Python项目详细描述


Build StatusCode HealthCode Coverage

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
具有x86javapath的x64机器上x86java上的java JNI未满足链接错误   java将Pixmap的一部分上传到GPU   图像Java位图RLE8格式   java Android studio谷歌广告崩溃应用程序   java如何创建包含未知数量对象的变量?   Java计算给定int数组的所有可能组合   java JDBC classnotfound异常   httpclient中的java将HttpEntity转换为字符串的最优雅/正确的方法是什么?   如何从Java程序运行nano?   java在安卓中调用自定义类/方法   调用方法和JOptionPane后,允许代码继续执行所需的java计时器或其他想法   关于侦听器的向量Java并发问题   线程池执行器Java线程池   java配置DTO上的Swagger javax验证约束   Java中用于按钮功能的swing操作命令   ServletOutputStream中的java设置状态代码   java打印输入数组的平均值