Die Aufgaben müssen in ILIAS als lauffähige und dokumentierte Jupyter Notebooks inkl. Datenfiles abgegeben werden. LP-Modellierungen können als eingescannte PDFs abgegeben werden.
Aufgabe 1: Arbitrage (6 Punkte)
Sie verwenden eine Batterie, um am Energiemarkt Arbitrage zu betreiben. Arbitrage bedeutet in diesem Zusammenhang, dass Sie die Batterie zu Zeiten mit tiefen Preisen laden und zu Zeiten mit hohen Preisen entladen. Danach hat die Batterie wieder den anfänglichen Ladestand. Sie fragen sich, wie groß der Preisunterschied sein muss, damit Sie bei gegebenen Lade- und Entladeverlusten einen Gewinn erzielen.
Beantworten Sie die Frage allgemein, indem Sie eine Formel herleiten, die folgende Parameter enthält:
\(\eta_\text{in}\), \(\eta_\text{out}\): Lade- und Entladewirkungsgrad
\(c_\text{low}\): niedriger Preis
\(c_\text{high}\): hoher Preis
Erläutern Sie die Formel in Worten.
Überprüfen Sie Ihre Formel durch folgende Simulation: \(\eta_\text{in} = \eta_\text{out} = 0.9\), \(c_\text{low} = 0.1\). Fixieren Sie die restlichen Parameter für eine Batterie Ihrer Wahl. Wählen Sie 50 Werte für \(c_\text{high}\) zwischen 0.1 EUR/kWh und 0.15 EUR/kWh, und berechnen Sie für jeden Wert von \(c_\text{high}\) über ein LP den optimalen Gewinn über zwei Zeitperioden mit den Marktpreisen \(c_\text{low}\) und \(c_\text{high}\). Bestimmen Sie, ab welchem der Werte von \(c_\text{high}\) Sie Gewinn machen, und vergleichen Sie dies mit Ihrer Formel.
Aufgabe 2: Peak Power Variation (4 Punkte)
Problemstellung
Wir betrachten eine ähnliche Situation wie im Beispiel Batterieverluste, nur dass die Batterie kleiner und der Verbrauch größer ist:
Code
import numpy as npimport matplotlib.pyplot as plt# time:dt =0.25# htimes = np.arange(start=0, stop=8+ dt, step=dt)periods = np.arange(start=0, stop=8, step=dt)n =len(periods)time_indices =range(n +1) # 0, 1, ..., n - 1, nperiod_indices =range(n) # 0, 1, ..., n - 1# demand:np.random.seed(0)noise = np.random.normal(loc=0, scale=1.5, size=len(periods))demand =8+0.8*periods -0.5*(periods -4)**2+ noiseplt.figure(figsize=(5, 3))plt.step(periods, demand, where='post', color='black', marker='.')plt.xlabel('time (h)')plt.ylabel('demand (kW)')plt.grid()# battery:eta_in =0.9# efficiency of chargingeta_out =0.9# efficiency of dischargingE_max =20.0# kWh, maximum energy levelE_start =15.0# kWh, starting energy levelE_end =15.0# kWh, final energy levelp_max =10.0# kW, maximum (dis-)charging power
Minimieren Sie mit dem Code aus Beispiel Batterieverluste die Spitzenlast (Peak Power), und stellen Sie die resultierende Netzlast grafisch dar. In der Grafik sehen Sie, dass die Netzlast teils große Schwankungen und Sprünge aufweist.
Um diese zu reduzieren, modellieren und implementieren Sie das Optimierungsproblem, das die maximale Variation minimiert, daher der Name “Peak Power Variation”, siehe Dynamische Probleme: Variation. Stellen Sie die resultierende Netzlast wieder grafisch dar, und vergleichen Sie die Grafik mit jener der “Peak Power” Minimierung. Untersuchen Sie, ob man die Minimierung der “Peak Power Variation” relaxieren kann.