random - YAP Prolog random 缺乏随机性

标签 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 重复此过程,则每次输出都会不同,即随机的。

谁能解释一下吗?

最佳答案

要事第一!

出于许多充分的原因(过去结果的可重复性是最重要的),计算机程序不使用实际随机数,而是使用随机数。

PRNG 是完全确定性的函数,给定与初始化相同的内部状态(也称为“种子”),会产生完全相同的数字序列(从现在到永恒)。

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

关于random - YAP Prolog random 缺乏随机性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33021564/

相关文章:

math - 创建一个随机序列,跳到序列的任何部分

.net - 如何将类似 Prolog 的推理引擎嵌入到 .NET 应用程序中?

c - c中的种子随机数

r - 如何在当前时间自动设置随机种子?

c++ - Matlab Random 和 C++ Random 是否有相同的种子?

javascript - 在我达到 5 之前无法让我的脚本打印随机数

java - 如何处理缓慢的 SecureRandom 生成器?

php - PHP 中 0 到 1 之间的随机 float

Prolog 运算符预期错误