什么是clpfd中的边界传播

时间:2016-05-11 11:40:58

标签: prolog 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.
     

解释如何应用边界传播来推断这个答案。

1 个答案:

答案 0 :(得分:4)

我给你一个开始:

发布所有约束后,有一件事情立即明确:X 至少 4.为什么?因为Y至少为1,Z至少为3,而XYZ

鉴于此知识,请再次浏览已发布的约束 ,看看是否可以调整任何边界。

这就是界限传播的作用:遍历所有变量的边界,并查看是否可以根据发布的约束调整其中的任何变量。重复此过程,直到没有可能的域减少为止。