2017-03-11 11 views
0

パッチの特定の「who」(ラベル)を使用したいと思います。そのために画像を添付しました。どうすれば設定できますか?パッチ番号のマニュアルを '誰'に設定していますか?またはそれを行う他の方法はありますか?それはカメ専用の変数であるため、特定のパッチ識別子を設定する

おかげ

picture for patch identifiers

答えて

1

パッチがwhoを持っていません。パッチには座標が代わりにあります。ただし、パッチに独自のID番号を付けて使用することもできます。必要なものが5 x 5の世界(あなたの写真のようなもの)なら、あなたはNetlogoコードであなたが望むものを達成することができます。たとえば、以下のコードを参照してください(そして、私はワールド設定to those seen hereを変更したことに注意してください)。しかし、より多くのパッチを持つ世界が必要な場合は、ファイルから目的のパッチ値を読み取ることをお勧めします。

patches-own [ id ] 

to setup 
    clear-all 
    (foreach (sort patches) (range count patches) [ [p n] -> 
    ask p [ set id n ] 
    ]) 
    ask patches [ set plabel id ] 
end 

または:あなたはあなたの例では、特定の「スパイラル」順序を気にしない場合は

globals [ 
    idlist 
    ordered_patches 
] 

patches-own [ 
    id 
] 


to setup 
    set idlist [ 9 10 11 12 13 24 1 2 3 14 23 8 0 4 15 22 7 6 5 16 21 20 19 18 17 ] 
    set ordered_patches sort patches 
end 


to assign-ids 

    (foreach ordered_patches idlist [ 
    [ o_patch _id ] -> 
     ask o_patch [ 
     set id _id 
     ] 
    ] 
) 

    ask patches [ 
    set plabel id 
    ] 

end 
+0

詳細な回答はありがとうございます。私はnetlogoを初めて使っています。 [o_patch _id]の上のリストに再度書き込んでo_patchに依頼する必要があることを私が気にしないことを願っています。 _idの目的は何か。リストをここにもう一度入れる必要がありますか?私たちはこのシンボルによって何を意味するのでしょうか? Netlogoでコピーして同じことを試みましたが、多くのエラーが表示されます。ご案内ください。 – Sadaf

+1

こんにちはサダフ、私はNetlogo 6.0を使用していると指定する必要があります。 'foreach'プリミティブの構文は、バージョン5と6の間で若干異なります。これは、私が古いバージョンを使用している場合、エラーの原因となる可能性があります。または、私が上記のように同じ世界設定を使用しなかった場合に発生する可能性があります)。上記のコードで ' - 'が何をしているのかを理解するために、 'foreach'の[Netlogo辞書エントリ](http://ccl.northwestern.edu/netlogo/docs/dict/foreach.html)を読むことをお勧めしますまた、 "o_patch"と "_id"は 'foreach'の一時変数に過ぎないことを明確にするのに役立ちます。 –

+0

確認していただきありがとうございます。私は現在NetLogo 6を使用しています。私は同じプログラムを実行しますが、FOREACHのすべてのリスト引数は同じ長さでなければならないので、このエラーがポップアップしています。 オブザーバーがFOREACH を実行中にエラーが発生しました。プロシージャASSIGN-IDS によって呼び出されました。ボタン 'assign-ids'によって呼び出されました。 – Sadaf

2

は、あなたがNetLogoのデフォルトのパッチのソート順を活用して幸運のソリューションのバリアントを使用することができますsort-byで指定されたわずかに異なるソート順を使用できます。

あなたの要件はわかりませんが、私はパッチの特定のIDを持つという考え方に疑問を抱きます。 NetLogoのほとんどの機能は、エージェントのIDを参照することなく実行できます。 whoの番号自体は、非常に古いNetLogoのバージョンの遺物であり、現代のコードではほとんど使用されるべきではありません。

特定のパッチを参照する場合は、そのパッチの座標を参照してください(例:patch -2 4)。

将来の参照のためにパッチを保存する場合は、への参照をパッチに保存してください。何らかのIDではありません。例:ask turtles [ set my-patch one-of patches ]

+0

答えと質問ありがとう。これらはアパートメントの識別子です。 00は大学のパッチであり、残りは大学の近くにあるアパートです。どのラウンドでも、学生は一番近いアパートに移動し、充満していれば、大学から離れたアパートの外側のリングに移動します。これらの数字は、学生をランダムな特定の場所に移動させるのに役立ちます。これらの識別子は私が設定しているように機能しますか?また、私はP、nと範囲を理解していません。これらのユニークな識別子を得るためには何を書きますか?ありがとう – Sadaf

+0

私はNicolasに同意します。特に、学生が外側のリングの建物にランダムに移動している場合は、パッチに固有の識別情報を与えることなく、必要なことを行う方がよいでしょう。指定された建物の目に見えるIDラベルが必要な場合は、私の答えはうまくいくが、プロシージャでこれらのIDを使用するのは長期的には難しくなる。 –