Planungszeitraum und historischer Zeitraum koennen sich jetzt ueberlappen. So lassen sich einzelne Dienste (z.B. von einer Familie) nachtraeglich neu planen. historische Dienste werden bei den Constraints 1 Dienst pro Tag und 1 Dienst pro Woche korrekt beruecksichtigt elterndienstplaner.py erzeugt jetzt ausgaben-gesamt.csv, die fuer spaetere Aufrufe als Eingabe vorherige-dienste.csv verwendet werden kann.
4.3 KiB
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 bzw. ausgabe-gesamt.csv.
Hier kann die ausgabe-gesamt.csv, die bei der letzten Planung generiert wurde eingespielt werden.
Ausgabedatei
ausgabe.csv
Die neu zugeteilten Dienste.
Datum,Wochentag,Frühstücksdienst,Putznotdienst,Essensausgabenotdienst,Kochen,Elternabend
2026-01-06,Montag,Sarah & Tim,Leon,Erika,,
ausgabe-gesamt.csv
Wie ausgabe.csv, enthält aber neben den neu geplanten Diensten auch die historischen Dienste, die über vorherige-ausgaben.csv übergeben wurden. Die Datei ausgabe-gesamt.csv kann bei der nächsten Planung wieder als Eingabe vorherige-ausgaben.csv verwendet werden.
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