NetLogo中的概率 - 使用一个或创建一个随机数

时间:2013-11-20 06:13:48

标签: netlogo

我想知道如果使用相同的随机种子,以下函数的结果在随机性上有很大差异!哪一个更好?提供代码只是一个例子。

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

结果如下:

enter image description here

使用任何这些方法没有太大区别:)

1 个答案:

答案 0 :(得分:2)

您的测量代码中存在错误。将b = 3更改为b = 2,我预测您会看到任何差异消失。

除非NetLogo(或JVM)中存在一些尚未发现的奇怪错误,否则使用one-ofrandom不会有任何区别。据我所知,没有这样的错误。

相关的源文件是:

唯一的区别是第一次调用context.job.random.nextLong而后者context.job.random.nextInt(因为NetLogo列表的大小是int,而不是long,而random的输入是很久)。但nextIntnextLong都具有同等的高品质;他们只是打电话进入标准MersenneTwisterFast课程,这个课程被模拟工作的人广泛使用。