命令使一些(不是所有)移动的龟停止移动以响应满足条件

时间:2017-08-10 18:38:30

标签: netlogo

在netlogo中是否允许某些(1个或更多)而不是所有(与stop命令一样)的命令在满足给定条件时停止移动中间模拟?

1 个答案:

答案 0 :(得分:3)

使用stop可能不适合您所描述的内容 - 它只是退出当前程序并且与您编程的其他方式没有直接关系的乌龟行为。尽管如此,你确实可以对个体乌龟使用停止。使用此设置:

to setup
  ca
  crt 5 [
    set color green
  ]
  reset-ticks  
end

在这个简单的例子中,所有海龟将首先检查它们是否为红色,如果是真的,它们将stop并退出go-stop程序。如果为真,他们将完成该过程。

to go-stop 
  ask turtles [
    if color = red [
      stop
    ]
    rt random 60 - 30
    fd 1
    if xcor < -10 [
      set color red
    ]
  ]
end

这很好,但效率不如使用stop的示例;这个只处理仍然能够移动的海龟(因为它们是绿色的):

to go
  ask turtles with [ color = green ] [
    rt random 60 - 30
    fd 1
    if xcor < -10 [
      set color red
    ]
  ]
end

修改

尝试使用此版本,您可以使用turtles-own变量allowed-to-move?作为将要移动的海龟与想要静止的海龟分开的方法。同样,我不使用stop,因为我认为这不是正确的方法,但如果您愿意,可以修改以下示例以使用stop,如同上面的例子。另外 - 你说&#34;如果这个数字超过0.01,任何乌龟应该停止移动&#34;但是在这个例子中,如果他们选择低于 0.01的随机数,海龟就会停止,因为我使用的是很少的海龟,否则几乎所有的海龟都会停在一两滴之内。无论如何,使用或多或少与以前相同的设置,但适应新的turtles-own变量:

turtles-own [ allowed-to-move? ]

to setup
  ca
  crt 5 [
    set allowed-to-move? true
  ]
  reset-ticks  
end

现在,只要您选择的条件满意,您就可以让海龟将allowed-to-move?更改为false。在此示例中,如果该数字小于0.01,海龟将选择介于0和1之间的随机数,他们set allowed-to-move?false,这意味着他们不满足条件with [ allowed-to-move? ] ...在下一个刻度线上。因此,一旦乌龟停止移动它将不再移动。

to go
  ask turtles with [ allowed-to-move? ] [
    rt random 60 - 30
    fd 1
    if random-float 1 < 0.01 [
      set allowed-to-move? false
    ]
  ]
  tick
end