2017-12-05 8 views
0

私はNetlogoを使用しています。私はカメが前のパッチに移動できないというシナリオを設定したいと思います。個々のカメはt-1とt-2で占有していた)。Netlogo:ネイバー値を設定するための構文の問題

以下のように設定しました。このアイデアは、現在のカメがすでに訪れた隣人にパッチの魅力をゼロにするように設定することで、選択することはできません。私は正しい構文で苦労していると思う。そのままで問題の行は、「設定previously_visited_pa​​tches」

patches-own [patch_attractiveness] 

turtles-own [previous2_patches] 

to setup 
    create-turtles 100 [ 
    set previous2_patches (list patch-here) 
    ] 
end 

to go 
    tick 

    ask turtles [ 
    let previous_patchset patch-set previous2_patches 
    let previously_visited_neighbors neighbors with [member? self previous_patchset] 
    ask previously_visited_neighbours [ 
     set patch_attractiveness 0 
    ] 
    face max-one-of neighbors [patch_attractiveness] 
    fd 1 
    ] 

    set previous2_patches lput patch-here previous2_patches 
    if (ticks > 1) [ 
    set previous2_patches remove-item 0 previous2_patches 
    ] 

end 

でコードを開始し1であるだけでなく、T-2パッチではなく、T-1パッチを選択しているようです。誰もが明るいアイデアを持っていますか?私は、これが何をしたいんだと思い、「自己」はオーケー

感謝

+1

私はあなたのロジックを理解しているかどうかはわかりません。魅力を0に設定した場合、そのパッチは最近訪問したものだけでなく、すべてのカメにとって魅力的ではありません。私はあなたがこれをとにかく必要とは思わない、あなたはちょうど最後の2つのパッチを追跡し、それらを選択肢エージェントセットから除外するために(あなたがやっているように)リストを使うことができる。あなたはカメ3ダニ後に再訪できるようにしますか? – JenB

+0

良い点。上記のコードにエラーがあります。私のオリジナルは実際にはカメの魅力があり、隣人に尋ねる各カメのためのラインがあります[パッチの魅力を魅力に設定]。これにより、すべてのパッチの値を変更できなくなります。私は本当にカメが3ダニの後に再訪できるように思っています。しかし、私はまだ正しい構文を見つけることができません。 – user8866982

答えて

1

を行う権利の呼び出しではないかもしれないと仮定しています。

patches-own [patch-attractiveness] 

turtles-own [previous2-patches] 

to setup 
    clear-all 
    create-turtles 100 
    [ setxy random-xcor random-ycor 
    set previous2-patches (list patch-here patch-here) 
    ] 
    ask patches [ set patch-attractiveness random 50 ] 
    reset-ticks 
end 

to go 
    ask turtles 
    [ let candidates viable-neighbours neighbors previous2-patches 
    if any? candidates 
    [ face max-one-of candidates [patch-attractiveness] 
     forward 1 
     set previous2-patches (list patch-here item 0 previous2-patches) 
    ] 
    ] 
end 

to-report viable-neighbours [ set-of-patches delete-list ] 
    let viable set-of-patches 
    foreach delete-list 
    [ x -> if member? x viable [ ask x [ set viable other viable ] ] ] 
    report viable 
end 

最初に、変数名をアンダースコアの代わりにハイフンに変更しました。申し訳ありませんが、ハイフンは従来のNetLogoのようなものです。エラーが出るまではアンダースコアを使用していました。

私は単純化しました。私はコメントのために0に魅力を設定することについてあなたのものを廃止しました。除外されたパッチの開始リストが現在のパッチの2つのコピー(つまり、if ticks > 1テストを必要としないことを意味する)になるように設定を簡素化しました。また、現在のパッチと既存のリストの関連アイテムから新しいリストを作成しました。あなたのlputとremoveはより正確ですが、リストは2つしかないので、これは読みやすくなります。除外するパッチのメモリを増やしたい場合は、必ずlput/remove構造を保持する必要があります。

しかし、重要なビットは新しい手順です。エージェントセット(あなたのケースではneighbors)と除外するエージェントのリスト(あなたのケースでは、タートル変数previous2-patches)を渡し、除外なしでエージェントセットを返します。これはリストを実行することで行います。エージェントセットで、otherプリミティブで削除します。