elterndienstplaner/README.md
2026-01-18 21:19:48 +01:00

138 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Elterndienstplaner
Automatische Zuteilung von Elterndiensten im Kinderladen unter Berücksichtigung von Fairness und Präferenzen.
## Überblick
Der Elterndienstplaner verteilt monatliche Dienstzuteilungen optimal auf die Eltern durch Lösung eines linearen Optimierungsproblems. Das System berücksichtigt:
- **Harte Constraints (C1-C4):** Müssen immer eingehalten werden
- **Fairness-Constraints (F1-F4):** Werden optimiert
- **Präferenzen (P1-P2):** Werden berücksichtigt, wenn möglich
## Diensttypen
- **F** - Frühstücksdienst (täglich, 1 Person)
- **P** - Putznotdienst (täglich, 1 Person)
- **E** - Essensausgabenotdienst (täglich, 1 Person)
- **K** - Kochen (ca. alle 2 Wochen, 1 Person)
- **A** - Elternabend (ca. einmal im Monat, 2 Personen)
## Eingabedateien
### eingabe.csv
Tägliche Dienste und Eltern-Verfügbarkeiten/Präferenzen für den Planungsmonat.
**Format:**
```csv
Datum,Wochentag,Dienste,Kind1,Kind2,...
2026-01-06,Montag,FPE,x,F+,...
```
**Spalten:**
- Datum (YYYY-MM-DD)
- Wochentag
- Dienste (Kombination aus F/P/E/K/A)
- Pro Familie: `x` (abwesend), `Kürzel+` (bevorzugt), `Kürzel-` (abgelehnt), leer (verfügbar)
### eltern.csv
Dienstfaktoren (Anzahl Kinder) pro Familie und Zeitraum.
**Format:**
```csv
Name_Kind(er),Zeitraum_Beginn,Zeitraum_Ende,Dienstfaktor,...
Sarah & Tim,2024-09-01,2025-07-31,2
Leon,2024-09-01,2024-12-31,1,2025-01-01,2025-07-31,0
```
**Hinweise:**
- Dienstfaktor = Anzahl Kinder
- Faktor 0 = keine Dienstpflicht (z.B. Vorstand)
- Mehrere Zeiträume möglich für Änderungen im Jahr
### vorherige-ausgaben.csv (optional)
Historische Dienstzuteilungen für Jahres-Fairness. Format wie `ausgabe.csv`.
## Ausgabedatei
### ausgabe.csv
```csv
Datum,Wochentag,Frühstücksdienst,Putznotdienst,Essensausgabenotdienst,Kochen,Elternabend
2026-01-06,Montag,Sarah & Tim,Leon,Erika,,
```
## Verwendung
```bash
./elterndienstplaner.py <eingabe.csv> <eltern.csv> <ausgabe.csv> [<vorherige-ausgaben.csv>]
```
## Constraints
### Harte Constraints (müssen erfüllt sein)
- **C1:** Maximal 1× pro Woche pro Diensttyp
- **C2:** Maximal 1 Dienst pro Tag
- **C3:** Nur bei Verfügbarkeit (keine `x` in eingabe.csv)
- **C4:** Alle benötigten Dienste werden besetzt
### Fairness (werden optimiert)
- **F1 (Global):** Faire Jahresverteilung pro Diensttyp
- **F2 (Lokal):** Faire Monatsverteilung pro Diensttyp
- **Besonderheit:** Abwesenheitstage = Dienstfaktor 0, werden nicht nachgeholt im selben Monat
- **F3 (Global):** Ausgewogene Gesamtdienste über Jahr
- **F4 (Lokal):** Ausgewogene Gesamtdienste im Monat
### Präferenzen (niedrige Gewichtung)
- **P1:** Bevorzugte Dienste (`+`) werden bevorzugt zugeteilt
- **P2:** Abgelehnte Dienste (`-`) werden vermieden
## Technische Details
### Optimierungsproblem
**Entscheidungsvariablen:**
- Binär: `x[eltern, tag, dienst]` = 1 wenn zugeteilt, 0 sonst
**Zielfunktion:**
Minimiert gewichtete Summe der Abweichungen von fairer Verteilung unter Berücksichtigung von Präferenzen. Lokale Fairness (aktueller Monat) hat höchste Priorität, gefolgt von globaler Fairness (ganzes Jahr).
### Lokale vs. Globale Fairness
**Lokal (F2/F4):**
- Nur aktueller Planungsmonat
- Abwesenheitstage: Dienstfaktor = 0
- Ziel: Gleichmäßige Verteilung im Monat
**Global (F1/F3):**
- Historische Daten + aktueller Monat
- Abwesenheitstage: Dienstfaktor wie in eltern.csv
- Ziel: Ausgleich über das Kitajahr
- Bereits geleistete Dienste werden abgezogen
## Programmausgabe
1. **Zuteilungen pro Familie:** Anzahl je Diensttyp
2. **Dienstfaktoren-Summe:** Im Planungszeitraum
3. **Verteilungsvergleich:** Soll (lokal/global) vs. Ist
4. **Präferenz-Verletzungen:** Anzahl abgelehnte/nicht-erfüllte Präferenzen
## Troubleshooting
**"Keine optimale Lösung gefunden":**
- Zu viele Abwesenheiten
- Nicht genug verfügbare Eltern für benötigte Dienste
**"Unfaire Verteilung":**
- Dienstfaktoren in `eltern.csv` prüfen
- `vorherige-ausgaben.csv` auf Korrektheit prüfen