什么是界限传播

时间:2017-03-19 23:52:40

标签: prolog clpfd

我想弄清楚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 :(得分:2)

边界传播是一种传播形式,约束解算器自动适用于您。对于用户来说,关键点在于他们需要了解其背后的算法,但可以简单地依靠约束求解器为它们完成工作。在您显示的结果中,解算器已经应用了这种传播形式。

要了解约束解算器为您做了什么,这是一个开始:

我们知道:

  • Y 至少 1
  • Z 至少 3
  • XYZ总和

因此(练习:为什么?):X 至少 4

然后,为所有其他变量重复这个推理,对于下限!

重复此操作,直到不再从任何变量中删除域元素,这些变量称为传播的修复点。完成此操作后,您已建立边界一致性