我还没有在这个网站上看过这个问题,所以请原谅我已经回答了。
我希望我的Netlogo模拟在某个事件发生后停止(在这种情况下,所有的黑色补丁都被乌龟转换为黄色补丁)。我怎么能做到这一点?到目前为止,这是我的(基本)代码:
to setup
clear-all
create-turtles amount [ setxy random-xcor random-ycor ]
reset-ticks
end
to monitor
show count patches
show ticks
end
to go
ask turtles [
rt random 360
fd 1
pen-down
set color red
if pcolor = black [
set pcolor yellow
]
]
tick
end
感谢。
答案 0 :(得分:5)
将此放在go
程序的最开头:
if (all? patches [pcolor = yellow]) [stop]
答案 1 :(得分:0)
您应该谨慎使用 stop
!
stop
命令仅执行以下操作:
这意味着它不会退出当前过程或忽略 patches
命令中 turtles
或 ask
的其余部分!
示例:
代码:
to setup
ca
crt 4
end
to some-procedure
let a 0
ask turtles
[
show "Flag 1: before [stop]"
set a a + 1
if a > 2 [stop]
show "Flag 2: after [stop]"
]
end
输出:
(turtle 0): "Flag 1: before [stop]"
(turtle 0): "Flag 2: after [stop]"
(turtle 1): "Flag 1: before [stop]"
(turtle 1): "Flag 2: after [stop]"
(turtle 3): "Flag 1: before [stop]"
(turtle 2): "Flag 1: before [stop]"
如您所见,输出包含 4 次 Flag 1
和 2 次 Flag 2
! Flag 2
命令忽略了 stop
中的两个,但所有 4 只海龟都打印了 Flag 1
!
因此,如果您想阻止其他海龟执行该块,那么您必须在最开始放置 stop
命令!例如,上面的 some-procedure
应该改成这样:
to some-procedure
let a 0
ask turtles
[
set a a + 1
if a > 2 [stop]
show "Flag 1: before [stop]"
show "Flag 2: after [stop]"
]
end
然后输出将只包含 2 次 Flag 1
和 2 次 Flag 2
:
(turtle 2): "Flag 1: before [stop]"
(turtle 2): "Flag 2: after [stop]"
(turtle 0): "Flag 1: before [stop]"
(turtle 0): "Flag 2: after [stop]"