Random LUA中的随机种子
我正在编写一个随机数字的代码。我将Random LUA中的随机种子,random,lua,Random,Lua,我正在编写一个随机数字的代码。我将math.randomseed(os.time())放入一个循环中。代码如下所示: for i = 1, 1000 do math.randomseed( os.time() ) j = math.random(i, row-one) u[i], u[j] = u[j], u[i] for k = 1, 11 do file:write(input2[u[i]][k], " ") end file:write"\n" end
math.randomseed(os.time())
放入一个循环中。代码如下所示:
for i = 1, 1000 do
math.randomseed( os.time() )
j = math.random(i, row-one)
u[i], u[j] = u[j], u[i]
for k = 1, 11 do
file:write(input2[u[i]][k], " ")
end
file:write"\n"
end
当我多次运行它时,整个输出总是相同的。randomseed不应该在重新运行时防止重复吗?在程序开始时调用
math.randomseed
一次。在循环中调用它是没有意义的。通常第一个随机值不是真正随机的(但无论如何它都不是真正随机的,它是一个伪随机数生成器)。
首先设置一个随机种子,然后随机生成几次。
请尝试以下代码,例如:
math.randomseed( os.time() )
math.random() math.random() math.random()
for i = 1, 1000 do
j = math.random(i, row-one)
u[i], u[j] = u[j], u[i]
for k = 1, 11 do
file:write(input2[u[i]][k], " ")
end
file:write"\n"
end
但是,您可以从以下位置进行尝试:
os.time()
在一秒钟内返回相同的值。@EgorSkriptunoff那么当我重新运行代码时,如何使整个结果不同?不要在一秒钟内运行相同的代码两次:-)只需使用类似于os.time()-os.clock()*1000
的方法即可
-- improving the built-in pseudorandom generator
do
local oldrandom = math.random
local randomtable
math.random = function ()
if randomtable == nil then
randomtable = {}
for i = 1, 97 do
randomtable[i] = oldrandom()
end
end
local x = oldrandom()
local i = 1 + math.floor(97*x)
x, randomtable[i] = randomtable[i], x
return x
end
end