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

Simulinkmodell in fitness function (Optimization Toolbox)

 

Luki51

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.02.2016, 05:16     Titel: Simulinkmodell in fitness function (Optimization Toolbox)
  Antworten mit Zitat      
Hallo Zusammen!

Zur Zeit versuche ich mich an einer multikritiellen Optimierung mittels der Optimization Toolbox (Solver: gamultiobj).
Dabei wird in der fitness function "Beispiel" das Simulinkmodell "Modell" über den Befehl assignin mit den vom Optimierungsalgorithmus anzupassenden Variablen "x1" und "x2" gefüttert. Die Werte der zu optimierenden Größen "Ergebnis1" und "Ergebnis2" gebe ich der fitness function über simOut-Blöcke jeweils nach einem Simulationsdurchlauf wieder zurück.
Bis dahin klappt auch alles und ich kann mir beispielsweise eine Paretofront mit den optimierten Ausgangsgrößen plotten lassen. Nun zu meinem Problem:

Ich möchte im Simulinkmodell Systemparameter aus einem m-file verwenden. Aus einem mir unbekannten Grund werden diese Parameter allerdings aus dem Workspace geworfen sobald ich die Optimierung starte (Auch wenn diese als global definiert wurden). Es erscheint folgende Fehlermeldung:
Error running optimization.
Invalid setting in 'Modell/Constant1' for parameter 'Value'.
Ich habe bereits versucht die Parameter aus dem m-file in einer .mat-Datei zu speichern und diese dann in der fitness function über den Befehl load aufzurufen, funktioniert auch nicht.
Die einzige Möglichkeit die ich bisher gefunden habe ist nach dem Ausführen des genannten load Befehls wieder jede einzelne Variable noch einmal über den assignin-Befehl zu laden. Gibt es da noch eine andere Möglichkeit? (Das werden später mal etliche dutzend Variablen und auch einige Kennfelder, mit dem assignin-Befehl für einzelne Parameter werde ich da nicht mehr weit kommen befürchte ich... Confused )


Code:

function f = Beispiel(x)

x1=x(1);     %erste zu optimierende Variable
x2=x(2);     %zweite zu optimierende Variable

assignin('base','x1',x1);
assignin('base','x2',x2);

sim ('Modell.slx');

Ergebnis1 = simOut1(101);
Ergebnis2 = simOut2(101);

f(1) = -Ergebnis1;
f(2) = -Ergebnis2;
 


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.02.2016, 09:34     Titel:
  Antworten mit Zitat      
Hallo,

Code:
sim ('Modell.slx', 'SrcWorkspace', 'current');


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Luki51

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.02.2016, 13:49     Titel:
  Antworten mit Zitat      
Vielen Dank Harald die Simulation läuft nun! Smile

Allerdings werden anschließend nun keine Werte mehr von meinem "to Workspace"-Block in den Workspace zurückgegeben sondern eine leere "SimulationOutput" Struktur mit dem Namen "ans".
Vermutlich lässt sich auch das sehr einfach lösen, ich (als blutiger Anfänger) komm gerade leider nicht dahinter wie ich die Werte meines "to Workspace" Blocks wieder im Workspace erzeugen kann...

Gruß, Lukas
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.02.2016, 14:02     Titel:
  Antworten mit Zitat      
Hallo,

ich persönlich arbeite immer mit Out-Blöcken.

Sollte bei To Workspace nicht eine Variable mit dem entsprechenden Namen erstellt werden? Schau doch mal in allen Workspaces, vielleicht ist die Variable nur im "falschen" Workspace gelandet.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Luki51

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.02.2016, 17:52     Titel:
  Antworten mit Zitat      
Also bis ich deinen Vorschlag zum Einlesen der Parameter aus dem Workspace umgesetzt habe wurde vom "to Workspace" Block eine Variable erzeugt...

