Jan Hoheisel 08e5cf11bd Mehr Fuktionen fuer historische Dienste
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.
2026-01-28 20:30:14 +01:00

4.3 KiB
Raw Permalink Blame History

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 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