我没有使用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
希望你能帮助我=)
答案 0 :(得分:2)
首先,您可能不应该考虑循环。 NetLogo具有许多对代理集(例如ask
和of
)和列表(例如foreach
和map
)进行操作的原语,但是您几乎不必编写显式循环加上增加的索引。
关于您的代码的另一句话:在声明您的品种时,您已经将复数形式和单数形式名称颠倒了。复数形式必须排在第一位,因此应为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
。我会让您尝试找出原因。