2014-04-28 2 views
2

저는 프롤로그를 처음 사용하고 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. 

, 그것은 나에게 여러 솔루션을 제공 : 아래

내가 해결하기 위해 노력하고있는 식이다. 내 응용 프로그램의 경우 시드를 기반으로 위에서 데이터 집합 중 하나를 선택하는 데 관심이 있습니다.

프롤로그에서 가능합니까? 당신의 제안을 도와 줄 수 있다면 좋을 것입니다.

감사합니다, 벤 카트

답변

4

당신은 라벨 변수에 대한 임의 선택 전략을 지정할 수 있습니다.

:- 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 - 프롤로그처럼 보이는 그 ECLiPSe CLP 프롤로그에서 작업을 수행하는 방법이다.