2017-03-23 41 views
1

ゴール:目的地に到着するまで、タートルを目的地に選択しようとしています。その時点で、カメは元のパッチに戻り、別の目的地を選び、それに向かって歩いて行きます。NetLogo:目的地を設定してくれるようにカメに問い合わせ、

問題:タートルがそれに向かって歩いている間に、選択された目的地が変更されることがあります。私はカメにそれが届くまで元の目的地を保持するように指示する手段が必要です。

詳細:これは私の関連コードです。タートルズは領土を建設しています。彼らは歩くと主張する目的地を選択する領域の中心点( "スタートパッチ")を持っています。デスティネーションは、パッチのメリット(「便益」)を開始パッチからの距離(「コスト・トゥ・ミー」)で割った値が「最高値」のパッチに基づいています。私は、カメは歩いている間、絶えずコストを私に再評価していると思う。彼らはこれを行うべきではありません - 最高値は、スタートパッチに立っている間に評価されなければなりません。

これはどのようにして修正できますか?タートルはスタートパッチに立って最高値を評価し、目的地を設定し、到達するまで移動します。

patches-own 
[ 
    owner ;; once part of a territory, owner becomes the turtle. 
    benefit ;; i.e., food available in a patch; used to assess "highest-value" to the turtle. 
] 

turtles-own 
[ 
    start-patch ;; the territory center; turtle returns here after reaching destination. 
    destination ;; the patch turtle wants to claim for its territory. 
    territory ;; the patches the turtle owns. 
] 

to go 
    tick 
    ask turtles 
    [ 
    pick-patch 
    ] 
end 

to pick-patch 
    set destination highest-value ;; calculated in reporters, below. 
    ifelse destination != nobody [ 
     ask destination [set pcolor red] ;; reveals that destination changes occasionally before original destination is reached. 
     travel] 
    [give-up] ;; (will reposition start-patch to a new site if no destinations available.) 
end 

to travel 
    face destination forward 1 ;; **should** keep original destination, but it doesn't. 
    if patch-here = destination 
     [update-territory 
     move-to start-patch ] ;; return to the start-patch, and should only NOW assess new destination.    
end 

to update-territory 
    set owner self ;; and so on.... 
end 

;;;---Reporters for highest-value:--- 

to-report highest-value ;; this appears to be changing while turtle moves...how fix this? 
    let available-destinations edge-patches  
    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 1 ;; i.e., moving window to find high-benefit cluster 
end 

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

to-report edge-patches 
    report (patch-set [neighbors4] of territory) with [owner = nobody] 
end 

注:の代わりに、「前方1、」私は私がちょうど使用することができます実現し、私は最終的にはしかし、障害物に構築し、カメはに先に向けて歩く必要があります「移動-に。」障害物を確認してください)

更新:私はこの問題が「コスト・トゥ・ミー」記者の中で対処できると思いますか?私はこの変更を試みました:

to-report cost-to-me 
    report distance [start-patch] of myself 
end 

これは私が何を達成する必要がありますか?この費用が一定に保たれるように、「距離自分自身」の部分を取り除くでしょう。私が持っていたもう一つのアイデアは、 "pick-patch"や "travel"が "ifelse patch-here!= destination [forward 1 ...]"の行に沿って何か必要かもしれないということです。 。

私は、以下のお勧めの「while」ループアイデアを試しました(ありがとう!)、これは奇妙な動作の新しいホストを導入するようです。私はそのルートに行くなら、それをコード化する方法はわかりません。このような何かがうまくいかない(彼らは移動を停止):

to travel 
    while [distance destination > 1] 
    [face destination forward 1] 
    if patch-here = destination 
     [update-territory 
     move-to start-patch ]  
end 

を、私はこれに新たなんです。助けてくれてありがとう!

セカンドアップデート:私は変更を私は前回の更新(自分の報告距離[スタートパッチを])私の問題の固定部分(?その行と仮定すると理にかなっている)が、左1で行われたと思います問題。最高値のパッチの中に繋がりがある場合、その亀はまだ選択されたパッチの途中で途中まで切り替わります。だから、それはまだカメを設定し、到達するまで目的地を維持するという元の問題に戻ります。どのようにこれを修正するための任意のアイデア?

+0

それはあなたのカメは、まだすべての段階で最高値のパッチをチェックするように聞こえます。ですから、whileループのように目的地を設定する方法が必要です(@JenBのように)。これはwhileループが目的地に到達するまでwhileループを「終了」しません。しかし、もし 'if'を使いたいのであれば、@ JenBの答えのように手続きを中断してください。 –

答えて

関連する問題