我想知道如果使用相同的随机种子,以下函数的结果在随机性上有很大差异!哪一个更好?提供代码只是一个例子。
let b random 3
if b = 0 [set Output "Output1"]
if b = 1 [set Output "Output2"]
if b = 2 [set Output "Output3"]
Or this one :
set output one-of ["Output1" "Output2" "Output3"]
我刚用一个简单的netlogo程序检查了它:
turtles-own [X Y A]
to setup
__clear-all-and-reset-ticks
create-turtles 50
[set A random 3000
set y random-normal 0.5 0.1
set x random-normal 0.5 0.1
move-to patch random 20 random 20]
end
to go
ask turtles
[ set A A + 1
fd 1
rt random 10
if A > 4000 [die]
if random-float 1 < 0.003 and a > 1000 and A < 3000 [
let xx x
let yy y
hatch 1
[ set A 0
set x one-of (list (random-normal 0.5 0.1) (xx + 0.1) (XX - 0.1))
let b random 3
if b = 0 [set y random-normal 0.5 0.1]
if b = 1 [set y yy + 0.1]
if b = 2 [set y yy - 0.1 ]
]
]
]
tick
end
结果如下:
使用任何这些方法没有太大区别:)
答案 0 :(得分:2)
您的测量代码中存在错误。将b = 3
更改为b = 2
,我预测您会看到任何差异消失。
除非NetLogo(或JVM)中存在一些尚未发现的奇怪错误,否则使用one-of
或random
不会有任何区别。据我所知,没有这样的错误。
相关的源文件是:
唯一的区别是第一次调用context.job.random.nextLong
而后者context.job.random.nextInt
(因为NetLogo列表的大小是int,而不是long,而random
的输入是很久)。但nextInt
和nextLong
都具有同等的高品质;他们只是打电话进入标准MersenneTwisterFast课程,这个课程被模拟工作的人广泛使用。