LEAG-COALLOG/notebooks/constraints_overview.txt
2026-03-17 12:00:21 +01:00

67 lines
5.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 → Dict tables[<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_plants auf Zeitraum „pro Tag“; match_kraftwerk_row findet Zeile pro j.
- Veredlung_Bounds (Zelle 14): tables['veredelung_bounds'] in v_day/v_week/v_month; match_ver_row holt Zeile je Kohlesorte/Zeitraum.
- Weitere Tabellen, die später genutzt werden (jeweils in den Constraints referenziert):
* tables['kohle_mix'] Mischungsanteile
* tables['foerderkapaz'] Förderlimits (pro Monat)
* tables['verladungskap'] KLP-Kapazitäten (Schicht/Tag)
* tables['Verfuegbarkeiten'] Schichtgenaue Limits (NaN = kein Limit)
Modellaufbau
- Sets (Zelle 10): J = {J, SP, B3, B4, V}; W aus bedarf.week; D = {Sa..Fr}; S = {F,S,N}; I = {Reichwalde, Nochten, Welzow}; Hilfssets I_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): d und a_min_day/a_max_day aus rohkohlebedarf + bounds_day (Absolut/Pct kombiniert). Veredlung dV_N/dV_W ebenfalls aus rohkohlebedarf.
Parameterdefinition (weiterführend)
- Wochen/Monats-Toleranzen (Zelle 21): Berechnung d_week/d_month und Toleranzen a_min/a_max aus bounds_power_plants (pro Woche/Monat, inkl. Gesamtzeilen).
- Veredlung Toleranzen (Zelle 22): a_min/a_max für Tag/Woche/Monat aus veredelung_bounds pro Kohlesorte.
- Mischungsparameter (Zelle 25): alpha_min/alpha_max aus tables['kohle_mix'] (Mapping Namen→Model-Keys).
- Förderkapazitäten (Zelle 45): F_max_month aus tables['foerderkapaz'] (Zeitraum pro Monat).
- Verladungskapazitäten (Zelle 48): Caps aus tables['verladungskap'] für Boxberg (RW+NO) und Welzow-Süd (pro Schicht/Tag).
- Verfügbarkeiten (Zelle 52): cap_Welzow / cap_RW_N aus tables['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ür j≠V. Daten: d aus rohkohlebedarf; a_min_day/a_max_day aus bounds_power_plants (pro Tag).
- demand/dev/dev_balance (Zelle 33): Nachfrage für V = dV_N + dV_W, sonst d; dev_pos/neg balancieren. 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_day aus bounds_power_plants.
- Veredlung devV_* (Zelle 37): Abweichungen je Kohlesorte; Daten: dV_N/dV_W aus rohkohlebedarf.
- Schichtglättung glatt_hi/lo (Zelle 39): L1-Abweichung zu Schichtmittel; Parameter lambda_glatt intern gesetzt.
- Verbot Reichwalde→V (Zelle 43): Hart kodiert.
Wochen-/Monatslieferungen und Abweichung
- week_tolerance / month_tolerance (Zelle 21): y_week/y_month je Kraftwerk in Wochen-/Monats-Bändern. Daten: d_week/d_month + Toleranzen aus bounds_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] zwischen alpha_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 auf 3_000_000 t.
- cap_boxberg_shift/day, cap_welzow_shift/day (Zelle 48): KLP-Limits aus verladungskap (pro Schicht/Tag).
- cap_welzow_con / cap_rw_n_con (Zelle 52): Schichtlimits aus Verfuegbarkeiten, sonst Skip.
- Paar-Grenzen RW+N (Zellen 5760): Max je Schicht zu J/SP/V/B3; hart kodiert (20k/25k/25k/32k).
- Welzow Einzelziele (Zellen 6265): Max je Schicht; hart kodiert (26k/24k/24k/20k); plus welzow_j_multiple_2kt mit 2_000er Schritt.
- Kombinierte Summen (Zellen 6669): RW+N → SP/V/J/B3 und W → SP/V/B3; hart kodiert (25k, 55k, 24k, 25k).
- Gesamtkombis (Zellen 7071): 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.