Verfasst am: 21.04.2018, 12:39
Titel: Verwendung lsim in Fitness function - Fehler input data
Liebe Community!
Habe eine Fitness Function erstellt, in der ich den Befehl lsim verwende.
Versuche gerade die Fitness Function über das command window zum Laufen zu bringen, jedoch leider ohne Erfolg. Mit meiner Parameterübergabe passt was nicht, welche ich als Startwerte verwende.
Erhalte folgenden Fehler:
Error using DynamicSystem/lsim (line 84)
When simulating the response to a specific input signal, the input data U must be a matrix of numeric values with at least two
rows (samples) and without any NaN or Inf.
% Dynamikmatrix / Zustandsmatrix A von Modell 2
A = [(-R_re-R_h)/(C_r*R_h*R_re), 1/(R_re*C_r) , 1/(R_h*C_r); ... 1/(R_re*C_r), (-R_ea-R_re)/(C_e*R_re*R_ea) , 0 ; ... 1/(R_h*C_h), 0 , -1/(R_h*C_h)];
% Eingangsmatrix B von Modell 2
B = [0, A_w/C_r, 0 ; 1/(R_ea*C_e), A_e/C_e, 0; 0, 0, 1/C_h ];
% Ausgangsmatrix C
C = [1,0,0];
% Durchgangsmatrix D
D = zeros(1,3);
Ts=0; %Sampling time, 0 indicates a continuous-time model
was soll denn die Eingangvariable für dein state space System sein, u_ref?
Die benötigten Dimensionen leiten sich von den Zustandsmatritzen ab.
Zu beachten ist, dass der Eingangsvektor natürlich so viele Einträge wie der entsprechende Zeitvektor haben muss.
Sonst wenn möglich Beispieldaten zur Verfügung stellen (idealerweise als mat-file)
Hi vega! Danke für dein Interesse. Im state space Modell sind die Matrizen (welche ein Gebäude abbilden) definiert. Diese Parameter R, C, A von den Matrizen sollen in weiterer Folge im Main Script mittels genetic Algorithmus optimiert werden.
Es werden die Parameter R, C, A und y_ref und u_ref übergeben.
Hab im main script excel Werte welche ich als y und u einlese.
U besteht aus drei Variablen (1x3 Matrix), Außentemperatur, solare Einstrahlung und Heizleistung einer Wärmepumpe.
Hoffe dir damit irgendwie weiter geholfen zu haben. Mein main Script kennst du aus meinem alten Forumbeitrag. Kann es sonst morgen nochmal in dieses Forum stellen.
U besteht aus drei Variablen (1x3 Matrix), Außentemperatur, solare Einstrahlung und Heizleistung einer Wärmepumpe.
genau darauf wollte ich hinaus, dass dem nicht so ist. lsim berechnet anhand deines Eingangsvektors (oder Matrix) den zeitlichen Verlauf der Ausgangsgröße. Dafür muss allerdings (in deinem Fall) die Eingangsgröße die Dimension "length(t)x3" haben.
Ansonsten wie gesagt einfach Beispieldaten bereitstellen. Idealerweise als .mat File, da das Excel File bei mir als potentiell unsicher eingestuft wird...
Danke. Das hab ich mir auch schon so gedacht. Aber jetzt nur zwecks dem Verständnis....
Wenn ich NUR meine Fitness Function testen will, ohne jegliches main skript mit Messdaten, etc.
Dann kann ich ja in meinem Command Window die Parameter definieren, den y_ref Wert ( Anzahl 1) und u_ref ( 1x3).
Und anschließend die Fitness Function aufrufen,. Dann müsste das ja trotzdem ausführbar sein, oder nicht?
theoretisch schon, allerdings macht das mit nur einem "Messwert" nicht sehr viel Sinn.
Das besagt auch die Fehlermeldung, die du dann erhalten solltest:
Error using DynamicSystem/lsim (line 85)
When simulating the response to a specific input signal, the input data U must be a matrix of numeric values with at least two rows
(samples) and without any NaN or Inf.
Grüß dich vega!
Vielen lieben Dank, dass du mir bei meinem Standpunkt-Wechsel "auf der Leitung stehen" geholfen hast.
Ich habe die fitness function erstellt und im main script über
Wenn eine Funktion nicht funktioniert, dann wird sie auch nicht funktionieren, wenn du sie als Fitness Function verwendest. Dass das Problem in der Implementierung der Fitness Function und genau genommen in deiner Verwendung von lsim liegt, war doch im vorherigen Thread klar, und deswegen hast du ja diesen aufgemacht.
Um Werte innerhalb der Fitness Function zu sehen, kannst du den Debugger verwenden. Es ist aber nicht sinnvoll, die Fitness Function zu debuggen, solange die Funktion für sich genommen nicht funktioniert.
Hallo Harald! Danke für deinen Einwand.
Das Problem beim alleinigen Testn meiner Fitness Function war, dass ich für yref nur einen Wert vorgegeben habe und dann damit die Größe von uref nicht übereingestimmt hat.
Lasse gerade die FitFcn in Kombination mit ga
Vielen lieben Dank, dass du mir bei meinem Standpunkt-Wechsel "auf der Leitung stehen" geholfen hast. Smile
..sehr gerne
Zitat:
Weißt du wie ich berechnete Werte (z.B. mse) aus der Fitness function heraus bekomme, sodass sie mir im Workspace angezeigt werden?
Während der Optimierung kannst du innerhalb der Funktion einfach mse ohne Semikolon eingeben, dann wirst du die zeitliche Entwicklung des Wertes sehen.
Als weitere Idee könnte assignin (-> doc assignin) eine Alternative sein, oder natürlich die unschöne Variante mittels globale Variablen.
Oder über die ga Optionen:
Wie Harald bereits schrieb, muss das nicht Auftreten von Fehlern nicht bedeuten dass die Funktion das tut, was sie soll. Aber mit dem Ansatz, die mse zu prüfen und natürlich der anschließende Vergleich der optimierten Funktionswerte mit den Messwerten solltest du einen Eindruck bekommen, ob soweit alles i.O. ist...
Hallo Vega!
Danke für deine Rückmeldung. Ich tu mir sehr schwer die Funktion zu testen. Mit vorgegebenen Parametern im Command Window läuft sie gut, wobei das ja nicht sehr aussagekräfgit ist. Habe diese lsim ja über eine Fitness Function in den ga implementiert. Aber dieser genetic algorithm ist sehr sehr komplex, vorallem gibt es da ja so viele unterschiedliche Optionsmöglichkeiten, welche mich momentan schon zur Verzweiflung bringen.
Hast du Erfahrung mit dem genetic algorithm und Tipps für mich, welche Optionsmöglichkeiten für meine Anwendung in Frage kommen?
Habe momentan schon folgende Varianten probiert...
habe nur mal in ga "reingeschnuppert" und mich demnach nicht sonderlich mit den Optionen auseinander gesetzt. Bisher bin ich immer mit multistart ganz gut gefahren und habe zufriedenstellende Ergebnisse erhalten. Zu den ga Optionen kann aber vermutlich Harald noch Input geben.
Wie sieht denn das Ergebnis der Optimierung - also ein Vergleich deiner Messwerte mit einer Simulation mit den optimierten Parametern - aus?
Evtl. noch ein Tipp dazu: Wenn du deine FitnessFcn umschreibst, dass du in dieser eine Funktion aufrufst, die dann das Modell erstellt, die Simulation ausführt und den Ergebnisvektor zurückgibt, kannst du diese Funktion auch nach der Optimierung für einen Vergleich bequem ausführen.
Gruß
vega
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.