164 lines
4.9 KiB
Markdown
164 lines
4.9 KiB
Markdown
# Elterndienstplaner
|
||
|
||
Automatische Zuteilung von Elterndiensten im Kinderladen unter Berücksichtigung von Fairness und Präferenzen.
|
||
|
||
## Verwendung
|
||
|
||
```bash
|
||
./elterndienstplaner.py <eingabe.csv> <eltern.csv> <ausgabe.csv> [<vorherige-ausgaben.csv>]
|
||
```
|
||
|
||
**Parameter:**
|
||
- `eingabe.csv`: Benötigte Dienste und Eltern-Präferenzen für den Planungsmonat
|
||
- `eltern.csv`: Dienstfaktoren der Eltern (Anzahl betreuter Kinder)
|
||
- `ausgabe.csv`: Hier wird die Zuteilung geschrieben
|
||
- `vorherige-ausgaben.csv` (optional): Historische Daten für Fairness über das Jahr
|
||
|
||
## Dienste
|
||
|
||
- **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 (nach Bedarf, 2 Personen)
|
||
|
||
Die Planung erfolgt für einen Kalendermonat.
|
||
|
||
## Eingabedateien
|
||
|
||
### eingabe.csv
|
||
|
||
Informationen zu benötigten Diensten und Verfügbarkeit/Präferenzen der Eltern.
|
||
|
||
**Format:**
|
||
```
|
||
Datum,Wochentag,Dienste,Eltern1,Eltern2,...
|
||
2025-01-06,Montag,FPE,F+,x,...
|
||
2025-01-07,Dienstag,FPE,P-,F+P+,...
|
||
```
|
||
|
||
**Spalten:**
|
||
1. Datum (ISO-Format: YYYY-MM-DD)
|
||
2. Wochentag (zur Information)
|
||
3. Benötigte Dienste (z.B. "FPE" für Frühstück, Putzen, Essen)
|
||
4-n. Für jeden Elternteil:
|
||
- `x` = nicht verfügbar
|
||
- `F+` = Frühstücksdienst bevorzugt
|
||
- `P-` = Putznotdienst nur notfalls
|
||
- Mehrere Präferenzen kombinierbar: `F+P-E+`
|
||
- Leer = verfügbar, keine Präferenz
|
||
|
||
### eltern.csv
|
||
|
||
Dienstfaktoren (= Anzahl betreuter Kinder) pro Elternteil und Zeitraum.
|
||
|
||
**Format:**
|
||
```
|
||
Eltern,Beginn,Ende,Faktor,Beginn,Ende,Faktor,...
|
||
Müller,2024-09-01,2025-07-31,2
|
||
Schmidt,2024-09-01,2024-12-31,1,2025-01-01,2025-07-31,0
|
||
```
|
||
|
||
**Spalten:**
|
||
1. Elternname (Kind-Name zur Identifikation)
|
||
2-4. Zeitraum 1: Beginn, Ende, Dienstfaktor
|
||
5-7. Zeitraum 2: Beginn, Ende, Dienstfaktor (optional)
|
||
...
|
||
|
||
**Hinweise:**
|
||
- Bei überlappenden Zeiträumen gilt der letzte Eintrag
|
||
- Außerhalb definierter Zeiträume: Faktor = 0 (keine Dienstpflicht)
|
||
- Faktor = 0 bedeutet: Befreiung (z.B. durch Vorstandsamt)
|
||
|
||
### vorherige-ausgaben.csv (optional)
|
||
|
||
Frühere Ausgaben des Programms zur Berechnung der Jahres-Fairness.
|
||
|
||
**Format:** Wie `ausgabe.csv` (siehe unten).
|
||
|
||
**Verwendung:**
|
||
- Zu Beginn des Kita-Jahres (September): Keine Datei nötig
|
||
- Ab Oktober: Vorherige Ausgaben anhängen für kumulative Fairness
|
||
- Im Jahresverlauf sammeln sich die Ausgaben an
|
||
|
||
## Ausgabe
|
||
|
||
### ausgabe.csv
|
||
|
||
Zugeteilte Dienste pro Tag.
|
||
|
||
**Format:**
|
||
```
|
||
Datum,Wochentag,Frühstücksdienst,Putznotdienst,Essensausgabenotdienst,Kochen,Elternabend
|
||
2025-01-06,Montag,Müller,Schmidt,Weber,,
|
||
2025-01-07,Dienstag,Weber,Müller,Schmidt,,
|
||
```
|
||
|
||
## Constraints
|
||
|
||
### Harte Constraints (müssen erfüllt sein)
|
||
|
||
- **C1**: Pro Eltern und Dienst maximal **einmal pro Woche** (Mo-So)
|
||
- **C2**: Pro Eltern maximal **ein Dienst pro Tag**
|
||
- **C3**: Nur **verfügbare** Eltern einteilen
|
||
- **C4**: Alle **benötigten Dienste** müssen besetzt werden
|
||
|
||
### Weiche Constraints (werden optimiert)
|
||
|
||
**Fairness** (nach Priorität):
|
||
- **F1 (Global)**: Dienste proportional zum Dienstfaktor über das **ganze Jahr**
|
||
- Berücksichtigt historische Dienste aus `vorherige-ausgaben.csv`
|
||
- Gewichtung: 40% (zu Jahresbeginn) → 60% (zu Jahresende)
|
||
|
||
- **F2 (Lokal)**: Dienste proportional zum Dienstfaktor im **aktuellen Monat**
|
||
- Nur aktueller Planungszeitraum
|
||
- Gewichtung: 60% (zu Jahresbeginn) → 40% (zu Jahresende)
|
||
|
||
- **F3 (Dienstübergreifend)**: Gleiche Gesamtanzahl über alle Diensttypen
|
||
- Verhindert Häufung bei einzelnen Eltern
|
||
|
||
**Präferenzen** (niedrigere Priorität):
|
||
- **P1**: Bevorzugte Dienste (`+`) werden bevorzugt zugeteilt
|
||
- **P2**: Abgelehnte Dienste (`-`) werden vermieden
|
||
|
||
### Fairness-Logik
|
||
|
||
**Beispiel:** Familie Müller hat 2 Kinder, Familie Schmidt 1 Kind.
|
||
|
||
**Lokale Fairness (F2):**
|
||
- Im Januar sollen beide verfügbar sein
|
||
- Müller sollte 2× so viele Dienste bekommen wie Schmidt
|
||
- Verhindert: Müller bekommt alle Dienste auf einmal
|
||
|
||
**Globale Fairness (F1):**
|
||
- Müller war im Dezember im Urlaub → 0 Dienste
|
||
- Im Januar sollte Müller aufholen
|
||
- Über das Jahr: 2:1 Verhältnis wird ausgeglichen
|
||
|
||
**Gewichtung im Jahresverlauf:**
|
||
- **September-November**: F2 (lokal) stärker → sanftes Einführen
|
||
- **Dezember-Mai**: Ausgewogen
|
||
- **Juni-Juli**: F1 (global) stärker → Jahresausgleich
|
||
|
||
## Ausgabe-Statistiken
|
||
|
||
Das Programm zeigt nach der Optimierung:
|
||
|
||
1. **Dienste pro Eltern**: Übersicht der zugeteilten Dienste
|
||
2. **Dienstfaktoren**: Summe im Planungszeitraum
|
||
3. **Verteilungsvergleich**: Soll (lokal/global) vs. Ist mit Abweichungen
|
||
4. **Präferenz-Verletzungen**: Wie oft wurden Ablehnungen ignoriert
|
||
|
||
## Troubleshooting
|
||
|
||
**"Keine optimale Lösung gefunden":**
|
||
- Zu viele Eltern nicht verfügbar
|
||
- Nicht genug Eltern für alle Dienste
|
||
- Widersprüchliche Präferenzen
|
||
|
||
**"Unfaire Verteilung":**
|
||
- Prüfen Sie die Dienstfaktoren in `eltern.csv`
|
||
- Stellen Sie sicher, dass `vorherige-ausgaben.csv` korrekt ist
|
||
- Mehr Eltern verfügbar machen
|
||
|