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

Optimization Toolbox: Genetic Algorithm -Parameter bestimmen

 

Miral30

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.10.2017, 10:11     Titel: Optimization Toolbox: Genetic Algorithm -Parameter bestimmen
  Antworten mit Zitat      
Hallo zusammen,

ich habe folgendes Problem:

an einem Teststand läuft ein Versuch mit 3 Eingangsparameter pro Durchlauf.
Als Ergebnis pro Durchlauf bekomme ich 10 Werte (Massen), die pro Durchlauf möglichst konstant sein sollen. Aus diesen 10 Werten wird ein weiterer Wert berechnet (welcher die Prozessstabilität beschreibt), dieser soll minimal werden.

Jetzt soll über einen genetischen Algorithmus immer der beste Eingangsparametersatz gefunden werden, und sich das Ergebnis so pro Durchlauf immer mehr verbessern.

Kann mir jemand einen Ansatz/Tip für dieses Problem geben?


Harald
Forum-Meister

Forum-Meister


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

die Fitnessfunktion muss die Gestalt haben

Code:
function y = fitness(x)
% x: Vektor mit den drei Parametern

% Steuere Teststand mit x an, erhalte 10 Massen

% Berechne aus den 10 Massen y


Genetische Algorithmen sind aber nicht für besondere Effizienz bekannt. patternsearch kann da beispielsweise effizienter sein.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2017, 08:52     Titel:
  Antworten mit Zitat      
Hallo Harald,

super, vielen Dank für deinen Ansatz. Ich habe nur das Problem, dass die Eingangswerte (für den Teststand) in keinem (für mich) mathematisch beschreibbaren Zusammenhang zu den 10 Massen stehen (es gibt noch sehr viel weitere Parameter, die das Ergebnis beeinflussen).
Patternsearch habe ich mir angeschaut, dort hätte ich aber das gleiche Problem.

Bis jetzt bleibt mir wahrscheinlich nur die Möglichkeit, viele Testläufe zu starten, die erhaltenen Werte in einer Gleichung zu beschreiben (fitten) und diese dann zu minimieren, oder?
 
Harald
Forum-Meister

Forum-Meister


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

die Idee (ob sie umsetzbar ist, weiß ich nicht) war, dass du den Teststand mit den zu verwendenden Werten ansteuerst - ihm also sagst, welche Kombinationen getestet werden sollen. Ansonsten sehe ich keine Möglichkeit, das als Optimierungsproblem umzusetzen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2017, 08:29     Titel:
  Antworten mit Zitat      
Harald, du bist super!
Es funktioniert soweit. Im Moment wird aus den 10 werten (Massen) der varianzkoeffizient bestimmt und minimiert. Als objective-funktion für patternsearch dient dabei der teststand. Wüsstest du einen Ansatz, wie ich erreichen könnte, dass dieser varianzkoeff. bei einer bestimmten Masse minimiert wird?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.10.2017, 08:59     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Wüsstest du einen Ansatz, wie ich erreichen könnte, dass dieser varianzkoeff. bei einer bestimmten Masse minimiert wird?

Ich verstehe die Frage nicht. Du berechnest ja den Varianzkoeffizient aus den Massen. Wenn er minimiert werden soll, dann müssen die Massen angepasst werden. Oder meinst du z.B., dass die Summe der 10 Massen gleich bleiben soll? Das müsstest du dann als Nebenbedingung angeben.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.10.2017, 14:01     Titel:
  Antworten mit Zitat      
sorry Embarassed , ich versuche mein Problem verständlicher zu formulieren:

aus drei Eingansparametern (x1, x2, x3) bekomme ich aus dem Teststand nach einem Lauf eine Masse (m). Dieser Lauf (mit den gleichen drei Eingangsparametern) wird dann zur Erhöhung der Genauigkeit und der Sicherstellung der Wiederholbarkeit 10 mal wiederholt. Die 10 Massen eines Eingangsparametersatzes sollen also möglichs konstant sein.

Aus diesen 10 Massen wird dann der Varianzkoeffizient (y) berechnet und durch Patternsearch minimiert. Nun minimiert Patternsearch ja den Koeffizient ohne Berücksichtigung der Masse (m).
Jetzt suche ich eine Möglichkeit, den Koeffizient (y) bei einer bestimmten Masse (m), oder in einem bestimmten Masse-Bereich (m1 bis m2) zu minimieren.

Code:

