Netlogo - 在某个事件之后停止模拟

时间:2016-10-25 21:44:05

标签: netlogo

我还没有在这个网站上看过这个问题,所以请原谅我已经回答了。

我希望我的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

感谢。

2 个答案:

答案 0 :(得分:5)

将此放在go程序的最开头:

if (all? patches [pcolor = yellow]) [stop]

答案 1 :(得分:0)

您应该谨慎使用 stop

stop 命令仅执行以下操作:

  1. 停止永远按钮的执行
  2. 忽略当前块内的其余命令

这意味着它不会退出当前过程或忽略 patches 命令中 turtlesask 的其余部分!

示例:

代码:

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 2Flag 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]"