5.2 KiB
5.2 KiB
first_opt_model.ipynb – Nebenbedingungen & Datenquellen (geordnet)
Setup
- Imports (Zelle 2): pandas, numpy, pyomo, matplotlib; Basis-Notebook-Kontext.
- Tabellen laden (Zelle 3): Alle Parquet-Files aus
../data/processed→ Dicttables[<name>].
Datenaufbereitung
- bedarf (Zelle 5): Aus
tables['rohkohlebedarf']; Spalten JW, SP, BW3, BW4, Veredel_Nochtener, Veredel_Welzower; Datum → week/weekday/day. - bounds_power_plants (Zelle 5): Toleranzen Kraftwerke pro Tag/Woche/Monat.
- bounds_day (Zelle 8): Filter
bounds_power_plantsauf Zeitraum „pro Tag“;match_kraftwerk_rowfindet Zeile pro j. - veredelung_bounds (Zelle 14):
tables['veredelung_bounds']inv_day/v_week/v_month;match_ver_rowholt Zeile je Kohlesorte/Zeitraum. - weitere Tabellen (später genutzt):
tables['kohle_mix'](Mischungsanteile),tables['foerderkapaz'](Förderlimits, Monat),tables['verladungskap'](KLP, Schicht/Tag),tables['Verfuegbarkeiten'](Schichtgrenzen, NaN = kein Limit).
Modellaufbau
- Sets (Zelle 10):
J={J, SP, B3, B4, V},Wausbedarf.week,D={Sa..Fr},S={F,S,N},I={Reichwalde, Nochten, Welzow}, HilfssetsI_W/I_N. - Parameter-Container (Zelle 12):
d, dV_N, dV_W, a_min_day, a_max_day(alle mutable). - Befüllung Bedarfe & Tages-Toleranzen (Zelle 14):
dunda_min_day/a_max_dayausrohkohlebedarf+bounds_day(Absolut/Pct kombiniert).dV_N/dV_Wausrohkohlebedarf.
Parameterdefinition (weiterführend)
- Wochen/Monats-Toleranzen (Zelle 21):
d_week/d_monthunda_min/a_maxausbounds_power_plants(pro Woche/Monat, inkl. Gesamtzeilen). - Veredlung Toleranzen (Zelle 22):
a_min/a_maxfür Tag/Woche/Monat ausveredelung_boundspro Kohlesorte. - Mischungsparameter (Zelle 25):
alpha_min/alpha_maxaustables['kohle_mix'](Mapping Namen→Model-Keys). - Förderkapazitäten (Zelle 45):
F_max_monthaustables['foerderkapaz'](Zeitraum pro Monat). - Verladungskapazitäten (Zelle 48): Caps aus
tables['verladungskap']für Boxberg (RW+NO) und Welzow-Süd (Schicht/Tag). - Verfügbarkeiten (Zelle 52):
cap_Welzow / cap_RW_Naustables['Verfuegbarkeiten'](NaN ⇒Constraint.Skip).
Tageslieferung und Abweichungen
- delivery_tolerance (Zelle 19):
y[j,w,d]in[d + a_min_day, d + a_max_day]fürj≠V. Daten:dausrohkohlebedarf;a_min_day/a_max_dayausbounds_power_plants(pro Tag). - demand/dev/dev_balance (Zelle 33): Nachfrage für V =
dV_N + dV_W, sonstd;dev_pos/negbalancieren. Daten:rohkohlebedarf. - max_reached / no_three_in_a_row (Zelle 35): Binärflag für erreichte Max-Tagesabweichung, nicht drei Tage in Folge. Daten:
a_max_dayausbounds_power_plants. - Veredlung devV_* (Zelle 37): Abweichungen je Kohlesorte; Daten:
dV_N/dV_Wausrohkohlebedarf. - Schichtglättung glatt_hi/lo (Zelle 39): L1-Abweichung zu Schichtmittel; Parameter
lambda_glattintern gesetzt. - Verbot Reichwalde→V (Zelle 43): Hart kodiert.
Wochen-/Monatslieferungen und Abweichung
- week_tolerance / month_tolerance (Zelle 21):
y_week/y_monthje Kraftwerk in Wochen-/Monats-Bändern. Daten:d_week/d_month+ Toleranzen ausbounds_power_plants. - week_total_tolerance / month_total_tolerance (Zelle 21): Gesamt über Kraftwerke in Bändern; Daten: Gesamtzeilen
bounds_power_plants. - Veredlung v_*_day/week/month_tol (Zelle 22): Lieferungen nach V (Nochten/Welzow/Gesamt) in Toleranzbändern; Daten:
veredelung_bounds+rohkohlebedarf.
Kohlensortenmischverhältnis
- mix_lower / mix_upper (Zelle 25): Anteil Kohlesorte i an Tagesgesamt
y_day[j]zwischenalpha_min/alpha_max. Daten:tables['kohle_mix'].
Kapazitäten & kombinierte Flussgrenzen
- cap_month / cap_month_RWNO (Zelle 45): Monatsförderung je Tagebau aus
foerderkapaz; RW+NO hart auf3_000_000t. - cap_boxberg_shift/day, cap_welzow_shift/day (Zelle 48): KLP-Limits aus
verladungskap(Schicht/Tag). - cap_welzow_con / cap_rw_n_con (Zelle 52): Schichtlimits aus
Verfuegbarkeiten, sonst Skip. - Paar-Grenzen RW+N (Zellen 57–60): Max je Schicht zu J/SP/V/B3; hart kodiert (
20k/25k/25k/32k). - Welzow Einzelziele (Zellen 62–65): Max je Schicht; hart kodiert (
26k/24k/24k/20k); pluswelzow_j_multiple_2ktmit2_000er Schritt. - Kombinierte Summen (Zellen 66–69): RW+N → SP/V/J/B3 und W → SP/V/B3; hart kodiert (
25k, 55k, 24k, 25k). - Gesamtkombis (Zellen 70–71): RW+N+W → J/B3; hart kodiert (
34k, 32k). - Gekoppelte Kombinationen (Zellen 72, 74): RW+N→{J/SP/V} mit W→B3; hart kodiert (
20k, 32k).
Schichtmuster / Balance
- shift_dev_4k (Zelle 79):
|x_s1 - x_s2| ≤ 10_000(≈10 kt) je Arc/Tag; hart kodiert. - shift_pattern (Zelle 80): Erzwingt Muster aufsteigend/absteigend/gleich; Parameter
MAX_FLOW=10_000_000,TOL=0; hart kodiert.
Ausgeschaltete Blöcke
- Zellen 61, 76, 78: Alternative Schichtlogiken (min je Schicht, Binärflags für Nutzung); aktuell auskommentiert.
Offene TODOs
- (Zelle 107) Straf-/Bonusterme (Early/Late), Förderband Boxberg 4, Lager/Bunker-Logik, Nichtverfügbarkeiten Verbraucher/Tagebaue, weitere kapazitive Constraints aus PDF.