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

Fragen zu Multistart / Fmincon Kombination

 

elchico
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 04.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2020, 00:27     Titel: Fragen zu Multistart / Fmincon Kombination
  Antworten mit Zitat      
Hallo zusammen,

ich habe noch drei Fragen zur Multistart / fmincon Kombination:

1) Mein Programm läuft folgendermaßen ab: Initialisierung von Multistart mit 1000 Startpunkten, jeweils mit 30 variablen Parametern. Führe jeden Startpunkt mit fmincon aus. Das heißt, fmincon gibt pro Startwert und Iter 30 Runs aus (bei FiniteDifferenceType = "forward"). Jetzt möchte ich, dass bei einer gewissen Bedingungn in der zu evaluierenden Funktion von fmincon sofort die Kontrolle wieder an Multistart übergeben wird, ohne die restlichen Runs durchzulaufen (bei mir wäre es: Peaks = false). Geht das? Ich habe es ganz simpel mit "return" in der Funktion versucht, allerdings gibt die Funktion dann die Kontrolle nur an fmincon zurück (und fmincon startet den nächsten Run des gleichen Startwertes, d.h. ich bekomme höchstwahrscheinlich wieder Peaks = false), nicht noch eine Instanz weiter an Multistart. Auch hilft mir scheinbar nicht die OutputFunktion von fmincon, da diese erst nach den 30 Runs ausgeführt wird (und nicht nach jedem einzelnen).

2) Meine Kostenfunktion von fmincon ist relativ simple ("mittle drei Parameter"), die es zu minimieren gilt. Jetzt gibt es aber eine zusätzliche Bedingung, die erfüllt sein muss (Peaks muss true sein). Hier setze ich die Kostenfuntion dann artifiziell auf einen sehr hohen Wert (1E6). Dadurch wird meine Funktion wahrscheinlich non-smooth, oder? Ist dann fmincon überhaupt der richtige Solver? Mir fällt leider keine Möglichkeit ein, diese bool'sche Bedingung in die Kostenfunktion einzubinden (und damit eine smoothe Funktion zu erstellen). Allerdings möchte ich eigentlich auch die Startwerte, die eben Peaks = false haben, überhaupt nicht in der Auswertung berücksichtigen (deswegen auch Frage 1). Dadurch würde ich fmincon sowieso nur beachten, falls Peaks = true und damit wäre die Funktion wieder smooth, oder? Tut mir Leid, das ist mir irgendwie zu hoch...

3) Gibt es eine Möglichkeit, die generierten Startwerte von Multistart vor dem Run von Multistart abzufragen? Oder würdet Ihr empfehlen, über ein RandomStartPointSet und List die Startwerte zu generieren (damit hätte ich sie ja quasi)? List generiert dann auch die gleichen Startwerte wie Multistart, oder? Ich hätte quasi gern eine Übersicht über alle möglichen Startwerte (und würde die gern in einer csv Datei speichern).

Wer bist hierhin gelesen hat: Vielen Dank mal wieder für Eure Hilfe im Voraus schon mal!
LG
Michi
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.07.2020, 19:20     Titel:
  Antworten mit Zitat      
Hallo,

1. Ist mir nicht bekannt. Es widerspricht m.E. aber auch dem Geist von fmincon. Die Funktionsauswertungen innerhalb einer Iteration werden ja ausgeführt, um den Gradienten zu schätzen. Warum sollte man das unter dieser (oder einer anderen) Bedingung abbrechen?

2. Ich würde das als Nebenbedingung implementieren. So oder so besteht aber das Problem, dass eine Schätzung von Gradienten nicht wirklich sinnvoll ist, wenn man sich an den Übergang von true zu false begibt. Vorschläge:
a) einen weichen Übergang schaffen, d.h. ein p, das zwischen 0 und 1 sein kann und umso näher bei 1 ist, je näher man an einem true ist.
b) anderer Solver, z.B. patternsearch

3. Da könnte ich auch nur in der Doku suchen.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
elchico
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 04.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2020, 21:14     Titel:
  Antworten mit Zitat      
Hallo Harald,

1) Wäre insofern sinnvoll für mein Problem, da ich nur Lösungen suche, die eben so einem "true" Fall genügen. Alle anderen initialen Punkte werden so oder so früher oder später aussortiert. Deswegen wäre es hinsichtlich der Performance sinnvoll, diese gar nicht erst auszurechnen. Allerdings lasse ich die jetzt einfach trotzdem ausrechnen und sortiere sie dann im Anschluss aus. Ich habe auch nicht den Anspruch, das globale Minimum zu finden, und auch keine absoluten Aussagen zu meiner Problemstellung zu treffen, sondern erstmal möchte ich eine Tendenz erkennen können. Was dann danach noch kommt, weiß ich noch nicht.

2) Das habe ich mir schon fast gedacht. Das mit dem weichen Übergang hatte ich mir auch schon überlegt. Hierbei wäre aber eine deutliche Performance-Einbußung zu erkennen, weil der Algorithmus eben Fälle minimiert, die überhaupt nicht das Ziel sind (weil ein "false" Fall vorliegt, auch wenn er den minimiert, ist das am Ende nicht das gesuchte). Das mit Patternsearch steht als nächstes auf meiner Liste, da hast Du Recht. Ich würde jetzt nur gern erstmal das so wie es jetzt ist, optimieren wollen, um mal was vorlegen zu können. Mal sehen, was dann im Anschluss noch gewünscht ist.

3) Okay, das kann ich natürlich auch selbst machen, da braucht sich niemand anderes bemühen. Der einfachste Fall wäre, den aktuellen fmincon-Fun-Status zwischenzuspeichern und immer, wenn der bei 1 liegt, die Werte zu speichern.

Danke Dir (wieder mal) für Deine Hilfe.
LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.07.2020, 21:19     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
da ich nur Lösungen suche, die eben so einem "true" Fall genügen.

Nur weil es zwischendurch mal ein false gab, heißt das nicht, dass man nicht auf dem Weg zu einer Lösung mit true sein kann.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
elchico
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 04.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2020, 21:22     Titel:
  Antworten mit Zitat      
Da hast Du Recht. Und deswegen habe ich mich jetzt auch mit dem Umstand angefreundet, dass er die ganzen "false" Fälle durchrechnet. Aber da der Algorithmus eh schon relativ lange läuft, hätte ich gern diese Fälle aus Performance-Gründen ausgeschlossen. Wie gesagt geht es erstmal nur um die Tendenz. Wäre Abbrechen eine Option von fmincon gewesen (oer per if/else Statement), hätte man es auch einfach per Schalter einbauen können und dann den Endbenutzer entscheiden lassen, wie er/sie das gern hätte.

Aber ich lass es jetzt so. Mal von der Performance abgesehen hat es eigentlich nur Vorteile, diese Fälle auch durchzurechnen, das stimmt =)

LG
Michi
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 - 2024 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.