|
|
fmincon-Zielfunktion nur auf bestimmtem Intervall definieren |
|
Masterstudent |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.08.2014, 13:08
Titel: fmincon-Zielfunktion nur auf bestimmtem Intervall definieren
|
|
|
|
|
Hallo liebes gomatlab-Forum,
ich schreibe gerade an meiner Masterarbeit und Simuliere einen Energiemarkt. An einem Punkt in meinem Programm benutze ich den Solver "fmincon".
Ich habe eine bestimmte Anzahl an Mini-Kraftwerken und elektrischen Energiespeichern(Die Anzahl wird vor dem Programmstart angegeben, soll also variabel sein), die innerhalb eines Zeitintervalls eine bestimmte Menge Strom produzieren sollen. Die Zielfunktion, die durch den Solver minimiert werden soll, berechnet die Gesamtkosten, die durch ein bestimmtes Produktionsprogramm entstehen. Der Eingangsvektor für diese Zielfunktion gibt die Produktionsmenge für jedes Kraftwerk bzw. jeden Speicher an. Ist der Eingangsvektor an einer bestimmten Stelle 0, so bleibt das entsprechende Kraftwerk in diesem Zeitintervall ausgeschaltet.
Bis jetzt läuft das Programm auch ganz gut, allerdings fehlt ein wichtiger Aspekt: es macht in diesem Zusammenhang keinen Sinn, ein Kraftwerk mit einer sehr geringen Leistung von z.B. 0.25 kW Strom produzieren zu lassen. Daher möchte ich für die Kraftwerke Mindestleistungen definieren. D.h. WENN der Solver "sagt", dass ein bestimmtes Kraftwerk angeschaltet werden soll, dann soll es auch mindestens mit einer bestimmten Leistung laufen, z.B. 3 kW.
Leider funktioniert es nicht, den lb-Vektor(Vector of lower bounds) auf die Mindestleistungen der Kraftwerke zu setzen, weil der Solver dann das entsprechende Kraft in jedem Zeitintervall "anschaltet". Die Produktionsmengen einiger Kraftwerke sollen aber durchaus zu 0 berechnet werden(das hieße dann, dass diese nicht angeschaltet werden).
Im Grunde soll der Solver, WENN ein Element des Eingangsvektors für die Zielfunktion nicht 0 ist, dieses mindestens auf einen bestimmten Wert setzen. Allerdings ist 0 als Lösung ausdrücklich erwünscht.
Gibt es eine Möglichkeit für den Eingabevektor der Zielfunktion z.B. Intervalle zu definieren, in denen die Lösung liegen muss? Im moment ist die Zielfunktion in der gesamten Menge der Reellen Zahlen definiert. Es soll aber z.B. Element x des Eingabevektors entweder 0 sein, oder im Intervall von 3 bis unendlich liegen.
Ich habe mir überlegt, ob man in die nonlinear constraints, die ja durch ein function-handle übergeben werden, eine if-Bedingung einbauen kann, aber nach dem Durchlesen der Hilfe zum "fmincon"-Solver bin ich mir sehr unsicher, ob das so funktionieren kann.
Für Lösungsvorschläge wäre ich sehr dankbar.
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 14.08.2014, 15:30
Titel:
|
|
Hallo,
man könnte z.B. Strafterme für niedrige Energieproduktion einführen. Das würde aber zu Konvergenzproblemen führen.
Bei einer kleinen Anzahl Kraftwerke würde ich jede Kombination von an/aus durchlaufen, und dann die Produktion der eingeschalteten Kraftwerke optimieren. Bei einer großen Anzahl könnte man sich so behelfen, dass man in jedem Zeitschritt überprüft, ob es hilft, jedes Kraftwerk für sich aus/einzuschalten.
Grüße,
Harald
|
|
|
Masterstudent |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.08.2014, 10:10
Titel:
|
|
Das hört sich so an, als würde es leider keine elegante Lösung geben. Danke aber für die schnelle Antwort! Ich werde mal schauen, was ich von deinen Vorschlägen implementiert bekomme. Leider soll diese Optimierung nämlich sehr oft (im worst case 35000 mal) durchgeführt werden.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 17.08.2014, 20:02
Titel:
|
|
Hallo,
Zitat: |
Das hört sich so an, als würde es leider keine elegante Lösung geben. |
Mir ist zumindest keine bekannt. Eine entscheidende Frage ist, wieviele Kraftwerke es geben soll.
Zitat: |
Leider soll diese Optimierung nämlich sehr oft (im worst case 35000 mal) durchgeführt werden. |
Dann wird es häufig so sein, dass aufeinanderfolgende Szenarien sehr ähnlich sind. Das sollte man durch Weiterverwenden der alten Lösung als Startwert für die neue Lösung nutzen. Insbesondere könnte man in jedem Zeitschritt lediglich überprüfen, ob es hilft, jedes Kraftwerk für sich aus/einzuschalten.
Grüße,
Harald
|
|
|
|
|
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.
|
|