Verfasst am: 20.08.2012, 07:52
Titel: fmincon hängt sich auf
Hallo liebe Leute,
ich habe ein Problem, an dem ich jetzt seit mehreren Tagen herumtüftle und das ich sehr dringend lösen muss - hoffentlich gelingt es mit eurer Hilfe.
Ich habe ein Programm geschrieben, das für jede Stunde eines Jahres, also 8.760 mal, eine Optimierung aufruft. Das Programm läuft gut und macht zunächst auch was es soll, aber hängt sich nach einiger Zeit immer wieder auf.
Die Prozessorauslastung steigt dann auf 95 % (normalerweise liegt sie etwa bei 30 %), Matlab zeigt 'busy' an, aber es passiert nichts - für Stunden.
Ich muss die Optimierung dann abbrechen und bei der nächsten Stunde neu starten.
Ich habe eine output-function eingebaut, die eigentlich die Optimierung beenden sollte, wenn sie länger als eine Minute dauert, aber auch das hat keine Besserung gebracht.
Kennt jemand von euch das Problem und kann mir einen Tip geben?
Ich nutze für die Optimierung fmincon. Die Eingangsdaten unterscheiden sich in den "Problemstunden" nicht von denen, in denen es kein Problem gibt.
Mich erstaunt, dass MATLAB wirklich stundenlang an einer solchen Stunde rechnet. Ist das Problem reproduzierbar, d.h. tritt das Problem immer mit derselben Stunde auf?
Wie hast du das denn implementiert, dass nach einer Minute abgebrochen werden soll? Woher weißt du, dass das Programm wirklich bei einem Aufruf von fmincon festhängt?
Ich würde eher die von MATLAB zur Verfügung gestellten Abbruchkriterien (MaxFunEvals und MaxIter) nutzen.
Wichtig ist so oder so, die Ausgabe EXITFLAG von fmincon zu nutzen um zu sehen, wie sinnvoll die Ergebnisse sind.
Ich stehe da wirklich vor einem Rätsel. Der Fehler tritt nicht immer in derselben Stunde auf, aber immer im gleichen Bereich von +- 5 Stunden. Und seltsamerweise tritt er auch häufig auf, wenn das Programm eigentlich vor keinerlei Herausforderung gestellt sein sollte und der Startvektor schon zu 99% einem gültigen Lösungsvektor entspricht.
Ich habe zunächst versucht, die internen Abbruchkriterien zu nutzen, das hat aber nichts geändert. Matlab scheint sich in einer Sackgasse verrannt zu haben, bevor die Kriterien zur Geltung kommen.
Soweit ich den Sinn der Outputfunktion verstanden habe, soll diese doch die Optimierung abbrechen, wenn sie "true" als Rückgabe liefert. Doch soweit kommt es anscheinend gar nicht.
Meine Vermutung ist, dass sich Matlab direkt beim Aufruf der Optimierung aufhängt, da weder MaxFunEvals oder MaxIter ziehen, auch wenn ich sie sehr gering ansetze, und auch die Outputfunktion anscheinend nicht ausgewertet wird.
Der Fehler tritt nicht immer in derselben Stunde auf
Enthält die Zielfunktion eventuell Zufallselemente (rand/randn etc.)? Nur so kann ich mir erklären, dass du jedes Mal einen anderen Verlauf bekommst.
Falls das der Fall ist, ist es nicht sinnvoll, fmincon anzuwenden, da fmincon gradientenbasiert arbeitet. Man müsste dann auf Verfahren aus der Global Optimization Toolbox (früher Genetic Algorithm and Direct Search Toolbox), z.B. ga, zurückgreifen.
Die Output Function wird erst nach einer Iteration aufgerufen. Kann es sein, dass MATLAB innerhalb deiner Zielfunktion steckenbleibt? D.h. du gerätst dort in eine Endlosschleife oder so?
nein, Zufallselemente sind nicht drin. Die Zielfunktion ist ein schlichtes Skalarprodukt aus Gewichtungsvektor und Optimierungsvektor.
Auch wenn ich die Eingangsdaten ändere und für den problematischen Stundenbereich Werte annehme, die in anderen Stunden problemlos funktionieren, bleibt das Programm wieder dort hängen.
Wenn ich die Optimierung manuell abbreche, wird mir angezeigt, dass sich das Programm gerade in fmincon bzw innerhalb von fmincon am SQP-Aufruf steckt.
Ich stehe nach wie vor vor einem Rätsel, auch nach Rücksprache mit Kollegen. Ich habe das Problem jetzt eher schmutzig und unkomfortabel gelöst, indem das Programm bei jedem Iterationsschritt ein Zwischenergebnis in den Workspace schickt. Ich sitze daneben, breche das Programm manuell ab, wenn es sich aufgehangen hat, und initialisiere es neu mit dem Zwischenergebnis.
Hat irgendjemand sonst hier in diesem Forum vielleicht eine Idee oder kennt das Problem?
Dank und Gruß,
Tine
PS: linprog ist leider keine Lösung, da ich mehrere nichtlineare Randbedingungen habe.
ich bin da wirklich überfragt, und müsste das tatsächlich mal sehen.
Falls du mit einer kommerziellen Lizenz arbeitest, könntest du auch mal den Technischen Support von MathWorks kontaktieren.
Grüße,
Harald
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.