|
|
| MenschMeier |

Forum-Anfänger
|
 |
Beiträge: 43
|
 |
|
 |
Anmeldedatum: 22.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.10.2011, 15:10
Titel: allgemeine Fragen zum GA
|
 |
| |
 |
|
Hallo zusammen,
ich beschäftige mich gerade mit dem genetischen Algorithmus in Matlab und habe einige Verständnisfragen.
Frage zur generellen Ablauf:
Der GA erstellt zu beginn eine Initial Population (wenn man keine vorgibt) und dessen Fitnesswerte werden berechnet. Danach werden die "EliteCounts" direkt und die anderen Gene mit einer bestimmten (abhängig vom Fitnesswert) Wahrscheinlichkeit in die in Generation 2 übernommen. Jetzt beginnt die Vererbung (wovon hängt es ab, ob zwei Gene sich "vermehren" und mit wem? Was passiert mit den Eltern?) und darauf folgt eine zufällige Mutation. Jetzt wurde Generation 3 erschaffen und diese vermehrt und mutiert weiter, ein Kreislauf entsteht.
Ist das so korrekt?
Frage zu initial Population:
Wenn ich 6 Variablen und eine Populationsgröße von 10 habe, ist dann die initalpopulation eine 6X10 Matrix oder eine 6X1 Matrix?
Frage zur Geschwindigkeit/Aufrufe der Fitnessfunktion:
Ich habe einen anderen Algorithmus der sehr viel schnelle läuft als der GA und die selbe Fitnessfunktion verwendet. Ich weiß, dass das Berechnen des Fitnesswertes 1-3 Sekunden dauert.
Ein GA (PopSize 5) braucht aber für eine Generation, also ein Fitnessergebis etwa 5 Minuten. Eigentlich muss die Fitnessfunktion doch nur 5 mal für die Initial Population und 5 mal für die erste mutierte Kindergeneration aufgerufen werden?!
Bei einer Beispielrechnung habe ich via Profiler die Aufrufe der Fitnessfunktion gezählt: 191 Aufrufe in 5 Generationen (Dauer gesamt: 1.448s, Dauer der Bearbeitung der Fitnessfunktion: 1.446s)
Danke für eure Hilfe.
|
|
|
|
|
|
| MenschMeier |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 43
|
 |
|
 |
Anmeldedatum: 22.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.10.2011, 19:40
Titel:
|
 |
Ich habe jetzt einfach mal einige GA mit Testfunktionen und meiner Zielfunktion durchlaufen lassen und mir den f-count (anzahl Fitnessfunktionsaufrufe) anzeigen lassen. es lässt sich eine Struktur ablesen:
erste Iteration: f-count 1060 (1040 + 20 für Initial Population)
zweite iteration: f-count 1040
dritte iteration: f-count 1040
...
bei einer Popsize von 20 sind das genau 52 Aufrufe der Fitnessfunktion in der Generation. Ist das normal? jetzt ist mir auch klar, warum der Algorithmus mehrere Stunden braucht um fertig zu werden. In meiner Vorstellung müsste der doch nur 20 Aufrufe pro Generation haben?
lg
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 20.10.2011, 21:31
Titel:
|
 |
Hallo,
| Zitat: |
| Wenn ich 6 Variablen und eine Populationsgröße von 10 habe, ist dann die initalpopulation eine 6X10 Matrix oder eine 6X1 Matrix? |
6x10.
| Zitat: |
| Ich habe einen anderen Algorithmus der sehr viel schnelle läuft als der GA und die selbe Fitnessfunktion verwendet. |
Was für einen anderen Algorithmus? Auch ein genetischer Algorithmus?
Wenn du für dasselbe Problem fmincon und ga verwenden kannst, wäre fmincon wahrscheinlich deutlich schneller, da es systematisch sucht, während ga mehr oder weniger blind sucht.
Um deine Frage von heute zu beantworten, wäre mehr Code hilfreich. Momentan sehe ich dafür keinen Grund.
Grüße,
Harald
|
|
|
|
| MenschMeier |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 43
|
 |
|
 |
Anmeldedatum: 22.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.10.2011, 21:43
Titel:
|
 |
Der Code ist der von Jong und deb 2009 veröffentliche Cuckoo Search Algorithmus.
Mich wundert es einfach, das der GA so viele Aufrufe der Fitnessfunktion macht. Warum reicht nicht ein Aufruf pro Induviduum pro Generation? Mir will das einfach nicht ganz in den Kopf. Das ist nämlich der treibende Faktor, der die Berechnung so in die länge zieht. Der Cuckoo Search ist bei den Aufrufen viel genugsamer. Ich lasse ihn morgen mal durchlaufe und schreibe dann, wie oft er die Fitnessfunktion aufruft.
lg
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 20.10.2011, 22:11
Titel:
|
 |
