Verfasst am: 14.01.2013, 14:25
Titel: Optimisation Toolbox - fmincon verwendet Startvektor nicht
Hallo in die Runde,
ich stehe vor einem recht großem Optimierungsproblem mit etwa 600 Variablen. Die Optimierungsaufgabe kann mit Hilfe von fmincon und dem algorithmus "interior-point" gelöst werden. Wenn ich allerdings in die Zielfunktion einen breakpoint setze sehe ich, dass schon in der ersten Berechnung nicht der angegebene Startvektor "x0" verwendet wird. Stattdessen wird ein Vektor verwendet, welcher recht weit weg von der gesuchten Lösung ist. Dies ist besonders ärgerlich, da ich den Startvektor für etwa 3/4 der Variblen schon extrem nah an der Lösung wählen kann, für den Rest muss ich die Startvariablen schätzen.
Dieses Schätzen führt unter anderem auch dazu, dass nicht alle Randbedingeungen Aeq und A im Startvektor eingehalten werden können.
Es wäre toll, wenn mir jemand einen Hinweis darauf geben könnte, ob die Randbedingungsverletzung dazu führen könnte, dass der komplette Startvektor ignoriert wird, oder ob es doch noch etwas anderes sein kann.
nachdem ich meinen Code noch einmal umgeschrieben habe komme ich mit meinem Startvektor nun sehr dicht an eine reguläre Lösung:
Die maximale Abweichung von (Aeq * x0 = beq) ist 3,9e-09.
Von der Randbedingenung von (A * x0 <= b) wird maximal um 3.5e-20 abgewichen.
Eigentlich sollte dies ein zulässiger Startpunkt sein, denn die Standarteinstellung der zulässigen Abweichung TolCon ist 1e-6.
Trotzdem wird der Startvektor nicht angenommen. Zusätzlich ist mir aufgefallen, dass der erste in der Zielfunktion ausgewertete Vektor x die Randbedingungen erhelblich verletzt. Ich kann mir immer weniger erklären, warum die Auswertung der Zielfunktion nicht mit dem Startektor x0 beginnt.
Wenn ich die Optimierung aber noch einmal mit dem Ergebnisvektor starte wird dieser als erster Vektor in der Zielfunktion ausgewertet, dann funktioniert die Vorgabe von x0 also.
nach vielem Hin- und Her habe ich nun ein Workarroud gefunden. Das Problem tritt dann auf, wenn fmincon und der Algorithmus "interior-point" verwendet wird und mind. eine Variable des Startvektors genau auf den oberen oder unteren Grenzen (lb, ub) liegt. Werden die Startvariablen leicht in den zulässigen Bereich verschoben (z.B. um 1e-10) dann kann der Startvektor verwendet werden.
Die Probleme entstehen übrigens im Bereich um Zeile 585 und 586 in fmincon.
Viele Grüße
HeinzS
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.