【发布时间】:2017-08-29 12:12:39
【问题描述】:
我正在研究一种称为 {log} ('setlog') 的有限集理论的约束求解器。由于某些原因,{log} 公式允许整数约束。到目前为止,{log} 依赖于 CLP(FD) 来解决这些约束。但是,我们需要更多;特别是,我们需要摆脱绑定所有整数变量的有限域。换句话说,我们需要一些 CLP 系统对整数进行更抽象的推理。
我们正在尝试 CLP(Q,R)。它带有这个 bb_inf/4 谓词,可以搜索线性等式和不等式系统的整数解。这很好,但它并不完整。例如,它无法为以下系统找到正确答案:
3*X + 5*Y + 6*Z = 6
X + 3*Y - 2*Z = 5
其中 X、Y 和 Z 是整数变量。这个系统没有整数解,尽管它有无数个有理/实数解。另一方面,CLP(Q,R) 找到了这个系统的正确答案(除了第一个方程中的 7 代替 6 之外,它等于上面的那个):
3*X + 5*Y + 6*Z = 7
X + 3*Y - 2*Z = 5
这个系统有无穷多个整数解。
然后,我们想知道是否有 CLP 系统实现:
一些线性整数规划算法,用于求解线性等式和不等式系统;和/或
求解线性丢番图方程组的一些方法
一切顺利, 马克西
【问题讨论】:
-
需要摆脱绑定有限域请注意,SICStus 和 SWI 中的 CLPFD 没有此限制!在那里,
X #> 0给了X in 1..sup。 -
...事实上正是因为这个原因,现在有了一个名为CLPZ的后继库!
-
我的意思是,例如,在 SWI 中这个目标
X #> Y, Y #> X的答案是X#=<Y+ -1,Y#=<X+ -1,而它应该是false。如果将 X 或 Y 绑定到有限域:X #> Y, Y #> X, X in 1..10,它只会回答错误。那就是你不能证明X #> Y, Y #> X对所有整数都是假的。 -
如果您认真进入 CLP,您将不得不切换到 SICStus - 仅仅是因为它的界面要好得多。 SWI 的界面本质上是有问题的,除了 SICStus 之外的所有其他界面都是一样的。
-
W.r.t.
X > Y, Y < X:可能失败,但弃权是设计和性能决定。毕竟,永远记住:CLPZ 允许制定不可判定的查询。