2014-03-01 25 views
1

我試圖獲得一種品種來評估另一品種中的所有代理,並根據自己對其他品種特徵的偏好選擇它最喜歡的一種。在Netlogo中引用不同品種的嵌套詢問

可以說我有兩個品種,男人和女人。女性對於特徵(出生時產生的變量)具有隨機值,對於智力和吸引力可以說0-10的值。男性有偏好(也包括出生時產生的變量),他們關心的是他們對這些特徵的關心程度。我希望這些男人選擇使用效用函數最喜歡哪個女人,然後轉向他們。

我的代碼看起來是這樣的:

男人自己[PREF-INT PREF-ATT] 女性自身[INT ATT實用]

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

我看到一對夫婦的問題:

  1. 的一個問題是,你的局部變量pref-intpref-att具有相同名稱的男人,自己的變量。一般而言,變量需要唯一的名稱。
  2. myself指的是調用當前代理的代理(它可能是NetLogo中最容易混淆的原語)。 self是指當前的代理。它看起來像你使用myself你應該使用self。但是,[ some-variable ] of selfsome-variable相同,因此很少使用self。 NetLogo會自動從上下文中找出您所指的變量。
  3. 你需要圍繞* s的空間。
  4. 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