2014-04-28 28 views
2

我對prolog很陌生,正在通過FD解算器工作。我正在探索SWI-Prolog和Gnu Prolog。我有一種情況,需要解決像下面這樣的約束,並且需要根據種子隨機挑選其中一種可能的解決方案。不知道Prolog中有多少可能。我們如何從Prolog給出的解決方案列表中選擇一個隨機數據集?

下面是我試圖求解方程:

?- X #< 7 , X #> -10, 4*X+2*Y #< 8, Y #< 10, Y #>0, label([X]). 
X = -9, 
Y in 1..9 ; 
X = -8, 
Y in 1..9 ; 
X = -7, 
Y in 1..9 ; 
X = -6, 
Y in 1..9 ; 
X = -5, 
Y in 1..9 ; 
X = -4, 
Y in 1..9 ; 
X = -3, 
Y in 1..9 ; 
X = -2, 
Y in 1..7 ; 
X = -1, 
Y in 1..5 ; 
X = 0, 
Y in 1..3 ; 
X = Y, Y = 1. 

正如你可以在上面看到,它給了我多種解決方案。對於我的應用程序,我會有興趣根據種子選擇上面的一組數據。

這是可能的序言?如果你能幫助我提供你的建議,那將是非常棒的。

感謝, Venkat

回答

4

您可以指定標籤序列隨機選擇的策略。這是如何做到這一點的ECLiPSe CLP序言:

:- lib(ic). 
one_random_solution(X, Y) :- 
    X #< 7 , X #> -10, 4*X+2*Y #< 8, Y #< 10, Y #>0, 
    once search([X, Y], 0, input_order, indomain_random, complete, []). 

而且隨着運行:

[eclipse]: seed(10), one_random_solution(X, Y). 
X = -9 
Y = 5 
Yes (0.00s cpu) 

不幸的是,它看起來像SWI-Prolog的不支持標籤隨機選擇的策略。

相關問題