diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..b58b603 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..5b15c22 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modellierung-und-simulation-ue1.iml b/.idea/modellierung-und-simulation-ue1.iml new file mode 100644 index 0000000..3d39ba1 --- /dev/null +++ b/.idea/modellierung-und-simulation-ue1.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..ff3c3c3 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..bbb85de --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,13 @@ +# Modellierung und Simulation UE1 +This project is an exercise for the university course in modelling and simulation. + +## Requirements +The requirements by the professor are saved to docs/requirements.md +My interpretation of them is available at docs/docs.md +An UML diagram is available at docs/uml.svg + +## Web +The web implementation is pure JavaScript + +## Python +The python implementation is a single-file script, which can be run on the command line or a Jupyter notebook diff --git a/README.md b/README.md index aa8b8ad..713fb66 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,10 @@ -# modellierung-und-simulation-ue1 +# Modellierung und Simulation Übung 1 +Dieses Reposiotry enthält zwei Projekte: +1) Im Ordner "python" die Python-Implementierung +2) Im Ordner "web" die JavaScript-Implementierung verfügbar und https://sim.teier.net/ue1 + +## Python + + +## Web diff --git a/docs/docs.md b/docs/docs.md new file mode 100644 index 0000000..bc2c3f1 --- /dev/null +++ b/docs/docs.md @@ -0,0 +1,31 @@ +# Zellulärer Automat + +Eigenschaften einer Zelle: +Brandfaktor (quasi die “Trockenheit”) +Restbrenndauer + +Zustände: +Wald: Brandfaktor zwischen 0,1 und 1 (“Trockenheit”), Restbrenndauer konstant +Brennend: Brandfaktor irrelevant, Restbrenndauer sinkend +Abgebrannt, Brandfaktor 0, Restbrenndauer 0 +Gelöscht, Brandfaktor 0, Restbrenndauer 0 +Brandschneise (künstlich oder natürlich wie Wasser), Brandfaktor 0, Restbrenndauer 0 + +Die Simulation behandelt die Zustände Brandschneise, Abgebrannt und Gelöscht gleich, aber für die Visualisierung sind diese Zustände interessant + +Nachbarschaft: 8 Zellen + +Faktoren für Verbreitung: +Nachbarschaft: direkt mit Gewichtung 1, diagonal mit Gewichtung 0.7 (Moore) +Windrichtung: Vektor (x, y) +Windstärke: 0-1 (0=kein Wind, 1=Wind so stark, dass er Wahrscheinlichkeit in Windrichtung verdoppelt) + +Windfaktor für Verbreitung: +1 + Windstärke * cos(Winkel(Vektorwind, Vektorzellen)) + +Entzündungswahrscheinlichkeit eine Zelle: +Distanz * Brandfaktor * Windfaktor + + +Code: https://git.teier.net/teier/modellierung-und-simulation-ue1.git +Link: https://sim.teier.net/ue1 \ No newline at end of file diff --git a/docs/requirements.md b/docs/requirements.md new file mode 100644 index 0000000..833635e --- /dev/null +++ b/docs/requirements.md @@ -0,0 +1,33 @@ +Ausgangspunkt ist die Idee des zellulären Automaten, wie wir sie am Beispiel des Game of Life kennengelernt haben. Ein Raum wird in Zellen aufgeteilt. Jede Zelle besitzt einen Zustand und verändert diesen in diskreten Zeitschritten aufgrund festgelegter Regeln und der Zustände ihrer Nachbarzellen. + +Entwickelt auf dieser Grundlage ein eigenes Modell für die Ausbreitung eines Waldbrandes. + +Legt zunächst euer Modell fest und beschreibt: + +Welche Zustände kann eine Zelle haben? Zum Beispiel Wald, brennend, abgebrannt, Wasser oder Brandschneise. +Welche Nachbarschaft wird verwendet? Vier oder acht angrenzende Zellen? +Unter welchen Bedingungen entzündet sich eine Zelle? +Was passiert mit einer brennenden Zelle im nächsten Zeitschritt? +Welche zusätzlichen Eigenschaften oder Parameter können berücksichtigt werden? zB Trockenheit, Feuchtigkeit, Wind oder Menge Löschwasser? +Wie wird der Rand des Modells behandelt? +Formuliert die Regeln so genau, dass eine andere Person eure Simulation allein anhand dieser Beschreibung implementieren könnte. + +Setzt das Modell anschließend in Python um. Ihr dürft dafür KI verwenden. + +Führt danach mindestens zwei unterschiedliche Simulationen durch, indem ihr gezielt einen Parameter oder eine Maßnahme verändert, zum Beispiel Trockenheit, Wind, Brandschneisen oder Löschwasser. + +Vergleicht die Ergebnisse und beantwortet abschließend kurz: + +Was lässt sich mit eurem Modell untersuchen? Welche Annahmen und Vereinfachungen habt ihr getroffen? Welche Aspekte eines echten Waldbrandes bildet euer Modell nicht ab? Was musstet ihr bei der Umsetzung mit KI eventuell korrigieren oder präzisieren? + +Abgabe + +Gebt das in einem PDF Dokument oder Colab Notebook mit dieser Struktur ab: + +Modellbeschreibung +Python-Code oder einen Link zur lauffähigen Simulation +die Ergebnisse eurer beiden Versuche und +kurze Reflexion +Modus: Einzelarbeit oder Gruppenarbeit (max 2) + +Frist: 9.11. (nächste Einheit) diff --git a/docs/uml.svg b/docs/uml.svg new file mode 100644 index 0000000..4854ceb --- /dev/null +++ b/docs/uml.svg @@ -0,0 +1,4 @@ + + + +
Für jede Zelle
Zellenzustand
ist brennend?
Für jeden Moore-Nachbarn
Nachbarzellenzustand ist Wald?
Restbrenndauer--
Restbrenndauer == 0?
Setze Zelle auf Status abgebrannt
ja
nein
ja
nein
nein
Zufallszahl 0-100 < (Distanz * Brandfaktor * (1+ Windstärke * cos(Winkel(Vektorwind, Vektorzellen)))*50

Ja
nein
Setze Zelle auf Status brennend
Zufallszahl 0-100 < Löschwahrscheinlichkeit
*100
Initialisierung:
- Zellengitter MxN mit Zufallswerten für Typ, Restbrenndauer, Brandfaktor
- Globaler Zufallswert für Löschwahrscheinlichkeit, Windstärke und Windrichtung
Gibt es eine brennende Zelle?

nein
ja
ja
\ No newline at end of file diff --git a/python/pyproject.toml b/python/pyproject.toml new file mode 100644 index 0000000..2f1367d --- /dev/null +++ b/python/pyproject.toml @@ -0,0 +1,5 @@ +[project] +name = "modellierung-und-simulation-ue1" +version = "0.1.0" +requires-python = ">=3.9" +dependencies = [] diff --git a/python/ue1.py b/python/ue1.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/python/ue1.py @@ -0,0 +1 @@ +