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

Optimierung: Entstehung komplexer Parameter verhindern

 

nixChef

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2014, 17:14     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:

Ich hatte dir mal einen Vorschlag gemacht und weiß nicht, ob du ihn umgesetzt hast bzw. was wenn dabei herausgekommen ist:
Zitat:
Berechne doch mal den Fehlervektor (bzw. seine Norm) für den Startvektor und für den optimierten Vektor.



also ich habe es ausprobiert und die Norm des Fehlervektors der "optimierten" Parameter mit der Norm des Fehlervektors der Startparameter verglichen:

Code:

F_norm_optimiert = 1.9808
F_norm_start = 0.1170
 


Die Norm des Fehlervektors hat sich also deutlich erhöht, die Abweichung ist demnach deutlich angestiegen, was ich auch anhand der "optimierten" Parameter sehen kann.

Gruß


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.01.2014, 17:25     Titel:
  Antworten mit Zitat      
Hallo,

ein Minimalbeispiel sollte lauffähig sein und dieselben Probleme aufweisen.

Die Simulation ist aber schon von A-C abhängig?
Falls nicht, ist es überflüssig, die Simulation innerhalb der Zielfunktion zu machen.
Falls sie von A-C abhängig ist, überprüfe mal, ob innerhalb der Simulation wirklich die richtigen Werte verwendet werden.

Was ist Sim_Modell_V1 denn? Ein Skript? Ein Simulink-Modell? Ein Skript, dass ein Simulink-Modell simuliert? Was ganz anderes?

Mit anonymous functions kannst du evalin-Befehle vermeiden.

Zitat:
also ich habe es ausprobiert und die Norm des Fehlervektors der "optimierten" Parameter mit der Norm des Fehlervektors der Startparameter verglichen

Dass der Zielfunktionswert für den optimierten Vektor schlechter ist als für den Startwert, kann an sich nur sein, wenn der Startwert die Nebenbedingungen verletzt hat. Hast du das überprüft?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2014, 20:22     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:


Die Simulation ist aber schon von A-C abhängig?
Falls nicht, ist es überflüssig, die Simulation innerhalb der Zielfunktion zu machen.
Falls sie von A-C abhängig ist, überprüfe mal, ob innerhalb der Simulation wirklich die richtigen Werte verwendet werden.


Ja, die Simulation ist von A-C abhängig. Hab die Werteübergabe geprüft, es kommen die richten Werte im Modell an. Der Optimierungsalgo verdreht sie tatsächlich weg von einem guten Ausgangszustand hin zu einem schlechteren.

Zitat:

Was ist Sim_Modell_V1 denn? Ein Skript? Ein Simulink-Modell? Ein Skript, dass ein Simulink-Modell simuliert? Was ganz anderes?


Ein Skript.

Zitat:

Mit anonymous functions kannst du evalin-Befehle vermeiden.


Ah ok. Bietet das Vorteile?

Zitat:

Dass der Zielfunktionswert für den optimierten Vektor schlechter ist als für den Startwert, kann an sich nur sein, wenn der Startwert die Nebenbedingungen verletzt hat. Hast du das überprüft?


Meine Nebenbedingungen sind die untere und obere Grenze meiner Parameter. Der Startvektor verletzt definitiv nicht die Grenzen, das würde der trust-Region-algo auch als Warnung oder sogar fehler ausgeben.

Hast du noch weitere Ideen woran es liegen könnte?

Danke schon einmal![/quote][/code]
Gruß
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.01.2014, 20:38     Titel:
  Antworten mit Zitat      
Hallo,

nein, keine weiteren Ideen.
Die Optimierungsalgorithmen laufen ja in die Richtung des steilsten Abstiegs. Um das weiter zu untersuchen, bräuchte ich wirklich ein nachvollziehbares Beispiel.

Vielleicht kann dir der Technische Support von MathWorks weiterhelfen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2014, 21:27     Titel:
  Antworten mit Zitat      
Ok, trotzdem vielen Dank.

Harald hat Folgendes geschrieben:

