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 problem

 

Roberto

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2013, 12:15     Titel: fmincon problem
  Antworten mit Zitat      
Hallo,

vielleicht könnt ihr mir bei meinem Problem weiterhelfen!

Ich habe eine Optimierungsaufgabe bei dem "P" maximiert werden soll. Die Nebenbedingung N(P) ist abhägig von P und muss bei jedem Optimierungsschritt über eine Funktion (nichtlinear) berechnet werden. Es werden mehrere Optimierungen hintereinander durchgeführt. Manchmal passiert es, dass P zu groß ist und keine Nebenbedingung N(P) existiert. Das hat einen Error zur Folge. Es sind zwar Grenzen für P definiert, jedoch werden diese bei den Optimierungsschritten nicht eingehalten.

Ich habe probiert der Nebenbedingung Werte (0,inf,NaN) von der berechnenden Funktion auszugeben die dem fmincon sagen hier gehts nicht weiter. Ohne Erfolg.

Meine Frage:

-Kann man fmincon sagen dass Optimierungsschritte bei denen keine Nebenbdinungen N existieren nicht werten soll, und es mit anderen P's nochmal probieren soll?

-Bzw. kann ich die Optimierung abbrechen, ohne Fehlermeldung, damit die weiteren Optimierungen fortlaufen können?

LG Robert


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.06.2013, 12:58     Titel:
  Antworten mit Zitat      
Hallo,

klingt etwas abstrakt, bitte möglichst konkret werden.

Zitat:
Das hat einen Error zur Folge.

Und welchen?

Zitat:
Es sind zwar Grenzen für P definiert, jedoch werden diese bei den Optimierungsschritten nicht eingehalten.

Meinst du untere und obere Schranken? Probier mal den interior-point - Algorithmus:
http://www.mathworks.com/help/relea.....ing-a-solver.html#bsbqd7i

Zitat:
Ich habe probiert der Nebenbedingung Werte (0,inf,NaN) von der berechnenden Funktion auszugeben die dem fmincon sagen hier gehts nicht weiter. Ohne Erfolg.

Diesen Satz verstehe ich nicht. Wie hat sich die Erfolglosigkeit geäußert?

Ich würde bei der nichtlinearen Nebenbedingung 1 zurückgeben. Eine nichtlineare NB gilt ja als erfüllt, wenn sie <= 0 bzw. nahe bei 0 ist, und das ist dann ja nicht der Fall.

Zitat:
Kann man fmincon sagen dass Optimierungsschritte bei denen keine Nebenbdinungen N existieren nicht werten soll, und es mit anderen P's nochmal probieren soll?

Das sollte durch das auf-1-setzen gelöst sein.

Zitat:
Bzw. kann ich die Optimierung abbrechen, ohne Fehlermeldung, damit die weiteren Optimierungen fortlaufen können?

Theoretisch kann man mit try-catch arbeiten. Um beurteilen zu können, inwieweit das sinnvoll ist, müsstest du aber die Struktur deiner Anwendung genauer erklären.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Roberto

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2013, 11:29     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort Harald! ich werde versuchen mein Problem zu konkretisieren.

Meine Optimierung:
Code:
lb = ones(numel(P2G_Indexes),1)*1;
ub = ones(numel(P2G_Indexes),1)*20;
startwert = ones(numel(P2G_Indexes),1)*3;

[x,fx,exit] = fmincon(@(P) FUNC_OPT_Doppelleitung_P2GWind(P),startwert, ...
[],[],[],[],lb,ub,@(P) NB_OPT_Doppelleitung_P2G_N1Sicherheit(P,ith,m), ...
optimset('LargeScale','off','Display','off','Algorithm','active-set','FunValCheck','on'));
 


Meine Funktion:
Code:
function[wert] = FUNC_OPT_Doppelleitung_P2GWind(P)
wert = -sum(P);
end


Meine Nebenbedingung:
Code:
function[c,ceq] = NB_OPT_Doppelleitung_P2G_N1Sicherheit(P,ith,m)

[dd,ee]=get_UI_P2G_N1Sicherheit(P,m);

% es gibt keine Gleichungsnebenbedingungen
ceq = [];
% die Ungleichungsnebenbedingungen
c = [ dd - ith; ee - 112; -ee + 90 ];
end


Und die Funktion mit der die Nebenbed. berrechnet wird. Das ist jetzt nur der Part bei dem der Fehlerfall eintritt, dass keine Nebenbedingungen existieren:
Code:
function [ i_un, Un] = get_UI_P2G_N1Sicherheit( Power,m )

      siSimulation.Start(calc_method);
      if siSimulation.StatusID ~= si_Const.SimulationOK
         
         disp(['Fehler:']);
     
         disp_messages(siSimulation, 'error');
         LF_ERR=1;
            double ( P_mat )
            i_un = 0;
            Un = 0;
            %return;
        end


in der Nebenbedingung sind die Grenzen definiert, das i_un nicht größer als ith werden darf und das Un zwischen 90 und 112 ist. wenn ich nun einfach als rückgabewert für i_un=ith*1.1 und Un=120 kommt es zu dem selben Fehler.

Falls nun keine existieren erscheint folgender Error:

P_mat =

3.0000
3.0000
3.0000


P_mat =

-7.9118
-6.3690
3.0000

Fehler:
Fehler: E 3101: Lastfluss: keine Konvergenz, Abbruch nach 10 Iterationen

P_mat =

-7.9118
-6.3690
3.0000

Error using .*
Matrix dimensions must agree.

Error in nlconst (line 764)
MERIT = f + sum(OLDLAMBDA.*(ga>0).*ga);

Error in fmincon (line 837)
[X,FVAL,LAMBDA,EXITFLAG,OUTPUT,GRAD,HESSIAN]=...

Error in OPT_Doppelleitung_P2G_neu_N1Sicherheit (line 407)
[x,fx,exit] = fmincon(@(P) FUNC_OPT_Doppelleitung_P2GWind(P),startwert, ...


P_mat sind die Werte aus dem die Nebenbedingung errechnet wird.

P.S.: Der interior-point - Algorithmus dauert länger und ich kann gerade nicht sagen ob er funktioniert da ich gerade nicht am simulationrechner bin. sobald ich kann werde ich das natürlich austesten.

lg robert
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.06.2013, 11:56     Titel:
  Antworten mit Zitat      
Hallo,

meine Vermutung ist, dass Un und i_un normalerweise Vektoren sind. Du musst im Fehlerfall auch Nullvektoren der entsprechenden Dimensionen zurückgeben, damit die Dimensionen weiterhin zusammenpassen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Roberto

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2013, 10:02     Titel:
  Antworten mit Zitat      
Hallo,

danke für den Hinweis! Die Dimension passte nicht! Ich hoffe das die Optimierung so funktionieren wird.

Vielen dank Harald!

LG Robert
 
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.