2017-03-19 16 views
0

私は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. 

境界の伝播を適用する方法を説明しますこの答えを推論する。

答えて

2

境界伝播は、制約ソルバーが自動的にに適用される伝播の形であり、 に適用されます。重要なポイントは、ユーザのために、ではなく、のアルゴリズムを理解している必要はありませんが、制約ソルバに頼って の作業を行うだけです。あなたが示した結果では、ソルバはすでにであり、この形式の伝播が適用されています。制約ソルバーは、ここで、あなたのためにやっているかを理解するには

がスタートです:

私たちは知っている:

  • Y少なくとも
  • Zは、少なくともです
  • Xは、の合計であり、は、YZです。

したがって(運動:なぜ?):X少なくとも あります。

次に、他のすべての変数についても同様に、上位のの下限の両方についてこの推論を繰り返します。

これは、修正 ポイントと呼ばれる変数のいずれからも削除できなくなるまでこれを繰り返します。これが完了すると、境界 整合性を確立しました。