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

Optimization Toolbox - Schrittweitendefinition

 

bam_bam
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.10.10
Wohnort: München
Version: ---
     Beitrag Verfasst am: 01.03.2011, 11:19     Titel: Optimization Toolbox - Schrittweitendefinition
  Antworten mit Zitat      
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 Smile
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: 01.03.2011, 20:18     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
bam_bam
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.10.10
Wohnort: München
Version: ---
     Beitrag Verfasst am: 01.03.2011, 20:49     Titel:
  Antworten mit Zitat      
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 Smile
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: 01.03.2011, 21:06     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
bam_bam
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.10.10
Wohnort: München
Version: ---
     Beitrag Verfasst am: 01.03.2011, 21:36     Titel:
  Antworten mit Zitat      
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
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: 01.03.2011, 21:56     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
bam_bam
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.10.10
Wohnort: München
Version: ---
     Beitrag Verfasst am: 05.04.2011, 11:07     Titel:
  Antworten mit Zitat      
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
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: 05.04.2011, 17:01     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
bam_bam
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.10.10
Wohnort: München
Version: ---
     Beitrag Verfasst am: 05.04.2011, 17:13     Titel:
  Antworten mit Zitat      
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 Smile
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: 06.04.2011, 17:15     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
bam_bam
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.10.10
Wohnort: München
Version: ---
     Beitrag Verfasst am: 06.04.2011, 19:14     Titel:
  Antworten mit Zitat      
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
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: 06.04.2011, 19:59     Titel:
  Antworten mit Zitat      
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
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.