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

genetischen Algorithmus parallelisieren

 

Optimierer
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 26.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2016, 11:35     Titel: genetischen Algorithmus parallelisieren
  Antworten mit Zitat      
Hallo Zusammen!

Ich versuche mit Hilfe eines genetischen Algorithmus den Verzug beim Laserstrahlschweißen eines Überlappstoßes zu minimieren. Das ganze soll wie folgt ablaufen: Der ga übergibt die Parameter für ein Individuum die er auswählt. Diese Parameter werden anschließend in einer Funktion skaliert und an die Berechnungssoftware Msc Marc Mentat übergeben. Hier wird die thermomechanische Simulation durchgeführt und es werden Verzugswerte an Matlab zurückgegeben. Anschließend wird in einer weiteren Funktion die Fitness berechnet und an den ga zurückgegeben.

Da eine Simulation relativ zeitaufwändig ist und ich auf acht Kernen rechnen kann, versuche ich nun die Ausführung zu parallelisieren. Ich habe mir überlegt eine Populationsgröße von acht vorzugeben, wegen der acht Kerne.

Wenn ich es richtig verstanden habe reicht es für die Parallelisierung des ga in den options UseParallel auf 'always' zu setzten und Matlab vor dem Aufruf der Optimierung mittels "parpool('local')" mitzuteilen, das es auf alle acht Kerne zugreifen kann.

Mein Problem ist, dass jede der acht Berechnungen die gestartet werden in einem anderen Ordner gerechnet werden soll, sodass das Datenhandling zwischen den beiden Programmen realisierbar ist. Wie kann ich Matlab das mitteilen und an welcher Stelle würdet ihr das machen? Vor dem Aufruf der Optimierung oder danach?

Die Simulationszeit kann dabei durchaus variieren. Es kann also passieren, dass das Fitnessergebnis der an fünfter Stelle gestarteten Berechnung früher zurückgegeben wird als das der ersten Rechnung. Wie kann ich realisieren, dass der ga weiß, welche Fitness zu welchen der acht Individuen gehört?

Vielen Dank für eure Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

wenn du die eingebaute Parallelisierung nutzt, musst du dich eben um überhaupt nichts weiter kümmern. Die Datenübergabe und -zuordnung erfolgt automatisch.

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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 26.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2016, 14:49     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine schnelle Antwort! Du meinst also, wenn ich die beiden genannten Einstellungen vornehme ordnet Matlab die Ergebnisse automatisch zu? Kann ich mir das in etwa so vorstellen, dass die Optimierung acht mal aufgerufen wird und dann acht mal ausgeführt wird?
Ich weiß nur nicht genau wie ich es schaffe, dass jede der acht Berechnungen nach den einzelnen Aufrufen in jeweils einem Ordner ausgeführt wird. Hast du dazu vielleicht eine Idee?

Beste Grüße

Optimierer
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Kann ich mir das in etwa so vorstellen, dass die Optimierung acht mal aufgerufen wird und dann acht mal ausgeführt wird?

Eher so, dass die Optimierung einmal ausgeführt wird und die intern dazu ablaufenden Funktionsauswertungen parallelisiert werden.

Wenn du acht voneinander unabhängige Optimierungen laufen lassen willst, bietet sich parfor an. Da kannst du dann auch den Ordner kontrollieren.

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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 26.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2016, 18:07     Titel:
  Antworten mit Zitat      
Hallo,

ja so habe ich das auch gemeint. Habe mich mit der Optimierung nur etwas missverständlich ausgedrückt, weil es soll nur eine Optimierung sein aber eben acht parallele Simulationen pro Generation. Ohne zu viel Verwirrung stiften zu wollen bezeichne ich die ganzen Funktionsauswertungen für die Abarbeitung eines Individuums jetzt mal als eine Schleife, dann lässt sich da hoffe ich einfacher diskutieren.

Man könnte es zum Beispiel so bauen, dass am Anfang jeder Schleife eine .txt-Datei geöffnet wird, in der eine Nummer gespeichert ist für einen Ordner. In diesem Ordner wird dann simuliert. Nach dem die Nummer ausgelesen wurde wird sie z.B. um 1 erhöht. Das könnte ich denke ich funktionieren, wenn es einen Befehl gäbe, mit dem ich den Start der Schleifen um jeweils einen Moment verzögere. Das heißt die Ausführung wäre nicht mehr hundertprozentig parallel.

Wird dann die erste Schleife gestartet liest die Funktion "1" aus der .txt Datei aus und speichert in den Ordner "1" die Simulation. Das "parallele" Ausführen der nächsten Schleife müsste ich dann so lange unterdrücken bis die erste Schleife in die .txt-Datei eine "2" geschrieben hat.
Könnte man das mit pause() realisieren?

Beste Grüße

Optimierer
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Frage ist doch: warum sollen die Funktionsauswertungen unbedingt in verschiedenen Ordnern stattfinden?

Du kannst mal versuchen, ob du innerhalb der Zielfunktion labindex verwenden kannst.

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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 26.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2016, 07:35     Titel:
  Antworten mit Zitat      
