Saatgutsortenvielfalt
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
Zweck des Modells
Zweck des Modells ist die Evaluierung der Auswirkungen der Vorgehensweisen von Unternehmen aus der Saatgutvermehrungsbranche unter anderem nach Pallauf. Die Unternehmen in dieser Branche haben durch ihr ökonomisches Handeln einen enormen Einfluss auf die Saatgutsortenvielfalt und damit auf die Ernährungssicherheit der Menschheit. Die Unternehmen in dieser Branche befinden sich in einem System, dass nur langfristig stabil ist, wenn es eine genügende Saatgutsortenvielfalt und Anzahl an Unternehmen gibt, die diese produzieren und vermarkten. Mit Hilfe des Modells wird die Frage erläutert, wann dieses System auf Dauer und unter welchen Umständen stabil beziehungsweise instabil ist. Zum einen bietet das Modell und dessen Auswertung für forschende wichtige Erkenntnisse beim Verständnis und der Entschlüsselung des komplexen Systems der Saatgutvermehrungsbranche und dessen Auswirkungen auf die Saatgutsortenvielfalt. Zum anderen können durch die Ergebnisse gesellschaftlich relevante Entwicklungen eingeleitet und gegebenenfalls negative Effekte aufgehalten beziehungsweise abgemildert werden.
Wie das Modell funktioniert
In dem Modell stellen die Agenten die Unternehmen der Saatgutvermehrungsbranche dar. Der Raum wird von keinen weiteren expliziten Einheiten definiert. Dieser nimmt keinen direkten Einfluss auf die Agenten. Diese haben eine zufällige Anzahl an Saatgutsorten (mindestens eine und maximal zehn) im Sortiment, die einen zufälligen Marktwert zwischen eins (niedrig) und zehn (hoch) haben. Die Summe aus den beiden Werten beschreibt den Gesamtwert der Agenten, der über diesen angezeigt wird. Dieser bleibt von sich aus unverändert.
Wie funktioniert es
Wie funktionieren die drei Vorgehensweisen, wenn zwei Turtles aufeinander treffen?
Merge: Der Gesamtwert aus der Anzahl an Saatgutsorten und der Summe dessen spezifischen Marktwertes wird berechnet. Je nach dem auf welchem Wert der Slider merge_threshold eingestellt ist, findet der merge-Vorgang statt. Angenommen dieser hat den Wert 5, dann mergen die beiden Turtles, wenn die Diskrepanz ihres Gesamtwertes den Wert 5 oder kleiner hat. Anschließend wird ein Gewinner und ein Verlierer bestimmt. Das Turtle mit dem höheren Gesamtwert gewinnt, das mit dem kleineren verliert. Zusätzlich findet ein Austausch von Saatgutsorten statt. Das gewinnende Turtle gibt seine schlechteste Sorte, die mit dem niedrigsten Marktwert, an das verlierende und das verlierende seine beste Sorte an das gewinnende, sofern dieses nicht schon in seinem Besitzt ist, ab. Im Anschluss stibrt das verlierende Turtle.
Acquire: Die Logik ist die gleiche wie bei "merge" nur, dass der Vorgang stattfindet, wenn die Diskrepanz den Wert des Slider oder höher hat. Eine weitere Änderung ist, dass das gewinnende Turtle seine zwei schlechtesten Sorten abgibt, aber nur die beste Sorte des verlierenden aufnimmt.
Ally: Der Gesammtwert aus der Anzahl an Saatgutsorten und der Summe dessen spezifischen Marktwertes wird berechnet. Je nach dem auf welchem Wert der Slider allythreshold eingestellt ist, findet der ally-Vorgang statt. Angenommen dieser hat den Wert 5, dann alliieren sich zwei Turtles, wenn die Diskrepanz ihrer Gesamtwerte den Wert 5 oder kleiner hat. Die länge der Ticks in der die beiden Turtles verweilen wird durch den Slider allytime bestimmt. Für diese Zeit bewegen sich die beiden Turltes nicht und bekommen eine gelbe Farbe. In dieser Zeit können sie keine der anderen beiden Vorgehensweisen (merge und acquire) ausführen, noch von anderen Turtles von einer der beiden Vorgehensweisen betroffen sein. In der Zeit der Allianz können beide Turtles weder Saatgutsorten verlieren noch dazugewinnen.
Dinge zum Ausprobieren
Gibt es Einstellmöglichkeiten bei denen das System über eine bestimmte Dauer stabil ist?
CREDITS AND REFERENCES
Clapp, J. (2021): Concentration and Crisis: Exploring the Deep Roots of Vulnerability in the Global Industrial Food System. In: The Journal of Peasant Studies 50:1. 1-25.
Pallauf, M.S. (2018): Planning and Decision-making by Seed Trading Companies for Winter Wheat (Triticum aestivum) Multiplication: A Mixed-Methods Analysis for Bavaria. München.
Comments and Questions
extensions [table] globals [ all-varieties ;; Liste aller Saatgutsorten variety-values ;; Tabelle mit Marktwerten der Sorten extinct-ticks ;; speichert, wann eine Sorte ausgestorben ist last-company-count ;; Unternehmensanzahl des letzten Ticks company-drop-log ;; Liste der Unternehmensrückgänge mit Tick company-drop-data ;; Numerische Rückgänge für Plot merge-count ;; wie oft merge durchgeführt wurde acquire-count ;; wie oft acquire durchgeführt wurde ally-count ;; wie oft ally durchgeführt wurde merge-ticks ;; Liste der Ticks, in denen merge passiert ist acquire-ticks ;; Liste der Ticks, in denen acquire passiert ist ally-ticks ;; Liste der Ticks, in denen ally passiert ist ] turtles-own [ seed-varieties ;; Liste der Saatgutsorten jeder Turtle target-turtle ;; aktueller Turtle, dem die Turtle folgt allies ;; Liste der Allianzpartner (who-IDs) ally-until ;; Tick, bis zu dem die Allianz aktiv ist ] ;----------------------------------------------------- ; Setup ;----------------------------------------------------- to setup clear-all setup-patches setup-all-varieties setup-variety-values setup-turtles set extinct-ticks table:make set last-company-count count turtles set company-drop-log [] set company-drop-data [] set merge-count 0 set acquire-count 0 set ally-count 0 set merge-ticks [] set acquire-ticks [] set ally-ticks [] reset-ticks end ;----------------------------------------------------- ; Patches ;----------------------------------------------------- to setup-patches ask patches [ set pcolor green ] end ;----------------------------------------------------- ; Saatgutsorten ;----------------------------------------------------- to setup-all-varieties set all-varieties [ "X1" "X2" "X3" "X4" "X5" "X6" "X7" "X8" "X9" "X10" ] end ;----------------------------------------------------- ; Marktwerte zufällig festlegen ;----------------------------------------------------- to setup-variety-values set variety-values table:make foreach all-varieties [ variety -> table:put variety-values variety (random 10 + 1) ] clear-output output-print "Marktwerte der Sorten:" foreach all-varieties [ variety -> let value table:get variety-values variety output-print (word variety ": " value) ] end ;----------------------------------------------------- ; Turtles erstellen ;----------------------------------------------------- to setup-turtles create-turtles num-companies [ setxy random-xcor random-ycor set color blue let n random 10 + 1 set seed-varieties n-of n all-varieties set allies [] ;; Marktwertsumme statt Anzahl anzeigen set label total-variety-value self set target-turtle one-of other turtles ] end ;----------------------------------------------------- ; Go / Hauptschleife ;----------------------------------------------------- to go update-alliances if not any? turtles with [length seed-varieties >= min-varieties] [ stop ] if count turtles <= min-companies [ stop ] move-turtles interact-randomly ;; Label der Turtles aktualisieren ask turtles [ set label total-variety-value self ] ;; Plot Sortenbesitz set-current-plot "Variety ownership" foreach all-varieties [ variety -> set-current-plot-pen variety plot count turtles with [ member? variety seed-varieties ] ] ;; Plot Gini-Indizes set-current-plot "Gini Indices" set-current-plot-pen "market" plot gini-market-value set-current-plot-pen "variety" plot gini-variety-count set-current-plot-pen "ownership" plot gini-variety-ownership ;; Plot HHI-Indizes set-current-plot "HHI Indices" set-current-plot-pen "market" plot hhi-market-value set-current-plot-pen "variety" plot hhi-variety-count set-current-plot-pen "ownership" plot hhi-variety-ownership ;; Aussterben checken foreach all-varieties [ variety -> if not any? turtles with [ member? variety seed-varieties ] [ if not table:has-key? extinct-ticks variety [ table:put extinct-ticks variety ticks output-print (word variety " ist ausgestorben in Tick " ticks) ] ] ] ;; Turtle stirbt ask turtles [ if length seed-varieties = 0 [ die ] ] ;; Unternehmens-Rückgänge speichern let current-count count turtles if current-count < last-company-count [ let diff (current-count - last-company-count) set company-drop-log lput ticks company-drop-log set company-drop-data lput diff company-drop-data ] set last-company-count current-count tick end ;----------------------------------------------------- ; Bewegung ;----------------------------------------------------- to move-turtles ;; Bewege nur NICHT-alliierte Turtles ask turtles with [not allied?] [ set heading random 360 fd 1 set color blue ;; bewegen = blau ] end to interact-randomly ask turtles [ if allied? [ stop ] let partner one-of other turtles in-radius 1 if partner = nobody [ stop ] ;; Wertdifferenz let diff abs (total-variety-value self - total-variety-value partner) ;; mögliche Aktionen sammeln let actions [] if ally and diff <= ally_threshold and ticks > 0 [ set actions lput "ally" actions ] if merge and diff <= merge_threshold and ticks > 0 [ set actions lput "merge" actions ] if acquire and diff >= acquire_threshold and ticks > 0 [ set actions lput "acquire" actions ] ;; zufällig auswählen, nur wenn Liste nicht leer if length actions > 0 [ let choice one-of actions if choice = "ally" [ ally-with partner ] if choice = "merge" [ merge-with partner ] if choice = "acquire" [ acquire-with partner ] ] ] end ;----------------------------------------------------- ; Merge-Regel ;----------------------------------------------------- to merge-with [partner] set merge-count merge-count + 1 set merge-ticks lput ticks merge-ticks let my-value total-variety-value self let other-value total-variety-value partner let winner self let loser partner if other-value > my-value [ set winner partner set loser self ] ;; niedrigste Sorte Gewinner let w-vars [seed-varieties] of winner let w-values map [v -> table:get variety-values v] w-vars let w-min-value min w-values let w-min item (position w-min-value w-values) w-vars ;; höchste Sorte Verlierer let l-vars [seed-varieties] of loser let l-values map [v -> table:get variety-values v] l-vars let l-max-value max l-values let l-max item (position l-max-value l-values) l-vars ask winner [ set seed-varieties remove w-min seed-varieties if not member? l-max seed-varieties [ set seed-varieties lput l-max seed-varieties ] ] ask loser [ die ] end ;----------------------------------------------------- ; Acquire-Regel ;----------------------------------------------------- to acquire-with [partner] set acquire-count acquire-count + 1 set acquire-ticks lput ticks acquire-ticks let my-value total-variety-value self let other-value total-variety-value partner let winner self let loser partner if other-value > my-value [ set winner partner set loser self ] ;; Gewinner: zwei schlechteste Sorten let w-sorted sort-by [[a b] -> table:get variety-values a < table:get variety-values b] ([seed-varieties] of winner) let low1 item 0 w-sorted let low2 ifelse-value (length w-sorted > 1) [ item 1 w-sorted ] [ nobody ] ;; Verlierer: beste Sorte let l-sorted sort-by [[a b] -> table:get variety-values b < table:get variety-values a] ([seed-varieties] of loser) let top1 item 0 l-sorted ask winner [ set seed-varieties remove low1 seed-varieties if low2 != nobody [ set seed-varieties remove low2 seed-varieties ] if not member? top1 seed-varieties [ set seed-varieties lput top1 seed-varieties ] ] ask loser [ die ] end ;----------------------------------------------------- ; Ally-Regel ;----------------------------------------------------- to ally-with [partner] set ally-count ally-count + 1 set ally-ticks lput ticks ally-ticks set allies (list [who] of partner) set ally-until ticks + ally_time ask partner [ set allies (list [who] of myself) set ally-until ticks + ally_time ] set color yellow ask partner [ set color yellow ] end to update-alliances ask turtles [ if allied? and ticks >= ally-until [ ;; Allianz auflösen let old-allies allies set allies [] set ally-until -1 set color blue ;; eigene Farbe zurücksetzen ;; Partner ebenfalls auflösen ask turtles with [member? [who] of myself old-allies] [ set allies [] set ally-until -1 set color blue ] ] ;; Allianz aktiv: Turtles, die stillstehen, gelb färben if allied? [ set color yellow ] ] end ;----------------------------------------------------- ; Sorten jeder Turtle anzeigen ;----------------------------------------------------- to show-seeds ask turtles [ show (word "Turtle " who " hat Sorten: " seed-varieties) ] end ;----------------------------------------------------- ; Marktwerte anzeigen ;----------------------------------------------------- to show-variety-values clear-output output-print "Marktwerte der Sorten:" foreach all-varieties [ variety -> let value table:get variety-values variety output-print (word variety ": " value) ] end to-report allied? report ally-until > ticks end ;-------------------------------------------------------------------------------- ; REPORTER FÜR BEHAVIORSPACE ;-------------------------------------------------------------------------------- ;----------------------------------------------------- ; Reporter: Lebensdauer EINER Sorte ;----------------------------------------------------- to-report variety-binary-status [v] if table:has-key? extinct-ticks v [ report 0 ] report 1 end to-report lifespan-X1 report (variety-binary-status "X1") end to-report lifespan-X2 report (variety-binary-status "X2") end to-report lifespan-X3 report (variety-binary-status "X3") end to-report lifespan-X4 report (variety-binary-status "X4") end to-report lifespan-X5 report (variety-binary-status "X5") end to-report lifespan-X6 report (variety-binary-status "X6") end to-report lifespan-X7 report (variety-binary-status "X7") end to-report lifespan-X8 report (variety-binary-status "X8") end to-report lifespan-X9 report (variety-binary-status "X9") end to-report lifespan-X10 report (variety-binary-status "X10") end ;----------------------------------------------------- ; Reporter: Darstellung aller Marktwerte ;----------------------------------------------------- to-report marketvalues-all let txt "" foreach all-varieties [ v -> set txt (word txt v ":" table:get variety-values v " ") ] report txt end ;----------------------------------------------------- ; Reporter: Bei welchem tick welche Vorgehensweise ;----------------------------------------------------- to-report get-merge-ticks report merge-ticks end to-report get-acquire-ticks report acquire-ticks end to-report get-ally-ticks report ally-ticks end ;----------------------------------------------------- ; Reporter: Vorgehensweisen zählen ;----------------------------------------------------- ;; Anzahl der Merges to-report get-merge-count report merge-count end ;; Anzahl der Acquires to-report get-acquire-count report acquire-count end ;; Anzahl der Allianzen to-report get-ally-count report ally-count end ;----------------------------------------------------- ; Reporter: Formatierter Text für Marktwerte ;----------------------------------------------------- to-report formatted-variety-values ;; Gibt die Marktwerte aller Sorten als Textblock aus (für Monitor oder Output) let txt "" foreach all-varieties [ v -> set txt (word txt v ": " table:get variety-values v "\n") ] report txt end ;----------------------------------------------------- ; Reporter: Gesamtwert aller Sorten einer Turtle ;----------------------------------------------------- to-report total-variety-value [t] report sum map [v -> table:get variety-values v] ([seed-varieties] of t) end ;----------------------------------------------------- ; Reporter: Anzahl Firmen pro Sorte ;----------------------------------------------------- to-report variety-ownership-summary let output "" foreach all-varieties [ v -> set output (word output v ": " count turtles with [member? v seed-varieties] " | ") ] report substring output 0 (length output - 3) end ;----------------------------------------------------- ; Reporter: Wie viele Firmen haben Sorte X? ;----------------------------------------------------- to-report count-companies-with [variety-name] report count turtles with [member? variety-name seed-varieties] end ;----------------------------------------------------- ; Reporter: Unternehmensrückgänge ;----------------------------------------------------- to-report get-company-drop-log report company-drop-log end ;----------------------------------------------------- ; Reporter: Anzahl überlebender Unternehmen ;----------------------------------------------------- to-report surviving-companies report count turtles end ;----------------------------------------------------- ; Reporter: Anzahl aktuell existierender Sorten ;----------------------------------------------------- to-report number-of-all-varieties report length filter [ v -> any? turtles with [member? v seed-varieties] ] all-varieties end ;----------------------------------------------------- ; Reporter: Marktwerte aller Sorten ;----------------------------------------------------- to-report variety-values-list let output [] foreach all-varieties [ v -> set output lput (list v table:get variety-values v) output ] report output end ;----------------------------------------------------- ; Reporter: Gini-Index ;----------------------------------------------------- to-report gini [values] ;; Leere oder triviale Fälle abfangen if length values = 0 [ report 0 ] if sum values = 0 [ report 0 ] let sorted sort values let n length sorted let total sum sorted let cum-weighted-sum 0 let i 1 foreach sorted [ v -> set cum-weighted-sum cum-weighted-sum + (i * v) set i i + 1 ] ;; Standard-Gini-Formel report ( (2 * cum-weighted-sum) / (n * total) ) - ( (n + 1) / n ) end to-report gini-market-value report precision (gini [ total-variety-value self ] of turtles) 2 end to-report gini-variety-count report precision (gini [ length seed-varieties ] of turtles) 2 end to-report gini-variety-ownership let counts [] foreach all-varieties [ v -> set counts lput (count turtles with [member? v seed-varieties]) counts ] report precision (gini counts) 2 end ;----------------------------------------------------- ; Herfindahl-Hirschman-Index (HHI) ;----------------------------------------------------- to-report hhi [values] ;; Leere Liste oder Summe=0 abfangen if length values = 0 [ report 0 ] let total sum values if total = 0 [ report 0 ] ;; relative Marktanteile berechnen let shares map [v -> v / total] values ;; HHI = Summe der Quadrate der Anteile report sum map [v -> v * v] shares end ;----------------------------------------------------- ; HHI der Firmen nach Marktwert ;----------------------------------------------------- to-report hhi-market-value report precision (hhi [ total-variety-value self ] of turtles) 2 end ;----------------------------------------------------- ; HHI nach Anzahl Sorten pro Firma (Verteilung der Vielfalt) ;----------------------------------------------------- to-report hhi-variety-count report hhi [ length seed-varieties ] of turtles end ;----------------------------------------------------- ; HHI der Sortenverbreitung im Markt (Marktdominanz von Sorten) ;----------------------------------------------------- to-report hhi-variety-ownership let counts [] foreach all-varieties [ v -> set counts lput (count turtles with [member? v seed-varieties]) counts ] report hhi counts end
There is only one version of this model, created 4 days ago by Niklas Krause.
Attached files
| File | Type | Description | Last updated | |
|---|---|---|---|---|
| Saatgutsortenvielfalt.png | preview | Preview for 'Saatgutsortenvielfalt' | 4 days ago, by Niklas Krause | Download |
This model does not have any ancestors.
This model does not have any descendants.
Download this model