Получить случайный набор решений - PullRequest
1 голос
/ 19 мая 2019

Я не смог найти ни одного связанного вопроса по StackOverflow, и я не уверен, что это возможно в Прологе, но вот моя проблема:

Учитывая ряд ограничений, в которых я могу ожидать от Prolog огромное количество решений, которые могут занять несколько часов, могу ли я не ждать полного набора решений, а вместо этого получить «первые», но рандомизированные решения

Для очень маленького примера,

between(0, 100, X), between(0, 100, Y), X+Y>100.

незамедлительно выдаст мне предсказуемый набор X=1, Y=100; X=2, Y=100, X=3, Y=100 и т. Д. Предположим, что для примера вместо вычислений требуются часы, есть ли способ получить, скажем, 35 ​​(пользовательский параметр), решения, которые случайным образом упорядочены, например X=79, Y=43; X=4, Y=98 и т. д.

Прошло много времени с тех пор, как я в последний раз занимался Прологом, поэтому я снова стал новичком!

1 Ответ

1 голос
/ 19 мая 2019

вы можете использовать call_nth / 2 в сочетании с random_between / 3:

?- random_between(1,8,X),call_nth(member(E,[1,2,3,4,5,6,7,8]),X).
X = E, E = 1.

?- random_between(1,8,X),call_nth(member(E,[1,2,3,4,5,6,7,8]),X).
X = E, E = 6.
...