如果我有以下幾點:在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生成的內容,所以在現實世界的用例中有更多的變量。
真的,要求*高效*隨機性沒有多大意義。 – CapelliC
@CapelliC使用[Stochastic gradient descent](https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Iterative_method)的神經網絡,它是在訓練集中隨機洗牌的標準步驟。 –
您應該展開什麼你的意思是「對我來說太貴」。你有太多的解決方案嗎? 'random_member/2'有點太慢了嗎?據我所知,純粹的Prolog沒有辦法將非確定性謂詞的解法排序。 – 2017-01-01 15:18:23