【发布时间】:2013-12-07 22:21:02
【问题描述】:
我正在用 Lua 编写马尔可夫链,其中一个元素要求我统一生成随机数。这是一个简化的示例来说明我的问题:
example = function(x)
local r = math.random(1,10)
print(r)
return x[r]
end
exampleArray = {"a","b","c","d","e","f","g","h","i","j"}
print(example(exampleArray))
我的问题是,当我多次重新运行该程序(混搭 F5)时,会生成完全相同的随机数,导致示例函数选择完全相同的数组元素。但是,如果我通过在末尾重复打印行多次在单个程序中包含对示例函数的多次调用,我会得到合适的随机结果。
这不是我的意图,因为正确的马尔可夫伪随机文本生成器应该能够多次运行具有相同输入的相同程序并每次输出不同的伪随机文本。我尝试使用math.randomseed(os.time()) 重置种子,这使得随机数分布不再均匀。我的目标是能够重新运行上面的程序,每次都能收到一个随机选择的数字。
【问题讨论】:
-
种子生成器一次。
-
非常感谢您的帮助。奇怪的是在为生成器播种后(一次!)第一次调用 math.random 总是返回相同的值。在那之后,尽管所有后续调用都返回了我正在寻找的随机性。在我开始使用 math.random 返回的数字之前,我只有一个“垃圾”电话。无论如何,再次感谢。
-
这是在某些 C 标准库实现中实现的 Mersenne twister 的预期输出:第一个值会根据种子的差异略有漂移,然后第二个值会漂移得更多,依此类推。
标签: random lua random-seed