pseudonymisierste Daten importiert
doppelter Code aus berechne_faire_zielverteilung eliminiert Max 10 Sekunden Rechenzeit
This commit is contained in:
parent
b99f1762c3
commit
182b7d1aff
@ -214,38 +214,8 @@ class Elterndienstplaner:
|
|||||||
|
|
||||||
print("\nBerechne faire Zielverteilung basierend auf historischen Daten...")
|
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 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")
|
print(f" Analysiere {len(historische_tage)} historische Tage mit {len(self.historische_dienste)} Diensten")
|
||||||
|
|
||||||
for dienst in self.dienste:
|
for dienst in self.dienste:
|
||||||
@ -318,12 +288,15 @@ class Elterndienstplaner:
|
|||||||
|
|
||||||
# Debug-Ausgabe für diesen Dienst
|
# Debug-Ausgabe für diesen Dienst
|
||||||
total_historisch = sum(
|
total_historisch = sum(
|
||||||
ziel_dienste[e][dienst] for e in self.eltern
|
ziel_dienste[e][dienst] - (
|
||||||
if dienst in [d for _, _, d in self.historische_dienste if d == 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
|
||||||
total_aktuell = 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}, "
|
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
|
# Debug-Output: Detaillierte Zielverteilung
|
||||||
print("\n Berechnete Zielverteilung (basierend auf tatsächlichen historischen Diensten):")
|
print("\n Berechnete Zielverteilung (basierend auf tatsächlichen historischen Diensten):")
|
||||||
@ -537,11 +510,14 @@ class Elterndienstplaner:
|
|||||||
# Solver wählen (verfügbare Solver testen)
|
# Solver wählen (verfügbare Solver testen)
|
||||||
solver = None
|
solver = None
|
||||||
try:
|
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:
|
except:
|
||||||
try:
|
try:
|
||||||
|
print("Versuche GLPK Solver...")
|
||||||
solver = pulp.GLPK_CMD(msg=0) # GLPK falls verfügbar
|
solver = pulp.GLPK_CMD(msg=0) # GLPK falls verfügbar
|
||||||
except:
|
except:
|
||||||
|
print("Kein spezifizierter Solver verfügbar, verwende Standard.")
|
||||||
solver = None # Default Solver
|
solver = None # Default Solver
|
||||||
|
|
||||||
prob.solve(solver)
|
prob.solve(solver)
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user