Hab jetzt einige Zeit rumprobiert und nirgendwo eine solche finden können. Gibt es eine Möglichkeit über den assignin Befehl direkt den kompletten Workspace zu laden?
Da der Wegfall der vom "to Workspace" Block erstellten Variable erst mit dem geänderten sim Befehl aufgetreten ist ließe sich das Problem ja evt so umgehen...
 
Harald
Forum-Meister

Forum-Meister


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

stelle doch bitte mal das komplette Beispiel zur Verfügung. Falls der Modellinhalt nicht weitergegeben werden kann, kannst du das gerne durch irgendwelche anderen Blöcke ersetzen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Luki
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.02.2016, 13:17     Titel:
  Antworten mit Zitat      
Hallo,

gerne!
Im Anhang ist ein Ordner mit einem sehr vereinfachten Beispielmodell enthalten welches neben den zwei Eingangsgrößen (x1 und x2) der Optimization Toolbox noch zwei Werte (p_M und p_D) aus dem Workspace benötigt.
Ich habe die nötige fitness function hier zwei mal erstellt.
In der Funktion "Beispiel" lade ich dabei die Werte p_M und p_D ebenfalls über den assignin Befehl, so funktioniert es dann auch! (Die Einstellungen der Optimization Toolbox sind im Ordner in einem Screenshot dargestellt, alle anderen Einstellungen habe ich belassen...)
In der Funktion "Beispiel2" habe ich anschließend versucht deinen Vorschlag (Harald) umzusetzen. Wenn ich Schritt für Schritt debugge funktioniert auch diese bis zu dem Punkt an dem die fitness function die Simulationsergebnisse wieder "zurückliest" :SS

Ich die in der ersten fitness function gewählte Lösung kann ich leider nicht verwenden da in meinem eigentlichen Modell wie bereits erwähnt eine Vielzahl von Systemparametern sowie auch Kennfelder geladen werden müssen... (dabei handelt es sich um ein Element meiner Bachelorarbeit, da diese mit einem Sperrvermerk versehen wird kann ich dieses leider nicht hier zur Verfügung stellen..)

Besten Gruß, Lukas

Beispiel_gemultiobj_Simulink.rar
 Beschreibung:

Download
 Dateiname:  Beispiel_gemultiobj_Simulink.rar
 Dateigröße:  161.77 KB
 Heruntergeladen:  270 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Luki
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.02.2016, 18:36     Titel:
  Antworten mit Zitat      
Ich habs jetzt noch einige Male versucht und komm einfach nicht dahinter wo die Werte des "to workspace" Blocks hingeschrieben werden bzw. wie ich sie in meiner Funktion aufrufen kann...
Bin dankbar für jeglichen Input :SS

Gruß, Lukas
Private Nachricht senden Benutzer-Profile anzeigen
 
Luki
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.02.2016, 19:47     Titel:
  Antworten mit Zitat      
Uff habs doch gelöst bekommen...
Falls es jemanden interessieren sollte:

Code:

function f = Beispiel(x)

x1=x(1);
x2=x(2);

assignin('base','x1',x1);
assignin('base','x2',x2);

evalin('base','load(''SimParameter.mat'')')

sim ('Modell.slx');

M=Mult(101);
D=Div(101);

Ergebnis1 = -M;
Ergebnis2 = -D;

f(1) = Ergebnis1;
f(2) = Ergebnis2;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.02.2016, 11:25     Titel:
  Antworten mit Zitat      
Hallo,

so ginge es mit Out-Blöcken und ohne sich den Base-Workspace zuzumüllen...

Bitte verwende doch die Kommandozeilenfunktionalität. Sie ist wirklich nicht so schwer aufzurufen, und man muss nicht aus dem Bild abtippen, was du machst.

Grüße,
Harald

mitOutBloecken.zip
 Beschreibung:

Download
 Dateiname:  mitOutBloecken.zip
 Dateigröße:  15.22 KB
 Heruntergeladen:  250 mal
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.