Netlogoで空間パターンをシミュレートしようとしています。私は、ノー・オブ・ロウとユーザーが設定したノー・オブ・コラムに応じて、風景を等分に分割するコードを書いています。たとえば、この場合は3 X 3風景は9「キャンプ」からなる:Netlogoの番号パッチにループする
3 X 3 landscape; each smaller square is a camp
私がするために、この例では0から8まで番号付け、各陣営に異なるplabelを設定しようとしていますこれがどのキャンプかを特定する。私はこれを設定するためにループを使用しようとしましたが、予期しない問題が発生しています。
to set-camp-number
let startcol max-pxcor/no-of-cols
let startrow max-pycor/no-of-rows
let t 1
set camp-number 0
while [ t <= no-of-cols ] [
set a startcol * t
ask patches with [ pxcor <= a and pxcor >= a - startcol ] [
let k 1
loop [
if k > no-of-rows [ stop ]
set b startrow * k
ask patches with [ pxcor <= a and pxcor >= a - startcol and pycor <= b and pycor >= b - startrow ] [
set plabel camp-number ]
set camp-number camp-number + 1
set k k + 1 ]]
set t t + 1 ]
end
代わりに(これは、このシナリオでは、0から8に身を標識し、各陣営のパッチである)私が欲しいものを得るための、キャンプ-数はplabelのそれに非常に大きな値を結果として、それ自体でループ内で実行するように思えます。
私は他の方法を試してみましたが、これは理解する最も簡単なことのようですが、私はループが時々Netlogoに困難なことがわかっています。私は、ループはパッチをラベル付けするための厄介な方法のように思えるので、foreachコマンドを実装しようとしましたが、別の方法が必要ですか?私は本当にあなたの助けに感謝します。ありがとうございました!
なぜ、let _x pxcor-min-pxcorとは言わないのですか? yと同じです。私は自分自身への参照を渡す必要はないと思う。 – mattsap
これははるかに効率的なコードです!私は最終行の背後にあるロジックに少しずつ取り組んだが、これは今よりずっと意味をなさない!ありがとうアラン! – lyh198
@mattsapはい、ここでそれを行うことができます。 NetLogoでも副作用のない手続きを書いています。 – Alan