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

Zwinge fmincon zu Stepsize

 

elchico
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 04.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2021, 10:21     Titel: Zwinge fmincon zu Stepsize
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein Multistart/fmincon Lösungsansatz für meine Simulationen. Um die Ergebnisse zu validieren, möchte ich das bestehende Programm ein wenig "missbrauchen". Folgendes Beispiel, vereinfacht auf einen einzigen Parameter:

Ich habe einen Parameter, der von 0-30 variiert werden soll (lb und ub für Multistart), wobei der Parameter gegen 30 läuft während der Optimierung. Jetzt würde ich aber gern mal sukzessiv in einem einzigen fmincon Run von 0-30 durch-iterieren (um quasi den Optimierungsverlauf aufzeichnen zu können, da ich testen möchte, ob sich darin irgendwelche Informationen verstecken). So viel zum Background.

Meine Problem:
Wenn ich den Parameter auf 0-30 setze, dann startet fmincon zB bei 0.99 (das wäre mir nah genug an 0), testet dann im Bereich von 0.98 und 1.15 ein bisschen herum und stoppt mit folgender Ausgabe:

Zitat:
Optimization stopped because the relative changes in all elements of x are
less than options.StepTolerance = 1.000000e-08, and the relative maximum constraint
violation, 0.000000e+00, is less than options.ConstraintTolerance = 1.000000e-06.


Jetzt versuche ich schon eine ganze Weile, herauszufinden, an welchen Stellschrauben man drehen muss, damit fmincon etwas macht, was folgendem nahe kommt:
Starte (von mir aus) bei 1, und schreite mit einer Schrittgröße von zB 0.5 voran (also 0.5, 1.5), dann ist 1.5 besser. Nächster Schritt 1 und 2 => 2 ist besser .. usw. Schrittgröße ist egal, solange fmincon fortlaufend testet und nicht nur im Bereich von 1.
Ich weiß nicht, ob Multistart fmincon allgemein mitteilt, dass bei 30 Ende wäre? Also ob Multistart da ein Auge drauf hat?
Ansonsten wäre das auch nicht tragisch, wenn fmincon weiter testet, dann würde ich alles größer 30 manuell rausnehmen (die Werte in dem Bereich werden dann biologisch unsinnig).

Daraus könnte ich dann den Verlauf der Optimierung rausziehen und evtl. einen (biologisch interessanten) Zusammenhang finden zwischen Parameter und Minimierungsfunktion (sowas wie: "Minimierungsfunktion ist linear abhängig von diesem Parameter" oÄ).

Unter anderem habe ich den FiniteDifferenceStepSize Wert mal verändert (auf 1e-1), allerdings wird trotzdem nur im Bereich des Startwertes getestet und nicht weiter weg (meine Vermutung ist, dass das nicht auszuhebeln ist?).

Ich hoffe, dass das halbwegs verständlich gefragt ist. Anbei noch meine optimoptions für fmincon.

Danke schon mal und LG
Michi

fminconOpts.png
 Beschreibung:

Download
 Dateiname:  fminconOpts.png
 Dateigröße:  31.76 KB
 Heruntergeladen:  193 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.01.2021, 13:47     Titel:
  Antworten mit Zitat      
Hallo,

ich würde sagen, dass das nicht der Zweck bzw. die Vorgehensweise von fmincon ist. Du hast anscheinend nur eine Größe, die variiert werden soll. Das kannst du auch sehr einfach selbst machen und so einen Überblick über die Funktion bekommen:

Code:
x = 0:0.1:30;
y = zeros(size(x));
for k = 1:numel(x)
    y = theFunctioN( x(k) );
end
plot(x,y)
[besty, bestx] = min(y);


bestx kann dann als Startwert für eine Optimierung genommen werden, um das genaue globale Minimum zu finden.

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: 28.01.2021, 14:17     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine Antwort.

Mir ist klar, dass das nicht der Zweck von fmincon ist, deswegen hatte ich gehofft, dass es eine Möglichkeit gäbe, den Algorithmus dazu zu zwingen / missbrauchen.

Ich habe für das ursprüngliche Problem 6 Variablen, die es zu optimieren galt. Da ich jetzt durch fmincon eine Idee davon habe, welche Variablen besonders wichtig für die Optimierung sind, hätte ich gern diese einzelnd rausgepickt und verändert in einem gewissen Bereich. Ich hätte jetzt gern den schon existierenden Code dafür hergenommen, da ich somit nicht extra nochmal erklären müsste später, warum ich einen neuen Code schreiben musste, den es dann auch noch zu verifizieren gilt (gleiche Ergebnisse bei gleichem Input bei neuem und altem Code etc).

Aber Du hast wahrscheinlich Recht, es wird trotzdem schneller gehen, nochmal schnell was zu programmieren, auch wenn mir das eigentlich zuwider ist Wink

LG
Michi
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Da ich jetzt durch fmincon eine Idee davon habe, welche Variablen besonders wichtig für die Optimierung sind

Zu solchen Schlüssen bin ich offen gesagt nie gekommen. Es kann natürlich erkennbar werden, dass bei bestimmten Variablen an bestimmten Stellen kleine Änderungen größere Auswirkungen haben. Das kann aber auch bedeuten, dass die Variable z.B. anders skaliert ist. Beispiel:
Strecke = 15000 [m]. Änderungen von +/- 0.1 werden kaum relevant für die Fahrzeit sein.
Strecke = 15 [km]. Änderungen von +/- 0.1 erscheinen deutlich relevanter für die Fahrzeit.

Ein Solver, der in die Richtung "Suche in verschiedenen Richtungen" geht wäre patternsearch. Aufruf sehr ähnlich wie fmincon, nur komplett andere Vorgehensweise.

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