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

Problem mit fmincon

 

tobidz
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2012, 09:43     Titel: Problem mit fmincon
  Antworten mit Zitat      
Hallo,

ich bin neu hier und bitte um ein bisschen Nachsicht, wenn ich was falsch mache Wink

Ich versuche grade mit fmincon den Wert von 6 Parametern abzuschätzen, allerdings habe ich das Problem, dass sich diese Werte kaum von meinen vorgegebenen Startwerten weg bewegen, obwohl diese nur geraten sind und wahrscheinlich von den passenden Werten hziemlich weit entfernt sind.

Beim Abbruch kommt immer die Meldung:

"Optimization terminated: first-order optimality measure less
than options.TolFun and maximum constraint violation is less
than options.TolCon.",

die ja eigentlich eine Erfolsmeldung ist.

Leider werde ich aus der Hilfe nicht schlau, was TolFun, TolX und TolCon genau bewirken und hoffe ihr könnt mir da weiter helfen.


Viele Grüße
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: 20.08.2012, 10:27     Titel:
  Antworten mit Zitat      
Hallo,

du sagst, dass es kaum von den vorgegebenen Startwerten wegläuft. Vielleicht sind deine Startwerte schon ziemlich gut? Vielleicht läuft fmincon aber auch in ein lokales Minimum.

Ich würde es zunächst mal mit unterschiedlichen Startwerten versuchen.
Eine weitere Möglichkeit wäre, TolFun (und TolCon) über optimset herunterzusetzen.

Letztlich muss man sich darüber im klaren sein, dass fmincon immer nur ein lokales Minimum findet und man keine Garantie hat, dass es das globale ist. Wenn man keine Startwerte angeben kann, die "nahe genug" am globalen Minimum sind, kann man es mit der Global Optimization Toolbox (patternsearch oder ga) versuchen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2012, 11:30     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen dank für deine Antwort,
ich habe schon verschiedene Startwerte versucht, was aber nichts geändert hat.
Leider verfüge ich nicht über die Global Optimation Toolbox Sad

vorher hatte ich es mit fminsearch versucht, wobei das Ergebnis dabei vom Verlauf deutlich besser aussah, allerdings waren dabei einige von meinen gesuchten Größen negativ, was sie allerdings nicht sein können, da es sich dabei um Federsteifigkeiten handelt. Deswegen bin ich auf fmincon umgestiegen, um hier die Bedingung zu setzten, dass die gesuchten Grüßen positiv sein müssen.

Habe ich mit fmincon an der Stelle dann keine Chance brauchbare Ergebnisse zu finden?

viele Grüße
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: 20.08.2012, 11:44     Titel:
  Antworten mit Zitat      
Hallo,

ein Möglichkeit ist, selbst über verschiedene Startwerte zu iterieren oder die Funktion erstmal an vielen Stellen auszuwerten, um einen guten Startwert zu bekommen.

Um weitere Hilfe geben zu können, müsste man wohl das gesamte Problem anschauen.

Du könntest auch mit FMINSEARCH arbeiten und deine Nebenbedingungen als Strafterme mit einfließen lassen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2012, 12:27     Titel:
  Antworten mit Zitat      
Hallo Harald,


weist du zufällig, was TolX, TolFun und TolCon genau bewirken?

ich habe versucht einen schwingfähigen Riementrieb als 3 Massenschwinger nachzubilden.

dabei habe ich Messdaten von den Winkelgeschwindigkeiten der 3 Riemenscheiben sowie deren Winkel. Außerdem habe ich ein Modell entworfen, dass diese Größen nachbilden soll, wenn ich da die gleichen Eingangsgrößen draufgebe.

Im angehängten Bild sind die schwarzen Linien die jeweils berechneten Gößen und die anderen die gemessenen.

Die Schwingungen, auf die es mir dabei ankommt sind also nicht wirklich gut mit dem Modell berechnet worden, was daran liegen dürfte, dass die Parameter, die ich annähern will nicht passen.

viele Grüße Wink

untitled.fig
 Beschreibung:

Download
 Dateiname:  untitled.fig
 Dateigröße:  150.83 KB
 Heruntergeladen:  592 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
tobidz
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2012, 13:02     Titel:
  Antworten mit Zitat      
sorry wegen dem Doppelpost, aber eine Frage hab ich noch Wink

ich hab jeztz bei fminsearch mal Straftere gesetzt, und an den Optionen rumgespielt.

Meine Frage ist, warum der Optimieren hier abbricht:

Optimization terminated:
the current x satisfies the termination criteria using OPTIONS.TolX of 1.609491e+003
and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.574491e+003

obwohl meine Vorgaben so aussahen:

Code:

