【发布时间】:2017-07-10 05:07:16
【问题描述】:
我知道你可以用math.randomseed()设置lua的随机数生成器的种子。
我想在某种程度上并行生成两个独立的确定性数字序列。我已将我的问题简化为:
-- assume seed1 and seed2 exist and are positive integers.
local sequence1 = {};
local sequence2 = {};
math.randomseed(seed1);
for i = 1,50 do
sequence1[#sequence1 + 1] = math.random();
end
seed1 = math.getseed(); -- This is the function that I want.
-- stuff
math.randomseed(seed2);
for i = 1,75 do
sequence2[#sequence2 + 1] = math.random();
end
seed2 = math.getseed(); -- This is the function that I want.
-- stuff
math.randomseed(seed1);
for i = 1,50 do
sequence1[#sequence1 + 1] = math.random();
end
seed1 = math.getseed(); -- This is the function that I want.
我查看了文档并将math 表放入k,v in pairs for 循环中,但没有任何结果。
lua 中是否存在这样的函数,或者我必须为此编写自己的生成器?
【问题讨论】:
-
你必须自己写生成器
-
如果您要使用的随机数的总数相对较小(例如 10,000 或更少),您可以预先计算两个随机数组,每个数组都有自己的确定性种子,然后根据需要从它们中提取.
-
@JohnColeman 我不知道每个种子需要多少个。它可能小到 100 个,也可能大到一百万甚至更多。
-
那就做你自己的发电机吧。一个基本的线性同余只需要几行代码。
-
如果您自己滚动并使用 Lua 5.3(具有 64 位 int 二进制操作),请考虑使用 PCG 而不是 LCG。多出约 2-3 行代码,但提供了 much 更好的输出。