我想弄清楚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 :(得分:2)
边界传播是一种传播形式,约束解算器自动适用于您。对于用户来说,关键点在于他们需要不了解其背后的算法,但可以简单地依靠约束求解器为它们完成工作。在您显示的结果中,解算器已经应用了这种传播形式。
要了解约束解算器为您做了什么,这是一个开始:
我们知道:
Y
至少 1 Z
至少 3 X
是Y
和Z
的总和。 因此(练习:为什么?):X
至少 4 。
然后,为所有其他变量重复这个推理,对于和下限!
重复此操作,直到不再从任何变量中删除域元素,这些变量称为传播的修复点。完成此操作后,您已建立边界一致性。