我可以根据比较其变量值的结果将乌龟引导到特定补丁吗?

时间:2020-09-15 08:02:21

标签: netlogo

我有N组乌龟,它们拥有变量group-id(1到N,在设置时定义了N,每组有25只乌龟)。

开始时,每组海龟都在一个随机变量上产卵,变量patch-group-id与海龟group-id相匹配,如下所示:

let i 0
while [ i < n_groups ] [
    let x random 100
    let y random 100
    ask patch x y [ set patch-group-id i set pcolor gray ]
    create-turtles 25 [
      set group-id i
      setxy x y
    ]
    set i i + 1
  ]

海龟四处走动,但在此过程的后续步骤中,我希望它们回到其“家”位置。其他海龟也可能会更改其组ID,因此也会更改其主补丁,我也希望它们也移到那里。

有什么办法可以按照...进行比较吗?

Ask turtles [
Let target one-of patches with [patch-group-id = group-id]
]

然后要求乌龟移动到目标或跳到目标?

NetLogo不喜欢这样(‘Min-one-of expected this input to be a number block, but got a true/false block instead’),我认为可能还有其他问题。

1 个答案:

答案 0 :(得分:0)

patch-group-id是补丁拥有的变量,而group-id是乌龟拥有的变量。因此,您需要告诉NetLogo补丁程序试图匹配哪个组ID。试试这个:

ask turtles
[ let target one-of patches with [patch-group-id = [group-id] of myself]
]

另一种方法是放弃group-id的想法,只让每个乌龟记住其本地补丁。从概念上讲,这实现了一个想法,即组完全由其本地补丁定义。因此您的设置应类似于:

turtles-own
[ my-home
]

to setup
  clear-all
  ask n-of n-groups patches
  [ sprout turtles 25
    [ set my-home patch-here
    ]
    set pcolor gray
  ]
end

然后,您无需构建目标,只需进入这些变量的my-home。

如果您走了这条路,那么您还需要更改使用group-id的代码。例如,您说有时候乌龟会更改其组ID,而不是set group-id [group-id] of ...