0

Eclipse 制約プログラミング フレームワークの search/6 関数に関するこのドキュメントを理解するのに苦労しています。

選択パラメーターが基本的に値の順序に影響することを理解しています。

選択方法が変数の順序を選択しているようにも見えますが、そのすべてのオプションを完全には理解していません。

他のパラメータについてはよくわからないので、誰かが言葉で説明できるかどうか疑問に思っていました. 私は制約論理プログラミングの理論をかなりよく理解しているので、それらの概念を自由に参照してください。私はそのドキュメントの CS 専門用語の多くを理解していません (アリティなど)。

ありがとうございました

4

1 に答える 1

4

search/6ECLiPSeシステムで見つけることができる最も複雑な述語の1つであるため、できるだけ簡単に答えようとします。

ただし、より詳細なフォローアップの質問は、ECLiPSeユーザーのメーリングリストで尋ねた方がよいでしょう。

search/6述語は、CLP問題の解決策の検索を制御するための一般的な述語です。これにより、ユーザーは検索ツリーの形状(ブランチに沿った変数の順序、ブランチの順序、およびアクセスされる検索ツリーの部分)を制御できます。述語には6つのパラメーターがありますsearch(+L, ++Arg, ++Select, +Choice, ++Method, +Option)。(+および++パラメータのモードを示します)

最初の2つのパラメーターは一緒になります。L変数のリストまたは用語のリストのいずれかです。前者の場合はArg0である必要があり、後者の場合Argは、検索中にインスタンス化する必要がある変数の位置を示します。例:

search([A,B],0,input_order,indomain,complete,[]).

また

search([p(1,A),p(2,B)],2,input_order,indomain,complete,[]).

どちらの場合も、変数ABは検索中にインスタンス化されます。

3番目のパラメーターは選択方法です。このメソッドは、インスタンス化search/6するリストから次の変数を選択するために使用されます。L

最も簡単なオプションはinput_order次のとおりです。検索は、リスト内の変数を単純に繰り返します。上記の例では、A最初にインスタンス化してから、をインスタンス化しますB。他のオプションは、ドメインサイズや変数に付加された制約の数を考慮し、それに応じて選択を行います。たとえば、first_failドメインが最小の変数を選択します。の現在のドメインがA[1,2,3]ありB、ドメインを持っている場合[1,3]B最初に選択され、インスタンス化されます。複数の変数が同じ最小ドメインサイズを持っている場合、入力順にこれらの最初のものが選択されます。ドメインサイズを考慮した選択方法では、制約が達成する伝播の量に応じて、検索中にドメインサイズが変化(縮小)するため、動的な変数の順序付けが実現されます。

他の選択方法は、一目瞭然です。

独自の選択メソッドを定義することもできます。ただし、それを実装する述語がアリティ2を持っている場合、つまり2つのパラメーターを持っている場合に限ります。述語は、入力として変数を取り、いくつかの基準値を計算する必要があります。基準値が最小の変数が選択されます。

4番目のパラメーターは選択方法です。変数が選択されると、選択メソッドは、検索中にそのドメイン内の値が試行される順序を制御します。

最も単純なオプションはindomain、変数の現在のドメインの値を昇順で選択するです。つまり、変数Aにドメインがある[1,3,5]場合、検索は最初Aに1にバインドされ、バックトラックで3にバインドされ、最後に5にバインドされます。3からindomain_middle始まり、1、5の順になります。

より複雑な選択方法(つまり、以外indomain)は、バックトラッキングで試行された値を削除します。つまり、基本的に。のような追加の制約を追加しますA#\=1。これにより、追加の伝播が発生し、実行不可能性の早期検出が可能になる場合があります。search/6質問でリンクしたドキュメントから、n-queensの例を実行したときの効果を確認できます。

ここでも、独自の選択方法を定義することもできます。述語はアリティ1または3である必要があります。アリティが1の場合、述語は1つの変数を入力として受け取り、それを値にバインドします(または、変数のドメインを変更する他の選択を行います)。アリティが3の場合、2つの追加パラメーターを使用して、選択に使用できるいくつかの状態情報を渡すことができます。

5番目のパラメーターは検索方法です。これは、検索が探索する検索ツリーのセクションのサイズを制御します(一方、selectionメソッドはツリーのブランチに沿った変数の順序を制御し、choiceメソッドは検索ツリーのブランチの順序を制御します)。

最も簡単なオプションはcomplete、ツリーが使い果たされるまでツリーを左から右に検索するです。他のすべてのオプション(対称性の破れを除く)は不完全な検索方法です。つまり、検索ツリーに未探索のままのブランチがあります。解決策がそのような未踏の枝の葉にある場合、それは見つかりません。不完全な検索方法で解決策を見つけることができるように、選択方法と選択方法が検索ツリーを形成することを確認する必要があります。たとえば、このオプションbbsは、検索中に作成できるバックトラックの数を制限します。その数がなくなると、検索は停止します。

対称性の破れは、何らかの方法で他のブランチと同等(対称)のブランチのみを除外します。

search/66番目のパラメーターは、ドキュメントで説明されている、可能な追加オプションのリストです。通常、それらは必要ありません。

于 2012-05-03T06:55:32.110 に答える