WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

fmincon optimierung ignoriert ceq und c randbedingungen

 

Headfield
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 01.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.02.2011, 21:06     Titel: fmincon optimierung ignoriert ceq und c randbedingungen
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.02.2011, 22:35     Titel:
  Antworten mit Zitat      
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
Code:
[x,fval,exitflag] = fmincon(...)

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.
Code:
opts = optimset(oldopts, 'TolCon', 1e-9)

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)
Code:
A = diag(ones(n,1)) - diag(ones(n-1,1),1);
b = zeros(n,1);

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Headfield
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 01.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2011, 22:03     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für die schnelle Info! Anscheinend stelle ich mir das wohl dann etwas zu einfach vor Smile

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.