2

ノードとアークの存在に関する制約を解決することにより、有向グラフの形状を決定しようとしています。たとえば、バイナリ変数V1V2は、ノードから へ1のアークがある場合です。たとえば、グラフが接続されていること、または特定のノードから別の特定のノードへのパスがあることを要求するために、到達可能性制約を表現したいと思います (または、代わりに推移閉包を見つけます)。V1V2

SICStus Prolog がfd_closureこの目的のために持っていることを見てきましたが、SWI Prolog には似たようなものは見つかりませんでした。CHRを使用する必要がありますか? アーク/パスの一貫性の例を見てきましたが、正しい方向を見ているかどうかはわかりません。

4

2 に答える 2

3

SICStus'fd_closure/2は SWI-Prolog のterm_attvars/2. 属性を介して推移的に到達できるすべての変数を提供します (また、SWI の CLP(FD) は属性を使用して制約を格納します)。

通常、これらの述語は必要ないことに注意してください。これらは、たとえばトップレベルで残りの目標を取得するために使用されます。

これらの述語を使用しなくても、有限領域制約を使用してグラフを表現できます。たとえば、ノードiからノードjへのアークB_i_jがある場合に1 である有限ドメイン変数を使用します。

より強力なプロパティが必要な場合は、より強力な制約が必要になる可能性があります。たとえば、circuit/1は SICStus と SWI で利用でき、ハミルトン閉路を記述します。他のプロパティについては、専用のフィルタリング アルゴリズムを実装できます。

于 2013-11-16T21:15:12.387 に答える