我们如何从Prolog提供的解决方案列表中选择随机数据集?

时间:2014-04-28 04:07:53

标签: prolog clpfd

我是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

1 个答案:

答案 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并不支持标签的随机选择策略。