CLP(FD)可变域和传播

问题描述 投票:0回答:1

[在上学期的Prolog课程中,在引入CLP时,我的成绩有些落后。现在,我正在努力追赶,并在教授提供给所有学生的过去考试中尝试了我的手。

特别是有这个问题:

在以下查询之后,CLP(FD)中的决策变量Z的域是什么:

?- X in 1..7, Y in -3..100, Y #> X, Z #\= 0, Z #= Y - X.

在我看来,答案应该是

Z in 1..99

但是当我在SWI-Prolog安装中运行它进行仔细检查时,我得到了

Z in -5.. -1\/1..99

这似乎是基于XY的最大值和最小值的天真的比较,而不考虑链接它们的约束(Y #> X

[我意识到必须在此做出可行性方面的让步,并且返回的域名有时会受到比其限制更少的限制,但令我惊讶的是,它在如此简单的示例中失败了。

我的问题

  1. 我认为这与CLP选择在内部传播(或不传播)各种约束的方式有关,但是我不知道它是如何做到的-这对我来说都是一个黑匣子。 CLP如何(确切地说是失败)传播其约束?
  2. 是否有[[any方法,可以通过重新排序使CLP(FD)适当地应用约束?我已经尝试过在最后加上一个额外的Y #> X,但这并没有改变任何变量域。
prolog constraints clpfd consistency propagation
1个回答
0
投票
Z in 1..99
您如何确定自己是对的?这是约束的不错的特性之一:您可以最轻松地验证这一点:

?- X in 1..7, Y in -3..100, Y #> X, Z #\= 0, Z #= Y -X. X in 1..7, Z+X#=Y, X#=<Y+ -1, Z in -5.. -1\/1..99, Y in 2..100. ?- X in 1..7, Y in -3..100, Y #> X, Z #\= 0, Z #= Y -X, Z #< 0. false.

好,现在我相信你说的话。

所以您在这里发现了

inconsistency,它也存在于SICStus的本机library(clpfd)library(clpz)中。首先请注意,给出的答案是不正确的!它说:是的,有解决方案

提供 library(clpz)为真。嘿,这不是真的。

所以这个答案有点像许多保险合同中的法律术语,他们说,是的,我们将支付,只要所有微小的不可读的印刷品都可以,但是实际上,您可以用大量的脂肪代替那部分的微文本[C0 ]

通常,这种不一致是不可避免的,因为上述系统中定义的CLP(FD)/ CLP(Z)允许提出

不确定]问题。因此,无论您的约束求解器如何发展,我们都能保证始终存在无法解决的情况。这是科学的数学定律,比重力或速度限制等经验定律要可靠得多。

这里的不一致实际上是工程上的权衡。只要没有人抱怨并且没有令人信服的用例,此类系统的开发人员就不会发现需要改进的理由。毕竟,这样的改进可能会减慢现有的用例。
© www.soinside.com 2019 - 2024. All rights reserved.