我正在尝试使用一种品种来评估另一个品种的所有代理商,并根据自己对其他品种特征的偏好选择最适合的品种。
我可以说我有两个品种,男人和女人。女性有特征的随机值(出生时产生的变量),为了智力和吸引力,可以说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似乎无法访问女性的变量值,我引用过男性问题。
有什么建议吗?
答案 0 :(得分:1)
我发现了几个问题:
pref-int
和pref-att
具有相同的名称具有男性自己的变量。变量通常需要唯一的名称。myself
指的是调用当前代理的代理(它可能是NetLogo中最容易混淆的原语)。 self
指当前代理。看起来您正在使用myself
,您应该使用self
。但是,[ some-variable ] of self
与some-variable
相同,因此您很少使用self
。 NetLogo会自动从上下文中找出你所指的变量。*
s周围的空格。move to
应为move-to
。所以这里有两种方法可以做你想做的事。
使用局部变量:
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