Folgendes Problem: Ich möchte ein Mehrkörpersystem hinsichtlich der Parameter bezogen auf eine Messkurve optimieren.
Das funktioniert soweit auch ganz gut, dauert nur etwas.
Ich habe als Optimierungswerkzeug "fminsearch" verwendet.
Bei der Funktion "fminbnd" kann man ja die Intervallgrenzen mit angeben, aber laut Hilfe nur für eine Variable.
Ich habe mir zusätzlich noch, indem ich einfach mal jeden Parameter einmal um 10% verändert habe, so eine Art Sensitivitätskoeffizienten berechnet. Also sprich welcher Parameter auf eine Veränderung am stärksten in die Funktion eingehen.
Meine Frage:
Gibt es ein Optimierungswerkzeug bei dem ich Grenzen für mehrere Variablen oder eine Art Priorisierung welche Variablen sich der Optimierer "genauer" ansehen sollte mitgeben kann?
in der Optimization Toolbox gibt es etliche Funktionen, die Minimierung (und Schranken) für mehrere Variablen ermöglichen, z.B. fmincon für Probleme recht allgemeiner Art.
Ein "genauer ansehen" ist bei den klassischen Algorithmen (Optimization Toolbox etc.) nicht möglich. Da sollte man auf patternsearch oder besser genetische Algorithmen zurückgreifen.
Das hört sich für mich zudem ein wenig nach Curve Fitting an; da könnte auch nlinfit / nlintool oder lsqnonlin interessant sein. In der Curve Fitting Toolbox werden zudem auch Konfidenzintervalle für die Parameter ausgegeben.
Irgendwie berücksichtigt er die optionen nicht, wobwohl diese für fmincon compatibel sind.
Er macht ein paar Optimierungsschritte und hört dann mit dem Startwert auf, obwohl der Funktionswert noch sehr groß ist.
Der Funktinswert ist die quadratische Abweichung zwischen Mess- und Rechenkurve. Mit fminsearch hat das soweit funktioniert.
bedingt durch deine Optionen sorgst du dafür, dass der Algorithmus die Grenzen recht lasch handhabt (TolCon) und auch recht früh "aufgibt", wenn sich die Funktionswerte nicht mehr sehr ändern (TolFun). Ich würde TolFun hier eher sehr klein (1e-10) wählen, um möglichst gute Ergebnisse zu bekommen.
Vielleicht mal das Ergebnis von fminsearch als Startwert in fmincon reinstecken? Man sollte sich darüber im klaren sein, dass fmincon ein LOKALES Minimum sucht, nicht das globale - ist also auf gute Startwerte angewiesen. Ansonsten ist es schwierig, Rat zu geben, ohne das konkrete Problem vor sich zu haben.
Zwei Fragen:
- wenn es um eine Abweichung zwischen Mess- und Rechenkurve geht, warum die Parameter beschränken? Wenn die besten Parameter außerhalb des zulässigen Bereichs sind, könnte das auf einen Modellierungs- oder sonstigen Fehler hindeuten.
- warum nicht mit lsqnonlin oder nlinfit arbeiten? Diese Algorithmen sind schließlich für Kurvenanpassung geschaffen, während fmincon ein Allzweckalgorithmus ist.
Zu Frage 1: Ich dachte es geht vll einfach schneller, wenn man dem optimierer noch mitgibt in welchem Bereich sich die Parameter befinden, allerdings scheint fmincon da eher langsamer vorzugehen wie fminsearch
Zu Frage 2: Denken sie, dass man mit lsqnonlin oder nlinfit mit weniger Iterationsschritten zum Zielt kommt?
Das ganze funktioniert ja bereits mit fminsearch, jedoch wird bei jedem Iterationsschritt der MKS Simulator wieder angeworfen und eine Rechenlauf dort gestartet - das dauert etwa so 2 Sekunden in meinem Fall und nimmt somit mit Abstand die meiste Zeit in Anspruch. Somit muss ich schauen, ob ich mit einem anderen Optimierer weniger Interationsschritte schaffe.
Nebenbedingungen führen i.a. nicht zu einer schnelleren Konvergenz, da sie ja in jeden Schritt berücksichtigt werden müssen. Was hilft, ist ein guter Startwert.
Welches Verfahren das schnellste ist, hängt sehr von dem tatsächlichen Problem ab. Das muss man aber schlicht und einfach ausprobieren. Generell geht man davon aus, dass das Verfahren am schnellsten und zuverlässigsten arbeitet, das am stärksten auf das Problem ausgerichtet ist. Wenn das Problem Curve-Fitting ist, sollte man also die Curve-Fitting-Algorithmen zumindest mal probieren.
Oke Danke dann werd ich in die Richtung mal etwas rumprobieren.
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.