什么是 clpfd 中的边界传播

What is bounds propagation in clpfd

我试图弄清楚 中的边界传播是什么,但似乎无法在任何地方找到一个好的解释。

我正在修改 Prolog 和 clpfd 并遇到了这个问题,但查看讲义对我来说没有意义。谁能解释一下边界传播的实际含义及其用途。

这里是我所指的问题:

When the following Prolog program

:- use_module(library(clpfd)).
bounds(X, Y, Z) :-
   X in 1..5,
   Y in 1..2,
   Z in 3..5,
   X #= Y + Z.
is queried it gives the answer:

?- bounds(X, Y, Z).
X in 4..5,
Y in 1..2,
Z in 3..4.

Explain how bounds propagation can be applied to infer this answer.

我给你一个开始:

发布所有约束后,一件事立即清楚:X 至少 4. 为什么?因为 Y 至少为 1,而 Z 至少为 3,而 XY 和 [=] 的 sum 12=].

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

这就是 边界传播 所做的:遍历所有变量的边界并查看是否可以根据发布的约束调整其中任何一个。重复此操作,直到不再有可能的域缩减。