一个简单的约束满足求解器

pyconstraints的Python项目详细描述


pyconstraints
===

一个简单的、满足约束的问题求解器。用于[yacs][]课程
计划程序项目。

[yacs]:http://github.com/jeffh/yacs

usage
----


>问题是主界面:

>;
,然后指定要用各种约束解决的问题:

>;>;gt;gt;p.添加变量('x',范围(4));变量名,域
>;gt;p.添加变量('y',范围(4))
=y,['x,'y','y']
>>gt;p.添加约束条件(lambda x:x%2==0)


>然后得到你的解决方案:

>
>;p.获取解决方案:

>;p.获取解决方案:
>;({'y':0,'x''x':2},
{'y''y''1,'x''x''y''x''y''x''x''y''x''x''y''x''x''y''y''y''x''x''x''x''y''y''x''y''35;{'y':2,'x':0},
{'y':3,'x':0},
{'y':3,“x”:2})



使用另一个解算器
---------


只需将解算器传递给问题构造函数:

>;>;从pyconstraints导入bruteforcesolver,backtrackingsolver
>;>;p=问题(backtrackingsolver());bruteforcesolver是默认值

,因为bruteforcesolver使用itertools在某些情况下,它可能比backtrackingsolver快。




“返回解算器当前看到的解的数目。”

@abstractproperty
def solutions_at_points(self):
“返回迭代时所有已知解的{iteration_index:solution}字典。



@abstractmethod
def set_conditions(self,variables,约束:
“由problem类调用,为问题分配变量和约束。


variables={variable name:list of domain values}
constraints=[(constraint_function,
variable names,
默认变量值]


@abstractmethod
def restore_point(self,起始点=无):
“将迭代状态还原到给定的起始点。”

@abstractmethod
def save_au point(self):
“返回数据以指示还原到当前迭代点的方法。”解决方案。“

但是为了方便起见,您可以从“pyconstraints.solverbase”类继承,该类为所有接口方法提供了基本实现,除了为“iter”和“set”条件“
”提供了基本实现。



todo
----


-加快回溯解算器的速度
-添加更多解算器?

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

推荐PyPI第三方库


热门话题
Maven中的java,为什么要运行“mvn clean”?   java会降低图像质量。OutOfMemory异常Android   在Java8中将函数传递到流的过滤方法   jboss6。x java。lang.NoClassDefFoundError,当我将<listenerclass>包含到web时。xml java   java读取图像像素时,像素Alpha始终为255   java在迭代后跳过一行   java如何创建我自己的单链表   意图上的java空指针异常。getStringExtra.:安卓   具有连接实体的java Hibernate onetoone映射   java需要帮助在自制的仓鼠模拟器上实现启动/恢复/暂停/停止线程操作   如何测试非主方法?[Java,IntelliJ]   java jdbc自动提交(false)不起作用   java在JADE中的同一容器中创建多个代理   java OkHttp获取失败的响应正文   java Webdriver flash按钮