• Keine Ergebnisse gefunden

5.7 Modellumsetzung

5.7.1 Grundlegende technische Modellbeschreibung

Das entwickelte Modell für den Anwendungsfall des Parkhauses wird sowohl in einer deter-ministischen als auch in einer stochastischen Optimierung umgesetzt. Zusätzlich wird eine Monte Carlo Simulation für alle Ansätze angewendet, um die zugrundeliegenden stochasti-schen Profile der PV-Erzeugung, Elektrizitätspreise, Abfahrts- und Ankunftszeiten sowie die vor dem betrachteten Ladeprozess zurückgelegten Fahrdistanzen der E-Pkw abzubilden. Das gesamte Modell ist mit Python 3.6 implementiert. Dabei findet sowohl das Erstellen der Wahr-scheinlichkeitsverteilungen für die Fahrzeugflotten sowie das Einlesen der weiteren Inputpa-rameter und das damit verbundene Datenhandling, als auch die Implementierung der verschie-denen Modellvarianten statt. Das Modell besteht aus verschieverschie-denen hinterlegten Klassen und entsprechend definierten Methoden und Funktionen.

Für die Optimierung wird zum einen auf den Solver Gurobi 7.5 zurückgegriffen und zum an-deren auf einzelne Bibliotheken innerhalb von Python, die eine effiziente Gestaltung und Lös-barkeit des Modells ermöglichen. Der Gurobi Solver ist mit einem MIP Gap von 0,01 einge-stellt. Des Weiteren wurden der Thread und der Seed auf jeweils 1 gesetzt. Ansonsten wurden die meisten Grundeinstellungen des Solvers übernommen. Die Berechnungen wurden mit ei-nem Windows Betriebssystem und zum größten Teil auf eiei-nem Desktoprechner mit Intel i5-2500, 3,3 GHz, sowie 4 Threads durchgeführt. Der Arbeitsspeicher von 16 GB ist dabei schnell ausgelastet, obwohl nur ein Kern für das Multiprozessing vorgesehen wurde. Die Rechenzeiten können reduziert werden, wenn Rechner mit größerem Arbeitsspeicher verwendet werden.

Dieses geschieht aufgrund der Ausnutzung von mehreren Kernen und damit der Möglichkeit des parallelen Rechnens.

Die Output Daten werden in einer dokumentenbasierten NoSQL Datenbank (MongoDB) ge-speichert. Der Vorteil besteht u. a. darin, dass schon während des Schreibprozesses die Daten ausgelesen werden können. Zusätzlich gibt es aufgrund von schnelleren Lese- und Schreibe-zugriffen Geschwindigkeitsvorteile. Zum anderen war die dokumentenbasierte Struktur aber erforderlich, da die Daten nicht nur in Tabellenform, also in zweidimensionaler Form gespei-chert werden können, sondern die Arrays in mehreren Dimensionen vorliegen. Dieses hat zur Folge, dass die Auswertung etwas komplexer ist und die Dokumente entsprechend ausgepackt werden müssen. Des Weiteren ist MongoDB open source und die am weitesten verbreitetste NoSQL Datenbank (vgl. MongoDB, 2018). Als grafische Oberfläche dient die ebenfalls frei verfügbare Robo 3T (ehemals Robomongo), welche es ermöglicht, die sogenannten Collectio-nen (diese Strukturen enthalten die Dokumente) zu sichten und zu bearbeiten.

Zur Visualisierung der in der NoSQL Datenbank (MongoDB) gespeicherten Output Daten werden ebenfalls hauptsächlich verschiedene Bibliotheken von Python (seaborn, matplotlib) verwendet. Ein Teil der genutzten Bibliotheken innerhalb von Python ist in der Tabelle 5.3 dargestellt. Die Grundstruktur des Modells basiert insbesondere auf NumPy, SciPy und

Pan-Tupeln oder Dictionaries, die Modellierung und Implementierung vereinfacht. Ebenfalls eine Spezialbibliothek ist chaospy, die insbesondere für die Konstruktion von abhängigen, multiva-riaten Zufallsvariablen zum Einsatz kommt. Bei der Erstellung der multivamultiva-riaten PDF wird die Rosenblatt Transformation genutzt (vgl. Feinberg und Petter, 2015). Zur weiteren effizienten Umsetzung des Modells wurden z. B. Caches angewendet, um die Daten für die Erstellung der Wahrscheinlichkeitsfunktionen nicht jedes Mal neu einlesen und speichern zu müssen. Wei-terhin wurde ein paralleles Rechnen und die Nutzung von mehreren Kernen ermöglicht, da durch die Durchführung von vielen Simulationen die Parallelisierung gut möglich ist und die Rechenzeiten verkürzt.

