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?

 

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, 15:03     Titel:
  Antworten mit Zitat      
Hallo,

das wird an deiner "Problemlösung" Wert = 0 liegen.

Meine Vermutung bzgl. des ursprünglichen Problems: das Simulink-Modell schreibt die Variable Wert in den falschen Workspace. Abhilfe:
Code:
sim('Modell','SrcWorkspace','current','DstWorkspace', 'current');  

Falls das nicht funktioniert, ersetze den "To Workspace"-Block durch einen "Out"-Block und hole dir die Ergebnisse aus dem sim-Befehl zurück, siehe
Code:


Wenn du mir ein Beispiel-Modell zur Verfügung stellen kannst, kann ich gerne damit experimentieren. Ansonsten arbeite ich leider "blind", und es funktioniert evtl. nicht alles gleich.

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, 15:41     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe mal ein analoges Problem-Modell angehängt. Ich hoffe damit lässt sich der Fehler ermitteln.

Grüße,
Ingo


Edit: Modell entfernt (s.u.)

Zuletzt bearbeitet von Hiwi-Job am 09.02.2012, 17:03, insgesamt einmal bearbeitet
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, 16:20     Titel:
  Antworten mit Zitat      
Hallo,

so wird die Optimierung lauffähig:

Code:
function optisimu
%opts = optimset('TolX', 1e-16, 'TolFun', 1e-16, 'DiffMinChange', 1e-4);
[x, f] = fmincon(@obj, [10;10], [], [], [], [], [0;0], [50;50],[], opts)  

function Wert = obj(x)
Grenze_laden = x(1);
Grenze_entladen = x(2);
out = sim('m1.mdl', 'SrcWorkspace', 'Current');
Werte = get(out, 'yout');
Wert = -Werte(end)


Probleme:
- ich nehme an, dass du mir ein stark vereinfachtes Modell geschickt hast. Dummerweise ist es so sehr vereinfacht, dass in Maßen geänderte Eingaben nicht zu geänderten Ausgaben führen. Das kann also nichts werden.
- Die Rückgabedaten sind ein Vektor von Werten. Wann ist der optimal? Wenn der letzte Wert maximal ist? Der Durchschnittswert? Oder was?

Grüße,
Harald

m1.mdl
 Beschreibung:

Download
 Dateiname:  m1.mdl
 Dateigröße:  74.3 KB
 Heruntergeladen:  497 mal
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, 17:02     Titel:
  Antworten mit Zitat      
Hallo Harald,

ja, das Modell war Mist, hier das sollte aber laufen. Tschuldigung Embarassed

Das mit den Rückgabedaten habe ich nicht ganz verstanden. In meiner einfachen Version ohne fmincon und mit "to workspace" lasse ich mir nach jedem Simulationsschritt eine Matrix mit drei Spalten ausgeben. In der ersten Spalte steht dabei der Wert aus dem "to workspace" nach dem maximiert werden soll.

Grüße,
Ingo

Modell.mdl
 Beschreibung:

Download
 Dateiname:  Modell.mdl
 Dateigröße:  84.71 KB
 Heruntergeladen:  543 mal
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: 10.02.2012, 10:04     Titel:
  Antworten mit Zitat      
Hallo Harald,

leider erhalte ich beim Aufruf deines Codes folgenden Fehler:
Code:
??? Error using ==> get
Conversion to double from Simulink.SimulationOutput is not possible.

Error in ==> sim_fmincon>obj at 10
Werte = get(out, 'yout');

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

Error in ==> sim_fmincon at 3
[x, f] = fmincon(@obj, [10;10], [], [], [], [], [0;0], [50;50],[], opts)

Caused by:
    Failure in initial user-supplied objective function evaluation. FMINCON cannot continue.


Scheint also doch irgendwie nicht zu gehen mit dem "out" statt dem "to workspace" oder?

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: 10.02.2012, 10:57     Titel:
  Antworten mit Zitat      
Hallo Harald,

noch ein mal vielen vielen Dank für deine Hilfe!!!

Hiermit klappt nun alles:
Code:
function sim_fmincon
opts = optimset('TolX', 1e-16, 'TolFun', 1e-16, 'DiffMinChange', 1e-4);
[x, f] = fmincon(@obj, [60;90], [], [], [], [], [50;50], [100;100],[], opts)


function [Wert] = obj (x)
Grenze_laden = x(1);
Grenze_entladen = x(2);
out = sim('Modell.mdl', 'SrcWorkspace', 'Current');
Werte = out.find('yout');
Wert = -Werte(end);


Nur das beste Ergebnis findet er leider nicht......

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: 10.02.2012, 11:23     Titel:
  Antworten mit Zitat      
Hallo,

ich hatte nicht beachtet, dass du noch mit 2009b arbeitest und eine neuere Befehlssyntax verwendet.

Woher weißt du, dass nicht das beste Ergebnis gefunden wird?

FMINCON sucht ausgehend vom Startpunkt nach einem Minimum. Das kann gut ein lokales Minimum sein.
Wenn du keinen ausreichend guten Startpunkt hast, solltest du dir mal Algorithmen wie GA (dann mit HybridFcn FMINCON) oder PATTERNSEARCH aus der Global Optimization Toolbox ansehen. Du kannst natürlich auch über verschiedene Startwerte iterieren.