function y = objective_fcn(x);
%Ansteuern des Teststandes mit den Eingangsparametern (x1, x2, x3)
.
.
.
%Auslesen des Varianzkoeffizients (y) aus dem Teststandprogramm
.
.
.
 
 
Harald
Forum-Meister

Forum-Meister


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

ja, das ist dann eine Nebenbedingung. Damit du die Messungen nicht wiederholen musst, siehe hier:
https://de.mathworks.com/help/optim.....in-the-same-function.html

Entweder: bei einer bestimmten Masse (m) --> nichtlineare Gleichung
oder: in einem bestimmten Masse-Bereich (m1 bis m2) --> zwei nichtlineare Ungleichungen

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2017, 14:56     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für dein Wissen und Geduld!
Ich habe es soweit hinbekommen.
Ein Problem habe ich allerdings noch:

der Teststand ist nicht sehr schnell, für einen Parametersatz (x1, x2, x3) benötigt dieser ca. 10 Minuten.
Gibt es eine Möglichkeit patternsearch "anzuhalten", bis in einer Excel-Datei die Ergebnis-Werte (Varianzkoeffizient und Massen) geschrieben sind, und dann erst weiter laufen zu lassen?

Das Ganze müsste dann nach jeder einzelnen Funktionsevaluation erfolgen.
Ich habe schon versucht mit MaxFunctionEvaluations und MaxIterations zu arbeiten, aber da fängt patternsearch nach erreichen des Abbruchkriteriums ja jedesmal von neuem an.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.10.2017, 16:21     Titel:
  Antworten mit Zitat      
Hallo,

du benötigst die Excel-Tabelle doch vermutlich, um Zielfunktion und die nichtlin. Nebenbedingungsfunktion zu berechnen? Generell etwas folgender Art:

Code:
updated = false;
while ~updated
% Check for update
pause (n) % Wait a few seconds
end


Das "Check for update" kann über exist oder dir (dann kannst du z.B. auch den Zeitpunkt der letzten Änderung abfragen) erfolgen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2017, 09:14     Titel:
  Antworten mit Zitat      
Zitat:

du benötigst die Excel-Tabelle doch vermutlich, um Zielfunktion und die nichtlin. Nebenbedingungsfunktion zu berechnen?


genau. In diese Excel-Datei schreibt die Steuerung des Teststandes die Ergebnisse und liest auch aus dieser die Eingangsparameter.

Ich werde deinen Vorschlag versuchen umzusetzen, danke nochmal!
Aber wo muss ich die pause einfügen, um zu erreichen, dass patternsearch nach einem objective-Funktionsaufruf (Funktionsevaluierung) pausiert um zu warten, ob sich die Excel-Datei geändert hat?
 
student_VS
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 02.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.04.2018, 11:14     Titel: Umsetzung ga mit patternsearch
  Antworten mit Zitat      
Liebe miral30, lieber Harald!
Ich habe ein ähnliches Problem und bringe leider nicht den ga mit patternsearch zum Laufen und hoffe deshalb auf eure fachmännische Unterstützung und Hilfe. Habe ein Gebäude als RC-Modell abgebildet. Über das Gebäude gibt es Messwerte (Raumtemperatur, Außentemperatur, etc.). Das Gebäude wird als Zustandsraummodell in das Programm implementiert und in weiterer Folge ein Grey Box Modell erstellt. Und im Anschluss die gemessene Raumtemperatur mit der modellsimulierten verglichen.
Abhängig von den Startwerten R und C der Gebäudemodellmatrix kommt als Ergebnis eine bessere oder schlechtere Übereinstimmung.
Deshalb möchte ich die Parameteridentifikation der R und C über den ga mit patternsearch realisieren. Trete hier jdeoch am Stand und komme gar nicht weiter.

Unten meine Idee/ Ansatz, welcher aber leider nicht funktionierit.
y_m soll die Raumtemperatur aus dem Modell sein und y der gemessene Wert.
8 sind die Anzahl der Parameter aus dem Zustandsraummodell (R und C).
Jedoch habe ich schon das Problem dass ich nicht weiß wie ich die y_m aus meinem Modell auswerte, wenn diese Funktionen ja eigentlich ineinander greifen.
Ich wäre euch über jede Hilfestellung sehr dankbar.

LG student_VS
Code:

% options = gaoptimset('HybridFcn',{@patternsearch});
% object = sum((y_m-y).^2);
% [x, fval] = ga(object,8, options)
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 - 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.