2017-07-26 2 views
0

エージェントに他人との文化を共有させたいのですが。それらはバイナリータグで作られた文化を表す長さ11のストリングを持っています(例えば、10100111101)。 友人との文化を共有するために、彼らはランダムなタグを選択します。友人がそのタグ位置のエージェントと同意すると、変更は行われません。彼らが同意しない場合、エージェントのタグ(EpsteinとAxtell、GAS)に同意するために、友人のタグが反転されます。次のように詳細についてはタグフリッピング、文化共有。エージェントが文化を表す他の文字列値をフリップする方法

、文化の設定は次のとおりです。

set t-culture-tags n-values 11 [random 2] 

以降、目的のサブセット化のために、私は0をカウントし、それらのグループを与えるために、このようにフィルタリング:

set shared-culture (filter [i -> i = 0] t-culture-tags) 

答えて

3

使用replace-item

turtles-own [ t-culture-tags ] 

to setup 
    clear-all 
    create-turtles 10 [ set t-culture-tags n-values 11 [random 2] ] 
end 

to go 
    ask turtles [ 
    let friend one-of other turtles 
    let i random length t-culture-tags 
    let my-tag item i t-culture-tags 
    let friend-tag [ item i t-culture-tags ] of friend 
    if my-tag != friend-tag [ 
     set t-culture-tags replace-item i t-culture-tags friend-tag 
    ] 
    ] 
end 
2
turtles-own [ t-culture-tags ] 

    to setup 
     ca 
     reset-ticks 
     crt 10 [ 
     set t-culture-tags n-values 11 [ random 2 ] 
     setxy random-xcor random-ycor 
     set color sum t-culture-tags + 50 
     ] 

    end 

この設定では、上の例のようにt-culture-tagsで10のカメが作成されます。さて、あなたは行動するカメとその友人のタグが異なる場合にのみ変化が起こると言いますから、質問するカメの文化を普及させるのはおそらく最も単純です(事実上、友人)。

したがって、0から10までの乱数を選んでインデックスとして使用し、質問タートルがそのインデックス位置にそのタグを希望するすべての「友人」に広げさせることができます。以下の例では、各目盛り1ランダムカメは5の半径内の他のすべてのカメにその文化を広げる:

to spread-culture 

    ask one-of turtles [ 
    let tag-index random 11 
    let my-tag-at-index item tag-index t-culture-tags 

    if any? other turtles in-radius 10 [ 
     ask other turtles in-radius 10 [ 
     set t-culture-tags replace-item tag-index t-culture-tags my-tag-at-index 
     set color sum t-culture-tags + 50 
     ] 
    ] 
    ] 
    tick 

end 

あなたはしばらくの間、あなたが表示されますことを実行する場合は、その半径内にあるすべてのカメ一方では、最終的に、この例ではそれらの色によって表される同一のtカルチャータグを有するであろう。

関連する問題