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 mit symbolischer Summenfunktion als Zielfunktion

 

Hilbert80
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 29.12.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2019, 18:16     Titel: fmincon mit symbolischer Summenfunktion als Zielfunktion
  Antworten mit Zitat      
Liebe Matlabgemeinde,

ich habe ein Optimierungsproblem. Meine Zielfunktion besteht aus mehreren Summen, bei denen die Optimierungsvariablen (die gesuchte Lösung) auch in den Summengrenzen (oben und unten) vorkommen. Diese Funktion möchte ich mit fmincon verwenden.

Ich verwende symbolische Summen, um meine Zielffunktion aus mehreren Funktionen zusammenzusetzen und am Ende geschlossen an fmincon zu übergeben, da dies einfacher ist, als die Funktion komplett auf einmal zusammenzusetzen.

Mit "Matlabfunction" wandle ich dann die symbolische Summe zusammen mit Gradient und Hessematrix in ein Functionhandle um und übergebe es an fmincon.

Dabei besteht folgendes Problem:
Meine Zielfunktion lässt sich aufgrund der Komplexität (aufgrund der symbolischen Grenzen ohne festen Wert) nicht geschlossen von Matlab darstellen. Somit gibt mir die Funktion "Matlabfunction" eine Fehlermeldung aus, da meine Zielfunktion nicht die benötigte Form für fmincon hat. Das mit den offenen Grenzen ist leider so, da je nachdem, welche Lösung bzw. welchen Startwert man vorgibt, sich die zugehörige Summenfunktion (genauer gesagt ein Kapitalwert) über mehr oder weniger Summanden zusammensetzt.

Den code gebe ich hier nciht mit, da es zu komplex wäre diesen im Detail zu verstehen. Das Problem so wie ich es oben geschildert habe, habe ich bereits genau eingegrenzt. Somit würde ich nur gerne wissen, was man in so einem Fall machen soll. Habe ich überhaupt eine Chance es mit einer Optimierungsroutine zu lösen oder muss ich den umständlichen Weg über eine vollständige Enumeration gehen?

Vielen Dank!
Dominic
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: 28.04.2019, 18:28     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Somit gibt mir die Funktion "Matlabfunction" eine Fehlermeldung aus, da meine Zielfunktion nicht die benötigte Form für fmincon hat.

Bitte poste die genaue, vollständige Fehlermeldung. Die beiden Satzteile passen meines Erachtens nicht zusammen.

Zitat:
da dies einfacher ist, als die Funktion komplett auf einmal zusammenzusetzen

Ein stückweises Zusammensetzen mit vektorisierten Operationen sollte auch nicht komplizierter sein.

Zitat:
Den code gebe ich hier nciht mit, da es zu komplex wäre diesen im Detail zu verstehen.

Ein solches Detailverständnis ist oft nicht nötig, um das Problem zu lösen. Das Problem selbst nachvollziehen zu können ist aber oft ungemein hilfreich.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 29.12.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2019, 18:55     Titel:
  Antworten mit Zitat      
Hier die Fehlermeldung:

Code:

Index exceeds matrix dimensions.

Error in C:\Program Files\MATLAB\R2013a\toolbox\symbolic\symbolic\symengine.p


Error in fmincon (line 653)
      [initVals.f,initVals.g,HESSIAN] = feval(funfcn{3},X,varargin{:});

Error in otse_neu (line 503)
[tfinal,fval,exitflag,output] = fmincon(fh,[1;1;1;1],[],[],[],[],[1;1;1;1],[N;N;N;N],[],options)

Caused by:
    Failure in initial user-supplied objective function evaluation. FMINCON cannot continue.
 


Die DAtei habe ich ebenfalls angehängt.

Der Fehler ist in Zeile 491. Die Ursache ist aber bereits in Zeile 436. Die symbolische Summe hat keine fixen oberen und unteren Grenzen. Matlab kann die Summe nicht geschlossen darstellen. Sieht man auch in der Ausgabe von Zeile 488.

Und somit bringt Zeile 491 einen Fehler, da keine korrekte Funktion an die Optimierungsroutine übergeben werden kann.

Danke für die Hilfe und viele Grüße
Dominic

otse_neu.m
 Beschreibung:

Download
 Dateiname:  otse_neu.m
 Dateigröße:  18.49 KB
 Heruntergeladen:  234 mal
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: 28.04.2019, 20:04     Titel:
  Antworten mit Zitat      
Hallo,

erste Versuche der Problembehebung:
Code:
ziel = matlabFunction(Zielfunktion);
gra = matlabFunction(grad_Ziel);
hess = matlabFunction(hess_Ziel);
 
fh = @(t) helper(ziel, gra, hess, t);

mit
Code:
function [ziel, gra, hess] = helper(Zielfunktion, grad_Ziel, hess_Ziel, t)
    ziel = Zielfunktion(t(1), t(2), t(3), t(4));
    gra = grad_Ziel(t(1), t(2), t(3), t(4));
    hess = hess_Ziel(t(1), t(2), t(3), t(4));
end


Dann bekomme ich:
Undefined function or variable 'k'.

Zu optimieren sind vermutlich t_ij. In der Zielfunktion kommt aber auch noch k vor. Soll das ein Parameter sein oder auch optimiert werden?

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 29.12.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2019, 21:06     Titel:
  Antworten mit Zitat      
Vielen Dank schon mal für Ihre Hilfe, ohne Ihren Code aktuell genauer gelesen zu haben.

Genau das meinte ich ja. Das k ist nur die Laufvariable der symbolischen Summen. Eigentlich sollten in den symbolischen Summen zum Schluss keine k´s bzw. tau´s mehr drin vorkommen, sondern nur noch die t11, t12, t21 und t22.

Aber durch die hohe Komplexität der Summen kann Matlab keinen geschlossenen Term aus den Summen machen. Sie lassen sich nicht vereinfachen. Dadurch lässt sich dann kein function handle erstellen, welches sich an fmincon übergeben lässt.

Hilft Ihnen das weiter?

Viele Grüße
Dominic
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: 28.04.2019, 21:09     Titel:
  Antworten mit Zitat      
Hallo,

dann bleibt nur die Möglichkeit, das zu tun, was ich von vorneherein raten würde: numerisch rechnen. Vektorisiert oder auch in einer for-Schleife.

Statt symbolische Ausdrücke aufzustellen, würdest du eben für das aktuelle t direkt auswerten.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 29.12.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2019, 21:19     Titel:
  Antworten mit Zitat      
Hallo,

mhhh, ok. Dann ist das wohl so. Ich habe das schon mal so gemacht und das läuft auch, ist aber sehr langsam.

Trotzdem vielen Dank für die Hilfe.

VG
Dominic
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: 28.04.2019, 21:36     Titel:
  Antworten mit Zitat      
Hallo,

dann versuch's mit Vektorisierung oder MEX-Dateien.
Symbolische Auswertungen machen es meiner Erfahrung nach jedenfalls eher noch schlimmer.

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



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.