当选择品种邻居时,随机种子无法在NetLogo中重现运行

时间:2015-05-20 08:35:30

标签: netlogo

我有一个有三个无向链接品种的网络

undirected-link-breed [ parentals parental ]
undirected-link-breed [ diffusions diffusion ]
undirected-link-breed [ simdiffusions simdiffusion ]

我已经修复了种子并运行我的go程序,调用总是重现输出的不同过程,正如预期给出的种子一样。我的go程序只选择一只乌龟,然后这只乌龟执行一个可用的程序。这些过程都不会调用与链接相关的任何内容。一切正常,我可以重现给定种子的运行,所以我非常有信心代码可以工作。

然后我有一个最后的程序,当被选中时,会破坏随机序列并且无法在不同的运行中重现输出。这次在GO中选择的呼叫乌龟调用以下过程:

to network-mechanisms
    ;; THIS LINE BREAKS THE RNG
    let innovator-nei parental-neighbors with [typeof = "potter"]
    ;; THIS LINE DOES NOT BREAK THE RNG
    ;let innovator-nei other turtles with [typeof = "potter"]
    ask innovator-nei [
        let my-nei parental-neighbors with [typeof = "potter"]
        if any? my-nei [
            set attribute sum [centrality] of my-nei with [adopted-now?] / count my-nei
            set attribute 1 / (1 + exp (4 - 8 * attribute))
        ]
    ]
    ask innovator-nei [
        if random-float 1 < attribute [
            adopt
            create-simdiffusion-with myself [set color red]
        ]
    ]
end

如果调用乌龟寻找它的亲子邻居,那么就会发生一些奇怪的事情,无论种子如何,RNG序列在每次运行时都会发生变化;如果呼叫乌龟呼叫所有其他海龟,那么整个运行中的RNG序列是相同的......当处理链路品种时,这是一个已知的问题吗?

1 个答案:

答案 0 :(得分:1)

没有这样的已知问题。如果您认为自己发现了错误,请在https://github.com/NetLogo/NetLogo/issues/new打开一张机票并添加SSCCE。 (上面的代码不是自包含的 - 你没有包含必要的声明,并且你没有包含用于测试和重现错误的代码 - 而且它似乎也不会出现是证明问题所必需的最小代码。)

以下是此问题的SSCCE可能如下所示的示例:

undirected-link-breed [parentals parental]
turtles-own [typeof]

to setup
  clear-all
  crt 5 [ create-parentals-with other turtles ]
  ask n-of 3 turtles [ set typeof "potter" ]
  ask turtles [
    let innovator-nei parental-neighbors with [typeof = "potter"]
  ]
  print random-float 1.0
end

to test
  random-seed 0
  setup
  random-seed 0
  setup
end

碰巧,这段代码并没有显示任何错误;运行时,它会打印两次相同的数字,这是正确的行为:

observer> test
0.8700121472788938
0.8700121472788938

但它显示了提交正确错误报告所需的内容。