2017-12-18 14 views
1

私のモデルは、リンクで相互に接続されたエージェントのネットワークです。 エージェントとそのネイバーのネイバーからエージェントセットを作成しようとします(これには異なる値を割り当てる必要があります)。異なるエージェントからエージェントセットを追加してレットにする

しかし、私はそれにエージェントセットを含むletを作成します。エージェントはこのエージェントセットをすべて独自のものにするように求めましたが、これは今のところとても良いことです。しかし、元のエージェントが2番目のラインの隣人に尋ねると、2番目のすべての隣人のエージェントセットの代わりに、この隣人のエージェントセットが返されます。 隣人が自分の隣人をすべてそのセット内の異なるエージェントの隣人。

turtleset current-agentset new-agentsetletで可変とすることができないので、私は単純に行うことができません。だから、普通はset second-neighbors (turtle-set second-neighbors other-nieghborsであるコードは、すでにレットに2番目の隣人に聞くことができないので、うまくいきません。

私はこのことをエージェント固有のものにすることもできません。

は、私が持っているコードは、これまでのように私がしたいことは、彼らが今のようにagentset内のすべてのエージェントがそのリンクの隣人を報告cがあり、この

ask companies [ 
     let this-company self 
     let b link-neighbors 
     ask b [ let c link-neighbors with [self != this-company] 

      ask c [ let d link-neighbors with [not member? self b] 
      ask this-company [ 
       set iburen b 
       set iiburen c 
       set iiiburen d 
     ] 
     ] 
    ] 
    ] 

のように見えます。しかし、これらのリンク - ネイバーを、c内のすべてのエージェントのすべてのリンク - ネイバーを持つ新しいエージェントセットに保管してください。簡単なように私は私+ 1が、私はモデルを実行した場合turtle-set (what I have) (what is new from the next agent asked)

よりも、同じことがD

のために行く、今の薬剤は異なるagentsetほぼすべてのダニを報告しています。彼らは、これらのエージェントをすべて組み合わせるのではなく、いずれかのエージェントから1つのエージェントセットを選択するだけです。ここで

+1

「あなたが可変にするよう求めることができないから」という意味を説明してください。あなたは何を得ているのですか?私はこれを '新しいカメセットのカレントエージェントセットnew-agentset'としています。 – JenB

+0

こんにちは、私はそれが働いています。私はあなたが 'set newset(turtle-set newset currentset)'と言うことができる前に、まずそれを定義しなければならないということを意味しました。私はこれを後で再びフィルタリングするエージェントセットとして定義することでこれを行います。 letを空のエージェントセットとして定義して、後で提案したようにエージェントを追加できることを期待しました。しかし、私はまだこれを把握していませんでした。 –

+0

プリミティブ 'let'は、エージェントセットを作成し、その内容をある値に設定することを意味します。つまり、「let」があなたを定義します。あなたのコードで 'set'という単語を' let'と置き換えれば正常に動作します。しかし、変数ごとに 'let'を1回しか使えないので、後で内容を変更するには' set'を使う必要があります。 – JenB

答えて

2

は、私はあなたが必要だと思うものです:

extensions [ nw ] 
breed [ companies company ] 
companies-own [ 
    buren ; a list of agentsets, with one item for each "level" of neighbors 
] 

to setup 
    clear-all 
    ; create a random network and lay it out: 
    create-companies 20 [ create-links-with n-of 3 other companies ] 
    repeat 30 [ layout-spring turtles links 0.2 5 1 ] 

    let num-levels 3 

    ask companies [ 
    let all-neighbors other nw:turtles-in-radius num-levels  
    set buren (list) ; initialize to empty list 
    foreach range num-levels [ i -> 
     let neighbors-at-this-level all-neighbors with [ 
     nw:distance-to myself = i + 1 
     ] 
     set buren lput neighbors-at-this-level buren 
    ] 
    ] 

    ; demonstrate how to access the levels (sorted only for display purposes) 
    ask one-of companies [ 
    show sort item 0 buren ; first level neighbors 
    show sort item 1 buren ; second level neighbors 
    show sort item 2 buren ; third level neighbors 
    ] 

end 

それはレベルごとに一度、すべてのネイバーのリストを通過するので、これは、可能最も効率的なコードではないかもしれませんが、あなたは持っていない限り巨大なネットワーク、あなたは気づくべきではありません。

あなたが本当にibureniibureniiiburenような変数を使用したい場合、あなたは常にリストの項目のエイリアスができます

set iburen item 0 buren 
set iiburen item 1 buren 
set iiiburen item 2 buren 

...しかし、私はそれをお勧めしません。あなたのエージェントセットをリストに入れれば、より一般的な方法でレベルを考えるように促すはずです。

+0

私はそれが私の望むように働いています。それは次のようになります。 ' LET BのリンクネイバーがCの自己 のletデシベル をb [集合C(カメセットCのリンクネイバー)[自己= C] と セットCCを聞いてみましょう [企業を頼みます! c [セットd(カメのセットdリンク隣接) ddを[メンバーでないか?自己B]は iiiburen D ] ] ] ] ' しかし、私は、私は4000社のネットワークを持っているので、あなたの方法は、あまりにも、それは良く見えるしようとします セットC iiburenこの-会社[ セットB iburen セットを頼みます。 –

+0

を明確にするために、コードは同じですがより効率的で、3つのレイヤーのエージェントセットをリストに格納します。リスト内の各アイテムは、最も近いものから最も遠いものへのエージェントセットです。そして、nw:radius in turtles-in-radiusは、カメがリンクやステップの数で測定しているレベルを取得するために使用されますか? –

+0

私はあなたのコードを試しました、そしてそれは確かに私が欲しいものと私のコードで何をしたのですか。しかし、それはより効率的で、私はいつでもレイヤーを追加できます。助けてくれてありがとう –

関連する問題