2017-10-12 9 views
0

すべてのエージェントを実行するコマンドone-ofに相当するコマンドがありますか?だからall-ofコマンドですか?特定の他のエージェントに値を合計して報告するようエージェントに依頼する必要があります。 one-ofコマンドはランダムに1つの他のエージェントを選択しますが、リストのすべてのエージェントを選択する必要があります。Netlogo: `one-of`と同様の` all-of`コマンドがありますか?

詳細:私は彼らのHHwaterUse値を合計して戻って報告するために、他のhouseholdの薬剤を依頼するために私householdエージェントを必要としています。各householdエージェントは、他のすべてのエージェントにSocialNetworkリストを要求します。 SocialNetworkリストは、各エージェントが所有する値であるPublic_IDの値で構成されています。

例:だから、household-1かの武装隊[9126 3495 4197 8771]のように見えるSocialNetworkリストは、私が彼らのHHwaterUse値を折り返し報告する9126、3495、などのPublic_ID値を持つすべてのエージェントを必要としています。

ask households [ 
    set NetUseSum sum [HHwaterUse] of households with [[Public_ID] of myself = all-of [SocialNetwork] of self] 
    ] 
+3

ルークの答えが正しいですが、あなたがソーシャルネットワークを表現するつもりなら、あなたは[リンク](http://ccl.northwestern.edu/netlogo/docs/programming.html#linksを使用する必要があります)リストの代わりに。それははるかに良い(そしてより速い)コードを作るでしょう。あなたのIDのリストで現在経験している困難は、氷山の一角に過ぎません。あなたがIDや 'who'の数字に頼るようになると、すべてが厄介で複雑になります。 NetLogoは、ダイレクト・エージェント参照、エージェントセット、およびリンクに依存している場合に役立ちます。あなたがこれを受け入れるなら、あなたは長期的に報われるでしょう。 –

+2

は、各エージェントに固有のPublic_ID値であるか、カテゴリ指標とよく似ています。それらが各エージェントに固有のものであれば(何らかの理由でNicolasが示唆しているようにリンクを使用したくない場合)、識別子のリストの代わりにエージェントセットを使用できます。 – JenB

答えて

2

プリミティブmember?は、作業の詳細についてはdictionary entryをチェックアウトする必要があります。ここで1つだけの世帯は、そのソーシャルネットワークの水使用の合計をチェックする例を次に示します。

breed [ households household ] 
households-own [ Public_ID Social_Network HH_Water_Use] 

to setup 
    ca 
    create-households 10 [ 
    setxy random-xcor random-ycor 
    set Public_ID 1000 + random 1000 
    set HH_Water_Use 100 + random 50 
    ] 

    ask households [ 
    set Social_Network sort [Public_ID] of n-of 4 other households 
    ] 
    reset-ticks 
end 

to sum-social-network 

    ask one-of households [ 
    show (word "My social network comprises: " Social_Network) 
    ask households with [ member? Public_ID [Social_Network] of myself ] [ 
     print (word Public_ID " has a water use of " HH_Water_Use) 
    ] 
    let social_sum sum [HH_Water_Use] of households with [ member? Public_ID [Social_Network] of myself ] 
    print (word "My social network has a sum water use of " social_sum) 
    ] 

end 

編集:

私は、この上述ニコラスとジェンに同意するだけで、ノートは間違いではありません最高のアプローチ。可能であれば、代わりにリンクまたはエージェントセットの提案を使用してください。

0

それがうまくいったのは、member?のスニペットを使用するというルークCの提案でした。エージェントのリストから値を一括して合計することができました。

let social_sum sum [HH_Water_Use] of households with [ member? Public_ID [Social_Network] of myself ] 
関連する問題