|
|
fmincon optimierung ignoriert ceq und c randbedingungen |
|
Headfield |

Forum-Anfänger
|
 |
Beiträge: 14
|
 |
|
 |
Anmeldedatum: 01.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.02.2011, 21:06
Titel: fmincon optimierung ignoriert ceq und c randbedingungen
|
 |
|
 |
|
Hallo in die Runde!
Ich habe eine ganz interessante Beobachtung bezügl. der fmincon function gemacht:
Hin und wieder passiert es hierbei, dass bei der Optimierung meine Vorgabe für die nicht-linearen Randbedingungen ignoriert werden.
gestartet wird die Funktion ganz normal wie folgt:
fmincon(KG,K_V,[],[],c,e,(-1)*ones(size(K_V,1),1),ones(size(K_V,1),1),mycon,options)
wobei ich mycon zuvor als function-handle definiert habe:
mycon = @(K_V) rangfolge(K_V,RV,gZR,PD,AK)
die Funktion "rangfolge" macht nun auch nichts wildes:
function [c,ceq] = rangfolge(K_V,RV,gZR,PD,AK,vZR)
KV = K_V;
eZR = zeitreiheniteration2(PD,AK,gZR,KV);
[~,RV_G] =sort(KV(1:AK,1),'descend');
ceq = RV-RV_G;
c = var(eZR)-var(gZR)/sum((ones(AK,1)*1/AK).^2);
end
Mittels ceq soll einfach eine extern vorgegebene Größensortierung der KVs eingehalten werden (bzw. K_V), mit c wird eine maximale varianz vorgegeben, die nicht überschritten werden darf.
Aber wie gesagt: Manchmal scheint das der Funktion fmincon vollkommen wurscht zu sein und es kommen Werte heraus, die ceq = 0 verletzen und / oder c >= 0 verletzen.
Kenn jemand die Problematik? Sind diese Randbedingungen eventuell nicht "absolut", d.h. dürfen gegebenenfalls einfach verletzt werden? Wäre für ein paar Hinweise sehr dankbar!
mfg
Headfield
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 01.02.2011, 22:35
Titel:
|
 |
|
 |
|
Hallo,
das ist bei sämtlichen Optimierungsalgorithmen so und auch so dokumentiert. Zur Erklärung muss ich etwas weiter ausholen:
Zum einen würde ich immer den Aufruf
verwenden. Anhand von exitflag kannst du abfragen, ob irgendetwas unerwartetes passiert ist. Die Bedeutung der einzelnen exitflags wird in der Dokumentation von fmincon erklärt. Falls sie <=0 ist, hatte der Optimierungsalgorithmus ein Problem und hat abgebrochen
Numerisch ist es sehr schwierig, Gleichheit herzustellen. Deswegen gilt bei Nebenbedingungen (auch bei Ungleichungen, falls für das Optimum die Gleichheit angenommen wird) immer eine Toleranz, die über optimset eingestellt werden kann (Default ist 1e-6, denke ich), z.B.
Diese neue Optionsstruktur muss an fmincon übergeben werden.
Mir scheint, dass du die Sortierreihenfolge als nichtlineare Gleichung definierst. Davon ist definitiv abzuraten, da nichtlineare Gleichungen für den Algorithmus äußerst schwer umzusetzen sind. Stattdessen kann sowas ja als lineare Ungleichung definiert werden, z.B.
x2 >= x1, x3 >= x2 etc. wird zu
x1 - x2 <= 0
x2 - x3 <= 0 etc.
also bei n = length(K_V)
Jede beliebige andere Sortierreihenfolge kann ebenso als Ensemble von linearen Ungleichungen dargestellt werden.
Deine nichtlineare Ungleichung sollte wie gehabt bleiben.
Ich hoffe, das hilft dir erstmal weiter.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Headfield |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 14
|
 |
|
 |
Anmeldedatum: 01.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 03.02.2011, 22:03
Titel:
|
 |
Hallo Harald,
vielen Dank für die schnelle Info! Anscheinend stelle ich mir das wohl dann etwas zu einfach vor
Bin gerade dabei, die Größensortierung auf lineare Ungleichungen umzusetzen. Die Toleranz bezügl. der Randbedingungen war schon sehr "fein" eingestellt.
Mal schauen, wie es jetzt funktioniert!
mfg
Headfield
|
|
|
|
|
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 - 2025
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.
|
|