PrimatenSim ist eine agentenbasierte Simulationsanwendung für Windows zur Erforschung kultureller Dynamiken in Primatengruppen. Die App wurde mit .NET 8.0 und WPF entwickelt und visualisiert die Ausbreitung und Evolution von Kulturen in einer räumlichen Umgebung.
- Überblick
- Features
- Die 5 Erweiterungen
- Technologie-Stack
- Screenshots
- Installation
- Projektstruktur
- Simulationslogik
- Steuerung
- Export & Analyse
- Build & Deployment
- Entwicklung
PrimatenSim simuliert die Entwicklung von 9 verschiedenen Kulturen (K1-K9) in einer Population von Primaten auf einem 40×40 Gitter. Jeder Primat besitzt individuelle Eigenschaften:
| Eigenschaft | Beschreibung |
|---|---|
| Status | Jung oder erwachsen |
| Alter | In Ticks (max. 20) |
| Geschlecht | Weiblich (1) oder Männlich (2) |
| Primärkultur | Hauptkultur (1-9) |
| Sekundärkultur | Zweitkultur (Hybridisierung) |
| Macht | Sozialer Einfluss (1-9) |
Die Simulation basiert auf einem zellulären Automaten mit toroidaler Geometrie (die Ränder sind miteinander verbunden).
- ✅ Agentenbasierte Simulation auf 40×40 Gitter (1600 Zellen)
- ✅ 9 verschiedene Kulturen mit individuellen Farben und Toleranzwerten
- ✅ Echtzeit-Visualisierung mit drei Ansichtsmodi
- ✅ Interaktive Steuerung (Start, Stopp, Zufallsverteilung)
- ✅ Geschwindigkeitsregler (20-500 ms pro Tick)
- ✅ Auto-Stopp bei Monokultur
- ✅ CSV-Export der Simulationsdaten
- ✅ Klick-Info für jeden Primaten (Tooltip mit Details)
| Modus | Beschreibung |
|---|---|
| Kulturansicht | Farbcodierte Darstellung der Primärkultur |
| Statusansicht | Geschlecht und Alter (jung/erwachsen) |
| Ressourcenansicht | Ressourcenverteilung (Grüntöne) |
- Live-Chart der Kulturentwicklung über die Zeit
- Bis zu 500 Datenpunkte im sichtbaren Fenster
- Populationslinie optional ein-/ausblendbar
Jeder Primat besitzt eine Primärkultur und eine Sekundärkultur. Kinder erben die Primärkultur von der Mutter und die Sekundärkultur vom Vater.
Erwachsene Männchen können ihre Kultur ändern, wenn ein deutlich mächtigerer (Macht +3) Rivale in der Nachbarschaft ist. Die eigene Macht sinkt dabei um 1.
Bei der Partnerwahl wird nicht nur die Macht der Männchen berücksichtigt, sondern auch die kulturelle Nähe (0.8 × Macht + 0.2 × kulturelle Affinität).
Jede Zelle besitzt Ressourcen (0-5). Diese werden beim Verbrauch reduziert und regenerieren sich langsam. Ressourcenreiche Gebiete bieten einen Bonus für Machtgewinn.
Jede Kultur hat einen individuellen Toleranzwert (0.1-0.9). Bei kultureller Isolation (viele fremde Nachbarn) steigt die Sterbewahrscheinlichkeit:
P(Tod) = Isolationsgrad × (1 - Toleranz)
| Komponente | Technologie | Version |
|---|---|---|
| Framework | .NET 8.0 | 8.0 |
| Sprache | C# | 12.0 |
| UI-Framework | WPF | - |
| Charts | LiveCharts.Wpf | 0.9.7 |
| JSON-Parser | Newtonsoft.Json | 13.0.3 |
| Build-Tool | MSBuild | - |
| Mindest-Windows | Windows 10 | 1809+ |
Geburt → Jung (Alter 0-2) → Erwachsen (Alter 3-19) → Tod (Alter 20)
- Alterung (80% Wahrscheinlichkeit)
- Ressourcenverbrauch (falls verfügbar)
- Kulturelle Isolation (Tod durch Fremde)
- Kulturelle Beeinflussung (nur erwachsene Männchen)
- Geburt (25% Wahrscheinlichkeit bei Paar in Nachbarschaft)
- Migration (0.05% spontane Neubesiedlung)
| Kultur | K1 | K2 | K3 | K4 | K5 | K6 | K7 | K8 | K9 |
|---|---|---|---|---|---|---|---|---|---|
| Toleranz | 0.2 | 0.8 | 0.4 | 0.9 | 0.5 | 0.1 | 0.7 | 0.3 | 0.6 |
- Windows 10 oder Windows 11 (64-Bit)
- .NET 8.0 Desktop Runtime (Download)
- Visual Studio 2022 (für Entwicklung)
# 1. Repository klonen
git clone https://github.com/yourusername/PrimatenSim.git
cd PrimatenSim
# 2. Projekt in Visual Studio öffnen
start PrimatenSim.sln
# 3. NuGet-Pakete wiederherstellen
dotnet restore
# 4. Build ausführen
dotnet build
# 5. App starten
dotnet rundotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -o ./publishPrimatenSim/
├── PrimatenSim.csproj # Projektdatei
├── PrimatenSim.sln # Visual Studio Projektmappe
├── App.xaml # Anwendungsressourcen
├── App.xaml.cs # App-Lifecycle
├── MainWindow.xaml # Hauptfenster
├── MainWindow.xaml.cs # Hauptfenster-Logik
├── Models/
│ ├── Primat.cs # Primaten-Datenmodell
│ └── SimulationState.cs # Zustandsspeicherung
├── Engine/
│ ├── SimulationEngine.cs # Kernlogik (Zellautomat)
│ └── Statistics.cs # Statistikberechnungen
├── Views/
│ └── SimulationCanvas.xaml # Interaktive Visualisierung
│ └── SimulationCanvas.xaml.cs # Canvas-Logik
├── Converters/
│ └── DoubleToBrushConverter.cs # Wertkonverter
└── Resources/
└── Styles.xaml # Globale UI-Styles
| Element | Funktion |
|---|---|
| ▶ Start | Startet die Simulation |
| ⏸ Stopp | Stoppt die Simulation |
| 🔀 Zufallsverteilung | Setzt neue zufällige Population |
| Geschwindigkeitsregler | Steuert die Tick-Geschwindigkeit (20-500 ms) |
| Auto-Stopp bei Monokultur | Stoppt automatisch bei 99.5% Dominanz |
| Kulturansicht | Zeigt farbcodierte Kulturen |
| Statusansicht | Zeigt Geschlecht und Alter |
| Ressourcenansicht | Zeigt Ressourcenverteilung |
| Klick auf Zelle | Zeigt Details des Primaten an |
| CSV Export | Exportiert die Simulationsdaten |
Tick;Population;Kultur_1;Kultur_2;...;Kultur_9
0;245;0.12345;0.09876;...;0.06789
1;248;0.12234;0.09765;...;0.06890
...| Maß | Beschreibung |
|---|---|
| Simpson-Index | 1 - Σ(p_i²) → Diversität (0-1) |
| Shannon-Entropie | -Σ(p_i × log₂(p_i)) → Komplexität |
| Gini-Koeffizient | Ungleichverteilung der Kulturen |
# Build ausführen
dotnet build
# App starten
dotnet run
# Release-Build
dotnet build -c Release
# Publish als Einzeldatei
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -o ./publish- Betriebssystem: Windows 10 / Windows 11 (64-Bit)
- .NET Runtime: .NET 8.0 Desktop Runtime
- RAM: mindestens 256 MB
- Festplatte: etwa 30 MB
- Bildschirmauflösung: mindestens 1024×768
- Visual Studio 2022 mit .NET-Desktop-Entwicklung
- .NET 8.0 SDK
start PrimatenSim.slndotnet testDie wichtigsten Parameter finden Sie in Engine/SimulationEngine.cs:
private const int WIDTH = 40; // Breite des Gitters
private const int HEIGHT = 40; // Höhe des Gitters
private const double INITIAL_DENSITY = 0.1; // Anfangsdichte (10%)
private const int MAX_HISTORY = 5000; // Maximale Historie