netlogo:比较品种的属性?

时间:2017-04-12 08:38:21

标签: netlogo

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

breeds [sheeps sheep]
breeds [wolves wolf]

并且每个都具有特定的大小,当它们“吃掉”补丁时会发生变化。 我还有另一个功能,可以检查一只绵羊是否在狼的前面,然后让狼吃掉它。 现在狼只能在绵羊比绵羊大两倍的时候吃羊。我试过跟随:

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

但这显然不起作用,我找不到如何轻松比较这些尺寸的解决方案。 我也试图定义品种 - 自己的大小变量,但我更难以定义它们的实际大小,这可以在情节中看到。

我会感激任何帮助,我希望这不是重复的

1 个答案:

答案 0 :(得分:3)

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

第二,[ size ] of wolves > [ size ] of prey,你将所有狼与1只特定狼的所有猎物进行比较。相反,你需要使用myself让狼来获得1个大小。相反,只要问猎物的体型小于我自己的体型即可。

以下是正确的解决方案。基本上,你要求狼确定他们的猎物是谁。如果有任何猎物,那么杀死大小小于问狼(我自己)大小的猎物。

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