如何从Prolog给出的解决方案列表中选择随机数据集?

如何从Prolog给出的解决方案列表中选择随机数据集?,prolog,clpfd,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 = -

我不熟悉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

您可以为标记变量指定随机选择策略。在Prolog中就是这样做的:


不幸的是,SWI Prolog似乎不支持标记变量的随机选择策略。

您可以指定标记变量的随机选择策略。在Prolog中就是这样做的:

不幸的是,SWI 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)