2014-11-04 234 views
1

我正在嘗試創建一個模型,向海龜提出問題。每隻海龜代表一個獨特的知識領域(1,2,3,4,5 ...),每個問題包含一個隨機的域子集,例如(3 5 8)。NetLogo:爲全局變量創建隨機數組

然後我想問問題中包含的ID來回答它的ID。我希望得到一些建議:

  1. 如何創建問題(全局變量)的隨機數組;
  2. 如何與海龜ID進行比較。

這是我第一次使用NetLogo,所以我爲無知道歉。我絕對不會要求你爲我編寫proc,但我可以在正確的方向/命令上嘗試一些建議。

對於2.比較,我寫了以下內容,但我不確定這是否可行。我擔心的是,如果它正在尋找與烏龜ID完全匹配的問題數組,匹配將永遠找不到。我打算的是,如果海​​龜ID是無所不在的,那麼[設置專家? 2]:

to give-an-answer 
    foreach question [ 
    if question = who [set expert? 2] 
    ] 
end 

非常感謝任何建議,你可以給我!

感謝 約翰

+0

感謝Seth和King-Ink,我想我已經解決了這個問題。我只是要分析輸出,看看它是否有意義,但這裏是代碼: – 2014-11-04 13:40:00

回答

1

感謝一個清晰的問題。

第一部分可以用輸入和重複來完成。 Lput將成員添加到列表的左側。它使用語法

Set mylist lput value mylist 

價值將是你的隨機知識領域。重複n次重複這樣的事情。

Repeat 10 [thing] 

這裏的東西是你想要重複的代碼。把它放在你得到的環境中。

Set question lput (random number-of-domains) question 

第2部分。你正在尋找的原始成員?它採取的形式

Member? Value list 

它返回true,如果值在列表中,否則爲false。

+0

謝謝百萬,King Ink – 2014-11-04 15:11:50

2

如果使用代理集而不是列表,則更容易。在NetLogo中使用代理組通常是很好的風格,並且通常比替代方法更容易。

你可以讓你的問題與n-of

set question n-of turtles 10 

然後龜可以檢查它是否在問題與member?

if member? self question 
    [ set expert? 2 ] 

但如果你希望所有誰是龜將expert?設置爲2的問題的一部分,那麼最簡單的做法就是這樣做:

ask question [ 
    set expert? 2 
] 

完成!不需要ifmember?或循環。

建議的幾個其他位:

  • 在的NetLogo,這只是慣用的結束與一個問號的變量,如果它包含一個true或false值。所以set expert? 2奇怪地讀。爲什麼不是set expert? true?如果你真的需要在這裏使用一個整數,那麼你應該從變量名稱中刪除問號。

  • 最好避免使用who號碼。在NetLogo中使用誰編號幾乎總是讓你的代碼更難寫,而且寫起來更加複雜 - 很少容易。

+0

謝謝,謝謝,謝謝!不僅僅是爲了解決我的問題,而是爲了解決我的代碼中的其他一些缺陷。我會在下面發佈完整的代碼... – 2014-11-04 13:38:47