Grundlagen

Genetic Programming


Norbert Bartos


bartos@email.tgm.ac.at

Genetic Programming

Norbert Bartos

Seit kurzer Zeit sind auf Tagungen des Fachbereiches der „Artificial Intelligence“ vermehrt Beiträge aus dem Gebiet des „Genetic Programmings“ zu finden. Dabei geht es um das automatische, evolutionäre Erstellen von Programmen durch Computer. Es ist dies eine Teildisziplin des „Machine Learning“ und reicht in seinen Wurzeln bis 1958 zurück. Damals hat R.Friedberg einige Assemblerprogramme einer 1-Bit-Maschine erfolgreich evolutionär durch einen Computer entwickeln lassen. Die Ideen sind aber dann wieder fallengelassen worden, da für wirklich sinnvolle und damit aber komplexe Problemstellungen, die damaligen Computer viel zu langsam waren. Erst Mitte der 80er-Jahre, bedingt durch das vermehrte Aufkommen von (massiv) parallelen Supercomputern, begannen wieder ernstzunehmende Publikationen in wissenschaftlichen Zeitschriften, bis schließlich 1992 durch das Buch von J.R.Koza ein starker Interessensanstieg hervorgerufen wurde. Er zeigte nämlich, dass man auf diese Weise Programme generieren kann, die in manchen Fällen sogar besser, als die durch den Menschen erstellten Programme sind.

“Genetic Programming“ basiert auf genetischen Algorithmen. Die dazu notwendigen Basiselemente sind

Programme können hierbei repräsentiert werden in

Die folgenden einfachen Beispiele mögen das Evolutionsprinzip für LISP-Programme erläutern:

a) Crossover:

Gegeben seien folgende Eltern:

Elter 1:    ( * ( + a b ) c )

Elter 2:    ( * ( - d e ) ( + f g ) )

Durch Crossover der kompatiblen Teillisten ( + a b ) und ( - d e ) in den Eltern entstehen dann die folgenden Kinder:

Kind 1:    ( * ( - d e ) c )

Kind 2:    ( * ( + a b ) ( + f g ) )

b) Mutation:

Gegeben sei der Elter ( * ( + a b ) c ). Durch Mutation beispielsweise eines Operators entsteht dann das Kind  ( * ( - a b ) c ).

Das Verhältnis von Crossover zu Mutation beträgt in der Praxis meist 9:1.

Probleme für die praktische Anwendung:

Es sind daher Parallelrechner zwingend erforderlich.

Die Anwendungen heute basieren meist auf der Sprache LISP, seltener auf anderen High-Level-Languages. Maschinencode-Evolution ist bei den modernen komplexen Prozessoren zu aufwendig. Die wichtigsten Anwendungsgebiete sind

Für interessierte Leserinnen und Leser ist das folgende Buch empfehlenswert:

Es ist dies ein umfassendes und sehr übersichtliches Werk, welches kein wesentliches Vorwissen im Bereich der evolutionären Techniken voraussetzt. Es ist auch für Anfänger in diesem Bereich leicht verständlich und zum Selbststudium geeignet.