Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Graphics and GUIs with MATLAB

Studierende:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Optimierungsproblem Simulink

 

Len

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2020, 15:44     Titel: Optimierungsproblem Simulink
  Antworten mit Zitat      
Hallo zusammen,

ich stehe derzeit vor einem klassischen Optimierungsproblem. Da ich was Optimierungen angeht absoluter Anfänger bin, fehlt der Ansatz und das Wissen auf dem Weg zu einer guten Lösung Shocked

Ich verwende ein Simulinkmodell, das das thermische Verhalten eines Fahrzeugs beschreibt. Als Inputdaten werden im Modell verschiedene Komponententemperaturen_ini vorgegeben, die jeweils in einem bestimmten Temperaturbereich liegen können:
- Batterie 0-60°
- E-Maschine1 0-130°
- E-Maschine2 0-130°
-...

Das Modell liefert als Output unter anderem einen Performance-Indikator (Skalar), der während der Simulation berechnet wird und abhängig von den gewählten Eingangsgrößen ist. Diesen Performance-Indikator möchte ich gerne durch Optimierung der Komponententemperaturen_ini maximieren.

Würde ich das ganze händisch und wenig wissenschaftlich lösen, würde ich eine Reihe Simulationen mit veränderten Eingangsparametern durchführen und mich für die Variante mit dem höchsten Performance-Indikator entscheiden. Da Matlab/Simulink sehr mächtige Tools sind, schätze ich aber, dass es einen besseren Weg hierfür gibt. So weit ich es verstanden habe könnte ich zum einen die Optimization Toolbox in Kombination mit Matlab oder die Simulink Design Optimization verwenden.


Ich wäre sehr dankbar, wenn mir der ein oder andere einen Schubs in die richtige Richtung geben könnte. Ich weiß, dass die Frage leider (noch) sehr unspezifisch ist... Wink


Harald
Forum-Meister

Forum-Meister


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

du kannst eine Funktion der Form
Code:

erstellen, wobei x Werte für die Parameter sind. Darin rufst du mit sim das Simulink-Modell auf.

Das ist dann eine geeignete Zielfunktion, z.B. für fmincon .

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Len

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2020, 10:46     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für die schnelle Antwort! Das bringt mich dem ganzen zumindest schon mal ein kleines Stück näher. Ich verstehe jedoch die Syntax und das einbetten der Optimierung in die m.file noch nicht so ganz.

Zum groben Ablauf. Ich habe ein bestehendes Simulinkmodell 'Modell', das sich über den Matlab Wokspace Variablen holt, die ich teilweise in einer m.file vorgebe und dann die Simulation aus der m.file starte. Mein Wokspace würde sich nach Durchlaufen des Skripts normalerweise mit anderen Variablen (auch der, die optimiert werden soll) füllen.

Zur Optimierung habe ich weiter unten in meiner m.file den Teil der Optimierung plaziert, der wie folgt aussieht:

Perf_Fzg .... ist der Skalar (Output aus 'Modell'), der optimiert werden soll
TiniHVB ....Skalar (Input für 'Modell'), der zwischen 0 und 60 in 5er Schritten variiert werden.
TiniEM1/2 .... analog zu TiniHVB

Code:

function Perf_Fzg = obj(x)        
TiniHVB = x(1);  
TiniEM1 = x(2);  
TiniEM2 = x(3);        
sim('Modell', 'SrcWorkspace', 'Current');
fmincon(@obj, [5;10;10], [],[],[],[],[0;0;0], [60;130;130]);
end
 



Lasse ich mein Skript laufen tut sich gar nichts. Ich glaube ich habe da viele sehr sehr grobe Fehler eingebaut und entschuldige mich dafür schon mal im Voraus.

Eine allgemeine Frage aus Interesse. Ich hatte fast damit gerechnet, dass du die Simulink Design Optimization vorschlägst. Was spricht da für dich dagegen? Very Happy

Viele Grüße, vielen Dank und entschuldigung!
Len
 
Harald
Forum-Meister

Forum-Meister


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

Wenn 'Modell' die Variable Perf_Fzg erzeugt, sieht das schon gut aus. Du musst nur den fmincon-Aufruf aus der Datei herausziehen, z.B. kannst du ihn in das Command Window oder ein anderes Skript schreiben.
Wichtig ist dann auch noch, dass fmincon minimiert. Du willst ja aber maximieren. Eine Möglichkeit:
Code:
y = -Perf_Fzg;

und y zurückgeben.

Zitat:
Eine allgemeine Frage aus Interesse. Ich hatte fast damit gerechnet, dass du die Simulink Design Optimization vorschlägst. Was spricht da für dich dagegen? Very Happy

