PS Angewandte Systemwissenschaften 1
Einheit 8: Szenarien, Analyse & Zwischenstand
Nachtrag aus Einheit 7, dann Projektarbeit und kurzer Status pro Gruppe
David Maier
Institut für Umweltsystemwissenschaften
Universität Graz
Heute
Szenarien nachholen
Vom animierten Modell zu reproduzierbaren Simulationsexperimenten.
Auf Projekte übertragen
Welche Parameter, Messgrößen und Vergleichsfälle passen zu euren Modellen?
Zwischenstand
Kurzer Status, nächste Arbeitsschritte, betreute Projektzeit.
Ziel der Einheit: Jede Gruppe hat mindestens eine konkrete Szenarioidee,
eine Messgröße und den nächsten Commit vor Augen.
Stand nach Einheit 7
Geschafft
- Repositories und GitHub-Zugänge geprüft
- Git-Workflow besprochen
- Projektarbeit in den Gruppen gestartet
Heute nachholen
- Was ist ein Szenario?
- Warum brauchen wir Replikate?
- Wie lesen wir Modelloutputs systematisch?
Ein ABM wird erst dann wissenschaftlich brauchbar, wenn wir nicht nur
eine Animation sehen, sondern kontrollierte Läufe vergleichen.
Nachtrag
Szenarien & Sensitivität
Warum wir Modelle nicht nur anschauen, sondern systematisch
experimentieren lassen.
Animation ist noch keine Analyse
Animation
Wir sehen, ob das Modell grundsätzlich funktioniert und welche
Muster entstehen.
Experiment
Wir speichern Daten, wiederholen Läufe und vergleichen
Bedingungen kontrolliert.
Railsback & Grimm: Ein lauffähiges ABM ist ein virtuelles Labor.
Wir verstehen es durch kontrollierte Simulationsexperimente.
Szenario und Replikat
Szenario
Eine konkrete Kombination aus Parameterwerten,
Anfangsbedingungen und Modellannahmen.
slowdown_prob = 0.3
n_cars = 22
safe_distance = 2
Replikat
Derselbe Parameter-Setup noch einmal, aber mit anderen
Zufallsereignissen, also einem anderen Seed.
seed = 1
seed = 2
seed = 3
Bei stochastischen ABMs ist ein einzelner Lauf nur eine Beobachtung,
nicht schon ein Ergebnis.
Was ist ein Random Seed?
Pseudozufall
Computer erzeugen Zufallszahlen mit einem Algorithmus.
Der Seed ist der Startwert für diese Folge.
random.seed(42)
Reproduzierbarkeit
Gleicher Seed bedeutet gleiche Zufallsereignisse.
Unterschiedliche Seeds erzeugen unterschiedliche Replikate.
scenario A, seed 1
scenario A, seed 2
scenario A, seed 3
Seeds helfen uns, Zufall kontrolliert zu verwenden:
wir können Ergebnisse wiederholen und trotzdem Streuung messen.
Was ist Sensitivitätsanalyse?
Sensitivitätsanalyse fragt, wie stark Modelloutputs reagieren,
wenn wir Parameterwerte verändern.
Parameter
Annahmen im Modell, z.B. Zufallsbremsen,
Sicherheitsabstand oder Verkehrsdichte.
Output
Gemessene Ergebnisse, z.B. Durchschnittsgeschwindigkeit
oder Anzahl langsamer Fahrzeuge.
Reaktion
Ändert sich fast nichts, etwas, oder kippt das System
in ein anderes Verhalten?
Railsback & Grimm (2019), Kap. 23
Warum machen wir Parameter-Sweeps?
Verstehen
- Welche Annahmen kontrollieren das Ergebnis?
- Wo entstehen Kipppunkte?
- Welche Muster sind robust?
Vertrauen prüfen
- Hängt unser Ergebnis an einem einzigen Wert?
- Ist der Effekt größer als Zufallsschwankung?
- Welche Parameter müssen wir genauer begründen?
Hohe Sensitivität ist nicht automatisch schlecht. Sie zeigt,
welcher Prozess im Modell besonders wichtig ist.
Eine einfache Strategie
1.
Ein Modell vorläufig einfrieren: Code läuft, Grundverhalten ist plausibel.
2.
Eine Messgröße wählen: z.B. durchschnittliche Geschwindigkeit.
3.
Einen Parameter über sinnvolle Werte variieren.
4.
Pro Wert mehrere Replikate mit unterschiedlichen Seeds ausführen.
5.
Ergebnisse plotten und als Modellverhalten interpretieren.
Für den Einstieg reicht oft eine Single-Parameter-Sensitivitätsanalyse:
ein Parameter nach dem anderen.
Unsere Messgrößen im Traffic-Modell
Im Traffic-Modell speichern wir bewusst einfache Größen,
die man ohne Statistik-Vorwissen lesen kann.
Zeitreihe
time: Simulationszeit
average_speed: mittlere Geschwindigkeit
Stau-Indikatoren
stopped_cars: stehende Fahrzeuge
slow_cars: langsame Fahrzeuge
Eine Messgröße ist immer eine Entscheidung: Sie bestimmt,
was wir am Modell als wichtig ansehen.
Was ist ein CLI?
Command Line Interface
Ein CLI ist eine Bedienoberfläche im Terminal.
Wir starten ein Programm mit einem Befehl und geben Werte
als Argumente mit.
uv run main.py sweep slowdown_prob 0.1 0.2 0.3
Warum für Szenarien?
- Parameter können von außen gesetzt werden
- Gleiche Läufe lassen sich exakt wiederholen
- Befehle können im README dokumentiert werden
- Viele Szenarien können automatisch gestartet werden
Eine Animation hilft beim Verstehen. Ein CLI hilft beim Analysieren,
weil Experimente reproduzierbar und automatisierbar werden.
CLI in Python mit argparse
Argumente definieren
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("parameter")
parser.add_argument("values", nargs="+", type=float)
parser.add_argument("--replicates", type=int)
args = parser.parse_args()
Argumente verwenden
run_sweep(
args.parameter,
args.values,
args.replicates,
)
argparse liest Text aus dem Terminal und macht daraus
normale Python-Werte, z.B. Strings, Zahlen und Listen.
Beispiel: Ein einfacher Sweep
Terminal
uv run main.py sweep slowdown_prob 0.0 0.1 0.2 0.3 0.4 \
--replicates 5 \
--sim-duration 60 \
--output runs/slowdown-sweep
Leitfragen
- Ab wann sehen wir regelmäßig Staus?
- Ist der Effekt größer als die Streuung zwischen Replikaten?
- Bleibt das Ergebnis bei anderen plausiblen Parametern ähnlich?
Theorie und Code treffen sich hier: Wir formulieren eine Erwartung,
lassen das Modell laufen und lesen die Daten.
Beispiele für Szenariofragen
Gittermodelle
- Waldbrand: Wie verändert Baumdichte die Brandgröße?
- Schelling: Ab welchem Toleranzwert entsteht Segregation?
Netzwerk und Umwelt
- SIR: Wie stark verändert Netzwerkdichte die Epidemiegröße?
- Fishery: Werden bei koordinierter Befischung mehr Fische gefangen?
Achtung: Nicht zu viele Dinge gleichzeitig verändern.
Sonst ist am Ende unklar, welcher Mechanismus das Ergebnis erzeugt.