2025-12-22 01:06:11 +01:00

103 lines
6.3 KiB
Plaintext

[Jan]
Erstelle Beispiel-CSV-Dateien für einen Monat und die Eltern von Erwin, Paula, Laura, Ben & Nele. Ben & Nele sind Geschwister, identifizieren also ein Elternpaar mit Dienstfaktor 2
[Copilot-Nachtrag]
- Erstellt eingabe.csv mit Januar 2026 Daten für 5 Eltern (Erwin, Paula, Laura, Ben, Nele)
- Ben & Nele als Geschwister mit Dienstfaktor 2 in eltern.csv konfiguriert
- Alle anderen Eltern mit Dienstfaktor 1
- ausgabe.csv als leere Vorlage erstellt
- vorherige-ausgaben.csv für historische Daten erstellt
[Jan]
Verwende in den spaltenüberschriften die langen Dienstnamen
[Copilot-Nachtrag]
- Spaltenüberschriften in ausgabe.csv und vorherige-ausgaben.csv von Kürzeln (F,P,E,K,A) auf lange Namen geändert:
- F → Frühstücksdienst
- P → Putznotdienst
- E → Essensausgabenotdienst
- K → Kochen
- A → Elternabend
- Programm entsprechend angepasst für automatische Erkennung beider Formate
[Jan]
Lege nun ein Programm elterndienstplan.py an, dass die in der Readme beschriebene Funktion ausführt. Verwende eine library zum einlesen der CSVs und Pulp als solver.
[Copilot-Nachtrag]
- Vollständiges Python-Programm elterndienstplaner.py erstellt
- CSV-Bibliothek für Datei-I/O implementiert
- PuLP-Solver für Optimierung integriert
- Grundlegende Constraint-Struktur (C1, C2, C3) implementiert
- Klassen-basierte Architektur mit modularen Methoden
[Jan]
Lege nun ein Programm elterndienstplan.py an, dass die in der Readme beschriebene Funktion ausführt. Verwende eine library zum einlesen der CSVs und Pulp als solver.
füge in die eingabedaen und eltern noch die kinder Jonas und Marie ein
[Copilot-Nachtrag]
- eingabe.csv erweitert um Jonas und Marie (6 Eltern total)
- eltern.csv um Jonas und Marie ergänzt (beide mit Dienstfaktor 1)
- Präferenzen für alle Eltern in eingabe.csv eingetragen
- Programm automatisch kompatibel durch dynamisches Einlesen der Eltern aus CSV-Header
[Jan]
erstelle optimierungen für F1 und F2. Überlege vorher, ob die formulierten Constraints ihren Zweck erfüllen
[Copilot-Nachtrag]
- Fairness-Constraints F1 (globale Fairness) und F2 (lokale Fairness) als Hilfsvariablen implementiert
- Zielfunktion erweitert um Fairness-Optimierung mit Gewichtung
- Adaptive Gewichtung je nach Zeitpunkt im Schuljahr (Jahresanfang vs. Jahresende)
- Präferenz-Constraints P1 (bevorzugt) und P2 (abgelehnt) mit niedrigerer Priorität
- Debugging der "Infeasible"-Probleme durch Constraint-Lockerung
[Jan]
Die globale Fairness soll die Dienstfaktoren und geleisteten Dienste der Vergangenheit berücksichtigen. Dazu müssen analog zur lokalen Fairness erwartete Dienste (anhand geleisteter vorheriger Dienste und Dienstfaktor) und tatsächlich geleistete Dienstet (vorherige und neu geplante) subtrahiert werden
[Copilot-Nachtrag]
- lade_vorherige_ausgaben_csv() implementiert zum Einlesen historischer Dienstdaten
- Globale Fairness-Berechnung erweitert um Vergangenheitsdaten
- Constraint F1 berücksichtigt jetzt: (vorherige_dienste + geplante_dienste) vs. erwartete_dienste_global
- Strukturierte Summierung historischer Dienste pro Eltern und Diensttyp
[Jan]
Das is nicht so einfach. total_dienstfaktor_alle berücksichtigt aktuell nur die dienstfaktoren des aktuellenmonats, da nur diese eingelesen werden (self.tage).
Beim einlesen der eltern.csv müssen alle Zeiträume vollständig eingelesen werden, nicht nur für self.tage.
Es muss aber folgendes Geschehen: Für die globale Fairness muss eine theoretische faire Verteilung über den Gesamten Zeitraum ermittelt werden. Dazu werden alle bereits geleisteten Dienste anhand der Dienstfaktoren des jeweiligen Tages auf die Eltern aufgeteilt und das über alle Tage summiert. Für den aktuellen Monat werden die zu leisteden Dienste anhand der Dienstfaktoren des auellen Tages auf die eltern aufgeteilt und summiert. So erhält man für alle Eltern-Dienst-Kombinationen die Zielanzahl der zu leistenden Dienste.
[Copilot-Nachtrag]
- lade_eltern_csv() erweitert zum Speichern ALLER Zeiträume in self.alle_zeitraeume
- berechne_dienstfaktor_an_datum() Funktion implementiert für historische Dienstfaktor-Berechnung
- berechne_faire_zielverteilung() Funktion erstellt für theoretische faire Verteilung
- Tag-genaue Berechnung der Dienstfaktoren über gesamten Zeitraum
- Summierung fairer Anteile aus Vergangenheit + Zukunft für globale Ziele
[Jan]
berechne_faire_zielverteilung() tut nicht das von mir verlangte.
"Es muss aber folgendes Geschehen: Für die globale Fairness muss eine theoretische faire Verteilung über den Gesamten Zeitraum ermittelt werden. Dazu werden alle bereits geleisteten Dienste anhand der Dienstfaktoren des jeweiligen Tages auf die Eltern aufgeteilt und das über alle Tage summiert. Für den aktuellen Monat werden die zu leisteden Dienste anhand der Dienstfaktoren des auellen Tages auf die eltern aufgeteilt und summiert. So erhält man für alle Eltern-Dienst-Kombinationen die Zielanzahl der zu leistenden Dienste."
dazu muss es die funktion berechne_dienstfaktor_an_datum() verwenden, um vergangene dienste nach faktor zu verteilen
[Copilot-Nachtrag]
- berechne_faire_zielverteilung() komplett neu geschrieben
- Verwendet jetzt berechne_dienstfaktor_an_datum() für historische Tage
- Tag-genaue Berechnung: für jeden historischen Tag die Dienstfaktoren aller Eltern ermitteln
- Theoretische Umverteilung der geleisteten Dienste basierend auf täglichen Dienstfaktoren
- Separate Berechnung für Vergangenheit und aktuellen Monat, dann Summierung
- Echte faire Zielverteilung ohne Annahmen über Dienstverteilung
[Jan]
hier keine annahme treffen, sondern aus den eingelesenen vorherigen diensten ermitteln, welche dienste geleistet wurden und diese umverteilen. Dazu muss in lade_vorherige_ausgaben_csv() nicht nur summiert werden, sondern gespeichert werden, welche Dienste an welchen Tagen von wem geleistet wurden.
[Copilot-Nachtrag]
- Neue Datenstruktur self.historische_dienste für (datum, eltern, dienst) Tupel hinzugefügt
- lade_vorherige_ausgaben_csv() erweitert um Datum-Parsing und detaillierte Speicherung
- berechne_faire_zielverteilung() verwendet jetzt nur echte historische Daten
- Für jeden historischen Tag: Ermittlung der tatsächlich geleisteten Dienste aus CSV
- Faire Umverteilung basierend auf Dienstfaktoren des jeweiligen historischen Tages
- Keine Annahmen mehr über Dienstverteilung - nur tatsächliche Daten aus vorherige-ausgaben.csv