Luk*_*404 6 python constraints constraint-programming
我有许多可变大小的列表,包含具有属性foo的相同类的实例,并且对于每个列表,我必须应用如下规则:
结合上述三个规则可能足以表达我将需要的任何类似约束.这就像软件包中的依赖检查,但我有数量和缺乏版本:)
一个天真的方法是:
R_CONFLICT={ A: [B,C,D] }
R_DEPENDS ={ X: [ [Y,Z], W, .. } # means: A depends on either Y or Z, and W
R_MIN ={BAR: n, BAZ: m}
R_MAX ={BAR: o, BAZ: p}
# now just loop over lists to check them..
Run Code Online (Sandbox Code Playgroud)
这是Constraint编程的问题吗?我实际上并不需要解决某些问题以获得结果,我需要针对某些约束验证我的列表并检查它们是否满意.您如何对此问题进行分类,您将如何解决?
为了它的价值,我用Python编写代码,但我欢迎通用的编程答案:)如果事实证明我必须深入研究约束编程,我可能会从尝试python-constraint开始.
简短的回答 - 是的,这可以使用约束编程来检查,实际上,您提供一个解决方案并根据约束检查它,而不是让求解器在潜在域中搜索匹配的解决方案。这使得约束编程变得矫枉过正,特别是如果你使用Python,它可以很容易地检查这些类型的条件。
我这台机器上没有Python,所以这段代码中可能有拼写错误/错误,但它显示了您所追求的内容,而无需参与约束编程。
conflict = set([B, C , D])
foos = set([x.foo for x in list])
if A in foos:
if len(foos & conflict): #Set intersection
return false
len([x for x in list where x.foo == BAR]) #Gives you number of occurances of BAR
Run Code Online (Sandbox Code Playgroud)
基本上我想说,除非约束变得更加复杂,或者您想要找到解决方案而不仅仅是测试,否则我会坚持使用代码而不是约束编程。
| 归档时间: |
|
| 查看次数: |
1000 次 |
| 最近记录: |