Verfasst am: 07.02.2012, 14:59
Titel: Optimierung in Simulink möglich?
Hallo zusammen,
ich habe eine Optimieungsaufgabe innerhalb von Simulink zu lösen. Das heißt, ich muss zwei Eingabewerte so anpassen, dass ein Ausgabewert maximal wird.
Derzeit ändere ich per Hand die Eingabewerte und schaue mir dann den Ausgabewert an, passe die Eingabewerte an usw. usw. Eine Optimierung per Hand quasi.
Gibt es die Möglichkeit, dass Simulink diese Optimierung auch automatisch durchführt?
vielen Dank für deine Antwort. Leider besitzt meine Uni nicht die Lizenzen für Simulink Design Optimization. Kann man das ganze nicht auch über die Optimization Toolbox realisieren (die ist nämlich vorhanden)?
geht auch, z.B. über FMINCON. Innerhalb der Zielfunktion musst du mit SIM das Modell simulieren und dann anhand der Outputs entscheiden, wie gut die Simulation war.
Im Zweifelsfall auch hier mal suchen; das gabs sicher schon mal.
ich steige leider noch immer nicht durch die Funktionsweise von "fmincon" durch.
Ich nutze momentan folgenden Code:
Code:
anfang=0;
ende=50;
schritt=10;
for Grenze_laden=anfang:schritt:ende
for Grenze_entladen=anfang:schritt:ende
if Grenze_laden<=Grenze_entladen
sim('Modell');
i=i+1;
Ergebnis(i,:)=[Wert Grenze_laden Grenze_entladen];
end end end
die Stelle ausgeben, an der mein Wert am größten ist und passe dann per Hand anfang, ende und schritt an, um im nächsten Durchgang mit kleinerer Schrittweite und engeren Grenzen dem absoluten Maximalwert immer näher zu kommen.
Wie übersetze ich das nun in die "fmincon"-Funktion?
Grüße,
Ingo
Edit: Das Simulink-Modell bezieht die Werte Grenze_laden und Grenze_entladen jeweils über einen gleichbenannten Constant-Block und speichert den Wert "Wert" in einen "to workspace" mit "Limit data points to last: 1"
leider nein, ich bekomme noch nicht mal die Banana-Funktion zum laufen. Irgendwie erschließt sich mir auch noch immer nicht die Logik hinter der Funktionsweise von fmincon.
Wie rufe ich die obj(x) denn nun auf und wie stelle ich die Startwerte ein?
Die Bedingung, dass Laden < Entladen sein soll, kannst du dann noch als lineare Nebenbedingung einbauen.
Ein sinnvoller Startwert wäre sicher der beste Wert, den du mit deiner Variante gefunden hast. Das reduziert das Risiko, dass fmincon in ein lokales Minimum läuft.
vielen, vielen Dank für deine Hilfe!!! Jetzt verstehe ich zumidest schon mal die Logik hinter dem Aufrufbefehl fmincon.
Leider erhalte ich folgenden Fehler:
Code:
Warning: Trust-region-reflective algorithm does not solve this type of problem, using active-set algorithm. You
could also try the interior-point algorithm: set the Algorithm option to 'interior-point' and rerun.
> In fmincon at 460
In sim_fmincon at 1
??? Error using ==> obj at 4
block_diagram does not have a parameter named 'SrcWorkspace'.
Error in ==> sim_fmincon at 1 fmincon(@obj,[50;60],[],[],[],[],[0;0],[80;80])
Caused by:
Failure in initial user-supplied objective function evaluation. FMINCON cannot continue.
Error in ==> sim_fmincon at 1 fmincon(@obj,[50;60],[],[],[],[],[0;50],[60;100])
Caused by:
Failure in initial user-supplied objective function evaluation. FMINCON cannot continue.
Local minimum found that satisfies the constraints.
Optimization completed because the objective functionis non-decreasing in
feasible directions, to within the default value of the function tolerance,
and constraints were satisfied to within the default value of the constraint tolerance.
Was mir dabei aufgefallen ist: Während der Simulationen werden die Werte (laden/entladen) gar nicht verändert. Er nimmt immer wieder die geratenen Werte
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.