0

我正在尝试在 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 秒就会创建一个新的海龟。

难道我做错了什么?

4

2 回答 2

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 提出的问题。

于 2011-02-16T17:48:36.053 回答
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

在我的笔记本电脑上。

于 2011-02-06T13:11:08.460 回答