2

我是 Netlogo 的新手,并且已经陷入了困境。每只海龟都有一个变量——殖民地,它是一个介于 1-9 之间的数字。我想让乌龟脸朝向它最近的邻居,它的菌落数与它相同。然后它移动(该位工作正常)。目前我有

let newTurtle min-one-of other turtles [10]
let variableA [ask newTurtle [colony]]
ifelse colony = variableA newTurtle [face newTurtle] [rt random 360]
move-forward

这有效并使所有海龟移动到 1 个中心位置:

let newTurtle min-one-of other turtles [10]
face newTurtle
move-forward

我尝试过让一只乌龟向它的邻居询问它的殖民地,如果有相同的移动,否则会向随机方向移动。“预期文字值”目前是关于第二行的错误。我知道这不是我想要的,但我无法让它工作。对此或我的主要问题的任何帮助将不胜感激!谢谢

4

1 回答 1

2

您的主要问题可能源于您min-one-of在第一个块中的使用。查看该原语的字典条目并注意它需要报告器作为其参数之一,因此“[10]”不起作用。另外,min-one-of其实是求记者的最低值。所以,我认为你需要以不同的方式处理这个问题。您可以将其分解为以下步骤。首先,让代理海龟识别与它同属一个群体的海龟:

ask turtles [
    let my_colony other turtles with [ colony =  [colony] of myself ]

这将使代理海龟创建一个名为“my_colony”的临时变量,该变量由世界上与代理海龟属于同一殖民地的所有海龟组成。然后,您希望代理海龟选择该组中最近的成员。在同一代码块中:

let target min-one-of my_colony [ distance myself ]

这里,agentset 为min-on-of“my_colony”,reporter 为“[ distance 我自己]”,返回“my_colony”中距离值最小的海龟到代理海龟。接下来,检查以确保目标存在;否则,如果特定群体中只有一只乌龟,则会出现错误。在同一个代码块中:

if target != nobody [
      face target
      fd 1
    ]

希望这能让你开始,如果有什么需要澄清的,请告诉我。

于 2017-03-14T18:56:35.630 回答