我如何在 NetLogo 中使用带有 turtles-on 关键字的 turtle-sets

how can I use turtle-sets with turtles-on keyword in 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-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 ] ]]

最后,我解决了这个问题,但解决方案丑陋且多余。我检查了是否有任何特定品种领先一个补丁,因为我知道我可以使用 breed-on。这是:

[ 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 ] ] ]

你能建议更好的方法来使用特定代理集的 turtles-on 吗?

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

  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
      ]
    ]
  ]

此外,您是否有任何特定原因在每种情况下都使用 ifelse 而不是仅在 if 语句中使用 !=(就像我在这里所做的那样)?

附带说明一下,我个人建议不要让您的汽车在不同方向行驶时使用不同品种。我更喜欢拥有一个可以遵循相同规则的单一品种。它更干净,您仍然可以在品种内进行区分(例如,turtles-own 表示起始方向)。它还可以通过只处理一个品种来消除您在这里遇到的问题。也就是说,我确信在某些情况下多个品种会更好,如果它对您的模型有意义,那就太好了!