opt=optimset('Display','Iter','MaxFunEvals',80000,'TolFun',e-50,'TolX',e-15,'TolCon',1e-8);
y = fminsearch(@fun_RSG,[1000000 1000000 1000000 500 500 500],opt);



Viele Grüße
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: 20.08.2012, 13:05     Titel:
  Antworten mit Zitat      
Hallo,

eine Beschreibung der Optionen findest du z.B. hier:
http://www.mathworks.com/help/relea.....lbox/optim/ug/f19175.html

5 der 6 Linien sind ja quasi identisch. Warum die 6. nun nicht passt, ist aus der Ferne schwer zu sagen.

Die Vermutung bleibt, dass es sich bei dem gefundenen Minimum um ein lokales Minimum handelt. Gerade wenn man Schwingungsterme hat, sind die recht empfindlich für lokale Minima. Für Empfehlungen dazu siehe vorherige Antwort.

Zur weiteren Frage:
Es muss
Code:
... ,'TolFun',1e-50,'TolX',1e-15, ...

heißen (die Einsen fehlen).

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2012, 13:15     Titel:
  Antworten mit Zitat      
Vielen Dank für die schnelle Antwort Smile

sind denn die gemessenen Daten (magenta) deiner Meinung nach "glatt" genug um dort ein Gradienten basiertes Verfahren anzuwenden? Das Problem, warum die son bisschen eckig aussehen ist, dass die teilweise mit einer relativ geringen Schrittweite erfasst wurden.


Viele Grüße
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: 20.08.2012, 13:27     Titel:
  Antworten mit Zitat      
Hallo,

es reicht ja nicht, die Glattheit dieser Kurven zu betrachten. Man müsste sich ansehen, wie die Kurven sich ändern, wenn die Parameter geändert werden.

In der Regel reicht es allerdings aus, wenn kleine Änderungen in den Parametern auch nur kleine Änderungen in der Zielfunktion bewirken.

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2012, 14:38     Titel:
  Antworten mit Zitat      
ich glaub mein Modell ist einfach falsch...
bei fminsearch will er mit 2 Parametern immer ins Minus laufen und wenn ich einen Strafterm setze wie:

Zitat:

if c2<50
f=f*100
end


dann läuft der Parameter immer gegen 50, was ja bedeutet, dass er garantiert nicht 50 ist!
und bei fmincon enfernen sich die Parameter nach wie vor nicht von den Startwerten, egal wie ich die wähle.

Außerdem hab ich grad zufällig gesehn, dass er am Anfang immer die Meldung:
Warning: Large-scale (trust region) method does not currently solve this type of problem,
using medium-scale (line search) instead.

wobei ich damit nicht wirklich was anfangen kann.
Kann das die Ursache sein? wie stell ich das denn auch medium-scale?

Viel Grüße
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: 20.08.2012, 16:06     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
dann läuft der Parameter immer gegen 50, was ja bedeutet, dass er garantiert nicht 50 ist!

So würde ich das nicht sagen. Es bedeutet lediglich, dass 50 lokal besser als Werte über 50 ist.

Die Warnung kannst du ignorieren. Wenn du möchtest, kannst du das explizit über optimset einstellen.

Mir scheint, dass du eine Funktion mit sehr sehr vielen lokalen Minima hast. Ich sehe nur die Möglichkeit, die Funktion zunächste an sehr sehr vielen (> 10000) mehr oder weniger zufälligen Stellen auszuwerten und die beste dieser Stellen als Startwert für die eigentliche Optimierung zu nehmen, oder globale Optimierung mit den Algorithmen aus der Global Optimization Toolbox (hieß früher Genetic Algorithm and Direct Search Toolbox).

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2012, 16:52     Titel:
  Antworten mit Zitat      
Hallo nochmal Wink

erstmal vielen Dank für deine große Hilfe Smile
Über 1000 Anfangspunkte werde ich wohl leider nicht testen können, da ein durchlauf ja schon ziemlich lange dauert, aber mal noch ne andere Sache, ich bin mir mit meinen Bedingungen, die ich bei fmincon angegeben hab grad nicht ganz sicher Embarassed

Ich wollte die Bedingung setzten, dass meine 6 Parameter alle >0 sein müssen.
Dafür habe ich die Matrix A und den Vektor b wie folgt definiert:

Code:

A=[-1 0 0 0 0 0;...
     0 -1 0 0 0 0;...
     0 0 -1 0 0 0;...
     0 0 0 -1 0 0;...
     0 0 0 0 -1 0;...
     0 0 0 0 0 -1];
b=[0 0 0 0 0 0]


das ist falsch oder? Sad
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: 20.08.2012, 19:11     Titel:
  Antworten mit Zitat      
Hallo,

theoretisch passt das. Der Algorithmus wird jedoch besser / schneller laufen, wenn du einen Nullvektor als untere Schranke (lb) angibst.

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.