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:
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:
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
Datum,Wochentag,Frühstücksdienst,Putznotdienst,Essensausgabenotdienst,Kochen,Elternabend
2026-01-06,Montag,Sarah & Tim,Leon,Erika,,
Verwendung
./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
xin 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
- Zuteilungen pro Familie: Anzahl je Diensttyp
- Dienstfaktoren-Summe: Im Planungszeitraum
- Verteilungsvergleich: Soll (lokal/global) vs. Ist
- 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.csvprüfen vorherige-ausgaben.csvauf Korrektheit prüfen