netlogo:比较品种的属性?

netlogo: comparing attributes of breeds?

在我的模型中,我有以下两个不同的品种:

breeds [sheeps sheep]
breeds [wolves wolf]

并且每个都有特定的大小,当它们 "eat" 一个补丁时会发生变化。 我有另一个功能,它检查羊是否在狼之前的补丁中,然后让狼吃掉羊。 现在狼应该只有在狼比羊大两倍的情况下才能吃羊。我试过以下:

to catch-sheep
    ask wolves[
        if any? sheeps-on patch-ahead 1 [
        let prey sheeps-on patch-ahead 1 
        if [ size ] of wolves > [ size ] of prey ) [
        ask [ prey [ die ]]
        ]
      ]
end

但这显然行不通,而且我找不到如何轻松比较这些尺寸的解决方案。 我也尝试过定义品种自己的大小变量,但我在定义它们在图中看到的实际大小时遇到​​了更多麻烦。

如果有任何帮助,我将不胜感激,希望这不是重复的

您的代码存在一些问题。 第一的, [size] of wolves[ size ] of prey 报告尺寸列表。所以,你不能用不等号来比较两个列表。

其次,[ size ] of wolves > [ size ] of prey,您正在将所有狼与一只特定狼的所有猎物进行比较。相反,您需要使用 myself 让要求的狼获得 1 个尺寸。而是让体型比自己小的猎物去死。

下面是一个正确的解决方案。本质上,你要求狼确定他们的猎物是谁。如果有猎物,则将体型小于求狼(本人)体型的猎物杀死。

to catch-sheep
    ask wolves[
      let prey sheeps-on patch-ahead 1 
      ask prey with [size < [size] of myself] [die]
    ]
end