Nichts, außer dass ich selbst mich damit nicht auskenne. :D

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Len

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2020, 12:33     Titel:
  Antworten mit Zitat      
Hallo,

Danke für die schnelle Antwort! Ich habe deinen Vorschlag berücksichtigt. Die Variable Perf_Fzg habe ich über ein -1 Gain inzwischen direkt negativ aus dem Modell kommen lassen. Mein Code lautet jetzt
Code:

function Perf_Fzg = obj(x)        
TiniHVB = x(1);  
TiniEM1 = x(2);  
TiniEM2 = x(3);        
sim('Modell', 'SrcWorkspace', 'Current');
end
 


Nachdem ich das Skript inkl. Simulation durchlaufen lassen und die Variablen (unter anderem Perf_Fzg) erzeugt wurden. Setzte ich
Code:

fmincon(@obj, [5;10;10], [],[],[],[],[0;0;0], [60;130;130]);
end
 

ins Command Window. Leider erscheint dann folgende Fehlermeldung:
Code:
Undefined function or variable 'obj'.

Error in fmincon (line 536)
      initVals.f = feval(funfcn{3},X,varargin{:});
 


Weißt du wo mein Fehler liegt?

Danke und viele Grüße!
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 22.724
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.09.2020, 12:41     Titel:
  Antworten mit Zitat      
Hallo,

heißt die Datei auch obj.m? Liegt sie im momentanen Verzeichnis?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Len

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2020, 13:04     Titel:
  Antworten mit Zitat      
Hallo,

ja ich habe alle Dateien in einem Verzeichnis.
Optimierung.m das folgendes beinhaltet:
Code:

%% Andere Initialwerte und dann:

timeMax=500;
sim('Modell',timeMax);

function Perf_Fzg = obj(x)        
TiniHVB = x(1);  
TiniEM1 = x(2);  
TiniEM2 = x(3);        
sim('Modell', 'SrcWorkspace', 'Current');
end
 

Der Teil läuft durch, jedoch wird nichts optimiert oder sonstiges.
Im Anschluss lasse ich dann obj.m laufen, das folgendermaßen aussieht:
Code:
fmincon(@obj, [5;10;10], [],[],[],[],[0;0;0], [60;130;130]);
 



Dann kommt folgende Fehlermeldung:
Code:

Attempt to execute SCRIPT obj as a function:
K:\...\obj.m

Error in fmincon (line 536)
      initVals.f = feval(funfcn{3},X,varargin{:});

Error in obj (line 1)
fmincon(@obj, [5;10;10], [],[],[],[],[0;0;0],[60;130;130]);

Caused by:
    Failure in initial objective function evaluation. FMINCON cannot continue.
 


Weißt du was ich falsch mache?
Viele Grüße Smile
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 22.724
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.09.2020, 13:08     Titel:
  Antworten mit Zitat      
Hallo,

du musst genau diesen Code (und nicht mehr)
Code:
function Perf_Fzg = obj(x)        
TiniHVB = x(1);  
TiniEM1 = x(2);  
TiniEM2 = x(3);        
sim('Modell', 'SrcWorkspace', 'Current');
end

als obj.m abspeichern.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Len

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2020, 13:45     Titel:
  Antworten mit Zitat      
Hallo,

oh je da hatte ich wohl total was durcheinander. Ich habe das ganze jetzt mal umgestellt:
- Optimierung.m beinhaltet jetzt nur noch die Initialwerte und schmeißt die Simulation an.
- obj.m beinhaltet ausschließlich den von dir genannten Code.

Ich lasse also zuerst Optimierung.m durchlaufen und schreibe danach:
Code:
fmincon(@obj, [5;10;10], [],[],[],[],[0;0;0],[60;130;130])

ins Command Window.

Es erscheint folgender Fehler:
Code:
Output argument "Perf_Fzg" (and maybe others) not assigned during call to "obj".

Error in fmincon (line 536)
      initVals.f = feval(funfcn{3},X,varargin{:});

Caused by:
    Failure in initial objective function evaluation. FMINCON cannot continue.


tut mir leid aber ich habe es leider nicht gelöst bekommen...

Viele Grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 22.724
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.09.2020, 15:06     Titel:
  Antworten mit Zitat      
Hallo,

dann schreibt der sim-Befehl die Variable entweder nicht oder nicht in den richtigen Workspace. Ich kann da nur den Debugger empfehlen (Haltepunkt in der sim-Zeile und dann schauen, ob und wohin die Variable geschrieben wird.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Len

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2020, 15:08     Titel:
  Antworten mit Zitat      
Alles klar, das werde ich machen!

Du hast mir auf jeden Fall schon mal viel geholfen. 1000 Dank!! Very Happy
 
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2021 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.