Korrektes Insect Emerging (> 0 -> Wahrscheinlichkeit) sowie Vereinfachung Code Insect Emergence
Ich habe folgende Switches eingebaut:
spawn-on-all-river-patches?
- Wenn dieser aktiviert wird, werden auf allen river patches Insekten gespawnt, sonst - default Einstellung - nur auf den river patches mit landwirtschaftlicher Nutzung (Land Use Category = 2)
spawn-caddisflies?/mayflies?/midges?
- um anzuwählen, welche Insekten (nur einzelne oder alle gespawnt werden sollen (einzeln betrachtet ist meiner Meinung nach besser anschaulich)
Das ganze hab ich mit if... eingebaut
Frage 1: Lässt sich der Code noch vereinfachen? Ich habe schon mit set target-patches die Sache mit spawn-on-all-river-patches? reduzieren können. Ich würde gerne mit meinen drei breeds weiterarbeiten.
Frage 2: Wir hatten am Dienstag das Problem erkannt, dass, wenn die Cohort-Size < 0 ist, gar keine Insekten-Kohorten gespawnt werden. Der Vorschlag war, dass ganze dann mit Wahrscheinlichkeiten umzusetzen, also wenn z.B. 0.2 -> 1 in 5 wird eine Kohorte gespawnt. Ich habe das nun mit dem reporter to-report cohorts-to-sprout umgesetzt. Ich würde auch sagen, dass ganze funktioniert im ersten Augenschein, bin mir aber nicht 100% sicher ob das so der schlauste weg ist. Außerdem hab ich das Gefühl, dass das immer auf einen Rutsch ausgeführt wird, statt das jeden Tag im Monat dann was kommt. Meine global variable, die ich für den Plot benutze (z.B. daily-caddisfly-emerged) habe ich unter target-patches bei dem jeweiligen sprout primitive der Insekten eingefügt, z.B. set daily-caddisfly-emerged (n-caddisfly-to-sprout * count(target-patches) * cohort-size-cad_may) - ist es richtig, dass jetzt die tatsächlichen Kohorten hierbei einfließen (auch mit der Wahrscheinlichkeit) und auch die jeweils richtige Patch Anzahl für target-patches basierend ob auf allen river patches oder nur auf den landwirtschaftlich beeinflussten river patches gespawnt wird?
Der Plot sieht jetzt nämlich so aus:
- Warum fluktuiert es immer gleich hoch und runter?
Wenn ich statt den durch den Wahrscheinlichkeitsreporter veränderten Spawnraten nur die Kohorten (z.B. n-cohorts-caddisfly) plotte, sieht es so aus:
- was schon eher an das Muster rankommt, was durch set daily-emergence-caddisfly [0 0.01 0.03 0.76 1.66 2.1 2.44 1.51 0.63 0.24 0.11 0] gegeben ist...
Oder (und das könnt es eher sein?) ist die Spawning Logik mit dem reporter schon richtig, aber für den Plot sollte ich eher n-cohorts-caddisfly verwenden, da die Wahrscheinlichkeiten für jeden Patch berechnet werden, wodurch diese komischen Muster entstehen.
Frage 4: Es wird jetzt an jedem Tag im Monat die gleiche Menge gespawnt. Sollte ich hier wenigstens etwas random Varianz reinbringen?
Note: Cohort-Size für Caddisflies und Mayflies bei 10; für Midges bei 100 (sonst läuft Model bei denen langsamer)
;>>>> INSECT EMERGENCE <<<<
to set-insect-emergence
;Values based on Raitif et al. (2018), conversion calculations (from dry mass mg/m² per day into individual insects/m² per day) performed with parameters from Sabo et al. (2002)
;Unit: number of individuals per m² per day, data for each month of the year
set daily-emergence-mayfly [0 0 0.11 1.63 3.36 4.45 1.03 0.65 0.33 0.05 0 0]
set daily-emergence-caddisfly [0 0.01 0.03 0.76 1.66 2.1 2.44 1.51 0.63 0.24 0.11 0]
set daily-emergence-midge [0.15 2.06 4.27 6.19 8.25 9.58 8.55 7.22 6.19 4.57 2.65 0.25]
end
;>>>WICHTIG<<<
;beim Spawnen muss gesetzt werden:
;set has-dispersed? false ;WHEN ASSUMED THEY ONLY FLY TO A PATCH ONCE! DELETE IF MAXIMUM-AGE IS PURSUED
;set cohort-size X ;das muss gesetzt werden -> genaue Zahl fehlt noch, Test mit Value 1000
;set pesticide-load X;das muss gesetzt werden -> Mechanismus über river-patches fehlt noch, Test mit Value 10
to advance-time ;used for insect emergence
let total-days ticks ;1 tick = 1 day
let day-counter total-days
let m 0
while [day-counter >= item m month-days] [
set day-counter day-counter - item m month-days
set m m + 1
]
set month m ;month 0–11
set day-in-month day-counter + 1 ;day number within the current month
end
;versuchen, in einem code hinzubekommen: alle breeds als turtles ansprechen oder statt drei breeds eine breed; ask turtles oder ask agentset [caddisflies mayflies midges]
to-report cohorts-to-sprout [fractional-cohorts] ;reports correct insect value to sprout
let n-int floor fractional-cohorts
let n-frac fractional-cohorts - n-int
if random-float 1 < n-frac [
set n-int n-int + 1
]
report n-int
end
to emerge-insects
advance-time
let spawn-area 10 ; m² in each 100 m² patch, 10 m² are considered for spawning
let cohort-size-cad_may 10 ; each turtle represents 10 insects
let cohort-size-midges 100
;Caddisflies
let base-caddisfly-emergence item month daily-emergence-caddisfly
let n-caddisfly (spawn-area * base-caddisfly-emergence)
let n-cohorts-caddisfly (n-caddisfly / cohort-size-cad_may)
let n-caddisfly-to-sprout cohorts-to-sprout n-cohorts-caddisfly
;Mayflies
let base-mayfly-emergence item month daily-emergence-mayfly
let n-mayflies (spawn-area * base-mayfly-emergence)
let n-cohorts-mayflies (n-mayflies / cohort-size-cad_may)
let n-mayfly-to-sprout cohorts-to-sprout n-cohorts-mayflies
;Midges
let base-midge-emergence item month daily-emergence-midge
let n-midges (spawn-area * base-midge-emergence)
let n-cohorts-midges (n-midges / cohort-size-midges)
let n-midges-to-sprout cohorts-to-sprout n-cohorts-midges
let target-patches nobody
ifelse spawn-on-all-river-patches? [
set target-patches patches with [is-river?]
] [
set target-patches patches with [is-river? and land-use-category = 2]
]
ask target-patches [
if spawn-caddisflies? and n-caddisfly-to-sprout > 0 [
sprout-caddisflies n-caddisfly-to-sprout [
set shape "caddisfly_adult"
set size 10
set just-spawned? true
set has-dispersed? false
set cohort-size cohort-size-cad_may
set daily-caddisfly-emerged (n-caddisfly-to-sprout * count(target-patches) * cohort-size-cad_may)
]
if spawn-mayflies? and n-mayfly-to-sprout > 0 [
sprout-mayflies n-mayfly-to-sprout [
set shape "mayfly_adult"
set size 10
set just-spawned? true
set has-dispersed? false
set cohort-size cohort-size-cad_may
set daily-mayflies-emerged (n-mayfly-to-sprout * count(target-patches) * cohort-size-cad_may)
]
]
if spawn-midges? and n-midges-to-sprout > 0 [
sprout-midges n-midges-to-sprout [
set shape "midge_adult"
set size 10
set just-spawned? true
set has-dispersed? false
set cohort-size cohort-size-midges
set daily-midges-emerged (n-midges-to-sprout * count(target-patches) * cohort-size-midges)
]
]
]
end