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 - Übergabe von zustzälichen Parameter

 

Shakes79
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 24.05.11
Wohnort: Linz
Version: 2010a
     Beitrag Verfasst am: 02.04.2014, 10:24     Titel: Optimization Toolbox - Übergabe von zustzälichen Parameter
  Antworten mit Zitat      
Hallo

Ich verwende den Optimierer fmnicon in einer GUI. In dieser GUI habe ich alle Parameter als handles gespeichert, nun benötige ich diese handles auch in meiner Optimierungsfunktion. Laut Matlab Hilfe funktioniert das ja, unter anderem, über eine anonymous function. Das habe ich auch implementier, es funktioniert auch, aber...

1.) Wie kann ich in der anonymous function die handles speichern, ich hatte versucht: guidata(gco, handles); funktionierte leider nicht

2.) Wert von x wird nicht angepaßt und damit hat er nach 3 Durchläufen logischerweise ein lokales Minimum erreicht.

3.) Wie kann ich in der Optimierungsfunktion eine Laufvariabel einfügen, (Output.iterations ?)

Danke für Eure Hilfe

Code:

A = [1,0;0,1];
b = [0.1,1];
x0 = [handles.varCi, handles.varRSC_DZ];
LZ = handles.LZ;
fun1 = @(x)MatOptim(x,handles,LZ);
[x] = fmincon(fun1,x0,A,b);
 
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: 02.04.2014, 10:37     Titel:
  Antworten mit Zitat      
Hallo,

zu 1.:
Statt "funktionierte leider nicht" bitte immer sagen, ob es eine Fehlermeldung gibt (und wenn ja: welche) oder inwiefern das Verhalten unerwartet ist.
Versuch mal
Code:
guidata(handles.figure1, handles)

bzw. wenn die GUI an sich eine andere Tag-Eigenschaft hat, statt figure1 dieses Tag.

zu 2.:
Wird deine matOptim nicht mit verschiedenen x-Werten aufgerufen oder wo liegt das Problem? Es liegt nahe, dass die x-Werte sich schon unterscheiden
(probier mal "format long") und der Startwert nur nahe eines lokalen Minimums war.

zu 3.:
Was soll die Laufvariable denn machen? Soll sie bei jeder Funktionsauswertung hochgezählt werden? Bei jedem Optimierungsschritt?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 24.05.11
Wohnort: Linz
Version: 2010a
     Beitrag Verfasst am: 02.04.2014, 11:55     Titel:
  Antworten mit Zitat      
Hallo Harald

Danke für die rasche Antwort.

zu 1.) die Variablen in handles werde upgedatet. Damit gelöst
zu 3.) sollte jeden Iterationsschritt aufzeichen und in der Optimierungsfunction zur Verfügung stehen, erübrigt sich jedoch durch Funktionalität von 1.)

zu 2.) du hattest recht, x wurde geändert jedoch im Bereich 10E-8. Das kann ich über Options('DiffMinChange') ändern, richtig ?

LGünter
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: 02.04.2014, 12:14     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Das kann ich über Options('DiffMinChange') ändern, richtig ?

Ja, aber da sollte man sich evtl. eine etwas tiefer gehemde Frage stellen: fmincon ist ein gradientenbasiertes Verfahren - ist es für deinen Fall sinnvoll, Gradienten anzunähern? Bei verrauschten Funktionen ist dies z.B. nicht der Fall. Es funktioniert dann zwar in vielen Fällen, wenn man 'DiffMinChange' erhöht, aber das ist an sich nicht Sinn der Sache.

Man muss sich darüber im klaren sein, dass die Solver aus der Optimization Toolbox darauf ausgelegt sind, ein lokales Minimum zu finden. Bei einem ausreichend guten Startwert oder bei einer gutmütigen Funktion ist dies zugleich das globale Minimum, aber die Frage ist, ob man sich darauf verlassen kann / will.

Eine Möglichkeit wäre, über verschiedene Startvektoren zu iterieren. Alternativ kann man Algorithmen aus der Global Optimization Toolbox, z.B. patternsearch, einsetzen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 24.05.11
Wohnort: Linz
Version: 2010a
     Beitrag Verfasst am: 04.04.2014, 08:55     Titel:
  Antworten mit Zitat      
Hallo Harald

Die Frage stellt sich natürlich, nur mit meinen Randbedingungen habe ich es als das sinnvollste erachtet, da ich auch mit einem manuellen Gradientenverfahren bereits "gute" Ergebnisse erzielt habe.

Ich verwende Matlab als GUI, für die Optimierung und zur Auswertung der großen Datenmengen. Mit Matlab steuere ich über VBS (einzig mögliche API) eine FEM-Software Modlfow an, diese berechnet den 11 Orientierungstensor der Fasern, Export über VBS => Auswertung mit Matlab und Vergleich mit durch CT gemessenen realen 11-Orientierungstensoren

Meine Randbedingungen:

1.) 2 veränderbare Variablen die als Input für die Optimierung agieren.
2.) Als Output der arithmetische Mittelwert der Abweichung von FEM & CT => Ein einzelner Wert
3.) Nur beschränkte Anzahl an Iterationen möglich (Simulation dauert bis zu 6 Stunden)
4.) Annahmen, dass es sich um eine quadratische Funktion handelt

Was meinst du ? Ist ein anderes Optimierungsverfahren zu empfehlen ?

Grüße Günter
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: 04.04.2014, 09:26     Titel:
  Antworten mit Zitat      
Hallo,

Wenn in der Zielfunktion FEM-Simulationen verwendet werden, dann entstehen daraus ja Ungenauigkeiten. Wenn man fmincon verwendet, sollte man da also auf jeden Fall 'DiffMinChange' erhöhen, damit die Gradienten sinnvoll angenähert werden.

Zitat:
Was meinst du ? Ist ein anderes Optimierungsverfahren zu empfehlen ?

Ich würde es so sagen: wenn du mit deinem momentanen Ansatz gute Ergebnisse erzielst, ist das so in Ordnung.
Bei fmincon besteht aber immer die Gefahr, dass man in ein lokales Minimum läuft. Dann würde ich es mit verschiedenen Startwerten oder Algorithmen aus der Global Optimization Toolbox (z.B. patternsearch) probieren.

Bei der langen Simulationsdauer kann man auch parallel computing, evtl. sogar auf einem Cluster, in Erwägung ziehen. Ist natürlich auch eine Frage der Umsetzbarkeit, was das FEM-Programm angeht.

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.