Die Optimierungsalgorithmen laufen ja in die Richtung des steilsten Abstiegs. Um das weiter zu untersuchen, bräuchte ich wirklich ein nachvollziehbares Beispiel.


Wie würdest du das untersuchen? Dann schau ich mir das noch an.

Gruß nixChef
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.01.2014, 22:36     Titel:
  Antworten mit Zitat      
Hallo,

von vorne bis hinten durchgehen.
Schauen, an welchen Stellen die Zielfunktion ausgewertet wird, und was dabei herauskommt.
Läuft der Algorithmus von Anfang an in die falsche Richtung oder erst später?
Oder hast du am Ende etwas anderes übersehen, so dass der Algorithmus an sich das richtige tut? Es fällt mir nämlich nach wie vor schwer zu glauben, dass der Algorithmus überhaupt in die falsche Richtung läuft.

Eine weitere Möglichkeit wäre, norm(fehler) mit fmincon zu minimieren anstatt lsqnonlin zu verwenden. Ich erwarte da normal zwar keine besseren Ergebnisse, aber versuchen kann man's ja mal.

Noch zu evalin: es ist unübersichtlich und schwierig zu debuggen - siehe diverse Threads zum Thema.

Ah, eine Frage natürlich noch: was ist die Statusmeldung von lsqnonlin bzw. was ist die exitflag?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2014, 01:04     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:

Ah, eine Frage natürlich noch: was ist die Statusmeldung von lsqnonlin bzw. was ist die exitflag?


Was genau meinst du mit Statusmeldung? Als exitflag wird 3 ausgegeben, nicht 1, was wünschenswert wäre.

Ich muss das alles nochmals kontrollieren, das was ich bisher jedenfalls sehe ist, dass er von einer besseren zu einer schlechteren Lösung läuft. Hab mir auch schon den kompletten Parameterverlauf jedes einzelnen Parameters, d.h. den Wert in jedem Iterationsschritt, plotten lassen. Nahezu alle Parameter werden von Anfang verschlechtert. Der ein oder andere bleibt erst noch ein wenig konstant eher er schlechter wird.

Gruß
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.01.2014, 10:09     Titel:
  Antworten mit Zitat      
Hallo,

Statusmeldung = das, was im Command Window als Meldung ausgegeben wird. Hat sich aber mit exitflag erledigt.
Setze TolFun in den Optionen mal auf 1e-16.

Ich habe dieses Verhalten so noch nie gesehen und daher leider keine Erklärung dafür.

In Erweiterung meiner Idee mit fmincon: man könnte natürlich statt fmincon auch patternsearch oder ga darauf loslassen.

Eine Frage noch: die Simulation ist schon deterministisch, d.h. enthält keine zufallsbasierten Elemente?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2014, 12:21     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:

Ich habe dieses Verhalten so noch nie gesehen und daher leider keine Erklärung dafür.


Very Happy ich auch nicht, ABER: ich hab das Problem entdeckt!!!

Unglaublich, die kleinen versteckten Fehler sind die schwersten:
Der komplexen Vektor den mein Modell ausgibt, war ein Zeilenvektor. Meine Daten liegen als Spaltenvektor vor, also hab ich den komplexen Vektor transponiert, allerdings ohne Punkt vor dem Hochkomma! Damit sind komplex konjugierte Werte im transponierten Vektor aufgetaucht und damit hat es nicht mehr funktinioniert. Habs nun behoben und damit funktioniert auch die Optimierung.

Vielleicht noch eine Ergänzung, der Fehlervektor sollte dabei als Matrix, in der eine Spalten den Fehler im Realteil und die andere den Fehler im Imaginärteil enthält, oder als zusammgengefahrener Vektor aufgebaut werden:

Code:

Fehlervektor = [(real(Z_simuliert) - real(Z_gemessen),(imag(Z_simuliert) - imag(Z_gemessen))];
 


oder

Code:

Fehlervektor = [(real(Z_simuliert) - real(Z_gemessen);(imag(Z_simuliert) - imag(Z_gemessen))];
 


Danke nochmal für deine Unterstützung!

viele Grüße
nixChef
 
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 - 2025 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.