Verfasst am: 28.04.2019, 17:16
Titel: fmincon mit symbolischer Summenfunktion als Zielfunktion
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?
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 ;)
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.
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 ;)
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.
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 ;)
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 ;)
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
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.