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

Lineare Optimierung - Optimierung über mehrere Zeitschritte

 

MatlabMathias
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 18.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2018, 14:17     Titel:
  Antworten mit Zitat      
Klar, so geht's. Danke!

Kannst du mir noch sagen, wie ich über den Befehl nonlcon = @capacity noch weitere Variablen in die Funktion capacity übergeben kann? Ich würde hier gern n und Smax übergeben.

Und noch eine Frage: Findet fmincon globale oder lokale Minima? Wäre es für den lokalen Fall überhaupt für mein Problem geeignet?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.07.2018, 14:30     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Kannst du mir noch sagen, wie ich über den Befehl nonlcon = @capacity noch weitere Variablen in die Funktion capacity übergeben kann? Ich würde hier gern n und Smax übergeben

Über anonyme Function Handles, etwa so:
Code:
nonlcon = @(x) capacity(x, n, Smax)


Zitat:
Findet fmincon globale oder lokale Minima?

Lokal. Das ist bei allen Solvern aus der Optimization Toolbox so. Für globale Optimierung gibt es die Solver aus der Global Optimization Toolbox.

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
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.07.2018, 15:08     Titel:
  Antworten mit Zitat      
Zusatz: du meintest anfangs, du willst etwas maximieren. fmincon etc. minimieren aber. Das kannst aber f(x) maximieren, in dem du -f(x) minimierst.

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
 
MatlabMathias
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 18.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2018, 16:02     Titel:
  Antworten mit Zitat      
Harald, allerbesten Dank!

Genau, de facto will ich maximieren. Das Vorzeichen hatte ich darum schon getauscht in der Zielfunktion (welche eig negativ definiert ist).

Bezüglich globaler Optimierung:
Ist es wahrscheinlich, dass ich bei meinem Problem in einem lokalen Optimum hängen bleibe, wie könnte ich das ermitteln und wie vermeiden?

Und kann ich beim fmincon auch anstatt des interior-point algorithm einen simplex verwenden? (analog zu linprog)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
wie könnte ich das ermitteln

fmincon mit verschiedenen Startwerten versuchen und schauen, ob du immer die gleichen Ergebnisse bekommst.

Zitat:
wie vermeiden?

Solver der Global Optimization Toolbox verwenden oder sich selbst eine Strategie ausdenken, wie fmincon mit vielen Startwerten.

Zitat:
Und kann ich beim fmincon auch anstatt des interior-point algorithm einen simplex verwenden? (analog zu linprog)

Die verfügbaren Algorithmen findest du in der Doku von fmincon unter "Algorithms", ziemlich unten.

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
 
MatlabMathias
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 18.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2018, 16:33     Titel:
  Antworten mit Zitat      
Okay, von hier aus sollte ich in der Lage sein, alle weiteren Schritte selbst bzw. durch verfügbare Doku zu machen.

Nur - und ich weiß nicht, ob das wirklich lösbar ist - bricht die Optimierung hier ziemlich schnell ab mit dem Fehler:

Error using ldl
Out of memory. Type HELP MEMORY for your options.

Kann das sein? So groß können die Daten bei diesem vergleichbar einfachen Problem doch gar nicht werden?
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabMathias
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 18.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2018, 16:39     Titel:
  Antworten mit Zitat      
Nein, in die Optimierung scheint er gar nicht erst zu kommen:

Iter Func-count Fval Feasibility Step Length Norm of First-order
step optimality
0 8785 4.557525e+05 8.779e+03 1.000e+00 0.000e+00 7.401e+01
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.07.2018, 23:14     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
bricht die Optimierung hier ziemlich schnell ab mit dem Fehler:

Error using ldl
Out of memory. Type HELP MEMORY for your options.

Ist das wirklich die vollständige Fehlermeldung?

im Zweifelsfall wie gesagt mit dem Debugger durchgehen. Das kann an sich nur daran liegen, dass in einer der zur Verfügung gestellten Funktionen etwas schief läuft.

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
 
MatlabMathias
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 18.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2018, 10:09     Titel:
  Antworten mit Zitat      
Die ganze Fehlermeldung lautet wie folgt:

Error using ldl
Out of memory. Type HELP MEMORY for your options.

Error in formAndFactorAugMatrix

Error in formAndFactorAugMatrix

Error in barrier

Error in fmincon (line 798)
[X,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN] = barrier(funfcn,X,A,B,Aeq,Beq,l,u,confcn,options.HessFcn, ...

Error in EnergyStorageDispatch_v1 (line 66)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);


