LEAG-COALLOG/latex/modellierung.tex
2026-03-17 11:57:51 +01:00

1062 lines
32 KiB
TeX

% Modellierung - LaTeX Vorlage (Deutsch)
\documentclass[a4paper,11pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{microtype}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{geometry}
\geometry{margin=2.5cm}
\usepackage{hyperref}
\hypersetup{colorlinks=true,linkcolor=blue,urlcolor=blue}
\usepackage{tikz}
\usetikzlibrary{positioning, shapes, arrows}
\usepackage{amsmath}
\usepackage{amssymb}
\setlength{\parindent}{0pt}
\titlehead{\includegraphics[width=0.35\textwidth]{LEAG.pdf}}
\addtokomafont{title}{\rmfamily\bfseries}
\title{Braunkohle-Supply-Chain-Optimierung\\}
\author{Nicolai Löwenberg, William-Julius Federsel}
\date{\today}
\begin{document}
\maketitle
% \begin{abstract}
% In diesem Dokument wird die Modellierung der Logistik im Lausitzer Braunkohlerevier beschrieben.
% \end{abstract}
In folgenden Dokument wird die Braunkohlelogistik im Lausitzer Braunkohlerevier als Optimierungs- problem beschrieben.
\tableofcontents
\newpage
\section{Optimierungsmodell}
\subsection{Indexmengen und Zeitstruktur}
\begin{align}
I &: \text{ Menge der Tagebaue},\\
J &: \text{ Menge der Verbraucher (Kraftwerke und Veredlungen)},\\
W &: \text{ Menge der Wochen im Planungszeitraum},\\
D &: \{Sa, So, Mo, Di, Mi, Do, Fr\},\\
S &: \{F, S, N\}.
\end{align}
Eine Zeiteinheit im Modell ist ein Tripel \((w,d,s)\) mit \(w \in W, d \in D, s \in S\).
Jeder Tag ist in drei Schichten unterteilt. Die Frühschicht $F$ beginnt um 05:00 Uhr, die Spätschicht $S$ beginnt um 13:00 Uhr und die Nachtschicht $N$ beginnt um 21:00 Uhr.
\subsection{Entscheidungsvariable}
\[
x_{i,j,w,d,s} \ge 0
\]
mit
\begin{itemize}
\item Einheit: t
\item Interpretation: Menge Rohkohle in t, die in Woche \(w\), Tag \(d\), Schicht \(s\) von Tagebau \(i\) zu Verbraucher \(j\) transportiert wird.
\end{itemize}
Die Variable ist ganzzahlig in 1000-t-Schritten, also:
\[
x_{i,j,w,d,s} \in \{\,1000 \cdot k \mid k \in \mathbb{N}_{0}\,\}.
\]
\subsection{Knoten und Relationen}
Im PoC werden die Tagebaue direkt als Quellknoten modelliert (keine expliziten
Kohlelagerplatz-Knoten). Die Verbraucher sind Kraftwerke und die Veredlung.
\begin{align}
I &: \text{ Menge der Tagebaue},\\
J &: \text{ Menge der Verbraucher (Kraftwerke und Veredlung)}.
\end{align}
Konkret gilt
\[
I =
\{\text{Reichwalde},\ \text{Nochten},\ \text{Welzow Süd}\},
\]
\[
J =
\{\text{Jänschwalde},\ \text{Schwarze Pumpe},\ \text{Boxberg Werk 3},\ \text{Boxberg Werk 4},\\
\text{Veredlung}\}.
\]
\subsection{Zulässige Transportrelationen}
Es wird für Paarungen \((i,j)\) aus Tagebau \(i \in I\) zu Verbraucher \(j \in J\)
eine Transportmenge \(x_{i,j,w,d,s}\) zugelassen. Wir definieren die Menge
aller zulässigen Relationen
\[
\mathcal{A} \subseteq I \times J.
\]
Im PoC gilt:
\subsubsection{1. Tagebau zu Verbraucher}
\[
(\,i,\ j\,) \in \mathcal{A}
\quad \text{für alle } i \in I,\ j \in J,
\]
mit der zusätzlichen Einschränkung
\[
(\text{Reichwalde},\ \text{Veredlung}) \notin \mathcal{A}.
\]
Zusätzlich gilt:
\[
(\text{Welzow Süd},\ \text{Boxberg Werk 4}) \notin \mathcal{A},
\]
also kann Boxberg Werk 4 nur von Nochten und Reichwalde beliefert werden.
\subsubsection{2. Ausschluss der übrigen Relationen}
Für alle nicht zugelassenen Paare \((i,j) \notin \mathcal{A}\) gilt
\[
x_{i,j,w,d,s} = 0
\qquad
\forall (i,j) \notin \mathcal{A},\ \forall w \in W,\ \forall d \in D,\ \forall s \in S.
\]
\subsection{Bedarfsrestriktionen der Kraftwerke}
Für jeden Verbraucher \( j \in J \) sei der Tagesbedarf
\[
d_{j,w,d} \ge 0
\]
gegeben. Die tatsächlich abgegebene Kohle pro Tag ergibt sich durch
\[
y_{j,w,d} = \sum_{i \in I} O_{i,j,w,d},
\]
wobei \(O_{i,j,w,d}\) der Tagesabfluss aus dem Bunker ist (ohne Bunker gilt \(O_{i,j,w,d}=X_{i,j,w,d}\)).
Die tägliche Abweichung vom Bedarf wird definiert als
\[
a^{\text{tag}}_{j,w,d} = y_{j,w,d} - d_{j,w,d}.
\]
\subsubsection*{1. Tagesabweichungen}
Für jeden Verbraucher gelten maximal zulässige Abweichungen pro Tag:
\[
- M^{\text{tag}}_j \le a^{\text{tag}}_{j,w,d} \le M^{\text{tag}}_j
\qquad \forall j \in J, \forall w \in W, \forall d \in D.
\]
Die Parameter \( M^{\text{tag}}_j \) ergeben sich aus den kraftwerksspezifischen Vorgaben, zum Beispiel:
\[
\begin{aligned}
M^{\text{tag}}_{\text{J}} &= 20000,\\
M^{\text{tag}}_{\text{SP}} &= 5500,\\
M^{\text{tag}}_{\text{B3}} &= 1000,\\
M^{\text{tag}}_{\text{B4}} &= 1000.
\end{aligned}
\]
Falls Prozentgrenzen gelten, kann alternativ
\[
M^{\text{tag}}_j = \max\{M^{\text{tag,fix}}_j,\ p_j \cdot d_{j,w,d}\}
\]
verwendet werden.
\textcolor{gray}{%
\textbf{Hinweis zur Infeasibility:}
Die Transportvariable $k$ ist ganzzahlig in 1000\;t-Schritten, die Wochen-/Monats-Toleranzen waren dafür zu eng.
Wir haben die Toleranzberechnung so angepasst, dass jede Toleranz mindestens $\pm 1000$\,t (bei Gesamt-Constraints ggf. $\pm 2000$\,t) zulässt.
Damit passen die 1000er-Schritte wieder in die Bounds, $k$ bleibt ganzzahlig, und das Modell ist ohne Workarounds lösbar.%
}
\subsubsection*{2. Wochenabweichungen}
Die Abweichung über eine Woche berechnet sich als
\[
a^{\text{woche}}_{j,w} = \sum_{d \in D} a^{\text{tag}}_{j,w,d}.
\]
Zulässig ist
\[
- M^{\text{woche}}_j \le a^{\text{woche}}_{j,w} \le M^{\text{woche}}_j
\qquad \forall j \in J, \forall w \in W.
\]
Typische Werte aus den Annahmen:
\[
M^{\text{woche}}_{\text{J}} = 2000, \quad
M^{\text{woche}}_{\text{SP}} = 2000, \quad
M^{\text{woche}}_{\text{B3}} = 1000, \quad
M^{\text{woche}}_{\text{B4}} = 500.
\]
\subsubsection*{3. Monatsabweichungen}
Die monatliche Abweichung lautet
\[
a^{\text{monat}}_{j} = \sum_{w \in W} \sum_{d \in D} a^{\text{tag}}_{j,w,d}.
\]
Daraus ergibt sich die Restriktion
\[
- M^{\text{monat}}_j \le a^{\text{monat}}_{j} \le M^{\text{monat}}_j
\qquad \forall j \in J.
\]
Mit Parametern aus den Annahmen:
\[
M^{\text{monat}}_{\text{J}} = 2000, \quad
M^{\text{monat}}_{\text{SP}} = 2000, \quad
M^{\text{monat}}_{\text{B3}} = 500, \quad
M^{\text{monat}}_{\text{B4}} = 200.
\]
\subsubsection*{4. Gesamtgrenzen über alle Kraftwerke}
Für die Summe aller Kraftwerke gelten zusätzlich:
\[
\underline{M}^{\text{woche}}_{\text{ges}} \le \sum_{j \in J} a^{\text{woche}}_{j,w} \le \overline{M}^{\text{woche}}_{\text{ges}}
\qquad \forall w \in W,
\]
\[
\underline{M}^{\text{monat}}_{\text{ges}} \le \sum_{j \in J} a^{\text{monat}}_{j} \le \overline{M}^{\text{monat}}_{\text{ges}}.
\]
\subsubsection*{5. Begrenzung maximaler Tagesabweichungen auf höchstens zwei bzw. drei aufeinanderfolgende Tage}
Dafür benötigen wir binäre Variablen
\[
z_{j,w,d} \in \{0,1\},
\]
die anzeigen, ob eine Tagesabweichung den Maximalwert erreicht.
Zuordnung:
\[
a^{\text{tag}}_{j,w,d} \le M^{\text{tag}}_j \, z_{j,w,d}.
\]
Es darf höchstens zwei Tage in Folge geben, an denen die Maximalabweichung erreicht wird:
\[
z_{j,w,d} + z_{j,w,d+1} + z_{j,w,d+2} \le K
\qquad \forall j \in J, \forall w \in W, \forall d \in \{1,\dots,|D|-2\}.
\]
Dabei ist \(K \in \{2,3\}\) ein Parameter, der noch fachlich zu validieren ist.
Dies stellt sicher, dass maximale Tagesabweichungen nicht länger als \(K\) Tage hintereinander auftreten dürfen.
\subsection{Bedarfsrestriktionen für die Veredlung}
Die Veredlung benötigt zwei Kohlesorten, Nochtener Kohle und Welzower Kohle. Tagebau Reichwalde liefert keine geeignete Veredlungskohle und wird daher in diesem Abschnitt ausgeschlossen.
\subsubsection*{Definition der Tageslieferungen}
Für die Veredlung definieren wir die täglichen Abgaben der beiden zulässigen Kohlesorten
\[
y^{\text{N}}_{w,d} = \sum_{s\in S} o_{\text{Nochten},\ \text{V},\ w,d,s},
\qquad
y^{\text{W}}_{w,d} = \sum_{s\in S} o_{\text{Welzow},\ \text{V},\ w,d,s}.
\]
Der gesamte Tagesinput ist
\[
y^{\text{ges}}_{w,d} = y^{\text{N}}_{w,d} + y^{\text{W}}_{w,d}.
\]
Die Bedarfe für Nochtener und Welzower Kohle seien
\[
d^{\text{N}}_{w,d},\qquad d^{\text{W}}_{w,d},
\]
und der Gesamtbedarf
\[
d^{\text{ges}}_{w,d} = d^{\text{N}}_{w,d} + d^{\text{W}}_{w,d}.
\]
\subsubsection*{Abweichungen}
Wir definieren die Abweichungen
\[
a^{\text{N}}_{w,d} = y^{\text{N}}_{w,d} - d^{\text{N}}_{w,d},
\qquad
a^{\text{W}}_{w,d} = y^{\text{W}}_{w,d} - d^{\text{W}}_{w,d},
\]
sowie die Gesamtabweichung
\[
a^{\text{ges}}_{w,d} = y^{\text{ges}}_{w,d} - d^{\text{ges}}_{w,d}.
\]
\subsubsection*{1. Tagesabweichungen Veredlung}
Für Nochtener Kohle:
\[
\underline{M}^{\text{N,tag}} \le a^{\text{N}}_{w,d} \le \overline{M}^{\text{N,tag}}.
\]
Für Welzower Kohle:
\[
\underline{M}^{\text{W,tag}} \le a^{\text{W}}_{w,d} \le \overline{M}^{\text{W,tag}}.
\]
Für den Gesamtbedarf:
\[
\underline{M}^{\text{ges,tag}} \le a^{\text{ges}}_{w,d} \le \overline{M}^{\text{ges,tag}}.
\]
\subsubsection*{2. Wochenabweichungen}
Für Nochtener Kohle:
\[
\underline{M}^{\text{N,woche}} \le \sum_{d\in D} a^{\text{N}}_{w,d} \le \overline{M}^{\text{N,woche}}.
\]
Für Welzower Kohle:
\[
\underline{M}^{\text{W,woche}} \le \sum_{d\in D} a^{\text{W}}_{w,d} \le \overline{M}^{\text{W,woche}}.
\]
Für den Gesamtbedarf:
\[
\underline{M}^{\text{ges,woche}} \le \sum_{d\in D} a^{\text{ges}}_{w,d} \le \overline{M}^{\text{ges,woche}}.
\]
\subsubsection*{3. Monatsabweichungen}
Für Nochtener Kohle:
\[
\underline{M}^{\text{N,monat}} \le \sum_{w\in W}\sum_{d\in D} a^{\text{N}}_{w,d} \le \overline{M}^{\text{N,monat}}.
\]
Für Welzower Kohle:
\[
\underline{M}^{\text{W,monat}} \le \sum_{w\in W}\sum_{d\in D} a^{\text{W}}_{w,d} \le \overline{M}^{\text{W,monat}}.
\]
Für den Gesamtbedarf:
\[
\underline{M}^{\text{ges,monat}} \le \sum_{w\in W}\sum_{d\in D} a^{\text{ges}}_{w,d} \le \overline{M}^{\text{ges,monat}}.
\]
\subsubsection*{4. Ausschluss von Tagebau Reichwalde}
Für Reichwalder Kohle gilt
\[
x_{\text{Reichwalde},\text{V},w,d,s} = 0
\quad
\forall w\in W,\ d\in D,\ s\in S.
\]
Diese Nebenbedingung stellt sicher, dass Reichwalder Kohle nicht zur Deckung der Veredlungsbedarfe verwendet wird.
\subsection{Kohlesorten Mischungsverhältnisse}
\subsubsection*{1. Harte Mischungsgrenzen}
Die Kohlesortenmischung wird auf dem \emph{täglichen Bunkerbestand} je Anlage modelliert.
Sei \(B_{i,j,w,d}\) der Tagesendbestand der Kohlesorte \(i\) im Bunker von Verbraucher \(j\) und
\[
B_{j,w,d} = \sum_{i \in I} B_{i,j,w,d}
\]
der gesamte Bunkerbestand von \(j\) am Tagesende.
Für das Kohlesortenmischverhältnis definieren wir für jede Kombination aus Tagebau \(i\) und Verbraucher \(j\)
zwei Parameter
\[
\alpha^{\min}_{i,j}, \quad \alpha^{\max}_{i,j} \in [0,1],
\]
die den minimalen und maximalen Anteil der von Tagebau \(i\) gelieferten Kohle am Bunkerbestand
von Verbraucher \(j\) beschreiben. Die Mischungsrestriktion lautet dann
\[
\alpha^{\min}_{i,j} \, B_{j,w,d}
\;\le\;
B_{i,j,w,d}
\;\le\;
\alpha^{\max}_{i,j} \, B_{j,w,d}
\qquad
\forall i \in I,\ \forall j \in J_{\text{Mix}},\ \forall w \in W,\ \forall d \in D.
\]
Dabei gilt \(J_{\text{Mix}}=\{\text{J},\text{SP},\text{B3},\text{B4},\text{V}\}\).
Damit ergibt sich für die wichtigsten Kombinationen zum Beispiel
\begin{align*}
\text{Kraftwerk Jänschwalde:} \quad
& 0 \le \alpha^{\min}_{\text{Reichwalde},\text{J}} \le \alpha^{\max}_{\text{Reichwalde},\text{J}} = 0{,}50,\\
& 0 \le \alpha^{\min}_{\text{Nochten},\text{J}} \le \alpha^{\max}_{\text{Nochten},\text{J}} = 0{,}15,\\
& 0 \le \alpha^{\min}_{\text{Welzow},\text{J}} \le \alpha^{\max}_{\text{Welzow},\text{J}} = 1{,}00,
\\[0.5em]
\text{Kraftwerk Schwarze Pumpe:} \quad
& 0 \le \alpha^{\max}_{\text{Reichwalde},\text{SP}} = 0{,}40,\\
& 0 \le \alpha^{\max}_{\text{Nochten},\text{SP}} = 1{,}00,\\
& 0 \le \alpha^{\max}_{\text{Welzow},\text{SP}} = 1{,}00,
\\[0.5em]
\text{Kraftwerk Boxberg Werk 3:} \quad
& \alpha^{\min}_{\text{Reichwalde},\text{B3}} = 0{,}35,\quad
\alpha^{\max}_{\text{Reichwalde},\text{B3}} = 0{,}35,\\
& \alpha^{\min}_{\text{Nochten},\text{B3}} = 0{,}65,\quad
\alpha^{\max}_{\text{Nochten},\text{B3}} = 0{,}65,\\
& 0 \le \alpha^{\max}_{\text{Welzow},\text{B3}} = 1{,}00,
\\[0.5em]
\text{Kraftwerk Boxberg Werk 4:} \quad
& 0{,}30 \le \alpha^{\min}_{\text{Reichwalde},\text{B4}} \le \alpha^{\max}_{\text{Reichwalde},\text{B4}} = 0{,}80,\\
& 0{,}30 \le \alpha^{\min}_{\text{Nochten},\text{B4}} \le \alpha^{\max}_{\text{Nochten},\text{B4}} = 1{,}00,\\
& \alpha^{\min}_{\text{Welzow},\text{B4}} = \alpha^{\max}_{\text{Welzow},\text{B4}} = 0.
\end{align*}
Die Parameter für Boxberg~Werk~4 werden analog verwendet.
\subsubsection*{2. Zielmischung (weich) in der Zielfunktion}
Zusätzlich wird ein Zielmischverhältnis als weiche Nebenbedingung modelliert. Dazu definieren wir
\(\alpha^{\text{ziel,low}}_{i,j}\) und \(\alpha^{\text{ziel,high}}_{i,j}\) sowie nichtnegative
Abweichungsvariablen \(\delta^{\text{low}}_{i,j,w,d} \ge 0\) und \(\delta^{\text{high}}_{i,j,w,d} \ge 0\):
\[
B_{i,j,w,d} + \delta^{\text{low}}_{i,j,w,d} \ge \alpha^{\text{ziel,low}}_{i,j}\, B_{j,w,d},
\]
\[
B_{i,j,w,d} \le \alpha^{\text{ziel,high}}_{i,j}\, B_{j,w,d} + \delta^{\text{high}}_{i,j,w,d}.
\]
Die Zielmischung geht über einen Strafterm in die Zielfunktion ein:
\[
\lambda_{\text{mix}} \sum_{i \in I}\sum_{j \in J}\sum_{w \in W}\sum_{d \in D}
\left(\delta^{\text{low}}_{i,j,w,d} + \delta^{\text{high}}_{i,j,w,d}\right).
\]
\subsection{Kohlefördermengenkapazitäten}
Für jeden Tagebau \( i \in I \) definieren wir die monatliche Fördermenge
\[
F_{i} = \sum_{w \in W} \sum_{d \in D} \sum_{j \in J} \sum_{s \in S} x_{i,j,w,d,s}.
\]
Es gelten die folgenden maximal zulässigen Fördermengen pro Monat (Parameter):
\begin{align}
F_i &\le \overline{F}^{\text{monat}}_i \qquad \forall i \in I.
\end{align}
Zusätzlich gilt für ausgewählte Kombinationen eine gemeinsame Obergrenze, z.\,B.:
\begin{equation}
F_{\text{Reichwalde}} + F_{\text{Nochten}} \le \overline{F}^{\text{monat}}_{\text{RW+NO}}.
\end{equation}
Beispielwerte für die maximalen Fördermengen sind:
\begin{align*}
\overline{F}^{\text{monat}}_{\text{Reichwalde}} &= 2\,000\,000,\\
\overline{F}^{\text{monat}}_{\text{Nochten}} &= 1\,800\,000,\\
\overline{F}^{\text{monat}}_{\text{Welzow}} &= 1\,200\,000,\\
\overline{F}^{\text{monat}}_{\text{RW+NO}} &= 3\,000\,000.
\end{align*}
Diese Restriktionen stellen sicher, dass die Gesamtfördermenge der einzelnen Tagebaue sowie die kombinierte Förderung innerhalb der geplanten Kapazitäten bleibt.
\subsection{Verladungskapazität am Kohlelagerplatz Boxberg}
Der Kohlelagerplatz Boxberg besitzt eine begrenzte Zugverladekapazität. Für jede Schicht und jeden Tag
dürfen nur maximal die in den Annahmen definierten Mengen verladen werden.
Die Parameter \(Z^{\max}_{\text{schicht}}\) und \(Z^{\max}_{\text{tag}}\) werden aus einer Eingabetabelle
(Kapazitätsdaten) gelesen und sind szenariobasiert. Die nachfolgend genannten Werte dienen nur als Beispiel.
\subsubsection*{Schichtweise Kapazität}
Die maximale Anzahl verladenbarer Züge pro Schicht beträgt
\[
Z^{\max}_{\text{schicht}} = 25,
\]
entsprechend
\[
25\,000 \text{ t pro Schicht}.
\]
Dies führt zu der Restriktion
\[
\sum_{j \in J_{\text{Boxberg}}} x_{\text{Boxberg},j,w,d,s}
\;\le\;
25\,000
\qquad
\forall w \in W,\ \forall d \in D,\ \forall s \in S.
\]
Hierbei ist \( J_{\text{Boxberg}} \) die Menge aller Verbraucher, die von Boxberg über die Schiene beliefert werden können:
\[
J_{\text{Boxberg}} =
\{\text{Jänschwalde},\ \text{Schwarze Pumpe},\
\text{Boxberg Werk 3},\ \text{Veredlung}\}.
\]
\subsubsection*{Tägliche Kapazität}
Die maximale Gesamtverladung pro Tag beträgt
\[
Z^{\max}_{\text{tag}} = 75,
\]
also
\[
75\,000 \text{ t pro Tag}.
\]
Damit gilt
\[
\sum_{s \in S} \sum_{j \in J_{\text{Boxberg}}}
x_{\text{Boxberg},j,w,d,s}
\;\le\;
75\,000
\qquad
\forall w \in W,\ \forall d \in D.
\]
\subsubsection*{Zulässige Kohlesorten}
Vom Kohlelagerplatz Boxberg können ausschließlich die Kohlesorten
\[
\text{Nochtener Kohle},\qquad
\text{Reichwalder Kohle}
\]
verladen werden. Dies ergibt die Nebenbedingung
\[
x_{\text{Welzow}, j,w,d,s} = 0
\qquad
\forall j \in J_{\text{Boxberg}},\ \forall w,d,s,
\]
da Welzower Kohle nicht über Boxberg verladen wird.
\subsubsection*{Zulässige Verbraucher}
Der Kohlelagerplatz Boxberg kann liefern an
\[
\text{Jänschwalde},\quad
\text{Schwarze Pumpe},\quad
\text{Boxberg Werk 3},\quad
\text{Veredlung Industriepark Schwarze Pumpe}.
\]
Dies wird durch Ausschlussbedingungen modelliert:
\[
x_{\text{Boxberg},j,w,d,s} = 0
\qquad
\forall j \notin J_{\text{Boxberg}},\ \forall w,d,s.
\]
\subsection{Verladungskapazität am Kohlelagerplatz Welzow Süd}
Der Kohlelagerplatz Welzow Süd verfügt über zwei parallele Bandanlagen (Band 116 und Band 117).
Für das Optimierungsmodell werden diese gemeinsam als Gesamtverladung betrachtet.
Die Parameter \(Z^{\max,\text{schicht}}_{\text{Welzow}}\) und \(Z^{\max,\text{tag}}_{\text{Welzow}}\) werden
analog aus der Kapazitätstabelle als Input gelesen und sind je Szenario variabel. Die angegebenen Zahlen
unten sind Beispielwerte.
\subsubsection*{Schichtweise Kapazität}
Die maximale Anzahl verladenbarer Züge pro Schicht beträgt
\[
Z^{\max,\text{schicht}}_{\text{Welzow}} = 33,
\]
entsprechend
\[
33\,000 \text{ t pro Schicht}.
\]
Die Kapazitätsrestriktion lautet damit
\[
\sum_{j \in J_{\text{Welzow}}} x_{\text{Welzow},j,w,d,s}
\;\le\;
33\,000
\qquad
\forall w \in W,\ \forall d \in D,\ \forall s \in S.
\]
\subsubsection*{Tägliche Kapazität}
Die maximale Verladekapazität pro Tag beträgt
\[
Z^{\max,\text{tag}}_{\text{Welzow}} = 99,
\]
also
\[
99\,000 \text{ t pro Tag}.
\]
Damit gilt
\[
\sum_{s \in S} \sum_{j \in J_{\text{Welzow}}}
x_{\text{Welzow},j,w,d,s}
\;\le\;
99\,000
\qquad
\forall w \in W,\ \forall d \in D.
\]
\subsubsection*{Zulässige Verbraucher}
Welzow Süd kann folgende Verbraucher beliefern:
\[
J_{\text{Welzow}} =
\{\text{Jänschwalde},\
\text{Schwarze Pumpe},\
\text{Boxberg Werk 3},\
\text{Veredlung}\}.
\]
Für alle anderen Ziele gilt
\[
x_{\text{Welzow},j,w,d,s} = 0
\qquad
\forall j \notin J_{\text{Welzow}},\ \forall w,d,s.
\]
\subsubsection*{Zulässige Kohlesorten}
Welzow Süd liefert ausschließlich Welzower Kohle:
\[
x_{\text{Reichwalde}, j,w,d,s} = 0,\qquad
x_{\text{Nochten}, j,w,d,s} = 0
\qquad
\forall j \in J_{\text{Welzow}},\ \forall w,d,s.
\]
\subsection{Zugdurchlasskapazitäten}
Für die Anlieferung zum Kraftwerk Jänschwalde existieren drei unterschiedliche
Zugrelationen mit getrennten Kapazitäten pro Schicht. Für jede dieser Relationen
definieren wir eine maximale Anzahl an Zügen pro Schicht, jeweils entsprechend
der zugelassenen Zugdurchlassmenge.
Die transportierte Menge pro Schicht ergibt sich aus
\[
Z_{i,j,w,d,s} = x_{i,j,w,d,s}.
\]
\subsubsection*{Generische Formulierung}
Für jede zulässige Relation $r$ mit Quellmenge $I_r \subseteq I$, Zielmenge $J_r \subseteq J$
und Kapazität $C_r$ pro Schicht gilt
\[
\sum_{i \in I_r} \sum_{j \in J_r} x_{i,j,w,d,s} \;\le\; C_r
\qquad \forall w\in W,\ d\in D,\ s\in S.
\]
Die Werte $I_r$, $J_r$ und $C_r$ werden aus den Parametertabellen
(\texttt{zugdurchlass}) geladen.
\subsubsection*{Derzeit hinterlegte Relationen (pro Schicht)}
\begin{itemize}
\item Welzow $\rightarrow$ Jänschwalde: $C=26\,000$\,t, zusätzlich ganzzahliges Vielfaches von $2\,000$\,t.
\item Welzow $\rightarrow$ Schwarze Pumpe: $C=24\,000$\,t.
\item Welzow $\rightarrow$ Veredlung: $C=24\,000$\,t.
\item Welzow $\rightarrow$ Boxberg Werk 3: $C=20\,000$\,t.
\item Welzow $\rightarrow$ \{SP, V\}: gemeinsam $C=24\,000$\,t.
\item Welzow $\rightarrow$ \{SP, V, B3\}: gemeinsam $C=25\,000$\,t.
\item Reichwalde + Nochten $\rightarrow$ Jänschwalde: $C=20\,000$\,t.
\item Reichwalde + Nochten $\rightarrow$ Schwarze Pumpe: $C=25\,000$\,t.
\item Reichwalde + Nochten $\rightarrow$ Veredlung: $C=25\,000$\,t.
\item Reichwalde + Nochten $\rightarrow$ Boxberg Werk 3: $C=32\,000$\,t.
\item Reichwalde + Nochten $\rightarrow$ \{SP, V\}: gemeinsam $C=25\,000$\,t.
\item Reichwalde + Nochten $\rightarrow$ \{J, SP, V, B3\}: gemeinsam $C=55\,000$\,t.
\item Reichwalde + Nochten + Welzow $\rightarrow$ Jänschwalde: $C=34\,000$\,t.
\item Reichwalde + Nochten + Welzow $\rightarrow$ Boxberg Werk 3: $C=32\,000$\,t.
\item (Reichwalde + Nochten $\rightarrow$ Jänschwalde) $+$ (Welzow $\rightarrow$ B3): gemeinsam $C=20\,000$\,t.
\item (Reichwalde + Nochten $\rightarrow$ \{J, SP, V\}) $+$ (Welzow $\rightarrow$ B3): gemeinsam $C=32\,000$\,t.
\end{itemize}
\subsection{Stillstände / kurzfristige Nicht-Verfügbarkeiten}
Kurzfristige Nicht-Verfügbarkeiten werden als dynamische \emph{Verladungskapazitäten} pro Schicht
modelliert, die aus der Tabelle \texttt{Verfuegbarkeiten} je Datum geladen werden. Für jede Schicht
werden die maximal möglichen Verladungen vorgegeben und bei fehlenden Werten (keine Angabe)
keine zusätzliche Restriktion gesetzt.
Wir definieren die Parameter (in t):
\[
C^{\text{WZ}}_{w,d,s}, \qquad C^{\text{RW+NO}}_{w,d,s},
\]
die die maximal verfügbare Verladung in Schicht \(s\) am Tag \(d\) der Woche \(w\)
für Welzow bzw. für Reichwalde+Nochten beschreiben.
Die entsprechenden Restriktionen lauten:
\[
\sum_{j \in J} x_{\text{Welzow},j,w,d,s} \le C^{\text{WZ}}_{w,d,s}
\qquad \forall w\in W,\ \forall d\in D,\ \forall s\in S,
\]
\[
\sum_{j \in J} \left(x_{\text{Reichwalde},j,w,d,s} + x_{\text{Nochten},j,w,d,s}\right)
\le C^{\text{RW+NO}}_{w,d,s}
\qquad \forall w\in W,\ \forall d\in D,\ \forall s\in S.
\]
Fehlt ein Kapazitätswert, wird die entsprechende Restriktion für diese Schicht
nicht aktiviert.
\paragraph{KVB Nord (kurzfristige Kapazität nach Jänschwalde).}
Zusätzlich werden kurzfristige Kapazitäten aus der Tabelle
\texttt{zugdurchlass\_kvb\_nord} berücksichtigt. Falls ein Wert vorliegt, gilt pro Schicht
\[
\sum_{i \in \{\text{Reichwalde},\text{Nochten},\text{Welzow}\}} x_{i,\text{J},w,d,s}
\le C^{\text{KVB}}_{w,d,s}.
\]
Fehlende Werte führen zu keiner zusätzlichen Restriktion.
\section{Weiche Restriktionen und Zielfunktion}
Die folgenden Restriktionen sind \emph{weich}. Die Einhaltung der Bedarfe unter Beachtung aller harten
Restriktionen hat Vorrang. Die weichen Restriktionen werden über Strafterme in der Zielfunktion abgebildet.
\subsection{Zielfunktion}
Die Zielfunktion setzt sich aus Straf- und Bonustermen zusammen. Es gibt keinen direkten Term für die
Gesamtliefermenge; diese wirkt nur indirekt über die Nebenbedingungen. Damit ergibt sich:
\[
\begin{aligned}
\min Z
\;&
\lambda^{\text{tag}}
\sum_{j \in J} \sum_{w \in W} \sum_{d \in D}
\left| a^{\text{tag}}_{j,w,d} \right|
+
\lambda^{\text{woche}}
\sum_{j \in J} \sum_{w \in W}
\left| a^{\text{woche}}_{j,w} \right|
+
\lambda^{\text{monat}}
\sum_{j \in J}
\left| a^{\text{monat}}_{j} \right|
\\
&+
\lambda_{\text{Mon}}
\sum_{j \in J} \sum_{w \in W} p_{j,w}^{\text{Mon}}
+
\lambda_{\text{NV}}
\sum_{j} \sum_{t} q_{j,t}^{\text{NV}}
+
\lambda_{\text{shift}}
\sum_{i \in I} \sum_{j \in J} \sum_{w \in W} \sum_{d \in D}
\sum_{(s_1,s_2)\in \mathcal{S}}
e_{i,j,w,d,s_1,s_2}
+
\lambda_{\text{shift-bal}}
\sum_{j \in J} \sum_{w \in W} \sum_{d \in D} \sum_{s \in S}
\sigma_{j,w,d,s}
+
\lambda_{\text{B-max}}
\sum_{j \in J} \sum_{w \in W} \sum_{d \in D} r_{j,w,d}
+
\\
&+
\sum_{(i,j)\in \mathcal{P}} \sum_{w \in W} \sum_{d \in D} \lambda^{\text{pen}}_{i,j}\, X_{i,j,w,d}
-
\sum_{(i,j)\in \mathcal{B}} \sum_{w \in W} \sum_{d \in D} \lambda^{\text{bon}}_{i,j}\, X_{i,j,w,d}.
\end{aligned}
\]
\subsubsection*{Glattheit (Smoothness)}
Die Glattheit bestraft starke Unterschiede zwischen Schichten. Dafür wird
für jedes Schichtpaar \((s_1,s_2)\in\mathcal{S}=\{(F,S),(S,N),(F,N)\}\) die absolute
Differenz der Schichtmengen gebildet und nur der Anteil oberhalb einer Toleranz
\(\tau_{\text{shift}}\) penalisiert:
\[
e_{i,j,w,d,s_1,s_2} \ge \left|x_{i,j,w,d,s_1}-x_{i,j,w,d,s_2}\right| - \tau_{\text{shift}},
\qquad e_{i,j,w,d,s_1,s_2} \ge 0.
\]
Damit werden unruhige Schichtwechsel reduziert, ohne kleine Schwankungen zu bestrafen.
\subsubsection*{Schichtverteilung (weich)}
Die schichtweise Abgabe definieren wir als
\[
y_{j,w,d,s} = \sum_{i \in I} o_{i,j,w,d,s}.
\]
Da der Tagesbedarf schichtweise nicht vorgegeben ist, wird eine gleichmäßige
Verteilung als weiche Restriktion modelliert. Für jede Anlage \(j\) und Schicht \(s\):
\[
\sigma_{j,w,d,s} \ge \left|y_{j,w,d,s} - \frac{1}{3} y_{j,w,d}\right|,
\qquad \sigma_{j,w,d,s} \ge 0,
\]
und der zugehörige Strafterm lautet
\[
\lambda_{\text{shift-bal}} \sum_{j,w,d,s} \sigma_{j,w,d,s}.
\]
Die ersten drei Summanden minimieren die Abweichungen auf Tages-, Wochen- und Monatsebene. Danach folgen die
weichen Präferenzen (vgl. Unterabschnitt „Weitere weiche Restriktionen“):
\begin{itemize}
\item Montag-Bunkerfüllstand \(p^{\text{Mon}}_{j,w}\) mit \(\lambda_{\text{Mon}}\).
\item Vorfahren vor Nicht-Verfügbarkeiten \(q_{j,t}^{\text{NV}}\) mit \(\lambda_{\text{NV}}\).
\item (entfällt) Bunker-Maximalstand ist hart.
\item Schichtverteilung \(\sigma_{j,w,d,s}\) mit \(\lambda_{\text{shift-bal}}\).
\item Ausgleichskraftwerk Schwarze Pumpe \(|v_{\text{SP},w,d}|\) mit \(\lambda_{\text{SP}}\).
\item Strafterm für Welzower Anteil in Boxberg 3 \(p^{\text{W}}_{\text{B3},w,d}\) mit \(\lambda^{\text{pen}}_{\text{B3}}\).
\item Bonus Welzower Anteil in Jänschwalde \(u^{\text{Welzow}}_{\text{J},w,d}\) mit \(\lambda_{\text{J}}\).
\item Bonus Nochten-/Reichwalde-Anteil in Boxberg 3 \(u^{\text{N}}_{\text{B3},w,d}, u^{\text{R}}_{\text{B3},w,d}\) mit \(\lambda_{\text{B3}}\).
\item Bonus Bandbelieferung Boxberg 4 \(X_{\text{Nochten},\text{B4}}, X_{\text{Reichwalde},\text{B4}}\) mit \(\lambda_{\text{B4}}\).
\item Generelle Präferenz für Reichwalde \(u^{\text{R}}_{j,w,d}\) mit \(\lambda_{\text{R}}\).
\end{itemize}
Alle \(\lambda\)-Parameter sind Gewichte (positiv gewählt); Bonusterme erscheinen mit negativem Vorzeichen.
\subsubsection*{2. Bunkerbilanz (täglich)}
Für jedes Kraftwerk \(j \in J\) sowie die Veredlung \(V\) wird ein Tagesbunkerbestand
je Kohlesorte modelliert. Der Tagesendbestand der Kohlesorte \(i\) lautet
\[
B_{i,j,w,d} = B_{i,j,w,d-1} + X_{i,j,w,d} - O_{i,j,w,d},
\]
wobei
\[
X_{i,j,w,d} = \sum_{s \in S} x_{i,j,w,d,s}
\]
der Tageszufluss und
\[
O_{i,j,w,d} = \sum_{s \in S} o_{i,j,w,d,s}
\]
der Tagesabfluss aus dem Bunker ist. Die Abgabe an den Verbraucher lautet
\[
y_{j,w,d} = \sum_{i \in I} O_{i,j,w,d}.
\]
Hierbei bezeichnet \(o_{i,j,w,d,s}\) die schichtweise Abgabe aus dem Bunker.
Ein Anfangsbestand \(B_{i,j,w,d_0}\) wird vorgegeben.
\subsubsection*{3. Zielbestand vor Montag (weich)}
Für den Montag wird ein Zielbestand \(B^{\text{Mon}}_j\) angestrebt. Wir verwenden
eine Shortfall-Variable \(p^{\text{Mon}}_{j,w} \ge 0\) und formulieren
\[
B^{\text{Mon}}_j - B_{j,w,\text{So}} \le p^{\text{Mon}}_{j,w}
\qquad \forall j \in J,\ \forall w \in W.
\]
Der Strafterm in der Zielfunktion lautet
\[
\lambda_{\text{Mon}} \sum_{j \in J} \sum_{w \in W} p^{\text{Mon}}_{j,w}.
\]
\subsubsection*{4. Vorfahren vor Nicht-Verfügbarkeiten (weich)}
Nicht-Verfügbarkeiten werden aus der Verfügbarkeitstabelle erkannt (Kapazität \(=0\)).
Mit einem Vorfahrfenster von \(\Delta\) Tagen wird ein Zielbestand \(B^{\text{NV}}_j\)
für den Zeitpunkt \(t-\Delta\) vor dem IH-Tag angestrebt. Wir definieren
\(q^{\text{NV}}_{j,t} \ge 0\) und setzen
\[
B^{\text{NV}}_j - B_{j,t-\Delta} \le q^{\text{NV}}_{j,t}.
\]
Der Strafterm lautet
\[
\lambda_{\text{NV}} \sum_{j} \sum_{t} q^{\text{NV}}_{j,t}.
\]
\subsubsection*{5. Maximalbestand (hart)}
Die Bunker-Maximalstände werden als harte Restriktion modelliert:
\[
B_{j,w,d} \le B^{\max}_j
\qquad \forall j \in J,\ \forall w \in W,\ \forall d \in D.
\]
\subsubsection*{Weitere weiche Restriktionen}
Zusätzlich werden Routenpräferenzen als Straf- bzw. Bonusterme modelliert. In der aktuellen Konfiguration:
\textbf{Strafterme (teure Strecken):}
\[
\text{Nochten}\rightarrow\text{Jänschwalde},\quad
\text{Welzow}\rightarrow\text{Schwarze Pumpe},\quad
\text{Welzow}\rightarrow\text{Boxberg Werk 3}.
\]
\textbf{Bonusterme (bevorzugte Strecken):}
\[
\text{Welzow}\rightarrow\text{Jänschwalde},\quad
\text{Reichwalde}\rightarrow\text{Schwarze Pumpe},\quad
\text{Reichwalde}\rightarrow\text{Boxberg Werk 3},\quad
\text{Nochten}\rightarrow\text{Boxberg Werk 3}.
\]
Diese Präferenzen wirken additiv zur Zielfunktion über entsprechende Gewichte.
\subsubsection{6. Schichtrelationen zwischen Tagebau Welzow Süd und Kraftwerk Jänschwalde}
Pro Schicht muss ein Vielfaches von 2 Zügen geliefert werden:
\[
x_{\text{Welzow},\ \text{J},\ w,d,s} \in \{ 2000 \cdot k \mid k \in \mathbb{N}_{0}\}.
\]
\newpage
\subsection{Relationsgraph}
\begin{center}
\rotatebox{90}{
\begin{tikzpicture}[
font=\sffamily,
node distance=2.2cm,
greenbox/.style={
draw,
rounded corners,
fill=green!30,
minimum width=3.8cm,
minimum height=1.1cm,
align=center
},
bluebox/.style={
draw,
rounded corners,
fill=cyan!30,
minimum width=4cm,
minimum height=1.4cm,
align=center
},
smallbox/.style={
draw,
rounded corners,
fill=yellow!40,
minimum width=3.4cm,
minimum height=1.1cm,
align=center
},
tinybox/.style={
draw,
rounded corners,
fill=green!20,
minimum width=3.2cm,
minimum height=1cm,
align=center
},
hub/.style={
draw,
fill=red!60,
minimum width=0.8cm,
minimum height=0.8cm
},
parline/.style={thick, ->},
parlineback/.style={thick, <-}
]
% Hilfsmakro für parallele Doppelpfeile
\newcommand{\ppfeil}[2]{
\draw[parline] ([xshift=2pt]#1) -- ([xshift=2pt]#2);
\draw[parlineback] ([xshift=-2pt]#1) -- ([xshift=-2pt]#2);
}
\newcommand{\ppfeilrund}[2]{
\draw[parline] ([xshift=2pt]#1) to[out=-135,in=90] ([xshift=2pt]#2);
\draw[parlineback] ([xshift=-2pt]#1) to[out=-135,in=90] ([xshift=-2pt]#2);
}
% Knoten
\node[greenbox] (reichwalde) at (-8,4) {Tagebau\\Reichwalde};
\node[greenbox] (nochten) at (0,4) {Tagebau\\Nochten};
\node[greenbox] (welzow) at (8,4) {Tagebau\\Welzow S};
\node[tinybox] (boxberg) at (-4,1.4) {Kohlelagerplatz\\Boxberg};
\node[tinybox] (welzowlp) at (8,1.4) {Kohlelagerplatz\\Welzow S};
\node[smallbox] (direkt) at (-7.5,0) {Direktbekohlung};
\node[smallbox] (zug) at (-2.5,0) {Zugverladung};
\node[hub] (K1) at (-2,-3.5) {};
\node[hub] (K2) at (2,-3.5) {};
\node[hub] (K3) at (6,-3.5) {};
\node[bluebox] (kw4) at (-10,-2.5) {Kraftwerk\\Boxberg Werk 4};
\node[bluebox] (kw3) at (-5.5,-7.2) {Kraftwerk\\Boxberg Werk 3};
\node[bluebox] (veredelung) at (0,-7.2) {Veredlung\\Industriepark\\Schwarze Pumpe};
\node[bluebox] (kwsp) at (4.5,-7.2) {Kraftwerk\\Schwarze Pumpe};
\node[bluebox] (kwj) at (10,-7.2) {Kraftwerk\\Jänschwalde};
% Vom Tagebau nur eine Richtung
\draw[parline] (reichwalde.south) -- (boxberg.north);
\draw[parline] (nochten.south) -- (boxberg.north);
\draw[parline] (welzow.south) -- (welzowlp.north);
% Lagerplatz Boxberg
\draw[thick, ->] (boxberg.west) -- (direkt.north);
\draw[thick, ->] (boxberg.south) -- (zug.north);
% Zugverladung und Welzow LP zu K1, K2, K3 (Doppelpfeile)
\ppfeil{zug.south}{K1.north}
\ppfeil{zug.south}{K2.north}
\ppfeil{zug.south}{K3.north}
\ppfeil{welzowlp.south}{K1.north}
\ppfeil{welzowlp.south}{K2.north}
\ppfeil{welzowlp.south}{K3.north}
% Verbraucher
\ppfeil{direkt.south}{kw4.north}
% \ppfeil{direkt.south}{kw3.north}
\ppfeil{K1.south}{kw3.north}
\ppfeil{K2.south}{veredelung.north}
\ppfeil{K2.south}{kwsp.north}
\ppfeil{K3.south}{kwj.north}
\end{tikzpicture}
}
\end{center}
\section{Benötigte Eingangsdaten}
\subsubsection{1. Bedarfsdaten der Verbraucher}
\begin{itemize}
\item Tagesbedarfe \(d_{j,w,d}\)
\item Tägliche Abweichungsgrenzen \(M^{\text{tag}}_j\)
\item Wochenabweichungsgrenzen \(M^{\text{woche}}_j\)
\item Monatsabweichungsgrenzen \(M^{\text{monat}}_j\)
\end{itemize}
\subsubsection{2. Kapazitätsdaten der Tagebaue}
\begin{itemize}
\item Maximale monatliche Fördermengen \(F_i^{\max}\)
\item Optionale kombinierte Monatsgrenzen (z. B. Reichwalde plus Nochten)
\end{itemize}
\subsubsection{3. Kapazitätsdaten der Kohlelagerplätze}
\begin{itemize}
\item Schichtverladekapazitäten \(Z^{\max,\text{schicht}}_l\)
\item Tagesverladekapazitäten \(Z^{\max,\text{tag}}_l\)
\end{itemize}
\subsubsection{4. Zugdurchlasskapazitäten}
\begin{itemize}
\item Schichtkapazitäten je Relation \((i,j)\)
\item Gemeinsame Kapazitätsgrenzen für Relationen mit geteilten Strecken
\end{itemize}
\subsubsection{5. Kohlesorten und Mischungsparameter}
\begin{itemize}
\item Zugeordnete Kohlesorte für jeden Tagebau
\item Mischungsvorgaben \(\alpha^{\min}_{i,j}\), \(\alpha^{\max}_{i,j}\)
\end{itemize}
\subsubsection{6. Daten für weiche Restriktionen}
\begin{itemize}
\item Gewichtungsparameter der Straf und Bonusterme
\item Anfangsbunkerstände \(B_{i,j,w,d_0}\)
\item Zielbestände Montagmorgen \(B^{\text{Mon}}_j\)
\item Bunker-Maximalstände \(B^{\max}_j\)
\item Nicht-Verfügbarkeitstage (aus Verfügbarkeitstabelle)
\item Vorfahrfenster \(\Delta\)
\end{itemize}
\end{document}