我是prolog的新手,并通过FD解决方案工作。我正在探索SWI-Prolog和Gnu 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.
如上所示,它为我提供了多种解决方案。对于我的应用程序,我有兴趣根据种子选择上面的一个数据集。
这是可能的prolog?如果你能帮助我提出你的建议,那将是很棒的。
谢谢, Venkat
答案 0 :(得分:4)
您可以为标记变量指定随机选择策略。这是如何在ECLiPSe CLP Prolog:
中完成的:- 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并不支持标签的随机选择策略。