Würdest du mir zustimmen, dass es am Speicher nicht liegen kann? Bisher habe ich noch keinen Ansatz gefunden. Der Code scheint in Ordnung...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.07.2018, 10:55     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Würdest du mir zustimmen, dass es am Speicher nicht liegen kann?

Offensichtlich eben schon. Die Jacobi-Matrix wird ja recht groß.
Versuch mal z.B. patternsearch statt fmincon.

Zitat:
Der Code scheint in Ordnung...

Das kann ich nicht beurteilen, ohne den gesamten Code am Stück zu sehen.

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
 
MatlabMathias
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 18.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2018, 11:34     Titel:
  Antworten mit Zitat      
Patternsearch bricht recht schnell die Iteration ab. Etwas mit dem Code scheint m.E. nicht zu stimmen. Hier die Detailmeldung:

Max
Iter Func-count f(x) Constraint MeshSize Method
0 1 0 0 1
1 3000 0 0 0.001 Increase penalty
Maximum number of function evaluations exceeded: increase options.MaxFunctionEvaluations.



Und hier einmal der gesamte Code:

Code:
% General Definitions
p = Data.RAW.Marginal_Prices;
Smax = 13.5;
Pmax = 5;
n = 0.92;
%% Wholesale Arbitrage
fun = @(x)sum(x.*p);
a1(1:length(p)) = 1;
a2(1:length(p)) = -1;
A = [a1; a2]; % Linear inequality constraint: A*x <= b.
b = [Pmax; Pmax];
x0(1:length(p),1) = 1; % Starting solution
Aeq = []; % Linear Equality constraint: Aeq*x = beq
beq = [];
lb = []; % Lower and upper bounds: lb ? x ? ub
ub = [];
options = optimoptions('fmincon','Display','iter','Algorithm','interior-point');
nonlcon = @(x) capacity(x, n, Smax) ; % Nonlinear inequalities or equalities: c(x) ? 0 and ceq(x) = 0
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);

function [c,ceq] = capacity(x,n,Smax)

E = sqrt(n)*x;
E(x<0) = (1/sqrt(n))*x(x<0);
S = cumsum([Smax/2; E]);
c1 = -S;
c2 = S - Smax;
c = [c1; c2];
ceq = [];
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Patternsearch bricht recht schnell die Iteration ab

Das kannst du verhindern, indem du die Optionen anpasst - siehe Meldung.

Um das nachvollziehen zu können, bräuchte ich noch die Werte von p.

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
 
MatlabMathias
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 18.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2018, 12:00     Titel:
  Antworten mit Zitat      
Hallo Harald,

die Wertreihe für p hänge ich dir einmal an.
Die maxfunctionsevaluation hatte ich bereits angehoben, da geht er aber bis über 300.000 Funktionsaufrufe; wie kann das sein? Sollten es nicht eher 8760 sein?

p.xls
 Beschreibung:
Werte für Energiekosten bzw. preise

Download
 Dateiname:  p.xls
 Dateigröße:  360 KB
 Heruntergeladen:  192 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabMathias
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 18.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2018, 12:21     Titel:
  Antworten mit Zitat      
In anderen Beiträgen habe ich den Einwand gelesen, das fmincon nicht mit "nicht differenzierbaren" Funktionen arbeiten kann und E in unserem Fall "nicht differenzierbar sei". Das kann ich nicht ganz nachvollziehen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Ich bekomme zwar keine Fehlermeldung, aber über 11 GB bzw. 98% Speichernutzung. Vermutlich dann Swapping --> sehr lange Laufzeiten --> ich habe abgebrochen.

Zitat:
Die maxfunctionsevaluation hatte ich bereits angehoben, da geht er aber bis über 300.000 Funktionsaufrufe; wie kann das sein? Sollten es nicht eher 8760 sein?

Es sind in jedem Iterationsschritt 8760 Funktionauswertungen. Die Anzahl der Schritte ist aber vom Verhalten der Optimierung abhängig und kann beliebig groß werden, bzw. bis zu MaxFunctionEvaluations.

Zitat:
In anderen Beiträgen habe ich den Einwand gelesen, das fmincon nicht mit "nicht differenzierbaren" Funktionen arbeiten kann und E in unserem Fall "nicht differenzierbar sei". Das kann ich nicht ganz nachvollziehen.

fmincon ist ein Abstiegsverfahren und basiert auf Gradientenschätzungen. Bei Unstetigkeiten der Ableitungen wird das nicht klappen. Die Probleme halten sich allerdings in der Regel in Grenzen, solange es nicht zu unstetig / verrauscht ist.

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
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

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