67 lines
5.0 KiB
Plaintext
67 lines
5.0 KiB
Plaintext
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 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); plus welzow_j_multiple_2kt mit 2_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.
|