Lass auch ruhig mal die Optionen weg, vor allem DiffMinChange. Damit habe ich nur herumexperimentiert, weil bei deinem ursprünglichen Modell nichts vernünftiges passiert ist.

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: 10.02.2012, 11:49     Titel:
  Antworten mit Zitat      
Hallo Harald,

weil ich mit meiner handgemachten Iteration auf einen viel besseren Wert komme. In dem Modell müsste er auf Wert=5295606 oder besser kommen, tut er aber leider nicht.

Ist die Global Optimaziation Toolbox gleich der Optimaziation Toolbox?

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: 10.02.2012, 12:15     Titel:
  Antworten mit Zitat      
Hallo,

dann steck doch mal das Ergebnis deiner handgemachten Iteration in FMINCON - damit stellst du einen guten Startwert zur Verfügung. Wie bereits geschrieben: du kannst auch über verschiedene Startwerte iterieren und so die Chance erhöhen, dass du zu einem guten Ergebnis kommst.

Nein, die Global Optimization Toolbox ist ein Zusatzprodukt, das auf der Optimization Toolbox aufbaut.

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: 10.02.2012, 13:07     Titel:
  Antworten mit Zitat      
Hallo Harald,

wenn ich 58 und 92 angebe, läuft er auf 58 und 80 mit Wert=4912278. Also leider wieder falsch. Wenn ich die genauen Werte meiner handgemachten Iteration eingebe, findet er auch genau diese, aber das ist ja nicht Sinn und Zweck der Übung.

Die "Global Optimization Toolbox" scheint nicht verfügbar zu sein. Dafür habe ich aber eine "Genetic Algorithm and Direct Search Toolbox" gefunden.
"patternsearch" funktioniert auf jeden Fall mit unveränderten Eingabeparametern und findet ein besseres Ergebnis als meine handgemachte Iteration.

Wie muss ich denn mit der ga-Funktion umgehen? Was muss da an die Stelle wo sonst die Startwerte eingegeben wurden?

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: 10.02.2012, 14:05     Titel:
  Antworten mit Zitat      
Hallo,

Genetic Algorithm and Direct Search Toolbox ist ein alter Name für die Global Optimization Toolbox.

GA arbeitet ohne Startwerte in dem Sinn, sondern mit einer Startpopulation, die aber zufällig erzeugt werden kann; bitte die Doku lesen.

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: 10.02.2012, 15:53     Titel:
  Antworten mit Zitat      
Hallo Harald,

das mit der Startpolulation habe ich leider auch mit der Doku nicht verstanden. Habe einfach mal einen Wert hingeschrieben und nun läuft das ganze seit Stunden und hört nicht mehr auf Rolling Eyes
Kannst du mir nochmal einen Tipp geben? Das Modell hast du ja sicher noch.

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: 10.02.2012, 16:39     Titel:
  Antworten mit Zitat      
Hallo,

verschiedene Algorithmen sind für vollkommen unterschiedliche Dinge geeignet. GA simuliert ausgehend von einem anfänglichen Kandidatenset eine Evolution, und das kann natürlich dauern.

Wenn du mit PATTERNSEARCH zufriedenstellende Ergebnisse bekommst, warum dann noch mit GA arbeiten?

Die andere Möglichkeit wäre, wie gesagt, verschiedene Startwerte in FMINCON zu stecken und darüber zu iterieren.

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: 11.02.2012, 12:10     Titel:
  Antworten mit Zitat      
Hallo Harald,

leider habe ich bisher mit keinem der Verfahren das Maximum finden können. Mein Zufallstreffer per Hand war bisher immer noch der beste. Das lässt sich aber natürlich nicht für alle meine später zu untersuchenden Ausgangssituationen durchführen.

Nochmal zu GA: Was ist denn ein "anfängliches Kandidatenset"? Ich habe, weil ich es nicht besser weiß, an die Stelle, an der zuvor die geratenen Werte standen, eine 10 geschrieben und den PC dann mal arbeiten lassen. Nach gut 1,5 Stunden hatte ich allerdings noch kein Ergebnis und habe dann abgebrochen.
Findet GA immer ein Ergebnis, oder kann es sein, dass GA in eine "Endlosschleife" läuft und dann niemals ein Ergebnis findet?

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: 13.02.2012, 17:23     Titel:
  Antworten mit Zitat      
Hallo,

GA wird irgendwann zum Ende kommen. Die Anzahl der Simulationen kann nur sehr hoch sein (10000, 100000 oder mehr - die Evolution auf der Erde hat ja ein paar Milliarden Jahre gedauert, also wären ein paar Stunden oder Tage nicht sooo viel). Ich würde also GA hier nicht unbedingt empfehlen, quasi nur wenn alles andere nicht praktikabel ist.

Was ich empfehlen würde:
- PATTERNSEARCH (hast du schon)
- eine Schleife über FMINCON: Wenn du deine händische Optimierung nimmst und jeden Punkt als Startpunkt in FMINCON gibst, dann muss das Ergebnis besser sein als die händische Optimierung. Falls du mit einer neueren MATLAB-Version arbeitest, kannst du dir auch MultiStart und GlobalSearch anschauen.

Falls du beim letzteren Punkt Unterstützung benötigst, bitte nochmal alle relevanten Infos in einem Beitrag posten (inkl. mit welchem Release du arbeitest). Ich blicke nämlich zugegebenermaßen nicht mehr ganz durch, was nun der aktuelle Stand ist und was nicht.

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

Gehe zu Seite Zurück  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.