Durch genetische Programmierung kann der Computer Programme für Sie schreiben!
Denken Sie nicht an "Programme" wie MS Word, sondern an "Programme" wie folgt:
function(x){ return x*2; }
Diese Funktion (oder dieses Programm) selbst hat keinen Grund zu existieren. Wir suchen nach Lösungen für Probleme. Wenn Sie die Summe von zwei Zahlen finden müssen, öffnen Sie einfach den Taschenrechner und rechnen. Was ist, wenn Ihnen jemand die folgende Tabelle gegeben und Sie gebeten hat, die Beziehung zwischen result
und x
und herauszufinden y
:
x y result
99 1 (3.02)
79 88 2.01
21 62 5.01
84 52 (6.58)
12 70 5.54
67 18 0.73
Diese Daten sind Ihre "Trainings" -Daten. Ihr Computer verwendet diese Daten, um eine Hypothese zu erstellen, und testet sie dann anhand der tatsächlichen Daten.
Angenommen, Sie kennen keine Statistiken und sind der Meinung, dass dieses Problem zu schwierig ist, um es selbst herauszufinden, sodass der Computer es für Sie herausfinden kann.
Lassen Sie den Computer zufällig wilde Vermutungen anstellen
Sie lassen den Computer eine Million Antworten generieren und prüfen, ob eine von ihnen steckt (raten Sie ... eine Million Mal!). Das Folgende ist ein Beispiel für ein paar Vermutungen:
function(x,y){ return x+y; } // wrong
function(x,y){ return x/1*1*1*1*1*1+y; } //wrong, silly
Sie können dies wissen oder nicht, aber Funktionen oder Programme können auch als Bäume dargestellt werden. Die zweite Funktion wäre beispielsweise:
(+ (/ x (* 1 (* 1 (* 1 (* 1 (* 1 1)))) y)
Sie können es eher wie einen Baum aussehen lassen, indem Sie es wie folgt einrücken (übrigens, schauen Sie sich die Umkehrnotation und die Lisp-Syntax an ... aber Sie werden verstehen, warum wir in Kürze Programme wie dieses darstellen):
(+
(/ x
(* 1
(* 1
(* 1
(* 1
(* 1 1))))
y)
( +
Ist an der Spitze mit zwei „Blättern“ von /
und y
. /
Selbst mehrere Kinder hat, etc.)
Deshalb lesen Sie so viel über "Bäume" in der genetischen Programmierung. In jedem Fall stecken wir die Werte von x
und y
in diese Funktion und sie gibt uns die FALSCHE Antwort. Kein Wunder, da wir das zufällig generiert haben.
Sie beschließen nun, eine Million solcher Lösungen zu generieren. Alle von ihnen sind falsch. Sie stellen jedoch fest, dass einige Antworten näher an der richtigen Antwort liegen als andere. Mit anderen Worten, einige Lösungen passen besser als andere. Beachten Sie, dass der Computer nicht weiß, was "richtig" und "falsch" ist, sodass Sie Ihre eigene "Fitnessfunktion" bereitstellen müssen. Diese Funktion erhält eine mögliche Lösung, die Trainingsdaten, und ist dafür verantwortlich, dem GP-System mitzuteilen, wie "fit" diese Lösung ist. Wie Sie sich vorstellen können, wird diese Funktion millionenfach ausgeführt.
Was macht GP anders?
Das unterscheidet die genetische Programmierung von wilden Vermutungen. Sie beschließen, eine weitere Runde von Millionen Vermutungen anzustellen. Sie tun es jedoch etwas intelligenter. Sie nehmen die besten 10% der Vermutungen (diejenigen, die sich den tatsächlichen Werten näherten) und machen sie zu einem Teil der zweiten Generation. Sie nehmen auch viele dieser Lösungen (vielleicht die gleichen 10% ... ich erinnere mich nicht) und beschließen, "sie zu mischen".
Sie wählen nach dem Zufallsprinzip zwei Lösungen aus, wählen nach dem Zufallsprinzip Teilbäume aus und tauschen sie aus. Ein Teil von Lösung A endet also unter Lösung B und umgekehrt - Sie haben sie nur "gekreuzt". Sie nehmen auch einige Lösungen und "mutieren" sie einfach ... nehmen Sie einen Teilbaum und "vermasseln Sie es" ein wenig (hey, wenn die Lösung schrecklich ist, könnte das "Vermasseln ohne Grund" sie tatsächlich verbessern).
Eine gute Art, darüber nachzudenken, ist folgende: Ihre Eltern haben bestimmte Eigenschaften - Haarfarbe, Körpergröße, Krankheitswahrscheinlichkeit usw. Sie als Kind erben verschiedene Eigenschaften von beiden Elternteilen. Wenn beide Eltern olympische Sportler wären, wären Sie auch ein Supersportler, oder? Nun, Biologen, Soziologen und sogar Historiker mögen sich mit dieser Idee auseinandersetzen, aber Informatiker befassen sich hier nicht mit der Moral der Eugenik. Sie sahen nur, dass ein "System" ziemlich gute Lösungen lieferte, und beschlossen, es in Software zu modellieren.
Wenn es nicht mit der Biologie übereinstimmt, aber dennoch gute Antworten liefert ... sagen viele Informatiker gemeinsam: "Was auch immer, und danke für die Terminologie." Beachten Sie auch, dass alle Ihre Brüder und Schwestern und nicht genau das gleiche ... auch wenn sie die gleichen Eltern haben. Jede Person hat Gene, die aus irgendeinem Grund mutieren (bitte zeigen Sie dies keinem Biologen, es geht darum, die Motivation hinter einem Großteil der Terminologie zu verstehen).
Jetzt veranlassen wir den Computer, Millionen von Programmen zu generieren und deren Fitness zu messen. Die besten Lösungen überleben die nächste Generation. Wir "mutieren" auch und gehen auf die "Population" über (beachten Sie, wie die Sprache der Genetik und Biologie verwendet wird). Sobald die zweite Generation erstellt ist, wird die Fitness erneut gemessen. Da diese Generation die besten Lösungen aus der Vorgängergeneration hat UND wir die besten Lösungen (zusammen mit der mittelmäßigen Bevölkerung - um die Vielfalt aufrechtzuerhalten) gekreuzt und mutiert haben, sollte diese Generation mindestens ein wenig besser sein als die Vorgängergeneration.
Wir setzen dies für eine sehr große Anzahl von Generationen fort. Jede Generation bietet (hoffentlich) immer bessere Lösungen, bis wir die richtige Antwort erhalten. Beispielsweise:
(+ (- 2.2 (/ x 11) (* 7 (cos y))))
Na sieh dir das an, das ist richtig!
(Ich habe dies von http://en.wikipedia.org/wiki/Genetic_programming kopiert , das auch eine grafische Darstellung dieses Baums hat.)
Krimskrams
Es gibt einige wichtige Fragen, wie Sie entscheiden, welche "Terminals" ( +, -, *, /, cos, sin, tan
) für Ihr GP-System verfügbar sind, wie Sie die Fitnessfunktion schreiben und wie das System mit unsinnigen Programmen wie (1 + cos)
oder (2 / "hello")
(unter vielen anderen) umgeht .
Es ist ziemlich langweilig, Gleichungen zu entwickeln. Interessanter wird es, wenn Ihr Terminal-Set wie folgt aussieht: (Feuer, Feind spüren, bewegen, ...) und Ihre Fitness-Funktion Ihre Gesundheit und die Anzahl der Leichen von Kampfmonstern misst.
Das meiste habe ich aus dem Gedächtnis geschrieben, aber das ist die Grundidee. Ich habe in meinen Collegejahren einen GP gemacht. Sie sollten auf jeden Fall damit herumspielen. Machen Sie sich keine Gedanken über das Verständnis der Terminologie, laden Sie einfach einige kostenlose GP-Systeme herunter, durchlaufen Sie einige Beispiele, um ein Gefühl dafür zu bekommen, und stellen Sie sich Ihre eigenen interessanten Beispiele zusammen (finden Sie Beziehungen zwischen verschiedenen Datensätzen, versuchen Sie, sie mit dem Spiel zu verknüpfen APIs usw.)