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

Simulink modell mit fmincon optimieren

 

Krueger
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.06.13
Wohnort: ---
Version: R2011b
     Beitrag Verfasst am: 29.04.2014, 08:14     Titel: Simulink modell mit fmincon optimieren
  Antworten mit Zitat      
Hallo zusammen,

ich habe schon einge Posts zu dem Thema hier im Forum gefunden... allerdings habe ich es nicht geschafft mit diesen mein Problem zu lösen.

Ich habe folgendes vor...

Ich möchte eine Kosten Funktion minimieren. Beispielsweise

K = x1*K1 + x2*K2 + x3*k3 usw.

Die x1 bis xn Werte erhalte ich aus der Simulink simulation. In dem Modell habe ich verschiedene Konstanten eingebaut. Diese "Konstanten" möchte ich in einem vorgegebenem Bereich varrieren, sodass sich die x1 bis xn Werte zu einer minimalen Kostenfunktion ergeben.

Ist dies mit fmincon überhaupt möglich?


Viele Grüße

Krueger
Private Nachricht senden Benutzer-Profile anzeigen


Krueger
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.06.13
Wohnort: ---
Version: R2011b
     Beitrag Verfasst am: 29.04.2014, 08:42     Titel:
  Antworten mit Zitat      
Noch zur Info... Die Konstanten in dem Simulink Modell lese ich aus dem Workspace. Ausserdem sollten diese nur ganzzahlige Werte annehmen dürfen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Krueger
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.06.13
Wohnort: ---
Version: R2011b
     Beitrag Verfasst am: 29.04.2014, 12:06     Titel:
  Antworten mit Zitat      
Ich bin schon etwas weiter gekommen...

Ich rufe die Funktion fmincon wie folgt auf.

Die Vektoren A und b habe ich aus der Bedingung: 100 <= x1 <= 10000


Code:
options = optimset('Display', 'iter', 'LargeScale', 'off');
A= [-1; 1];
b= [100; 10000];
[x, fval, exitflag] = fmincon(@optimize, [100], A, b, [], [], [], [], [], options);
 


die zu optimierende Funktion sieht dann wie folgt aus

Code:
function y=optimize(x)

assignin('base', 'KWK_Leistung',x(1));

opt=simset('SrcWorkspace', 'base');
sim('Energiemodell',[], opt);

KWK_Kosten = 1000;      %€/kW

y=x(1)*KWK_Kosten+100;


In dem Simulinkmodell verwende ich einen Saturation Block mit

upper Limit = KWK_Leistung
lower Limit = 0.9 * KWK_Leistung

Im zweiteren Iterationsschritt wird x1 negativ und spuckt somit folgenden Fehler aus

Lower limit must be less than or equal to upper limit in 'Energiemodell/KWK/Saturation'

durch die Vektoren A und b sollte x1 doch eigentlich nicht negativ werden oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
Krueger
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.06.13
Wohnort: ---
Version: R2011b
     Beitrag Verfasst am: 29.04.2014, 13:12     Titel:
  Antworten mit Zitat      
Ich komme dem ganze etwas näher Wink

ich habe jetzt die ungleichungen herausgenommen und Grenzen über die Vektoren lb und ub gesetzt.

Zwei Probleme beschäftigen mich gerade noch.

1) wie kann ich vorgeben, dass die variablen x1 bis xn nur ganzzahlig sind? Kann ich mit fmincon überhaupt ein ganzzahliges Optimierungsproblem lösen?

2)in dem Simulinkmodell wird etwa der Wärmebedarf vorgegeben. Um diesen Wärmebedarf zu decken, werden verschiedene Anlagen verwendet bspw. KWK, Kessel. Die Leistungen der Anlagen sind variable und werden durch Fmincon optimiert. Eine Bedingung soll nun sein, dass der Wärmebedarf am ende der Simulation immer gedeckt sein muss. Wie kann ich das ganze in einer Formel definieren?


Vielen Dank für eure Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen
 
Krueger
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.06.13
Wohnort: ---
Version: R2011b
     Beitrag Verfasst am: 29.04.2014, 14:00     Titel:
  Antworten mit Zitat      
zu 2) noch etwas genauer...

die Bedingungsgleichung müsste ja etwa wie folgt lauten.

Wärmebedarf - KWK - Kessel = 0

Allerdings für jeden Zeitschritt. Das ganze wird für jede Stunde in einem Jahr simuliert. Hinzu kommt, dass die KWK ja nicht jedes mal die volle Leistung bringt, sondern nur soviel wie gerade zu dem Zeitpunkt benötigt. Wie kann ich das Ergebnis aus Simulink bei dem Aufruf der fmincon funktion verwenden?

ich hoffe, dass meine Fragestellung verständlich war...
Private Nachricht senden Benutzer-Profile anzeigen
 
Krueger
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.06.13
Wohnort: ---
Version: R2011b
     Beitrag Verfasst am: 29.04.2014, 15:13     Titel:
  Antworten mit Zitat      
bin schon wieder etwas weiter gekommen...

Ich habe in der Zeitreihe vom Wärmebedarf mir einfach den Max-Wert herausgesucht und in die Gleichung eingesetzt.

Eine Weitere Bedingung ist aber wiederum, dass z.B. die KWK-Anlage nicht 8760 Stunden laufen kann. Die Logik, ob und wann sich die Anlage einschaltet steckt in dem Simulinkmodell. Je nach Leistung der KWK Anlage bekomme ich also als Ergebnis in Simulink einen Stundenwert, wie oft die Anlage lief und diesen schreibe ich in den Workspace. Wie kann ich diesen Wert jetzt wieder in die Bedingungsgleichung aufnehmen?

Ich habe immer das Problem, dass ich Ergebnisse aus der Simulation in den Gleichungen und Ungleichungen für Fmincon benötige....
Private Nachricht senden Benutzer-Profile anzeigen
 
Krueger
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.06.13
Wohnort: ---
Version: R2011b
     Beitrag Verfasst am: 30.04.2014, 07:15     Titel:
  Antworten mit Zitat      
jemand eine Idee?
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 - 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.