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

Fitparameter in fminsearch einschränken

 

Salamander
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 28.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2009, 14:20     Titel:
  Antworten mit Zitat      
Hallo,

Ich habe jetzt das Problem, dass mein Code einen meiner Parameter Gamma nahezu 1 setzt und alle anderen nahezu 0 (eine realistische Lösung für den Funktionstyp wären z.B. einzelne Gamma-Werte wie 0.78, 0.12, 0.07,...,1e-5), so dass ich sehr große Anpassungsfehler (bis zu über 100%) erhalte...Außerdem fällt mir auf, dass die Funktion bei der Minimumssuche stark bei den Startparametern hängen bleibt, d.h., wenn ich z.B. für Gamma1_start=0.8 wähle, ist das Ergebnis Gamma1=0.79999 und wenn ich stattdessen Gamma1_start=0 wähle, bekomme ich als Ergebnis Gamma1=0.00001. Was ich daher haben möchte ist, dass die Nebenbedinungen schon alle erfüllt sind, aber dass das Programm die Fitparameter stärker variiert...Habe auch schon mit optimset rumgespielt und TolFun und TolX hochgeschraubt, das nutzt aber auch nichts...

Code:
A=[0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0; 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0];
b=[0.999; 0.9999];
lb=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];

obj=@(param1)min_fun(x, mu_0, param1, beta1, beta2, beta3, beta4, beta5, beta6, beta7, beta8, T_mess);


[param1,fval] = fmincon(obj,param_start,A, b, [], [],lb,[])


Nochmals vielen Dank für eure bisherige Hilfe!!!

Viele Grüße,

Salamander
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: 31.07.2009, 16:20     Titel:
  Antworten mit Zitat      
Hallo,

fmincon sucht nach einem lokalen (!) Minimum. Gerade wenn es sich also um eine sehr "hügelige" Funktion handelt, läuft man oft in eine lokales Minimum, obwohl man das globale sucht.

Abhilfen:
- bessere Startwerte (haha, ich weiss)
- verschiedene Startwerte systematisch durchlaufen lassen
- wahrscheinlich am hilfreichsten: Algorithmen aus der Genetic Algorithm and Direct Search Toolbox, wie z.B. patternsearch.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 28.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2009, 19:59     Titel:
  Antworten mit Zitat      
Hallo,

Mit patternsearch komme ich immerhin auf unter 21% Anpassungsfehler. Wink Das Problem mit den Startparametern ist, dass ich für die verwendeten Messdaten eigentlich genaue Anpassungsparameter habe, mit denen jemand in einem Paper auf unter 0,5% Anpassungsfehler kommt...aber wenn ich diese Werte als Startparameter verwende, komme ich trotzdem auf die 21% Anpassungsfehler und nicht wie im Paper mit den gleichen Daten auf 0,5%...

Viele Grüße,

Salamander
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: 01.08.2009, 11:29     Titel:
  Antworten mit Zitat      
Nächster Vorschlag: genetischer Algorithms (ga), und patternsearch als Hybrid Function hinten dran.

Am besten mal mit verschiedenen Algorithmen in Genetic Algorithm and Direct Search Toolbox und dabei jeweils verschiedenen Einstellungen experimentieren.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 28.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2009, 13:16     Titel:
  Antworten mit Zitat      
Hallo Harald,

Danke, damit klappt es schon viel besser...mir ist aber beim ga noch eine Sache unklar: Wenn ich wie unten im Code patternsearch als Hybridfunktion nehme, dann muss ich in patternsearch ja wieder Startparameter param_start definieren...aber die Startparameter für patternsearch sollte ich ja eigentlich von dem genetic algorithm bekommen...wie funktioniert das denn?

Code:
options = gaoptimset('HybridFcn',{@patternsearch});

[param1, fval] = ga(obj,15,A,b,[],[],lb,[],[],options)

[param1,fval] = patternsearch(obj,param_start,A,b,[],[],lb,[])
 


Viele Grüße,
Salamander
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: 01.08.2009, 13:21     Titel:
  Antworten mit Zitat      
Wenn patternsearch als Hybrid Function definiert ist, ruft MATLAB automatisch nach dem Abschluss von ga die Funktion patternsearch auf, und zwar mit dem besten Individuum als Startwert.

Die Zeile
Code:
[param1,fval] = patternsearch(obj,param_start,A,b,[],[],lb,[])

ist dann also überflüssig.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 28.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2009, 14:18     Titel:
  Antworten mit Zitat      
Also bekomme ich je nach "Auslese" beim ga unterschiedliche Parameter raus, d.h. jedes Mal wenn ich einen ga laufen lasse, bekomme ich eine andere Anpassung? Denn die Anpassungsfehler unterscheiden sich doch erheblich, sie liegen z.B. zwischen 0.12% und 40%! Also um gute Ergebnisse beim ga zu bekommen, muss man den Algorithmus einfach ein paar Mal durchlaufen lassen und sich dann das beste Ergebnis aussuchen?

Viele Grüße, Salamander
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: 01.08.2009, 14:53     Titel:
  Antworten mit Zitat      
Genau.

Alternative ist, mit den Optionen zu arbeiten, beispielsweise größere Populationen, oder mehr Generationen. Meiner Erfahrung nach sind mehrere Versuche aber effizienter.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 28.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2009, 15:32     Titel:
  Antworten mit Zitat      
Nur nochmal zum Sichergehen: Die Funktion, die ich in obj definiert habe, ist im Moment
Code:
sum((T_anpass_ga-T_exakt).^2)
, wobei T_anpass_ga meine Anpassungsfunktion ist und T_exakt sind die einzelnen Messwerte...Ist das so richtig oder muss ich in obj nur T_anpass_ga definieren wie es z.B. bei lsqcurvefit der Fall ist?
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: 01.08.2009, 16:09     Titel:
  Antworten mit Zitat      
Stimmt schon so, sonst wäre ja Mist herausgekommen Wink

Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Salamander
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 28.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2009, 14:44     Titel:
  Antworten mit Zitat      
Hallo,

Gibt es eine Möglichkeit, dass ich meine gefundenen Fitparameter abspeichere und dann nochmals ga durchlaufen lasse, damit ich überprüfen kann, ob ich nicht noch bessere Parameter finden kann?

Viele Grüße!!
Salamander
Private Nachricht senden Benutzer-Profile anzeigen
 
Salamander
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 28.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2009, 11:19     Titel:
  Antworten mit Zitat      
Hab es rausbekommen, vielen Dank für alles!! Habe (zumindest bis jetzt Wink) keine weiteren Fragen mehr!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.