From 182b7d1aff914fac0a74c15b9d5da17cd09feab2 Mon Sep 17 00:00:00 2001 From: Jan Hoheisel Date: Mon, 22 Dec 2025 21:31:25 +0100 Subject: [PATCH] pseudonymisierste Daten importiert doppelter Code aus berechne_faire_zielverteilung eliminiert Max 10 Sekunden Rechenzeit --- elterndienstplaner.py | 50 +++++++++++-------------------------------- elterndienstplaner.sh | 3 ++- 2 files changed, 15 insertions(+), 38 deletions(-) diff --git a/elterndienstplaner.py b/elterndienstplaner.py index 874f61b..0e1860b 100755 --- a/elterndienstplaner.py +++ b/elterndienstplaner.py @@ -214,38 +214,8 @@ class Elterndienstplaner: print("\nBerechne faire Zielverteilung basierend auf historischen Daten...") - # Wenn keine historischen Daten vorhanden, nur aktuellen Monat berechnen - if not self.historische_dienste: - print(" Keine historischen Daten - berechne nur für aktuellen Monat") - for dienst in self.dienste: - benoetigte_dienste_monat = sum( - 1 for tag in self.tage - if dienst in self.benoetigte_dienste.get(tag, []) - ) - - if dienst == 'A': - benoetigte_dienste_monat *= 2 - - if benoetigte_dienste_monat > 0: - gesamt_dienstfaktor_monat = sum( - sum(self.dienstfaktoren.get(e, {}).get(tag, 0) for tag in self.tage) - for e in self.eltern - ) - - if gesamt_dienstfaktor_monat > 0: - for eltern in self.eltern: - monatsfaktor = sum( - self.dienstfaktoren.get(eltern, {}).get(tag, 0) - for tag in self.tage - ) - if monatsfaktor > 0: - anteil = monatsfaktor / gesamt_dienstfaktor_monat - faire_zuteilung = anteil * benoetigte_dienste_monat - ziel_dienste[eltern][dienst] = faire_zuteilung - return ziel_dienste - # Historische Dienste nach Datum gruppieren - historische_tage = set(datum for datum, _, _ in self.historische_dienste) + historische_tage = set(datum for datum, _, _ in self.historische_dienste) if self.historische_dienste else set() print(f" Analysiere {len(historische_tage)} historische Tage mit {len(self.historische_dienste)} Diensten") for dienst in self.dienste: @@ -318,12 +288,15 @@ class Elterndienstplaner: # Debug-Ausgabe für diesen Dienst total_historisch = sum( - ziel_dienste[e][dienst] for e in self.eltern - if dienst in [d for _, _, d in self.historische_dienste if d == dienst] - ) - total_aktuell = benoetigte_dienste_monat + ziel_dienste[e][dienst] - ( + sum(self.dienstfaktoren.get(e, {}).get(tag, 0) for tag in self.tage) / + sum(sum(self.dienstfaktoren.get(e2, {}).get(tag, 0) for tag in self.tage) for e2 in self.eltern) * benoetigte_dienste_monat + if sum(sum(self.dienstfaktoren.get(e2, {}).get(tag, 0) for tag in self.tage) for e2 in self.eltern) > 0 else 0 + ) for e in self.eltern + ) if len(historische_dienste_dieses_typs) > 0 else 0 + print(f" {dienst}: Historisch faire Summe={total_historisch:.1f}, " - f"Aktuell benötigt={total_aktuell}") + f"Aktuell benötigt={benoetigte_dienste_monat}") # Debug-Output: Detaillierte Zielverteilung print("\n Berechnete Zielverteilung (basierend auf tatsächlichen historischen Diensten):") @@ -537,11 +510,14 @@ class Elterndienstplaner: # Solver wählen (verfügbare Solver testen) solver = None try: - solver = pulp.PULP_CBC_CMD(msg=0) # Standard CBC Solver + print("Versuche CBC Solver...") + solver = pulp.PULP_CBC_CMD(msg=0, timeLimit=10) # Standard CBC Solver except: try: + print("Versuche GLPK Solver...") solver = pulp.GLPK_CMD(msg=0) # GLPK falls verfügbar except: + print("Kein spezifizierter Solver verfügbar, verwende Standard.") solver = None # Default Solver prob.solve(solver) diff --git a/elterndienstplaner.sh b/elterndienstplaner.sh index af38121..7b36b36 100755 --- a/elterndienstplaner.sh +++ b/elterndienstplaner.sh @@ -1 +1,2 @@ -/home/jwit/privat/elterndienstplaner/.venv/bin/python elterndienstplaner.py eingabe.csv eltern.csv ausgabe.csv vorherige-ausgaben.csv +DIR=/home/jwit/privat/elterndienstplaner/ +$DIR/.venv/bin/python $DIR/elterndienstplaner.py eingabe.csv eltern.csv ausgabe.csv vorherige-ausgaben.csv