Ich habe herum mit dem diffusen Schlüsselwort gespielt.Netlogo Diffusion Verwirrung
Betrachten Sie die folgende 3x3 Welt, wo es 3 chemische Gradienten in der oberen linken Ecke und keine Chemikalie an anderer Stelle gibt. Außerdem gibt es keinen Umriss an den Kanten.
[3 0 0 ]
[0 0 0 ]
[0 0 0 ]
Wenn ich eine Diffusionsrate von 0,5 haben, würde ich erwarten, dass 3 (gradient) * .5 (diffusion rate)/3 (#neighbors) = .5
des Gradienten würde seine drei Nachbarn gegeben werden. Ich würde auch erwarten, dass der ursprüngliche Patch 1,5 Einheiten übrig hat.
Wenn ich jedoch den diffusen Code ausführe, scheint 3 (gradient) * .5 (diffusion rate)/8 (#neighbors) = .1875
des Farbverlaufs auf die 3 Nachbarn eingestellt zu sein. Der ursprüngliche Patch hat dann 2,4375 verbleibende Einheiten, die nicht 0,5 des ursprünglichen Gradienten sind. Was ist denn hier los? Ist das ein Fehler oder ist mein Verständnis falsch?
Siehe unten:
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
Dies würde bedeuten, dass die Diffusionsrate eher eine versuchte Diffusion als die tatsächliche Diffusionsmenge ist. Leider muss ich meine eigene Diffusion implementieren, weil ich Rauch durch ein Gebäude modelliere (Rauch kann nicht durch Wände gehen). Ich habe gerade mein Modell mit der eingebauten Diffusion validiert. Außerdem: "Wenn ein Patch weniger als acht Nachbarn hat, erhält jeder Nachbar noch eine achte Aktie; der Patch behält alle übrig gebliebenen Anteile." ccl.northwestern.edu/netlogo/docs/dictionary.html#diffuse Das erscheint mir seltsam. Kennt jemand die Logik hinter dieser Designentscheidung? – mattsap
Ich mag einfache Diffusion hier falsch verstehen, aber vielleicht ist diffuse wie passive Diffusion aufgebaut, wo sich die "Partikel" zufällig bewegen und durch die "Wände" zu den (potentiell acht) umgebenden Flecken diffundieren - das würde die "versuchte Diffusion" erklären ", da Sie im Wesentlichen die Geschwindigkeit festgelegt haben, mit der Ihre Variable durch eine gegebene Wand diffundieren kann. Etwas wie [dieses] (https://imgur.com/a/Kzko5) aber mit acht Seiten? Offensichtlich spucke ich hier nur, aber jetzt bin ich neugierig. –
Wenn Sie an zwei Orten das gleiche Feuer haben - eins mit Wänden und eins ohne - was passiert eigentlich? NetLogo geht davon aus, dass es bleibt, wenn es nicht entkommen kann. Ich bin nicht sicher, dass dies eine schlechte Annahme ist, weil der Rauch (vermutlich) versucht, in alle Richtungen zu gehen. Das heißt, wenn es nach Norden blockiert ist, dreht es sich nicht um und geht nach Süden, es bleibt einfach gegen die Nordwand gedrückt. Natürlich kann Rauch aufgrund von Druckunterschieden besonders sein. – JenB