如何在NetLogo中使用带有turtles-on关键字的龟集

时间:2017-04-25 14:40:22

标签: netlogo

示例开始:

to move-cars
  ask turtles with [ shape = "car"] [
    ifelse not can-move? 1
      [ die! ]
      [ ifelse [ pcolor ] of patch-ahead 1 = red [] [ifelse any? turtles-on patch-ahead 1 [] [ fd 1 ] ]]
  ]

这是我搬家的程序。汽车只能在前方没有红色补丁或前方没有汽车的情况下移动。

问题我在ifelse的第二部分是由 turtles-on 引起的,因为它会检查所有的海龟。我确实有几个车品种以及其他我不想检查的龟剂。我只想检查乌龟是否特定龟集。在这种情况下

turtles with [ shape = "car" ]

总结一下,我想问一下:(在语言中)前面一个地方是否有任何有车形的海龟?

我尝试了这个但无济于事:

[ ifelse [ pcolor ] of patch-ahead 1 = red [] [ifelse any? turtles-on turtles with [shape = "car"] patch-ahead 1 [] [ fd 1 ] ]]

在一天结束时,我解决了问题,但解决方案是丑陋和多余的。我检查了是否有任何特定品种是前面的一个补丁,因为我知道我可以使用品种 - 。这是:

[ ifelse [pcolor] of patch-ahead 1 = red [] [ ifelse any? carsSN-on patch-ahead 1 or any? carsSE-on patch-ahead 1 or any? carsEN-on patch-ahead 1 or any? carsWS-on patch-ahead 1 or any? carsNS-on patch-ahead 1 or any? carsNE-on patch-ahead 1 or any? carsES-on patch-ahead 1[  ] [ fd 1 ] ] ]

你能否提出更好的方法来使用特定的代理人设置龟?

1 个答案:

答案 0 :(得分:3)

您使用with [ shape = "car" ]的方法存在一些语法问题,否则它应该是一种可行的方法。您无法使用turtles-on turtles,因为turtles-on仅在补丁上下文中才有意义。同样,您需要使用原语turtles-on表明您希望{/ 1}} 特定补丁(补丁提前1)。您的方法的变体是:

of

此外,您是否有任何特定原因在每种情况下使用 ask cars [ if patch-ahead 1 != nobody [ if [pcolor] of patch-ahead 1 != red and [ count turtles-here with [ shape = "car"] ] of patch-ahead 1 = 0 [ fd 1 ] ] ] 而不是在if语句中使用!=(就像我在这里所做的那样)?

作为附注,我个人建议不要为不同方向的汽车使用不同的品种。我更喜欢拥有一个可以遵循相同规则的品种。它更清洁,您仍然可以在品种中区分(例如,ifelse作为起始方向)。它还可以通过只有一个品种来解决你在这里遇到的问题。也就是说,我确信在某些情况下,多个品种会更好,如果它对你的模型有意义那么棒!