|
|
Programmierung einer zeitabhängigen Optimierung |
|
Maluco |
Forum-Newbie
|
|
Beiträge: 9
|
|
|
|
Anmeldedatum: 27.06.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2017b
|
|
|
|
|
|
Verfasst am: 27.06.2017, 15:50
Titel: Programmierung einer zeitabhängigen Optimierung
|
|
|
|
|
Hallo alle zusammen!
Ich versuche gerade das Paper "Grey wolf optimisation for optimal sizing of battery energy storage device to minimise operation cost of microgrid" in Matlab Code umzusetzen. Da dies jedoch mein erstes Optimierungsproblem ist, habe ich ein paar Probleme mit dem Code, zu denen ich nirgendswo eine Antwort finden konnte.
Das Paper versucht den Strombedarf in stündlicher Auflösung mittels Microturbine (MT), Fuel Cell (FC), Photovoltaik (PV) und Windkraft (WT) zu decken. Darüber hinaus kann am Markt (grid) Strom gekauft und verkauft werden. Zusätzlich kommt eine Batterie (BES) zum Einsatz, dessen Größe zusätzlich im Optimierungsproblem gelöst wird.
Zum Einsatz kommt der Gray Wolf Algorithmus, der für Constraints sog. Penalty Functions verwendet.
Ich bedanke mich schon einmal ganz herzlich bei Jedem, der sich die Zeit nimmt, dieses Problem durchzulesen.
Objective Function
Die zu minimierende Funktion ist:
Dabei steht F für die Gesamtkosten an einem Tag Betrieb. T = 24, da die Werte stündlich berechnet werden. f_t sind die Betriebskosten jedes Generators. Sie sind aufgeteilt in:
Die Kosten durch das Grid "Cost_grid" werden dabei mittels Stufenfunktion berechnet, abhängig davon ob eingespeist oder bezogen wird. "B" ist dabei der Preis pro kWh, "P" die Leistung und "tax" eine Steuer. Da stündlich berechnet wird muss keine Zeitvariable "dt" verwendet werden.
Dies habe ich mit Hilfe der heaviside Funktion umgesetzt. Dabei steht "lc" (loop counter) für die for-Schleife, die ich für jeden Zeitpunkt verwende. Alle Variablen mit "C." sind Konstanten, die ich in einem Struct Array geladen habe.
Die Kosten der Generatoren "Cost_DG" ist einfach die Summe alle Generatoren. Dabei steht die Variable "u" für an oder aus, da auch Kosten für das Hochfahren oder Runterfahren von MT und FC entstehen, die durch "SUC" und "SDC" berücksichtig werden.
Im Code ist dies ebenso umgesetzt:
Die Kosten für die Batteries sind identisch berechnet:
Mit entsprechendem Code:
Die Hoch- bzw. Runterfahrkosten (SU = start-up, SD = shut-down) von MT und FC sind alle gleich berechnet, wobei simplerweise einfach geprüft wird, ob die Einheit hoch- oder runtergefahren wird:
Die Wartungskosten sind einfach bestimmte, stündlich anfallende Kosten, die mit der Betrachtungsdauer T multipliziert werden:
Der Code ist dementsprechend simpel:
Die Gesamtkosten der Batteries (TCPD = total cost per day) sind abhängig von der Kapazität der Batterie "C_BES,max". "IR" sind die Zinsen, "LT" die Laufzeit, "FC_BES" die Fixkosten und "MC_BES" die Wartungskosten:
Dies habe ich im Code folgendermaßen geschrieben:
v(3,:) beinhaltet die Kapazität zu jedem Zeitpunkt in der Batterie.
Constraints
Zusätzlich gibt es noch ein paar Constraints. Upper and Lower Bounds für die Generatoren, sowie das Netz sind folgende:
Diese konnte ich noch leicht mit zwei Matrizen umsetzen (n_comp steht für die Anzahl der Berechnungen):
Darüber hinaus muss das Netz im Gleichgewicht sein, sprich Produktion und Verbrauch müssen gleich sein:
Dies konnte ich bis jetzt nur als Anonymous Function umsetzen (und mittels Genetic Algorithm "ga" verwenden), da ich nicht weiß, wie ich die Constraint in eine Penalty Function umwandle.
Zusätzlich soll die Produktionskapazität immer eine Reservekapazität "OR" zur Verfügung haben:
In Matlab habe ich hier ebenso mit Anonymous Function gearbeitet und nicht mit Penalty Function:
Die Constraints für die Batterie sind weitaus komplexer. Hier wird unterschieden, ob geladen oder entladen wird. Zudem ist die Leistung vom zeitabhängigen Ladezustand abhängig.
Die Kapazität wird abhängig vom Modus berechnet.
Entladen:
Laden:
Im Matlab-Code habe ich das wieder mittels heaviside umgesetzt:
In beiden Fällen darf die Leistung nicht das zeitabhängige Minimum unter- und Maximum überschreiten:
Diese werden wiederum folgendermaßen berechnet:
Jetzt endlich zu meinem Problem!
Noch betrachte ich das Problem in meinem Code nicht über den ganzen Zeitraum, sondern optimiere nur f_t für jeden Zeitpunkt und ziehe dadurch Rückschlüsse auf TCPD. Demenstprechend ist meine Objective Function nur:
Daher ist mein größtes Problem:
Wie kann ich die Objective Function über den gesamten Zeitraum optimieren und somit, die oben geschreiben OF in Matlab umsetzen?
Darüber hinaus, weiß ich nicht genau, wie ich die Constraints für die Batterie korrekt umsetzen kann, da ich glaube, dass mein Ansatz falsch ist und ich ebenso mit Anonymous Functions bzw. Penalty Functions arbeiten muss.
Mein letztes Problem betrifft genau diese Penalty Functions. Ich konnte nur wenig Informationen zu ihnen finden, insbesondere ihre Umsetzung. Derzeit verwende ich zum lösen des Problem noch den Genetic Algorithm, der bereits in Matlab implementiert ist, jedoch würde ich gerne auch andere Optimizer verwenden.
Ich habe meinen Code ebenfalls hochgeladen. Es tut mir leid, wenn er etwas wirr aufgebaut ist. Ich habe versucht so viel wie möglich zu kommentieren.
Vielen Dank an alle, die sich bis dahin durchgekämpft haben!
Falls noch irgendwelche Fragen bestehen, einfach Bescheid geben.
P.S.: In der Vorschau zeigt es manche Formel nicht korrekt an und Indizes werden groß geschrieben. Falls dies auch in der veröffentlichen Version der Fall ist, bitte ich dies zu entschuldigen.
Beschreibung: |
Die Datei enthält alle meine erstellten Funktionen. Run_GWO ist die Hauptdatei. in MinMG ist die Objective Function. |
|
Download |
Dateiname: |
Project.rar |
Dateigröße: |
6.23 KB |
Heruntergeladen: |
485 mal |
|
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|