YAP Prolog随机性缺乏随机性



使用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重复这个过程,那么每次输出都是不同的,即随机的。

有人能解释一下吗?

重要的事情先做!

由于许多原因(最重要的是过去结果的可重复性),计算机程序不能处理实际随机数,而只能处理随机数。

prng是完全确定的函数,给定相同的内部状态(也称为"seed")作为初始化,生成完全相同的数字序列(从现在直到永远)。

快速修复:为自己找到一个合适的种子(日期、时间、月相等),并用该种子显式初始化PRNG。记录种子,以便以后可以确定地重新运行过去的实验。

通常,随机生成器需要类似set_seed(someereallyrandomvalue)的调用,在C语言中经常使用seed(time(0))。所以,我猜

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

可以

相关内容

  • 没有找到相关文章

最新更新