2017-11-19 6 views
1

別の品種エージェントの半径にいくつかのカメを作りたいと思います。カメを作り、別の品種エージェントの半径内の位置に移動します

私はこのコード例があります。

breed [ readers reader ] 
undirected-link-breed [ rris rri ] 
breed [ tags tag ] 

to setup 
    clear-all 
    set xy-file "locations.txt" 
    setup-readers 
    setup-tags 
end 

to setup-readers 
    create-readers num-readers [ 
    set shape "circle" 
    set color white ; means idle state 'red' is active 
    setxy random-xcor random-ycor 
    ] 
end 

to setup-tags 
    create-tags tag-population [ 
    setxy random-xcor random-ycor in-radius 6 of one-of readers 
    ] 
end 

ラインsetxy...が、それは動作しません。読者の1からの距離6の円の中にタグを配置することを、私はそれを修正する方法がわかりません。私も良い結果が得られていないmove-toプリミティブをテストしました。 私が望むのは、各リーダーの半径内にタグの集団を配置し、可能であれば、各リーダーが異なるタグの数を選択することです。

答えて

2

プリミティブは、タグを作成して移動する代わりに、適切なパッチを直接生成するだけで、必要なものを手に入れることができます。たとえば、この設定で:

breed [ readers reader ] 
breed [ tags tag ] 

to setup 
    clear-all 
    setup-readers 
    setup-tags 
    reset-ticks 
end 

to setup-readers 
    create-readers 5 [ 
    set shape "circle" 
    set color white 
    setxy random-xcor random-ycor 
    ] 
end 

あなたはreadersの半径内であり、あなたsproutタグのようなしかし、多くを持っているパッチの人口を行うことができます。

to setup-tags 
    let radii-patches patch-set [] 
    ask readers [ 
    set radii-patches (patch-set radii-patches patches in-radius 6 ) 
    ] 
    ; Code above defines the patch-set of patches within 6 of readers 
    ; Then, just ask 10 of those radii patches to sprout a tag 
    ask n-of 10 radii-patches [ 
    sprout-tags 1 
    ] 
end 

あなたはこれをやっている場合あなたは、各タグの異なる数を持ちたいと当たりの読者に基づき、次のような何かを試みることができる:

to setup-tags-reader 
    let n-tag random 5 
    ask readers [ 
    ask n-of n-tag patches in-radius 6 [ 
     sprout-tags 1 
    ] 
    ] 
end 

をが、その後n-tag Vを設定します別の方法(たとえば、読者の場所を設定しているような別の.csvファイルから)。

サイドノート - 他のユーザーがNetlogoに直接コピーして貼り付けることができないコードを除外しようとすると(例えば、 'xy-file'行、tag-populationnum-readersの変数)物事は超簡単!

your comment 1として

編集

- (上記と同じ設定を使用して)、このオプションを試してみてください

to setup-tags 
    create-tags 10 [ 
    move-to one-of readers 
    rt random-float 360 
    fd random-float 6 
    ] 
end 

これは単に、タグを作成し、読者にそれらを移動し、それらがランダムに方向を選択しています0から6まで無作為に進めるようにします。

各リーダーにパッチを割り当てる方法に関しては、readers-ownの変数をpに割り当てます(例えば、set my-patches patches in-radius 6)その変数に設定します。タグを使って同様のことを行うこともできます(例えば、 `set my-tags tags in-radius 6)。どちらの場合でも、2人の読者がパッチ/タグを共有する場所で重複を取ることができます。これを考慮する必要があります。

+0

あなたの答えに感謝します。 'patches'を使っているエージェントの位置が' setxy random-xcor random-ycor'のような値の連続的な領域にエージェントを置くことができるか、あるいは半径内のランダムなパッチの中心にエージェントを置くかどうか聞いてみたいと思います。半径内の任意の座標で位置を設定することは可能ですか? – pablo

+0

私の問題は、2番目の選択肢(読者あたりの芽キャベツ)が優れています。各リーダにパッチのエージェントセットを関連付けるためのフォームはありますか?その場合、私は読者1のタグに死ぬことを頼むことができました、または、私は '半径6のタグを要求しなければなりません'。 – pablo

+0

@パブロ - 両方の質問に適切に対処するために私の答えを編集 –

関連する問題