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 hängt sich auf

 

ckrueger
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 20.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2012, 07:52     Titel: fmincon hängt sich auf
  Antworten mit Zitat      
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.

Vielen Dank für eure Hilfe!

Tine
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.08.2012, 11:37     Titel:
  Antworten mit Zitat      
Hallo,

irgendeinen Unterschied muss es ja geben.

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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
ckrueger
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 20.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.08.2012, 08:51     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Antwort, Harald.

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.

Die Escapefunktion sieht so aus:
Code:


tic
options=optimset('algorithm','sqp', 'GradObj', 'on', 'OutputFcn', @outfun);

[x_opt,fval,exitflag] =fmincon(@Zielfunktion, x0, A, b, Aeq, beq, lb, ub, @NL_RB, options);

 function abbruch = outfun(x, optimValues, state)
        abbruch = false;
        zeit = toc;
        if zeit > 60
            abbruch = true;
        end
    end

 


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.

Hat jemand eine Idee, woran das liegen kann?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.08.2012, 09:06     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
ckrueger
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 20.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.08.2012, 10:01     Titel:
  Antworten mit Zitat      
Hallo,

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.08.2012, 15:14     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Die Zielfunktion ist ein schlichtes Skalarprodukt aus Gewichtungsvektor und Optimierungsvektor.

Damit sollte man an sich eher LINPROG verwenden.

Es ist mir unerklärlich, warum derselbe Aufruf einmal schnell laufen und einmal Stunden brauchen sollte.

Für mehr Unterstützung müsste man sich wohl das konkrete Problem ansehen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
ckrueger
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 20.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.08.2012, 16:20     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Hilfebemühungen, Harald.

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.08.2012, 16:35     Titel:
  Antworten mit Zitat      
Hallo,

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
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 - 2025 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.