YAP Prolog随机缺乏随机性

时间:2015-10-08 16:45:54

标签: random prolog random-seed yap

使用YAP执行以下Prolog程序时,输出始终相同,即整数233。

:- use_module(library(random)).    
x:- random(1,1000,X), writeln(X).

例如,如果我执行以下bash脚本,则输出始终是相同的整数(233)。

for k in `seq 0`
do
  yap -l test.pl << %
  x.
%
done

如果我使用swipl重复此过程,则每次输出都不同,即随机。

任何人都能解释一下吗?

2 个答案:

答案 0 :(得分:4)

首先要做的事情!

由于许多充分的理由(过去结果的重复性是最重要的原因)计算机程序无法使用实际随机数,但使用随机数。

PRNG是完全确定性的函数,在相同的内部状态(a.k.a。&#34; seed&#34;)作为初始化时,产生完全相同的数字序列(从现在到永恒)。

快速修复:找到合适的种子(日期,时间,月亮阶段......)并使用该种子明确初始化PRNG。记录种子,以便以后确定性地重新运行过去的实验。

答案 1 :(得分:2)

通常,随机生成器需要像set_seed(SomeReallyRandomValue)这样的调用,在C中经常使用种子(time(0))。 所以,我想

datime(datime(_Year, _Month, _DayOfTheMonth, _Hour, Minute, Second)),
X is Minute * Second,Y=X,Z=X,
setrand(rand(X,Y,Z)),

可行吗