Verfasst am: 14.05.2014, 14:46
Titel: Optimierungsproblem mit bestimmten Nebenbedingungen
Hallo zusammen,
ich habe ein Kostenfunktion optimize_K die ich minimieren möchte. Außerdem habe ich 6 Variablen. Da die Variablen Integer sein sollen verwende ich den genetic algorithm. Diesen rufe ich wie folgt auf.
Die Optimierung funktioniert soweit auch. Nun meine Frage...
Ich würde gerne ein Ergebniss aus dem Simulinkmodell als Nebenbedingung in die Optimierungsfunktion aufnehmen. Z.B , dass die Summe eines bestimmten Vektors am Ende der Simulation 0 betragen soll.
Könnt ihr mir sagen, ob ich dieses Problem irgendwie Programmiertechnisch umsetzen kann?
Ich möchte quasi ein Ergebnis aus dem Simulinkmodell welches ich mit dem "to Workspace" Block in den Workspace schreibe in den Nebenbedingungen einbauen.
Ich möchte quasi ein Ergebnis aus dem Simulinkmodell welches ich mit dem "to Workspace" Block in den Workspace schreibe in den Nebenbedingungen einbauen.
Jemand eine Idee?
Merci
Krueger
Hallo,
Wenn ich nicht falsch verstehe, du möchtest Ergebnisse nach der Simulation kriegen, oder?
Mit "to Workspace" oder "save data to workspace" in scope kannst du Variablen mit bestimmten Namen und Format kriegen, z.b. structure, dann kann man die Datei einfach nehmen, wie z.b.
x=ScopeData.signals(1).values
schreibe ich als Array aus dem Simulinkmodell in den Workspace. Die Variable x(7) kommt aber nicht mehr extra in der Zielfunktion y vor sondern ist nur eine Nebenbedingung, welche die Werte x(1) bis x(6) beeinflussen soll.
Die Nebenbedingungen habe ich wie folgt als ungleichung Definiert.
Also die Summe über die 8760 Schritte aus Result_Simulink soll am Ende einer Simulation 0 ergeben. Demnach sollen x(1) - X(6) bestimmt werden.
Leider greift die Nebenbedingungen nicht. X(7) nimmt auch Werte größer 0 an.
Ich bin leider noch nicht viel weiter gekommen. Anbei habe ich einmal den Plot zu dem best und dem mean penalty value hochgeladen. Es sieht so aus, als ob die Nebenbedingung wie zuvor beschrieben wird zumindestens in den ersten 23 Generations berücksichtigt wird. Ab der 24 Generation wirkt dann anscheinend die Zielfunktion. Am Ende bekomme ich eine Lösung, die mir zwar das minimum der Kostenfunktion ausgibt, allerdings die Nebenbedingung nicht mehr berücksichtigt.
die x(1)-x(6) Werte laufen nach dem Sprung in dem Plot den ich zuvor hochgeladen habe nalle gegen 0. Es stimmt auch, dass in diesem Fall die Kostenfunktion minimal wird. Allerdings kann damit die Nebenbedingung x(7)=0 nicht mehr erfüllt werden. In x(7) schreibe ich ein Ergebnis aus dem Simulink modell, und dieses ist (indirekt) abhängig von x(1)-x(6). Ich lasse mir nach der Berechnung auch alle Werte ausgeben und dort ist der Vektor Result_Simulink auch nicht 0.
zu deiner zweiten Frage...
Ja, dies ist so gewollt. Ich habe das ganze zunächst als Gleichung definiert. Wenn ich dann allerdings die Variablen bestimmte, die nur Integer Werte annehmen dürfen, bekomme ich einen Error, der mir genau diesen Weg über die Ungleichungen vorschlägt. Ich kann dir den Error nachher gerne auch noch mal Posten.
anbei ein vereinfachtes Beispiel. Das Originalsystem unterscheidet sich dann nur darin, dass es mehrere Anlagen gibt, die jeweils mit einem ADD Block der Reihenfolge nach zugeschaltet werden. Dabei sehen die Subsysteme der Anlagen leicht anders aus. In dem Originalsystem müssen dann alle Anlagen zu jedem Zeitpunkt den input decken.
vorweg: ich würde als SrcWorkspace current nehmen, dann kann man die ganzen Kopfstände mit assignin und eval vermeiden.
Mich wundert nun: wird x denn überhaupt verwendet? Du erzeugst ja Anlage1_Leistung, aber wo wird das genutzt?
Du kannst aber vor allem nicht erwarten, dass ein nachträglich erzeugtes x(2) bei der Überprüfung der Nebenbedingungen berücksichtigt wird. Die Nebenbedingung ist ja dann von der Ausführung des Simulink-Modells abhängig und somit sicher nicht mehr linear.
zu 19:32 - ist dir klar, dass sich die Zufallszahlen und somit die Nebenbedingungen in jeder Auswertung ändern? Ich kann mir nicht vorstellen, dass das sinnvoll ist.
zu 19:39 - mir ist keine solche Möglichkeit bekannt. Ich werde mal sehen.
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.