Hallo,

das Problem ist, dass die Simulationssoftware beim Start eine Datei erzeugt. Finden nun mehrere Simulationen in einem Ordner statt, dann befinden sich auch mehrere dieser Dateien im selben Ordner. Dadurch kann es dazu kommen, dass die Zuordnung dieser Dateien zu den Programmaufrufen verwechselt wird (Ich denke zumindest, dass es daran liegt). Die Simulation bricht ab. Findet nun jede Simulation in einem einzelnen Ordner statt, dann ist die Thematik vom Tisch.

Ich werde labindex mal ausprobieren.

Vielen Dank!

Grüße

Optimierer
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ich habe mir das nochmal von Anfang an durchgelesen. Warum eigentlich ga? Genetische Algorithmen sind an sich dafür bekannt, dass sie (wenn überhaupt) sehr langsam konvergieren und nur bei großen Populationen die gewünschten Ergebnisse liefern.

Falls es darum geht, ein globales Minimum zu finden, wird zunächst GlobalSearch empfohlen.
http://de.mathworks.com/help/gads/choosing-a-solver.html

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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 26.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2016, 13:09     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für die Anregung! Ich werde mich mal über GlobalSearch informieren und das ganze nochmal überdenken!

Beste Grüße

Optimierer
Private Nachricht senden Benutzer-Profile anzeigen
 
Optimierer
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 26.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2016, 13:51     Titel:
  Antworten mit Zitat      
Hallo,

habe das Problem jetzt noch einmal abgewogen und mich trotzdem für den ga entschieden.
Die Ordnerzuordnung habe ich mittlerweile gelöst, indem ich die Ordner nach einer Zufallszahl benenne.
Allerdings macht mir die Parallelisierung des ga Probleme. Starte ich mein Programm. mit den beiden Einstellungen 'parpool ' und 'UseParallel' 'always' in den ga options, dann wird die Fitnessfunktion trotzdem nur einmal gestartet. Das sehe ich, weil nur eine Simulation läuft. Habe mich schon informiert ob ich noch etwas vergessen habe, konnte aber nichts finden.
Wisst ihr, warum der ga trotz der Einstellungen nicht parallelisiert wird ?

Vielen Dank!

Beste Grüße

Optimierer
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

welches Release verwendest du?
Hast du schon anhand eines einfachen Beispiels, z.B. aus der Doku, die Parallelisierung getestet?
Unterstützt die Simulationssoftware parallele Aufrufe?

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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 26.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2016, 15:20     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich verwende Release 2013b. Bei einem einfachen Beispiel bei dem ich eine Funktion optimiere, funtioniert es, weil die Ausführungszeit doch sehr viel kürzer ist als ohne UseParallel 'always'. Ich bin deshalb auch auf die Idee mit dem Simulationsprogramm gekommen. Wenn ich allerdings mit parfor 8 mal die gesamte Optimierung aufrufe, dann startet er gleichzeitig acht Simulationen, also kann das auch mehrmals aufgerufen werden denke ich. Es handelt sich ja um vollkomen unabhängige Simulationen. Also bin ich ehrlich gesagt etwas ratlos.

Vielen Dank!

Beste Grüße
Optimierer
Private Nachricht senden Benutzer-Profile anzeigen
 
Optimierer
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 26.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2016, 19:16     Titel:
  Antworten mit Zitat      
Hallo,

mittlerweile kenne ich die Ursache! Es ist so, dass die Parallelisierung des ga erst nach der Berechnung der Fitnessfunktion des ersten Individuums der Initial Population aufgerufen wird. Da eine Berechnung bei dem einfachen Modell innerhalb kürzester Zeit erfolgt, ist mir das nicht aufgefallen. Im Gegensatz dazu dauert die erste Berechnung der Simulation sehr lang. Da ich davon ausgegangen bin, dass die Parallelisierung sofort greift, dachte ich er würde gar nicht parallelisieren.

Finde ich persönlich eher Schade, dass nicht sofort paralellisiert wird, dadurch verliere ich die Zeit für eine gesamte Generation, wenn man so will.

Gibt es einen Weg das zu umgehen ohne den ganzen ga umschreiben zu müssen? Kennt jemand einen Trick?

Danke nochmal Smile

Beste Grüße

Optimierer
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ich kann das Problem mit einfachen Funktionen nicht nachvollziehen.
Zeigt der Indikator für's parallele Rechnen links unten denn blau oder grün an?

Im Zweifelsfall beim Technischen Support von MathWorks nachfragen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 26.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2016, 09:49     Titel:
  Antworten mit Zitat      
Hallo Harald,

also es läuft genau wie beschrieben, das erste Individuum wird alleine berechnet Indikator ist blau. Wenn das fertig ist, dann werden die restlichen sieben berechnet, der Indikator ist grün. immerhin funktionierts dann bei den restlichen Generationen.

Danke nochmal für deine Hilfe!

Beste Grüße

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