我试图找出clpfd中的界限传播,但似乎无法在任何地方找到一个好的解释。
我正在为Prolog和clpfd进行修改并遇到了这个问题,但是看一下讲座,它对我来说没有意义。有人可以解释边界传播的实际含义及其用途。
以下是我指的问题:
以下Prolog程序
:- use_module(library(clpfd)).bounds(X, Y, Z) :- X in 1..5, Y in 1..2, Z in 3..5, X #= Y + Z.被询问它给出了答案:
?- bounds(X, Y, Z). X in 4..5, Y in 1..2, Z in 3..4.解释如何应用边界传播来推断这个答案。
答案 0 :(得分:4)
我给你一个开始:
发布所有约束后,有一件事情立即明确:X
至少 4.为什么?因为Y
至少为1,Z
至少为3,而X
是Y
和Z
的和
鉴于此知识,请再次浏览已发布的约束 ,看看是否可以调整任何边界。
这就是界限传播的作用:遍历所有变量的边界,并查看是否可以根据发布的约束调整其中的任何变量。重复此过程,直到没有可能的域减少为止。