|
|
Optimization Toolbox - Schrittweitendefinition |
|
bam_bam |
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 15.10.10
|
|
|
|
Wohnort: München
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.03.2011, 11:19
Titel: Optimization Toolbox - Schrittweitendefinition
|
|
Hallo liebe Matlab-Profis,
ich arbeite an einer Optimierung eines Simulinkmodells.
Dabei werden 6 Variablen verändert und ich würde dem Optimierer, z.B. fmincon gerne für jede Variable eine spezielle minimale Schrittweite übergeben..
z.B.:
minimale Schrittweite für x(1) = 0.01
minimale Schrittweite für x(2) = 0.005
etc...
Leider kann man in optimset aber nur einen Skalar als "DiffMinChange" angeben, keinen Vektor wie ich mir das vorgestellt habe.
Nun meine Frage:
Gibt es vielleicht doch eine Möglichkeit, die minimalen Schrittweiten einzeln anzugeben und ich finde sie bloss nicht?
oder, falls nicht:
Wie rechnet denn Matlab von der skalaren Größe auf die einzelnen Schrittweiten um? Funktioniert das nach dem Motto
"delta_x1 + delta_x2 + ... + delta_x6 = DiffMinChange"
Wäre super, wenn jemand Licht ins Dunkel bringen könnte..
Danke
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 01.03.2011, 20:18
Titel:
|
|
Hallo,
DiffMinChange bezieht sich den minimalen Unterschied für die Schätzung der Gradienten und hat mit der Schrittweite des Lösers überhaupt nichts zu tun!
Die Schrittweite kann meines Wissens nicht direkt eingestellt werden; man kann nur über TolX und TolFun die gewünschte Genauigkeit der Lösung angeben.
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 ;)
|
|
|
bam_bam |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 15.10.10
|
|
|
|
Wohnort: München
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.03.2011, 20:49
Titel:
|
|
Alles klar, danke..
Irgendwie schade, dass man die nicht einstellen kann..
Ist einfach unsinnig, wenn ich bei einem Fahrzeugmodell z.B. die Achslastverteilung in 0.01% - Schritten verändere..
Wenn ich den Optimierer aber mit TolX bzw. TolFun zum gröberen Abtasten bewegen will, bleibt er immer im erstbesten lokalen Minimum hängen..
Trotzdem danke,
schönen Abend noch
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 01.03.2011, 21:06
Titel:
|
|
Hallo,
wenn es dir darum geht, dann ist fmincon ebenso wie jeder andere gradientenbasierte Algorithmus einfach die falsche Wahl!
Stattdessen solltest du Algorithmen zur globalen Optimierung (Genetic Algorithm oder Pattern Search) verwenden.
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 ;)
|
|
|
bam_bam |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 15.10.10
|
|
|
|
Wohnort: München
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.03.2011, 21:36
Titel:
|
|
Hallo Harald,
kann man denn dann bei GA und oder PatternSearch die Schrittweite einstellen? Evtl. sogar für jeden Parameter einzeln..?
Das wär natürlich super..
Die gradientenbasierten Algorithmen sind halt insofern schöner, als dass man besser nachvollziehen kann wie die arbeiten, finde ich..
Lg
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 01.03.2011, 21:56
Titel:
|
|
Hallo,
auch bei PatternSearch ist das nicht vorgesehen; man könnte sich jedoch durch eine Skalierung der Eingangsvariablen behelfen.
Die Nachvollziehbarkeit ist bei PatternSearch überhaupt kein Problem, da das auch deterministisch und nach einem klaren Muster erfolgt.
Bei genetischen Algorithmen würde es wohl darauf hinauslaufen, dass man die Update-Funktionen selbst programmiert, und das wäre etwas mühsam.
Zudem ist da die Nachvollziehbarkeit ein Problem.
Ich würde mich also zunächst mal mit PatternSearch beschäftigen. PatternSearch nimmt übrigens eine automatische Skalierung der Variablen vor, vielleicht hilft das ja bei dir.
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 ;)
|
|
|
bam_bam |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 15.10.10
|
|
|
|
Wohnort: München
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.04.2011, 11:07
Titel:
|
|
|
|
|
Hallo Harald,
Pattern Search funktioniert tatsächlich mit Abstand am besten, danke für deine Tipps..
Es gibt allerdings noch ein paar Dinge die ich nicht verstehe, vielleicht weisst du da ja auch noch die Antwort:
1. Abbruchkriterium TolFun - Im Users Guide steht folgendes:
Function tolerance After a successful poll, if the distance from the
previous best point to the current best point is less than the value of X
tolerance, the algorithm halts.
Ich hab diesen Wert auf 1e-2 gestellt, bekomme aber z.B. folgende Ergebnisse:
Iter f-count f(x) MeshSize Method
...
35 245 9.863 0.01524 Refine Mesh
36 254 9.863 0.01143 Refine Mesh
37 260 9.796 0.02286 Successful Poll
38 264 9.795 0.04572 Successful Poll
39 274 9.795 0.03429 Refine Mesh
40 283 9.795 0.02572 Refine Mesh
41 292 9.795 0.01929 Refine Mesh
42 301 9.795 0.01447 Refine Mesh
43 310 9.795 0.01085 Refine Mesh
44 315 9.795 0.0217 Successful Poll
45 325 9.795 0.01627 Refine Mesh
46 328 9.795 0.03255 Successful Poll
47 338 9.795 0.02441 Refine Mesh
48 341 9.792 0.04882 Successful Poll
...
Wie du siehst, ist die Differenz zwischen den "Successfull Polls" deutlich kleiner als 0.01 und die Suche bricht nicht ab..
Wird dagegen die Grenze für TolMesh = 0.01 erreicht, bricht er gleich ab!?
Weisst du, woran das liegt?
2. Wie genau ist denn die MeshSize definiert? Standardwert ist ja 1, aber was bedeutet MeshSize = 1 z.B. bei 6 unabhängigen Variablen?
Vielen Dank schonmal, find einfach nix drüber in der Hilfe!
lg
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 05.04.2011, 17:01
Titel:
|
|
Hallo,
1. Das Abbruchkriterium ist die Differenz der x-Werte, in der Tabelle siehst du die Funktionswerte dieser x-Werte. Man kann nicht unmittelbar von einem auf das andere schließen.
2. Meshsize = 1 bedeutet 1 in jeder Richtung. Jedoch kann man mit psoptimset einstellen, ob die Variablen vorher skaliert werden (Option ScaleMesh). Diese Option ist per Default eingeschaltet; wie sie genau arbeitet, kann ich dir auch nicht sagen.
Grüße,
Harald
|
|
|
bam_bam |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 15.10.10
|
|
|
|
Wohnort: München
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.04.2011, 17:13
Titel:
|
|
Zitat: |
1. Das Abbruchkriterium ist die Differenz der x-Werte, in der Tabelle siehst du die Funktionswerte dieser x-Werte. Man kann nicht unmittelbar von einem auf das andere schließen. |
Richtig, aber ich dachte immer das dieses Abbruchkriterium TolX ist..
Jetzt ist mir aufgefallen, dass im Users Guide bei beiden Kriterien (TolFun und TolX) die selbe Erklärung steht!?
Ein Fehler? Das steht im Guide auf S. 5-37:
Zitat: |
X tolerance After a successful poll, if the distance from the previous best
point to the current best point is less than the value of X tolerance, the
algorithm halts.
Function tolerance After a successful poll, if the distance from the
previous best point to the current best point is less than the value of X
tolerance, the algorithm halts. |
Wenn ich also TolMesh = 0.01 setze und ScaleMesh = 'off', dann dürfte er nur noch 1/100 - Schritte in jede Richtung machen oder!?
Danke für deine Mühe
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 06.04.2011, 17:15
Titel:
|
|
Hallo,
welche MATLAB-Version verwendest du? Das hört sich in der Tat nach einem Fehler an, in 2010b scheint er aber behoben zu sein.
Zu dem anderen Punkt stimme ich zu.
Grüße,
Harald
|
|
|
bam_bam |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 15.10.10
|
|
|
|
Wohnort: München
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 06.04.2011, 19:14
Titel:
|
|
Ich les immer in dieser *.pdf:
http://www.mathworks.com/help/relea...../pdf_doc/gads/gads_tb.pdf
Da stehts auf Seite 153 (von der pdf..).
Aber normalerweise bezieht sich des TolFun doch hundertprozentig auf die Funktionswerte, wie bei den anderen Optimieren auch oder!?
Wobei kein einziges Verfahren abbricht, sobald der für TolFun eingestellte Wert erreicht wird..
Genauer sieht man's ja eben bei pattern search in dem oberen Post..
lg
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 06.04.2011, 19:59
Titel:
|
|
Hallo,
dieses PDF ist von R13, also rund 5 Jahre alt. Warum nutzt du nicht aktuellere Dokumentation?
Ich habe das oben nicht genau genug durchgelesen und dachte du nutzt TolX. Warum TolFun da nicht eher für Abbruch sorgt, sehe ich erstmal auch nicht.
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|