2017-06-09 5 views
2

私はdiffuseキーワードで遊んでいます。Netlogo Diffusion Confusion

左下に3つの化学勾配があり、他の場所には化学薬品がない場合、次の3x3の世界を考えてみましょう。また、端に折り返しがありません。私は0.5の拡散速度を持っている場合は

[3 0 0 ] 
[0 0 0 ] 
[0 0 0 ] 

は、私は、勾配の3 (gradient) * .5 (diffusion rate)/3 (#neighbors) = .5は、その3人の隣人に与えられるであろうことを期待します。元のパッチには1.5ユニットが残っていると思います。

ただし、拡散コードを実行すると、グラデーションの3 (gradient) * .5 (diffusion rate)/8 (#neighbors) = .1875が3近傍に設定されているようです。元のパッチは2.4375の残りの単位を持ち、元の勾配の0.5ではありません。何が起きてる?これはエラーですか、私の理解は間違っていますか?

以下を参照してください:あなたのコードに対する一つの迅速な編集を使用すると、3の値を持つように左上のパッチをしたい場合、あなたはパッチ0 2を依頼する必要がある

patches-own [value] 
to setup 
    cp 
    ask patch 0 2 [ set value 3] 
    diffuse value .5 
    ask patch 1 1 [ show value] 
end 

observer: show [value] of patches 
observer: [0.1875 0.1875 0 2.4375 0 0 0 0.1875 0] 
observer> ask patch 0 2 [ show count neighbors] 
(patch 0 2): 3 

答えて

1

現在、下を求めています右のパッチ。

拡散したときに、1.5の値が8個のパッチに分散され、隣接する各パッチが0.1875になるという問題が原因です。あなたのスタートパッチはコーナーにあるので、3つのパッチにしか広がらず、0.5625(3 * .1825)しか与えない。

これにより、元のパッチは2.4375になります。

世界にラップアラウンドを許可すると、期待した結果が得られることに注意してください。

+0

これは、拡散率が、実際の拡散量ではなく、より多くの拡散を意味することを意味する。残念ながら、建物を通って煙をモデリングしているので、私は自分自身の拡散を実装する必要があります(煙は壁を通過できません)。私はちょうど内蔵の拡散で私のモデルを検証していた。また、「パッチに8人以下の人がいる場合、各隣人にはまだ8人のシェアが割り当てられ、パッチには残りのシェアが保持されます」 ccl.northwestern.edu/netlogo/docs/dictionary.html#diffuseこれはちょうど私にとって奇妙なようです。誰もがこの意思決定の背後にある論理を知っていますか? – mattsap

+0

ここでは簡単な拡散を誤解しているかもしれませんが、「粒子」が無作為に動き、「壁」を通って周囲のパッチ(潜在的に8つ)に拡散するパッシブ拡散のように拡散が設定されているかもしれません。あなたの変数が与えられた壁を通って拡散する割合を本質的に設定したからです。 [this](https://imgur.com/a/Kzko5)のようなものですが、8辺がありますか?明らかに、私はここにたわごとですが、今私は興味があります。 –

+2

同じ火災が2つの場所にある場合 - 壁のあるものとないもの - 実際には何が起こるのですか? NetLogoは、エスケープできない場合はそのままとします。私は煙(おそらく)すべての方向に行くしようとするため、これは悪い仮定ではないと確信していません。つまり、それが北にブロックされている場合、それは回って南に行くことはありませんが、それはちょうど北の壁に押し付けられたままです。もちろん、差圧のために煙が特別な場合もあります。 – JenB