2010-05-18 8 views
7

Ich bin auf der Suche nach einigen genetischen Algorithmen zu einem Operations-Forschungsprojekt, an dem ich beteiligt bin. Derzeit haben wir ein Programm, das bei der Optimierung einiger Scheduling hilft und wir wollen einige Heuristiken in Form von genetischen Algorithmen hinzufügen. Gibt es irgendwelche guten Bibliotheken für generische genetische Programmierung/Algorithmen in C++? Oder würdest du mir empfehlen, dass ich einfach meine eigene codiere?Genetische Programmierung in C++, Bibliotheksvorschläge?

Ich sollte hinzufügen, dass, während ich nicht neu in C++ bin ich ziemlich neu zu tun diese Art der mathematischen Optimierung Arbeit in C++ als die Gruppe, mit der ich früher gearbeitet hatte tendenziell ein proprietäres Optimierungspaket zu verwenden.

Wir haben eine Fitness-Funktion, die ziemlich rechenintensiv zu evaluieren ist und wir haben einen Cluster, um dies auszuführen, so dass parallelisierter Code sehr wünschenswert ist.

Also ist C++ eine gute Sprache dafür? Wenn nicht, bitte empfehlen Sie einige andere, da ich bereit bin, eine andere Sprache zu lernen, wenn es das Leben leichter macht.

danke!

+0

Gute Frage! Ich hatte das gleiche vor einer Weile und entschied mich, meine eigene generische GA-Bibliothek basierend auf Vorlagen und Policy-Klassen zu beginnen und STL-Konventionen zu verwenden. Es lohnt sich noch nicht viel zu zeigen, aber hoffentlich wird es bald etwas geben, das es wert ist, in der Öffentlichkeit veröffentlicht zu werden! Danke für die Erinnerung daran, daran zu arbeiten. –

+0

Ein mögliches Duplikat: http://stackoverflow.com/questions/687404/was-genetic-algorithm-programming-library-do-you-use – Kiril

+0

@Derrick, Klingt sehr interessant, haben Sie eine Webseite für Ihr Projekt? – shuttle87

Antwort

4

Ich würde empfehlen, Ihre eigenen zu rollen. 90% der Arbeit in einem GP ist die Codierung des Genotyps, wie er operiert wird und die Fitnessberechnung. Dies sind Teile, die sich für jedes unterschiedliche Problem/Projekt ändern. Der eigentliche evolutionäre Algorithmus Teil ist normalerweise ziemlich einfach.

Es gibt mehrere GP-Bibliotheken da draußen (http://en.wikipedia.org/wiki/Symbolic_Regression#Implementations). Ich würde diese jedoch als Beispiele und Referenzen verwenden.

C++ ist eine gute Wahl für GP, da sie sehr rechenintensiv sind. In der Regel ist die Fitness-Funktion der Engpass, daher lohnt es sich, diesen Teil zumindest kompilieren/optimieren zu lassen.

+0

Ich habe mein eigenes von Grund auf neu programmiert, war definitiv eine interessante Lernerfahrung. Die nächste und möglicherweise schwierige Aufgabe wird es sein, den Code zu paralelisieren. – shuttle87

+1

Das ist eine schreckliche Antwort. Sie werden am Ende Albträume über das MPI-Kommunikationsprotokoll haben, das Sie implementieren müssen, wenn es in GAUL integriert ist. –

0

Ich schlage vor, Sie haben einen Blick in den Matlab-Optimierungs-Toolkit - es kommt mit GAs out of the box, haben Sie nur noch die Fitness-Funktion (und eine Funktion, um initial Bevölkerung schließlich generieren) und ich glaube, Matlab hat einige C++ Interoperabilität, so dass Sie könnten Code funktioniert in C++. Ich benutze es für meine Experimente und ein sehr nettes Feature ist, dass Sie alle Arten von Charts auch aus der Box bekommen.

Sagte so - wenn Ihr Ziel ist, über genetische Algorithmen zu lernen, Sie sind besser dran, es zu kodieren, aber wenn Sie nur Experimente Matlab und C++ (oder auch nur Matlab) ausführen möchten, ist eine gute Option.

+0

Danke für den Vorschlag, aber ich bezweifle, dass ich Matlab verwenden werde, da es keine freie Software ist. – shuttle87

+0

das ist ein guter Punkt - FYI Student Version ist 89 $ + 19 $ für die Optimierung Toolkit, die nicht so schlecht ist – JohnIdol

+0

Es ist nicht so sehr, dass die Matlab-Lizenz kostet so viel, aber eher die Einschränkungen, die ich auf die Verpackung des Codes. Gäbe es keine Einschränkungen für die Matlab-Lizenz, würde ich das sicherlich tun. – shuttle87

1

Ich benutze GAUL

es ist eine C-Bibliothek mit allem, was Sie wollen.
(pthread/Gabel/openmp/mpi)
(verschiedene Crossover/Mutation Funktion)
(nicht GA-Optimierung: Hill-Climbing, NM Simplex, Simulierte annealling, Tabu, ...)

Warum Ihr bauen eigene Bibliothek, wenn es so mächtige Werkzeuge gibt ???

1

Ich habe das noch nicht persönlich benutzt, aber die Age Layered Population Structure (ALPS) Methode wurde verwendet, um menschliche Wettbewerbsergebnisse zu generieren und hat gezeigt, dass sie mehrere populäre Methoden übertrifft, um optimale Lösungen in rauen Fitnesslandschaften zu finden. Darüber hinaus enthält der Link Quellcode in C++ FTW.