Hallo,
mich wundert die Anzahl der Aufrufe auf den ersten Blick auch. Nur kann ich halt nicht erahnen, was in deinem Aufruf dazu führt.
Grüße,
Harald
|
|
|
|
| MenschMeier |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 43
|
 |
|
 |
Anmeldedatum: 22.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.10.2011, 06:53
Titel:
|
 |
| |
 |
|
Ich kann die Fitnessfunktion hier nicht posten, aber das "Problem" tritt ja auch bei den Testfunktionen auf. Ich habe mal die Rastrigin mit 2 Varibalen, 20 PopulationsSize und 5 Generationen durchführt. Auch hier ist der F-Count sehr hoch.
>> Start_GA
Diagnostic information.
Fitness function = @rastriginsfcn
Number of variables = 2
nonlinear constraint function = @constraint
0 Inequality constraints
0 Equality constraints
0 Total number of linear constraints
Modified options:
options.Display = 'diagnose'
options.PlotFcns = { @gaplotbestf @gaplotscorediversity }
End of diagnostic information.
Optimization terminated: average change in the fitness value less than options.TolFun
and constraint violation is less than options.TolCon.
% die Ergebnistabelle lässt sich hier schlecht einfügen! Siehe dazu im Anhang
ans =
1.0e-004 *
0.1363 0.0075
>>
erste Iteration: f-count 1060 (1040 + 20 für Initial Population)
zweite iteration: f-count 2100 (+1040)
dritte iteration: f-count 3140 (+1040)
...
Dieser Effekt scheint der GA an sich zu erzeugen, aber wieso? Ich möchte in meiner Bachelorarbeit den GA in Matlab beschreiben und diese vielen Aufrufe entziehen sich meiner Logik.
lg und einen schönen Freitag
| Beschreibung: |
|
 Download |
| Dateiname: |
rast.jpg |
| Dateigröße: |
22.2 KB |
| Heruntergeladen: |
451 mal |
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 21.10.2011, 08:30
Titel:
|
 |
Hallo,
tu mir doch den Gefallen und poste ein lauffähiges Beispiel, gerne mit einer Beispielfunktion statt der echten. Ich habe es nämlich probiert und konnte das auf die Schnelle nicht reproduzieren.
Frage auch: mit welchem Release arbeitest du?
Grüße,
Harald
|
|
|
|
| MenschMeier |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 43
|
 |
|
 |
Anmeldedatum: 22.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.10.2011, 17:20
Titel:
|
 |
Hallo,
also ich habe mit dem optimtool die Testfunktion @rastriginsfcn durchlaufen lassen.
PopSize ist auf Standart: 20
Maxgen auch: 100
nvars = 2
Im Anhang sind die Ergebnisse. Wie in den vorherigen Post beschrieben, sind die f-count's sehr hoch. Mir ist nicht klar, warum der GA die Fitnessfunktion so oft öffnet. In der testfunktion macht das zeitlich kaum einen Ausschlag, aber in meiner richtigen Fitnessfunktion sind das Stunden.
lg
Anhang:
| Beschreibung: |
| Bild des Ergebnisses (Level of Display: iter) |
|
 Download |
| Dateiname: |
rastriginsfcn.jpg |
| Dateigröße: |
266.71 KB |
| Heruntergeladen: |
505 mal |
| Beschreibung: |
| von Matlab erstellte M-File zum starten des GA |
|
 Download |
| Dateiname: |
execute.m |
| Dateigröße: |
500 Bytes |
| Heruntergeladen: |
357 mal |
| Beschreibung: |
| leere NB, da ohne der GA nicht startet. |
|
 Download |
| Dateiname: |
constraint.m |
| Dateigröße: |
57 Bytes |
| Heruntergeladen: |
334 mal |
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 21.10.2011, 18:26
Titel:
|
 |
Hallo,
wieso soll GA ohne nichtlineare NB nicht starten? Du kannst das einfach durch [] ersetzen.
Ich habe mal experimentiert:
Interessanterweise ist die Anzahl der Funktionsauswertungen ohne nichtlin. NB 20 pro Generation, aber selbst mit leerer nichtlinearer NB ist sie bei über 1000.
Warum dies so ist, war auch mir vorerst nicht klar, aber Google hilft:
http://www.mathworks.de/matlabcentr.....reader/view_thread/304689
Wenn du keine nichtlinearen NB hast, dann setze also bitte an diese Stelle [].
Wenn du welche hast und die hohe Anzahl an Funktionsauswertungen vermeiden möchtest, kannst du die nichtlin. NB auch über Strafterme in der Fitnessfunktion einbauen.
Grüße,
Harald
|
|
|
|
| MenschMeier |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 43
|
 |
|
 |
Anmeldedatum: 22.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.10.2011, 18:39
Titel:
|
 |
Hallo Harald,
wohin darf ich die Pralinen schicken?
Deine Lösung hat mir gerade einen Geschwindigkeitsschub gegeben, das kannst du dir nicht vorstellen genial!
lg und ein schönes Wochenende
|
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|