NetLogo不会以随机间隔创建海龟

时间:2011-02-06 09:42:25

标签: netlogo

我正在尝试在NetLogo中创建一个程序,每隔0-60秒创建一个乌龟代理。使用以下代码然后在循环中运行该过程,似乎随机生成器不起作用。图形图(代理到刻度线)是线性的。

to go
  every random 60 [crt 1 [
    set xcor random 20 - 10
    set ycor random 20 - 10
  ]
]
  plot count turtles
end

但如果我这样做:

to go
  every 2 [crt 1 [
    set xcor random 20 - 10
    set ycor random 20 - 10
  ]
]
  plot count turtles
end

它似乎按预期工作。每2秒创建一只新乌龟。

我做错了吗?

2 个答案:

答案 0 :(得分:2)

这是一个想法,不要每次都重新生成一个新的随机数,在达到计时器后重新生成它。代码:

globals [t]
to setup
  set t random 60
end
to go
  every t [
    set t random 60
    crt 1 [
      set xcor random 20 - 10
      set ycor random 20 - 10
    ]
  ]
end

我没有测试过,但它应该解决Jose提出的问题。

答案 1 :(得分:1)

你的第一段代码正在做它应该做的事情,几乎每一瞬间就创造了一只乌龟。

这可能不直观,但请注意'go'每秒被调用数千次(取决于您的机器速度)。每次调用它时都会生成一个介于0到60之间的新随机数。因此,它很可能会生成数字0.如果是这样,那么它会在那时创建一个乌龟。

例如,从“永远”按钮运行此代码,看看它打印出来的内容:

to go
  every random 60 [
    show timer ;shows how long its been since last reset-timer
    reset-timer
  ]
end

我明白了:

observer: 0.016
observer: 0.0060
observer: 0.016
observer: 0
observer: 0
observer: 0
observer: 0.0050
observer: 0
observer: 0
observer: 0

在我的笔记本电脑上。