Tabelle 5.3: Auszug der benutzten Bibliotheken in Python

Name Funktion

Statsmodels Datenanalyse und Statistik, Verteilungen

Random Zufallszahlenerzeugung

Scikitlearn Clustering, GMM und KDE

Gurobipy Optimierungssolver Schnittstelle

Chaospy LHS, Joint sampling

CVXPY Optimierung

Itertools Effiziente Iterationen

PyDOE Quasirandom sampling

Tinydb Zwischenspeicherung von Daten, Cache

Pymongo Datenbank Schnittstelle

Joblib Multiprocessing

Pickle Serialisierung von Objekten

Jupyter Notebook Browser-basiertes Tool, interaktiver Testbereich

Der Code und die ermittelten Ergebnisse werden mit mehreren Plausibilitätschecks überprüft und validiert. Darunter zählen z. B.:

 Überprüfung der Anzahl bedienter Ladeanfragen und dazugehörig die Einhaltung der gewünschten Mindesterfolgsquote,

 Ermittlung des gesamten Ladebedarfs und Überprüfung, ob identisch mit tatsächlicher eingeplanter Ladeenergie,

 Überprüfung jeder einzelnen Ladeanfrage bzgl. gewünschter Lademenge und erhalte-ner Lademenge,

 Test der Einhaltung von sowohl lokalem Ladelimit als auch globalem Ladelimit sowie

 Überprüfung der Einhaltung der gesetzten Limits des SOC.

Dadurch konnten mögliche Fehlerquellen eliminiert und die Konsistenz des Codes geprüft werden.

Tabelle 5.4: Überblick zu den Modellgrößen anhand der Anzahl der Variablen und durchschnittlichen Re-chenzeiten für die unterschiedlichen Strategien und Kundenanzahl

Anzahl Kunden Ansatz

75 150 225

Unkontrol- liertes Laden

Gleichungen/ Reihen 15.180 29.880 44.580

Stetige Variablen 7.617 14.892 22.242

Nicht-Null Elemente 36.930 73.380 109.830

Binäre Variablen 75 150 225

Lösungszeit, gesamt in Sekunden 0,02 0,05 0,07

MILP - Benchmark

Gleichungen/ Reihen 14.989 29.689 44.389

Stetige Variablen 7.596 14.796 22.146

Nicht-Null Elemente 36.792 73.392 109.992

Binäre Variablen 150 300 450

Lösungszeit, gesamt in Sekunden 1,45 5,55 6,37

MILP –Day- Ahead-Vo- raussicht

Gleichungen/ Reihen 14.989 29.689 44.389

Stetige Variablen 7.596 14.796 22.146

Nicht-Null Elemente 36.792 73.392 109.992

Binäre Variablen 150 300 450

Lösungszeit, gesamt in Sekunden 1,56 5,56 7,18

SMILP

Gleichungen/ Reihen 1.912.339 3.764.389 5.616.439

Stetige Variablen 950.121 1.876.146 2.802.171

Nicht-Null Elemente 4.674.117 9.276.042 13.877.967

Binäre Variablen 9.450 18.900 28.350

Lösungszeit, gesamt in Sekunden 338,44 1276,81 8656,83 Die Tabelle 5.4 stellt ein Beispiel für eine Parametrisierung mit einer Ladeleistung (z. B.

11 kW), einer Anschlussleistung (z. B. 200 kW), nur Sommerpreise sowie 125 SAA Szenarien

dar. Es wird in jedem Modell mit 150 Tagen in den Sommermonaten simuliert2 und dement-sprechend vergrößert sich die Anzahl der Variablen sowie die Rechenzeiten linear. Die Mo-dellkomplexität vom SMILP erklärt sich aufgrund der Tatsache, dass im SMILP 125 SAA Szenarien enthalten sind, wodurch ein Vielfaches (Anzahl der SAA Szenarien) an Variablen benötigt wird. Das Verhältnis der Rechenzeiten ändert sich fast proportional zur Anzahl der gewählten Simulationsläufe. So beläuft sich die Rechenzeit beim SMILP Ansatz mit 150 Kun-den für eine Instanz auf ca. 21 Minuten, werKun-den die 150 Durchläufe betrachtet, sind es ca. 53 Stunden. Das sind die Rechenzeiten, wenn nur eine Parametrisierung betrachtet wird. Werden Listen von Parametern abgefragt (z. B. mehrere Anschlussleistungen), erhöht sich die Rechen-zeit entsprechend. Die Anzahl der Variablen steigt ebenfalls mit einer zunehmenden Kunden-anzahl, was für die verschiedenen untersuchten Methoden mit den drei Kundenkonstellationen von 75, 150 und 225 dargestellt wurde.