2017-01-01 67 views
4

如果我有以下幾點:在Prolog中,解決方案可以隨機選擇嗎?

a(X) :- X = 1; X = 2; X = 3; X = 4. 

我能產生不確定的順序解決方案:

?- a(X). 
X = 1 ; 
X = 2 ; 
X = 3 ; 
X = 4. 

有沒有要求系統在不確定性,隨機產生的解決方案的任何方法?例如:

?- a(X). 
X = 4 ; 
X = 1 ; 
X = 3 ; 
X = 2. 

我知道,我能找到的所有的解決方案,然後隨機選擇一項(findall(X, a(X), Y), random_member(Z, Y).),但這是我的情況太昂貴了。


可能更清楚例如:

p(X,Y,Z) :- 
    (X = a; X = b; X = c; X = d), % (D1) 
    (Y = a; Y = b; Y = c),   % (D2) 
    (Z = a; Z = b; Z = c; Z = d). % (D3) 

當確定性,使用?- p(X,Y,Z).將總是經過47級先前的解決方案(4 * 3 * 4 = 48)生成所述溶液X = d, Y = c, Z = d。但是,如果以非確定性順序選擇分離,則系統可能會在D3處選擇D1,Y = c處的X = d,D3處爲D2,Z = d,將其生成爲第一個解決方案。

這是用於約束AI生成的內容,所以在現實世界的用例中有更多的變量。

+2

真的,要求*高效*隨機性沒有多大意義。 – CapelliC

+0

@CapelliC使用[Stochastic gradient descent](https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Iterative_method)的神經網絡,它是在訓練集中隨機洗牌的標準步驟。 –

+2

您應該展開什麼你的意思是「對我來說太貴」。你有太多的解決方案嗎? 'random_member/2'有點太慢了嗎?據我所知,純粹的Prolog沒有辦法將非確定性謂詞的解法排序。 – 2017-01-01 15:18:23

回答

1

從您的評論說什麼,我的印象是你的使用更重要的問題 的情況是:

的解決方案可以以隨機順序創建

(這是因爲你說你不能創建他們,然後選擇隨機 一個。)

以不同的順序創建他們,鮑里斯曾暗示在一個良好的方式:只需重新排序不連續

例如,在情況下,你顯示:

 
p(X, Y, Z) :- 
    (X = a; X = b; X = c; X = d), % (D1) 
    (Y = a; Y = b; Y = c),   % (D2) 
    (Z = a; Z = b; Z = c; Z = d). % (D3) 

你可以(自動)通過交換才能創造這個片段的這種聲明等價版本,如果析取,如:(X = c ; X = b ; etc.),而每一種片段可能會以不同的 順序生成解決方案。

但是,它可能會更容易第一改寫這個給相當於版本:

 
p(X, Y, Z) :- 
    member(X, [a,b,c,d]), 
    member(Y, [a,b,c]), 
    member(Z, [a,b,c,d]). 

這種方式,更容易洗牌名單,並使用隨機列表生成解決方案。現在

 
p(X, Y, Z) :- 
    random_member(X, [a,b,c,d]), 
    random_member(Y, [a,b,c]), 
    random_member(Z, [a,b,c,d]). 

random_member(X, Ls0) :- 
    random_permutation(Ls0, Ls), 
    member(X, Ls). 

,你會得到這樣的答案:

例如,您可以將其更改爲

 
?- p(X, Y, Z). 
X = d, 
Y = Z, Z = b ; 
X = Z, Z = d, 
Y = b ; 
X = d, 
Y = b, 
Z = c ; 
etc. 

請注意,這種方式納入隨機性你的代碼是不純:在程序中現在存在隱式的全局狀態,並且在描述此類程序的測試用例等時,您不能再輕鬆地再現需要的結果。的溶液保持具有由攜帶隨機  種子作爲參數之一,使得每個運行完全可重複的,以使這個 狀態明確,例如。

注意,重新排序連詞和/或目標,像這樣僅適用於序言的單調子集,因此請務必使用聲明的功能,如  約束安全地交流目標,並增加您的 代碼的一般性!

+0

random_permutation/2和member/2的組合確實是解決我的問題的方法。我看到如何使我的程序適應這種風格。謝謝! – shn1

相關問題