2009-12-11 3 views
9

Es wäre nicht meine Absicht, einen Link auf meinem Blog zu setzen, aber ich habe keine andere Methode, um zu klären, was ich wirklich meine. Der Artikel ist ziemlich lang, und es ist in drei Teile (1, 2, 3), aber wenn Sie neugierig sind, ist es das Lesen wert.Codebakterien: sich entwickelndes mathematisches Verhalten

Vor langer Zeit (mindestens 5 Jahre) programmierte ich ein Python-Programm, das "mathematische Bakterien" erzeugte. Diese Bakterien sind Python-Objekte mit einem einfachen Opcode-basierten genetischen Code. Sie können sie mit einer Nummer versehen und sie geben eine Nummer zurück, je nach Ausführung ihres Codes. Ich erzeuge ihre genetischen Codes zufällig und lege eine Umgebungsauswahl auf diese Objekte an, die ein Ergebnis erzeugt, das einem vordefinierten Erwartungswert ähnlich ist. Dann lasse ich sie duplizieren, führe Mutationen ein und entwickle sie. Das Ergebnis ist ziemlich interessant, denn ihr genetischer Code lernt im Grunde, einfache Gleichungen zu lösen, selbst für Werte, die für den Trainingsdatensatz unterschiedlich sind.

Jetzt ist dieses Ding nur ein Spielzeug. Ich hatte Zeit zu verlieren und ich wollte meine Neugier befriedigen. Ich nehme jedoch an, dass etwas in Bezug auf die Forschung gemacht wurde ... Ich erfinde das Rad hier neu, hoffe ich. Sind Ihnen ernstere Versuche bekannt, In-Silico-Bakterien wie die, die ich programmiert habe, zu schaffen?

Bitte beachten Sie, dass dies nicht wirklich "genetische Algorithmen" sind. Genetische Algorithmen verwenden Sie, wenn Sie Evolution/Selektion verwenden, um einen Vektor von Parametern gegenüber einer bestimmten Bewertungsfunktion zu verbessern. Das ist etwas anders. Ich optimiere den Code, nicht die Parameter, gegen eine bestimmte Bewertungsfunktion.

+5

Nein, das ist ziemlich offensichtlich ein GA. Sie optimieren einen Parameter (die Opcode-Repräsentation des auszuführenden Codes) gegen eine Bewertungsfunktion (ob dieser Code die gewünschte Ausgabe erzeugt oder nicht). –

+1

Nun, in der Tat, wenn Sie den Code als Parameter betrachten ... Sie sind völlig richtig :) –

+1

Natürlich ist es eine Spezialisierung von Genetic Algorithms (GA), aber diese Spezialisierung ist bekannt als Genetic Programming (GP), wie korrekt unten angegeben. – MaD70

Antwort

2

Das kostenlose Dienstprogramm Eureqa ist ähnlich in dem Sinne, dass in der Lage, symbolische Funktionen (viel komplizierter als einfache lineare Regression, etc.) basierend auf multivariaten Eingabedaten zu erstellen. Aber es verwendet GA, um die Funktionen zu entwickeln, also bin ich nicht sicher, ob das genau das war, was Sie im Sinn hatten.

Siehe auch die "Download Your Own Robot Scientist" article on Wired für eine Aufschlüsselung der allgemeinen Idee, wie es funktioniert.

+0

es scheint eher wie ein Werkzeug, um Beziehungen abzuleiten ... Art von PCA mit einem Reasoner daran angeschlossen. –

1

Kennen Sie sich mit Core Wars? Ich erinnere mich, dass es einige Codeentwickler für das Spiel gab, die etwas Erfolg hatten. Zum Beispiel ist MicroGP++ ein Assemblercode-Generator, der auf die Core Wars-Assemblersprache angewendet werden kann (sowie auf echte Probleme!).

2

Nice article, Ich würde sagen, Sie sprechen über "Genexpressionsprogrammierung" statt "genetische Programmierung", BTW.

+0

Auf Zweifeln über GEP siehe Diskussionsseite seines Artikels auf Wikipedia: http://en.wikipedia.org/wiki/Talk:Gene_expression_programming – MaD70

Verwandte Themen