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

Optimierung in Simulink möglich?

 

Hiwi-Job
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 07.02.2012, 14:59     Titel: Optimierung in Simulink möglich?
  Antworten mit Zitat      
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?

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


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 07.02.2012, 16:19     Titel:
  Antworten mit Zitat      
Ich tippe auf Simulink Design Optimization:

http://www.mathworks.de/control-systems/
http://www.mathworks.de/products/sl-design-optimization/

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 07.02.2012, 17:27     Titel:
  Antworten mit Zitat      
Hallo Andreas,

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)?

Grüße,
Ingo
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.02.2012, 17:51     Titel:
  Antworten mit Zitat      
Hallo,

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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 08.02.2012, 13:47     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe jetzt einiges über FMINCON gelesen, aber ist diese Funktion nicht für Minimierungsprobleme gedacht? Ich habe ja ein Maximierungsproblem.

Außerdem habe ich noch gesehen, dass mir die "Optimization Toolbox" zur Verfügung steht (falls mein Problem damit einfacher zu lösen sein sollte).

Grüße,
Ingo
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

anstatt f zu maximieren kannst du -f minimieren.
Das stellt also keine Einschränkung dar.

fmincon ist ja eben aus der Optimization Toolbox.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 08.02.2012, 18:30     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich steige leider noch immer nicht durch die Funktionsweise von "fmincon" durch. Rolling Eyes

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
 

Wenn dieser durch ist lasse ich mir mit
Code:
find(Ergebnis==max(Ergebnis(:,1)))

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"
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Zielfunktion wäre dann etwas in der Art:

Code:
function Wert = obj(x)
Grenze_laden = x(1);
Grenze_entladen = x(2);
set_param('Modell', 'SrcWorkspace', 'Current');
sim('Modell');


Den Rest solltest du selbst hinbekommen Wink

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 09.02.2012, 10:39     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:

Den Rest solltest du selbst hinbekommen Wink


Hallo Harald,

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?

Grüße,
Ingo
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Code:

Die weiteren Argumente sind dann eben Startwerte und Nebenbedingungen; siehe Dokumentation.

Ein Beispiel wäre:
Code:
fmincon(@obj, [10;10], [], [], [], [], [0;0], [50;50])


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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 09.02.2012, 13:37     Titel:
  Antworten mit Zitat      
Hallo Harald,

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 ==> fmincon at 540
      initVals.f = feval(funfcn{3},X,varargin{:});

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.


Grüße,
Ingo
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Warnung kannst du ignorieren. Um den Fehler zu umgehen, versuch mal

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

statt der Zeile mit set_param.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 09.02.2012, 14:14     Titel:
  Antworten mit Zitat      
Hallo Harald,

damit durchläuft er einmal die Simulation und gibt mir dann folgenden Fehler aus:

Code:
??? Error using ==> feval
Output argument "Wert" (and maybe others) not assigned during call to
".../obj.m>obj".

Error in ==> fmincon at 540
      initVals.f = feval(funfcn{3},X,varargin{:});

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.


Grüße,
Ingo
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 09.02.2012, 14:27     Titel:
  Antworten mit Zitat      
Edit: Jetzt habe ich
Code:
mit in die obj.m geschrieben und nun läuft das ganze erst mal.

Hoffentlich auch bis zum Ende.


Grüße,
Ingo
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiwi-Job
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 28.09.11
Wohnort: Hannover
Version: 2013a
     Beitrag Verfasst am: 09.02.2012, 14:34     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe mich leider zu früh gefreut.

Mit folgender Eingabe:
Code:
fmincon(@obj,[55;65],[],[],[],[],[50;60],[60;70])



bekomme ich folgende Meldung ausgegeben:
Code:
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is 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.

<stopping criteria details>

No active inequalities.

ans =

    55
    65


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 Crying or Very sad

Woran liegt denn das nun wieder?

Grüße,
Ingo
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2, 3  Weiter

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 - 2024 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.