嵌套请求在Netlogo中引用不同的品种

时间:2014-03-01 23:16:52

标签: nested netlogo

我正在尝试使用一种品种来评估另一个品种的所有代理商,并根据自己对其他品种特征的偏好选择最适合的品种。

我可以说我有两个品种,男人和女人。女性有特征的随机值(出生时产生的变量),为了智力和吸引力,可以说0到10的值。这些男人对于他们关心这些特征的程度有偏好(也是出生时产生的变量)。我希望男人们选择哪个女人最喜欢使用实用功能,然后转向他们。

我的代码看起来像这样:

男人拥有[pref-int pref-att] 女性拥有[int att utility]

to choose-mate
 ask men [
  let pref-int [pref-int] of myself
  let pref-att [pref-att] of myself
  ask women [
     let int [int] of myself
     let att [att] of myself
     set utiilty pref-int*int + pref-att*att
     ]
  move to max-one-of women [ utilty ] 
 ]
end

但netlogo似乎无法访问女性的变量值,我引用过男性问题。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我发现了几个问题:

  1. 一个问题是,您的本地变量pref-intpref-att具有相同的名称具有男性自己的变量。变量通常需要唯一的名称。
  2. myself指的是调用当前代理的代理(它可能是NetLogo中最容易混淆的原语)。 self指当前代理。看起来您正在使用myself,您应该使用self。但是,[ some-variable ] of selfsome-variable相同,因此您很少使用self。 NetLogo会自动从上下文中找出你所指的变量。
  3. 您需要* s周围的空格。
  4. move to应为move-to
  5. 所以这里有两种方法可以做你想做的事。

    使用局部变量:

    to choose-mate
     ask men [
      let mans-pref-int pref-int
      let mans-pref-att pref-att
      ask women [
         set utiilty mans-pref-int * int + mans-pref-att * att
         ]
      move-to max-one-of women [ utilty ] 
     ]
    end
    

    使用myself

    to choose-mate
     ask men [
      ask women [
         set utiilty ([pref-int] of myself) * int + ([pref-att] of myself) * att
         ]
      move-to max-one-of women [ utilty ] 
     ]
    end
    

    我更喜欢myself版本,但这是一个品味问题。

    另外,另一个观察。 utility正随着每个人而变化。它不是特定女性的全球属性,而是每个男性特有的东西。因此,我不建议将其存储为女性自己的变量。相反,你可以这样做:

    to choose-mate
     ask men [
      move-to max-one-of women [ 
        ([pref-int] of myself) * int + ([pref-att] of myself) * att
      ] 
     ]
    end