2017-03-28 18 views
1

私はNetLogoにおける領土の選択をモデル化していて、一度確立自国の領土の境界線を計算するために私のカメをご希望の周囲を計算します。私はこれを行う方法についてのアイデアを考え出してきましたが、まだ良い手段を見つけていませんでした。何か案は?任意の提案を事前にNetLogo:パッチセット

enter image description here

patches-own 
[ owner ] ;; patches know who owns them 

turtles-own 
[ territory ;; agentset of patches I own 
    food ;; food acquired in my territory 
    threshold ] ;; food required, will build territory until meet this 

to go 
    tick 
    ask turtles [ build-territory ] 
end 

to build-territory 
    if food > threshold [ calculate-perimeter ] ;; stop building when enough food 
    pick-patch ;; keep picking patches until meet threshold. 
end 

to calculate-perimeter 
    ;; what could I use to add up the perimeter of the territory? 
end 

ありがとう!

答えて

1

あなたに私の最後の答えの変更:

to setup 
    ca 
    ask patches with [pxcor > 0 ] [ 
    set pcolor white 
    ] 
    crt 1 
end 

to go 
    ask turtles [ 
    let blacklist patches with [ pcolor = black ] 
    let northpatches patches with [ pycor > 0 ] 
    let northred (northpatches with [ member? self blacklist = false ]) 
    ask northred [ set pcolor red ] 
    let border northred with [ any? neighbors4 with [ pcolor != red ] ] 
    ask border [ 
     set pcolor blue 
    ] 
    print count border 
    ] 
end 

あなたはない領土ある隣人とあなたの地域のパッチのいずれかとの境界線/境界パッチを指定することができます。変更しなければならないので、私はあなたのセットアップなしでそれをテストすることはできません、再び

ask turtles [ 
    print count territory with [ any? neighbors4 with [owner != myself ] 
    ] 
    ] 

:あなたのためにそれはのようになります。

は国境上にあるパッチのエッジをカウントするには

の下に編集された、あなたは彼らが他のカメに属している彼らのneighbors4を数えるかもしれません。その後、それらをその亀の周長に加えることができます。たとえば:

to assess-perimeter ;;; must be called by a turtle 
    print ("Assessing perimeter") 
    let current-turtle who 
    let temp-per-len 0 
    let border-patches patches with [ owner = current-turtle and any? neighbors4 with [ owner != current-turtle ] ] 
    show (word "I have " count border-patches " border patches") 
    ask border-patches [ 
    ;; One way to get each border patch to check each of its neighbors 
    let nobodies 4 - count neighbors4 ;; if any patches are on the edge of the world, returns the number of those edges 
    let non-territory-edges count neighbors4 with [ owner != current-turtle ] 
    let border-edges nobodies + non-territory-edges 
    set temp-per-len temp-per-len + border-edges 
    ] 
    show (word "My perimeter length: " temp-per-len) 
    set perimeter-length temp-per-len 
end 

すべてのカメが自分の家全体の範囲を選択した後にそれが呼び出された場合、アイデアは、各カメはそのホーム範囲の境界を評価ということです。次に、それらの国境パッチのそれぞれが異なる所有者を持つneighbors4を数えます。ループ内の合計変数として "temp-per-len"を使用しました。これを使用して、 "perimeter-length"をturtles-ownに設定しました。セットアップと定義を含むフルモデルコードhere。注 - コードをダウンロードまたはコピーする必要があります。モデルはHTMLフォーマットでうまく動作するには大きすぎます。

また、私は実際にこれは私が迅速なバージョンを行なったし、私の指を交差させperfectly-働いていたことを確認するためにカウントされませんでしたが、私はアイデアが理にかなっていると思いますし、うまくいけば、あなたが開始されます。

+0

ありがとうございます。私は先週のあなたの投稿以来これを検討してきました。パッチの数をw/"neighbors4 [owner!= myself]とする"という考え方は、周りの数を近づけますが、正確ではありません。これらのパッチの1つに所有されている> 1隣接パッチがある場合、これは理にかなっても、1ペリメータユニットとしてカウントされます。たとえば、上の領域2のテキストボックスが指すパッチは、「所有者!=自分自身」のパッチを含むこれらの「隣人4」パッチの1つで、周辺距離に1単位の周囲長を追加しますが、実際には2単位を追加する必要があります。私はまだより正確な方法を決定しようとしています。 – User847462

+0

ああ、周辺の定義としてパッチではなくパッチのボーダーを数えようとしていますが、それは正しいのですか?解決策を提示するために私の答えを編集します。 –