[英]Eclipse Constraint Programming - search/6
我無法理解這個文檔在Eclipse約束編程框架搜索/ 6功能。
我了解到,choice參數基本上會影響值的排序。
似乎選擇方法也會選擇變量的順序,但是我並不完全了解它的所有選項。
我不太了解其他參數,所以我想知道是否有人可以用語言解釋它們。 我對約束邏輯編程的理論有很好的了解,因此可以隨時參考這些概念。 我只是不了解該文檔中的許多CS語言(arity等)
謝謝
我將嘗試盡可能簡短地回答它,因為search/6
是您可以在ECLiPSe系統中找到的最復雜的謂詞之一。
不過,最好在ECLiPSe用戶郵件列表中詢問任何更詳細的后續問題。
search/6
謂詞是用於控制搜索CLP問題解決方案的通用謂詞。 它允許用戶控制搜索樹的形狀(變量沿分支的順序,分支的順序以及搜索樹中被訪問的部分)。 謂詞具有6個參數: search(+L, ++Arg, ++Select, +Choice, ++Method, +Option)
。 ( +
和++
表示參數的模式)
前兩個參數一起使用。 L
是變量列表或術語列表。 如果是前者,則Arg
必須為0;如果是后者,則Arg
表示應在搜索過程中實例化的變量的位置,例如:
search([A,B],0,input_order,indomain,complete,[]).
要么
search([p(1,A),p(2,B)],2,input_order,indomain,complete,[]).
在這兩種情況下,變量A
和B
都在搜索過程中實例化。
第三個參數是選擇方法。 search/6
使用此方法從列表L
選擇下一個要實例化的變量。
最簡單的選項是input_order
:搜索僅迭代列表中的變量。 在上面的示例中,它將首先實例化A
,然后實例化B
其他選項考慮域大小和/或附加到變量的約束數量,並相應地進行選擇。 例如, first_fail
選擇具有最小域的變量。 如果A
的當前域是[1,2,3]
而B
具有域[1,3]
,則將首先選擇B
並將其實例化。 如果多個變量具有相同的最小域大小,則將按輸入順序選擇第一個。 考慮到域大小的選擇方法實現了動態變量排序,這是因為域大小將在搜索期間發生變化(收縮),具體取決於約束所達到的傳播量。
現在,其他選擇方法應該是不言自明的。
也可以定義自己的選擇方法,前提是實現該選擇方法的謂詞具有arity 2,即具有兩個參數。 謂詞必須將變量作為輸入並計算一些標准值。 將選擇標准值最小的變量。
第四個參數是選擇方法。 選擇變量后,選擇方法將控制搜索期間嘗試其域中值的順序。
最簡單的選項是indomain
,它以升序選擇變量當前域中的值。 即,如果變量A
具有域[1,3,5]
,那么搜索將最初將A
綁定到1,在回溯時將其綁定到3,最后綁定到indomain_middle
將以3開頭,然后是1,然后是5。
更復雜的選擇方法(即indomain
其他方法)將刪除回溯時的嘗試值,即,基本上添加諸如A#\\=1
其他約束。 這將導致額外的傳播,進而可能導致較早地檢測不可能性。 您可以在問題中鏈接到的search/6
文檔中運行n-queens示例時看到效果。
同樣,也可以定義自己的選擇方法。 謂詞必須為arity 1或3。如果arity為1,則謂詞將一個變量作為輸入並將其綁定到值(或做出其他選擇來更改變量的域)。 如果arity為3,則可以使用兩個附加參數傳遞一些狀態信息,您可以使用這些信息進行選擇。
第五個參數是搜索方法。 這控制了搜索應探索的搜索樹部分的大小(而選擇方法控制沿樹的分支的變量順序,選擇方法控制在搜索樹中的分支順序)。
最簡單的選項是complete
,它從左到右搜索樹,直到樹耗盡。 所有其他選項(除對稱破壞之外)都是不完整的搜索方法,即,搜索樹中將有一些分支尚未開發。 如果解決方案位於此類未開發分支的葉子上,則將找不到該解決方案。 您必須確保選擇和選擇方法以不完整的搜索方法能夠找到解決方案的方式來塑造搜索樹。 例如,選項bbs
限制了搜索過程中可以回溯的次數。 如果該號碼已用完,則搜索將停止。
對稱破壞只會以某種方式排除與其他分支等效(對稱)的分支。
第六個參數是可能的其他選項的列表,如search/6
文檔中所述。 通常,您將不需要它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.