你怎么能打破netlogo的问题

时间:2014-07-16 18:45:17

标签: netlogo

你怎么能打破netlogo的问题? 例如......人们正在移动,突然一些条件得到了满足。现在您不希望要求代理执行(移动)并停止询问。并在询问后将控制传递到下一行。

在名为“停止”的程序中存在类似的东西。但不是要问。有办法吗?

2 个答案:

答案 0 :(得分:4)

好吧,stop 确实突破了ask。来自stop的文档:

  

该代理立即从封闭程序,询问或类似构造(例如crt,hatch,sprout)退出。只有当前过程停止,而不是代理的所有执行。

所以你可以这样做:

ask turtles [
  if stop-condition? [ stop ]
  move-to one-of patches ; or whatever
]
print "done!"

...只要stop-condition?变为真,执行就会突破ask块并完成!"完成!"将被打印。

答案 1 :(得分:2)

虽然我真的很犹豫与Nicholas相矛盾,但我感到他的回答是这种情况具有误导性。缺少真实的break语句是NetLogo的严重缺陷。在ask内部,stopcontinue更像break。例如:执行以下代码将始终显示50。

to test
  let ctr 0
  crt 100 [set color blue]
  ask n-of 50 turtles [set color red]
  ask turtles [
    if (color = red) [ stop ]
    set ctr (1 + ctr)
  ]  
  print ctr
end