Verfasst am: 20.01.2013, 22:03
Titel: Optimierung eines Simulinkmodells funktioniert nicht!?
Hallo,
meine aktuelle Aufgabe ist, die Eingangsgrößen eines Simulinkmodells so zu optimieren, dass der Ausgangsgröße minimal wird!
Da es nicht gegeklappt hat, habe ich mal meine Gedanken auf das Bsp. der "doc fmincon"-Seite angepasst, um zu schauen (hatte ganze komische Fehlermeldungen, mit denen ich nichts anfangen konnte), ob es bei diesem Bsp. funktioniert!
Leider nicht, so dass ich nicht mehr weiter weiß!
Wäre nett, wenn mir jemand helfen könnte, da ich überhaupt nicht weiter komme:
habe die Anführungszeichen weggelassen (aktuelle Version von xy_fmincon im Anhang!).
Übrige Fehlermeldungen:
Code:
Warning: The default trust-region-reflective algorithm does not solve problems with
the constraints you have specified. FMINCON will use the active-set algorithm instead.
For information on applicable algorithms, see Choosing the Algorithm in the
documentation.
> In fmincon at 486
In xy_fmincon at 2 Error using feval
Output argument "Regelguete" (and maybe others) not assigned during call to
"C:\01_Algorithmen\Test\xy_Regelung.m>xy_Regelung".
der sich auf eine Verwendung von fmincon in einem anderen Skript, welches sich nicht mal im aktuellen Ordner befindet, bezieht, verstehe ich überhaupt nicht, was das soll und wo der Zusammenhang ist!
Output argument "Regelguete" (and maybe others) not assigned during call to
"C:\Users\Niko\Desktop\DA_Kansy_IRT\01_Algorithmen\Test\xy_Regelung.m>xy_Regelung".
"Regelguete" ist lediglich der Name des Ausgangs im Simulink-Modell, aber nicht der Name der im Workspace erzeugten Variable.
(siehe doc fmincon) eingefügt (alles andere in dieser Funktion auskommentiert) und die Optimierung lief!!
Das heißt für mich, dass:
- xy_fmincon und
- xy_NB
richtig sind!
Also liegt mein Problem in der Verknüpfung von Simulink und Matlab!!
...also in xy_Regelung!!
Hab mal folgendes ausprobiert (siehe Anhang).
Allerdings gibt mein Simulink-Modell Fehler bzgl. unbekannter Eingangsgrößen aus und Matlab beschwert sich über:
Code:
Undefined variable "Regelguete_ges" or class "Regelguete_ges.signals.values".
Error in xy_Regelung (line22)
Ausgang=Regelguete_ges.signals.values;
Also ich kriege es nicht hin Simulink und Matlab miteinander zu verknüpfen!!
Hab wirklich keine Ahnung, wie die Verknüpfungen zu Simulink und zurück zu Matlab richtig zu machen sind!
Wäre über Tipps MEGA erfreut!!
Danke schonmal für deine bisherige Hilfe.
Geh jetzt mal schlafen, krieg jetzt eh nichts mehr hin.
verwende doch mal den Debugger um zu sehen, in welche Variable und welchen Workspace die Simulationsergebnisse geschrieben werden.
Ich empfehle weiterhin, die Nebenbedingungen linear zu definieren. Das ist in der jetzigen Form zwar nicht falsch, bremst den Algorithmus aber unnötig aus.
Ich verstehe jetzt zwar wo der Fehler liegt, aber ich weiß nicht, wie ich das Problem lösen kann (Hatte bislang keinen Kontakt mit verschiedenen Arbeitsspeichern, unterschiedlichen Variablen und alles was ich momentan dazu lese, macht mich noch verrückter).
Kannst du mir nicht ein kokretes Bsp. geben, wie ich zum Bsp. die Eingangsgröße aus dem Skript an das Simulink-Modell weiterleiten kann oder wie ich die Ausgangsgröße aus dem Simulink-Modell an das Skript überführen kann?
x=[10;10;10]; % Eingefügt, um mich erstmal mit der Ausgangsseite zu befassen!
optopt= optimset('Display','iter');
[x, fval, exitflag]=fmincon(@xy_Regelung,[10;10;10],[],[],[],[],[],[],@xy_NB,optopt);
Hab es mal mit dem debugger probiert (Brackpiont in die Zeile von assignin gesetzt) und dabei fiel mir auf, dass Regelguete_ges nach dem Durchlaufen des Simulink-Modells gar nicht in den 'base'-Workspace übergeben wurde!?
Anstelle 'base' habe ich 'caller' probiert, aber auch keine Verbesserung!
Wie kann ich denn nun in einer functionfile auf Werte des Simulink-Modells zu greifen, wenn diese - nach Beendigung der Simulation - nicht im 'base' workspace stehen?
bin ratlos.
MfG, Waldemar
PS:
Wenn ich xy_Regelung nicht als functionfile, sondern als Skript ausführe,
kann ich sofort nach dem Durchlaufen des Simulationsmodells auf Regelguete_ges zu greifen!
Muss doch auch gehen, wenn xy_Regelung eine functionfile ist!!
_________________
% Entweder mit A und b (Variante1) oder über @NB (Variante2): % Variante1:
A = [-1-2-2;122];
b = [0;72];
optopt= optimset('Display','iter');
[x, fval, exitflag]=fmincon(@xy_Regelung,[10;10;10],A,b,[],[],[],[],[],optopt);
SrcWorkspace (für "Source", also Quelle) bestimmt, aus welchem Workspace Parameter, die z.B. in Blöcken eingetragen sind, entnommen werden.
DstWorkspace (für "Destination", also Bestimmung) gibt an, in welchen Workspace Variablen, z.B. Simulationsergebnisse, hineingeschrieben werden.
Danke sehr.
Super Information.
Werde ich bestimmt nutzen können.
Prima.
MfG, Waldemar
_________________
Im "ich brauch Hilfe"-Status
Einstellungen und Berechtigungen
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
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.