如何在此处创建乌龟的列表/阵列?

时间:2018-10-18 20:39:25

标签: netlogo

我没有使用netlogo的经验,所以我问是否有人知道如何在此处设置乌龟的最大能量。如果我在一个贴片上有一个代理y和3、2或4 x´s,我想让代理y保持那3个能量中最大的能量,我知道我必须做一个循环,但是我怎么循环却不知道有多少X型代理位于此补丁中吗?

breed [ y ys]
breed [ x ys]
x-own[ energy]
y-own [ energy ]

    to move-y
    ask y[
      if count x-on patch-here > 2
      [
       set breed x
       ;anyone can help ?
       let energy one-of x-on patch-here ; this is wrong because i dont want a random 
      ]
    ]
    end

希望你能帮助我=)

1 个答案:

答案 0 :(得分:2)

首先,您可能不应该考虑循环。 NetLogo具有许多对代理集(例如askof)和列表(例如foreachmap)进行操作的原语,但是您几乎不必编写显式循环加上增加的索引。

关于您的代码的另一句话:在声明您的品种时,您已经将复数形式和单数形式名称颠倒了。复数形式必须排在第一位,因此应为breed [ xs x ]而不是breed [ x xs ]

现在,针对您的特定问题:您不需要patch-here,因为NetLogo还提供了<breeds>-here原语,可以更直接地满足您的需求。

要获得路径上所有xs的最大能量,只需使用max原语:

breed [ xs x ]
breed [ ys y ]
xs-own [ energy]
ys-own [ energy ]

to move-y
  ask ys [
    if count xs-here > 2 [
      set energy max [ energy ] of xs-here
      set breed xs
    ]
  ]
end

请注意,结果可能会有所不同,具体取决于您是在设置y之前还是之后将当前xs的品种更改为energy。我会让您尝试找出原因。