2017-03-20 12 views
0

NetLogoのハングアップを試みていて、何か助けが必要です。私はカメをもっているパッチを選んで、それが最も価値のあるものに基づいています。値は、パッチを選ぶコストのメリットとコストによって決まるので、私は少しの計算をするためにカメが必要です。基本的には、タートルには次のものが必要です:NetLogo:カメにパッチセットの計算を依頼する

  1. 利用可能なパッチ(未所有のパッチ)のパッチセットを特定します。
  2. 利用可能な各パッチの便益を決定します。各パッチには0-1のメリットがあります。メリット・ツー・ミーを判断するには、利用可能なパッチの平均メリットと、半径方向2のそのパッチの隣接パッチを計算する必要があります(ムービングウィンドウ方式の高ベネフィットパッチのクラスタを識別するため)。
  3. 利用可能な各パッチの費用対価を決定します。今のところ、これはカメからのパッチの距離です。 (このモデルの将来のバージョンでは、コスト・トゥ・ミーには今後の考慮事項が含まれます)
  4. メリット・トゥ・マイ・マイ・コスト/

これは(またはので、私はこの--isが、私はそれが何を考えてやってと思う?)作品:

patches-own [ 
    benefit 
    owner ] 

to go 
    ask turtles [pick-patch] 
end 

to pick-patch 
    move-to highest-value 
end 

to-report highest-value 
    let available-destinations patches with [owner = 0] ;; I think this accomplishes step 1. 
    report max-one-of available-destinations [(mean [benefit] of patches in-radius 2)/(distance myself + 1)] ;; and I believe(?) this accomplishes step 2-4. (Note, "distance myself + 1" seems required since can't divide by 0.)   
end 

しかし、私は利益とコストを分離したいのですが部分:

to-report highest-value 
    let available-destinations patches with [owner = 0] 
    let benefit-to-me ...?? ;; code to assess "(mean [benefit] of patches in-radius 2)" for the patch-set of available-destinations? 
    let cost-to-me ...?? ;; and code to assess "(distance myself + 1)" of available destinations? 
    report max-one-of available-destinations (benefit-to-me/cost-to-me) ...?? ;; code to perform calculations based on benefit-to-me and cost-to-me?   
end 

私は望ましい効果を達成するために、このコードを完了するにはどうすればよいです?そして私はこのタイプのコーディングに近づくには複数の方法があると思います。カメは「最高値」の何千回も繰り返すことを考えれば、どのオプションが最も速く走るのだろうか?前もって感謝します!

コードに改正をしようとしました

:(。以下、ルークの答えからフォローアップ)

patches-own [ 
    benefit 
    owner ] 

to setup 
    ask patches [ set owner nobody ] 
end 

to go 
    ask turtles [pick-patch] 
    tick 
end 

to pick-patch      ;;<-----noticing turtle will change _destination midway to traveling there...why? 
    let _destination highest-value 
    ifelse _destination != nobody [ 
    ask _destination [set pcolor red] ;; added this as a check, and yes, red patch switches around before the turtle gets there sometimes. 
    face _destination forward 1 
     if patch-here = _destination 
     [ claim-patch _destination ] 
    ] 
    [stop] ;; if there is no _destination 
end 

to claim-patch [_patch] 
    ask _patch [set owner myself] 
    ;; and etc., turtle does several more things to claim patch, e.g., turn patch color of turtle 
end 

;;;; --reporters for calculations:-- 

to-report highest-value 
    let available-destinations patches with [owner = nobody] 
    report max-one-of available-destinations [benefit-to-me/cost-to-me]   
end 

to-report benefit-to-me 
    report mean [benefit] of patches in-radius 2 
end 

to-report cost-to-me 
    report distance myself 
end 

答えて

1

あなたの「最高値」でdistance myselfの使用のようなレポーターはproblematic-かもしれないようです参照されている2つのエージェント間の距離が実際に0でないかぎり、ゼロ除算のエラーは発生しないはずです。利用可能なパッチには、現在カメがいるパッチが含まれているようです。カメのwhoを使用して所有権を指定している場合、「owner = 0」のすべてのパッチを「所有」する人はほぼ常にturtle 0です。これを避けるには、パッチを "owner"変数を-1に設定するか、または初期設定では誰も設定しないでください。

パッチの利点は、カメ自体に基づいていない場合、レポーターのdistance部分を切断することによって、レポーターをそのパッチの「ムービングウィンドウ値」にすることで少し簡略化できます。そうすることで、カメはその移動ウィンドウ値を距離で除算した値だけパッチを照会できます。クイック例:限りコストを分離するように、あなたは可能性が便益

patches-own [ 
    benefit 
    owner ] 


to setup 
    ca 
    reset-ticks 

    ask patches [ 
    set owner nobody 
    set benefit random-float 1 
    set pcolor benefit + 54 
    ] 

    crt 5 [ setxy (random 30 - 15)(random 30 - 15) 
    ask patch-here [ 
     set owner [who] of myself 
     set pcolor [color] of myself 
    ] 
    ] 

end 


to go 
    ask turtles [ 
     pick-patch 
    ] 
    tick 
end 


to-report moving-window-value 
    report mean [benefit] of patches in-radius 2 
end 


to pick-patch 

    let available-destinations patches with [ owner = nobody ] 
    let best-patch max-one-of available-destinations [ moving-window-value/(distance myself) ] 
    if best-patch != nobody [ 
    move-to best-patch 
    ask patch-here [ 
     set owner [who] of myself 
     set pcolor [color] of myself 
    ] 
    ] 
end 

が、コストはただの距離であれば、あなたはそれがすでに原始的だとして、それを計算する必要はありません。標高、地形タイプなどの他の勾配を使用している場合を除き、距離コストを保存せずに離れてしまう可能性があります。

+0

ありがとうございました。 Re。 "自分自身の距離+ 1"、私は+1の部分が必要ないと思う。ありがとう!そして、 "owner = 0"の良いコール、私はそれも修正しました。だから、これは私に利益をもたらすと費用対効果を打ち砕く主要な部分に私をもたらします。コストには最終的に距離以外のものも含まれます(これを表示するために私の質問を編集しました)。あなたの答えに基づいて、私は私の質問の最後に新しいコードを試みました。これは私の目標を達成するように見えますか? (そしてこれに他の問題はありますか?)もう一度ありがとう! – User847462

+0

私が設定したフレームワークに上記で追加したコードを適用すると、私の言うことができる限り、私のコードのために機能します!あなたはたぶん世界のすべてのパッチを真剣にチェックしていることを確認する必要があります。手動ですべてのカメから離れたパッチに手作業で非常に高い利益を与え、次のカメの動きがそのパッチにぴったり合っていることを確認してください。もう1つの問題は、連続していない家の範囲を生成することですが、それは実際にこの質問の範囲ではありません。 –

関連する問題