我正在尝试在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秒创建一只新乌龟。
我做错了吗?
答案 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
在我的笔记本电脑上。