DE69631694T2 - Genetisches Programmiersystem und Verfahren unter Verwendung genetischer Programmiertechniken - Google Patents

Genetisches Programmiersystem und Verfahren unter Verwendung genetischer Programmiertechniken Download PDF

Info

Publication number
DE69631694T2
DE69631694T2 DE1996631694 DE69631694T DE69631694T2 DE 69631694 T2 DE69631694 T2 DE 69631694T2 DE 1996631694 DE1996631694 DE 1996631694 DE 69631694 T DE69631694 T DE 69631694T DE 69631694 T2 DE69631694 T2 DE 69631694T2
Authority
DE
Germany
Prior art keywords
program
gene
graph
chain
solution
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE1996631694
Other languages
English (en)
Other versions
DE69631694D1 (de
Inventor
William Worzel
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Worzel William Milan
Original Assignee
Worzel William Milan
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Worzel William Milan filed Critical Worzel William Milan
Publication of DE69631694D1 publication Critical patent/DE69631694D1/de
Application granted granted Critical
Publication of DE69631694T2 publication Critical patent/DE69631694T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/12Computing arrangements based on biological models using genetic models
    • G06N3/126Evolutionary algorithms, e.g. genetic algorithms or genetic programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Description

  • Gebiet der Erfindung
  • Die vorliegende Erfindung betrifft Berechnungssysteme zum Entdecken effizienter Programme durch genetische Programmiertechniken. Insbesondere kombiniert die Erfindung genetische Algorithmen mit Graphreduktionstechniken, um ein Berechnungssystem zu schaffen, das die effiziente Entwicklung von Programmen zur Lösung von Aufgaben erlaubt, deren Eingabe bekannt ist und die eine Funktion zum Bestimmen aufweisen, ob ein Programm besser als ein anderes ist.
  • Hintergrund der Erfindung
  • Die meisten Computer, die heute gebaut werden, sind von einer Typ, der als Von Neumann-Maschine bekannt ist. Diese Computer erfordern die Übertragung von Daten aus Speicherplätzen, die für gewöhnlich mittels einiger Adressen oder Anschriften identifiziert sind, an eine zentrale Verarbeitungseinheit (CPU), wobei einige Operationen auf die Daten angewendet werden. Oftmals werden die Daten wieder verschoben, entweder zurück an ihren ursprünglichen Platz oder an einen anderen Speicherplatz. Diese dauernde Bewegung von Daten ist ineffizient und begrenzt die Möglichkeit, eine wirklich parallele Maschine zu schaffen.
  • Lambda-Rechnungen bilden einen anderen Weg zur Manipulation von Informationen, um gewünschte Ergebnisse zu erhalten. Bei Lambda-Rechnungen werden spezielle "Lambda-Ausdrücke" erzeugt, um ein System zu beschreiben, das Daten eng mit Funktionen verknüpft. Unter Verwendung dieser Lambda-Ausdrücke kann eine universelle Programmiermaschine aufgebaut werden, die Ergebnisse erzeugt, die denen gleichen, die mittels Von Neumann-Maschinen erzeugt werden.
  • Ein von D . A . Turner verfaßter Artikel ("A New Implementation Technique for Applicative Languages", Software – Practise and Experience, Band 9, Nummer 1, Seiten 31–49, 1979) beschreibt ein Verfahren zum Aufbau eines Berechnungssystems unter Abstraktion von Lambda-Ausdrücken auf eine einfachere und mächtigere Form, die Kombinatoren genannt wird. Kombinatoren wurden erstmals von Schonfinkel und Curry in den 1930er Jahren beschrieben, aber Turner war der erste, der sie als einen Weg zum Aufbau eines Computersystems vorgeschlagen hat. Anschließend haben Clarke, Gladstone, MacLean und Norman im einzelnen Computerhardware beschrieben, die gebaut werden könnte, um die Implementierung solcher Systeme zu erleichtern. Seitdem wurden zusätzliche Materialien über Kombinatoren geschrieben, einschließlich des US-Patents Nr. 4,734,848 (Yamano et al.), das parallele Kombinatorhardware beschreibt.
  • Kombinatoren sind ein Beispiel eines Graphreduktionssystems. Das heißt, ein System, in dem Programme durch Listen von Elementen repräsentiert werden, die mittels eines Satzes von Graphreduktionsoperatoren transformiert werden. Während diese Erfindung sich wegen ihrer Kompaktheit und nachgewiesenen Verallgemeinbarkeit auf Kombinatoren konzentriert, deckt die Erfindung den Gebrauch jeglicher und sämtlicher Graphreduktionssysteme ab, einschließlich solcher, die auf Ketten wirken, die Graphen darstellen.
  • Kombinatoren K, S, I, B, C und W werden durch folgende Funktionen definiert und graphisch in 1 dargestellt.
  • In jedem Fall können f, g, x und y Funktionen, Operatoren, Konstanten oder Kombinatorausdrücke sein Kxy = x Sfgx = fx (gx) Ix = x Bfgx = f (gx) Cfgx = (fx) g Wfx = (fx) x
  • Betrachtet man Programme als Bäume von Ausdrücken, bei denen jeder Zweig des Baumes einen separaten Teil des Programms repräsentiert, ändern Kombinatoren direkt Programmbäume, um ihre Struktur zu verändern, wodurch die Ergebnisse einer Auswertung des Baumes verändert werden. Kombinatorberechnungssysteme verwenden für gewöhnlich Klammerabstraktion, um Bezugnahmen auf Variablen zu entfernen; das heißt Eingabedaten, die sich jedes Mal ändern, wenn das Programm ausgeführt wird. Das Klammerabstraktionsverfahren stellt reine Kombinatorausdrücke her, die keine Bezugnahmen auf Eingabedaten aufweisen. Statt dessen werden Kombinatoren direkt auf Eingabedaten angewendet, die als ein Graph oder Baum angeordnet sind.
  • John Holland hat die Idee des Gebrauchs von Genetik als ein Modell zum Lösen von Computerberechnungsaufgaben in seiner Monographie aus dem Jahre 1975, Adaption in Natural und Artificial Systems (Anpassung in natürlichen und künstlichen Systemen) beschrieben. Holland hat vorgeschlagen, daß von verschiedenen Sätzen zufällig gewählte Anfangswerte, lediglich unter der Voraussetzung, daß es einen Weg gibt, um zu bestimmen, ob ein Wert "besser" (entsprechend einer Definition, die auf eine problemspezifische Weise vorgenommen ist) als ein anderer ist, durch einen Mechanismus, der auf die Evolution modelliert ist eine Lösung durch Kombination der "Gene" erhalten werden kann, die diese Werte repräsentieren.
  • Diese "genetischen Algorithmen" schaffen ein effizientes Verfahren, um in einem großen Universum möglicher Werte auf gewünschte Werte zu konvergieren. Falls ein überlegener wert unter einer großen Anzahl möglicher werte gesucht wird, und falls Werte durch irgendeine regelmäßige Form wie etwa eine Binärkette charakterisiert werden können, ist es möglich, sich schnell und effizient zur besten Lösung zu bewegen, indem diese Ketten aus einem relativ kleinen Pool von Kandidaten gewählt, gepaart und gelegentlich mutiert werden, vorausgesetzt daß es möglich ist, einen Wert zuzuordnen, der die Qualität eines Wertes im Vergleich mit anderen Werten repräsentiert.
  • Genetische Algorithmen werden für gewöhnlich in Programmen demonstriert, die nach einem maximalen oder optimalen Wert einer bekannten Maßfunktion suchen wie etwa dem Auffinden von Funktionsmaxima oder -minima. Beispielsweise wird das Problem des "reisenden Handelsvertreters", wonach die effizienteste Reiseroute unter einer sehr großer Anzahl möglicher Routen gesucht wird, oftmals verwendet, um genetische Algorithmen zu demonstrieren.
  • Bisherige Versuche, Programme zu erzeugen, die genetische Algorithmus-Techniken verwenden, haben beinhaltet, daß man genetische Algorithmen mit regelbasierten Systemen kombiniert, um ein Verfahren zum Aufbau komplexer Systeme zum Ergreifen von Maßnahmen zu schaffen. Darunter kann man sich vorstellen, daß programmiert wird, indem binäre Werte an Regeln angepasst werden, und dann die Werte dann entwickelt werden, um die beste Kombination von Regeln zur Lösung des Problems zu finden. Dies ist im US-Patent Nr. 4,697,242 (Holland und Burks, 1987) beschrieben.
  • Bei einem anderen früheren Versuch wurden die Prinzipien genetischer Algorithmen aufs Programmieren angewendet, in dem LISP-Programme und Programmstücke als mögliche Genelemente beschrieben wurden und dann komplexere LISP-Programme aus diesen Elementen unter Verwendung der Regeln genetischer Algorithmen entwickelt wurden. Dies ist sowohl in J.R. Koza's Büchern über genetisches Programmieren als auch in seinen verschiedenen genetischen Programmierpatenten (US-Patent 4,935,877, 5,136,686 und 5,343,554) beschrieben. Diese Patente schlagen vor, daß Genketten eine variable Länge aufweisen können, und daß sie auf Computerausdrücke bezogen werden können, indem die Gene 1:1 auf Programmfragmente abgebildet werden. Somit erfordern die von Koza erzeugten Systeme das Abbilden von Genwerten, die in einem genetischen Algorithmus verwendet werden, auf LISP-Ausdrücke, um neue Programme zu erzeugen.
  • Kurzfassung der Erfindung
  • Die vorliegende Erfindung, wie sie in den anliegenden Ansprüchen 1 und 3 dargelegt ist, beschreibt ein Computersystem, das in der Lage ist, mit maßgeschneiderter Hardware oder als eine Software-Zustandsmaschine implementiert aufgebaut zu werden, und ein entsprechendes Verfahren, die genetisches Programmieren und Graphreduktionstechniken benutzen, um Programme zu erzeugen, die Computerberechnungsaufgaben lösen können. Dies wird unter Verwendung eines genetischen Programms erreicht, das nach und nach effizientere Programme schafft, die in Form von Graphreduktionsoperatorketten repräsentiert werden.
  • Diese Erfindung deckt den Gebrauch jeglicher Graphreduktionssysteme als das fundamentale Verfahren zur Programmrepräsentation ab. Ein Graphreduktionssystem ist eines, bei dem das Programm durch eine Reihe von Operatoren repräsentiert wird, die eine grafische (oder Listen-) Darstellung von Daten oder Programmteilen transformieren oder reduzieren. Dies beinhaltet Graphen, die als Ketten dargestellt werden, und Graphreduktionssysteme, die auf Kettenmanipulationen beruhen. Aufgrund ihrer Prägnanz, Universalität und Einfachheit wird hier ein Graphreduktionssystem auf der Grundlage von Kombinatoren vorgestellt.
  • Das Programm, das ausgewertet wird, wird durch eine einzige Genkette repräsentiert; kein Abbilden ist bei der vorliegenden Erfindung erforderlich. Die Auswertung jeder Programmkette wird durchgeführt, indem die Programm-Genkette auf Eingabedaten angewendet wird und die relative "Qualität" oder "Eignung" (Fitness) der sich ergebenden Ausgabe gemessen wird.
  • Die vorliegende Erfindung unterscheidet sich von vorangegangenen Versuchen, genetische Programmiermaschinen zu bauen, darin, daß die Programmgenketten selbst Programme sind. Vorangegangene Versuche haben die Genketten auf Programmfragmente abgebildet. Dieses Abbilden von Genketten nimmt Zeit in Anspruch, weil es kontinuierliche Datenübertragungen an und von verschiedenen Speicherplätzen während des Entwicklungsablaufs erfordert, um die Kandidatenprogramme zum Testen zusammenzusetzen. Durch den Gebrauch von Kombinatoren eliminiert die vorliegende Erfindung das Erfordernis, Genketten abzubilden sowie wiederholte Datenübertragungen, die mit solchen Abbildungen in Zusammenhang stehen. Somit ist das vorliegende genetische Programmiersystem schneller als andere genetische Programmiersysteme, die die Abbildung von Daten und Variablen verwenden.
  • Kurze Beschreibung der Zeichnungen
  • 1 ist eine grafische Darstellung der Funktionen, die von verschiedenen Kombinatoren durchgeführt werden;
  • 2 ist ein Blockdiagramm einer Kombinatormaschine, die verwendet wird, um Kombinatorketten gemäß der vorliegenden Erfindung zu laden und auszuwerten;
  • 3 ist ein Blockdiagramm eines genetischen Programmiersystems, das mehrere Kombinatormaschinen aufweist, die parallel angeordnet sind;
  • 4 ist ein Flugdiagramm, das den Evolutionsablauf darstellt, der von dem erfindungsgemäßen genetischen Programmiersystem gebraucht wird;
  • 5 ist ein Flußdiagramm, das das Verfahren darstellt, das verwendet wird, um die gewünschten Eingabedaten einzugeben;
  • 6 ist ein Flugdiagramm, das das Verfahren darstellt, das verwendet wird, um den Anfangspool von Genketten zu erzeugen;
  • 7 ist eine grafische Repräsentation eines Satzes von Eingabedaten, die in einer Baumstruktur gezeigt sind;
  • 8 ist ein Blockdiagramm eines Allzweckcomputers, der in der Lage ist, als ein genetisches Programmiersystem zu arbeiten.
  • Eingehende Beschreibung der Erfindung
  • In 2 bildet ein Hauptbus 30 einen Weg für den Fluß von Daten zwischen verschiedenen Speicherplätzen und dem sonstigen Systemkomponenten. Ein Steuerungsbus 32 verbindet die verschiedenen Kombinatormaschinenkomponenten miteinander und sorgt für den Fluß von Steuerungsanweisungen zwischen den Komponenten. Eine Kombinator-Auswertungseinheit/Steuerung (CEU/Steuerung) 34 ist elektrisch mit beiden Bussen 30 und 32 verbunden. Die CEU/Steuerung 34 wertet Kombinatorprogrammgenketten aus. Ein Mikrocode-Speicher 36 ist ein Festwertspeicher (ROM), der Beschreibungen zum Auswerten individueller Kombinatoren beinhaltet. Mikrocode-Speicher 36 stellt die erforderlichen Regeln und Anweisungen zum Auswerten verschiedener Bereiche der Kombinatorprogrammgenketten bereit.
  • Zusätzlich zum Auswerten von Kombinatoren ist die CEU/Steuerung 34 dazu in der Lage, verschiedene Elemente der in Auswertung befindlichen Genkette zu beschaffen. Die CEU/Steuerung 34 steuert auch einen I/O-Prozessor (IOP) 38 und eine arithmetische Logikeinheit (ALU 40), die beide elektrisch mit sowohl dem Hauptbus 30 als auch dem Steuerungsbus 32 verbunden sind. Der Steuerungsbus 32 wird von der CEU/Steuerung 34 dazu benutzt, den Betrieb des IOP 38 und der ALU 40 zu steuern. Der IOP 38 bildet eine Schnittstelle zwischen der Kombinatormaschine und sonstigen Bereichen des genetischen Programmiersystems. Die ALU 40 wird dazu verwendet, einfache arithmetische Ausdrücke wie etwa 2 + 3 und Tests wie etwa 3 = 4 auszuwerten.
  • Ein Hauptspeicher 42 und ein Stapelspeicher 44 sind beide mit dem Hauptbus 30 verbunden. Hauptspeicher 42 beinhaltet sowohl die Programmgenkette, die von der CEU/Steuerung 34 ausgewertet wird als auch die Eingabedaten, auf die das Programm angewendet wird. Der Stapelspeicher 44 speichert Zwischenzustände und Werte, die infolge der Auswertung der Programmgenkette erzeugt werden. Beispielsweise kann Stapelspeicher 44 einen Zeiger speichern, der erinnert, wo eine Auswertung angehalten wurde, während eine Unterauswertung abgeschlossen wurde.
  • Obwohl 2 eine Ausführungsform einer individuellen Kombinatormaschine darstellt, kann dieselbe Architektur auch als eine Softwarezustandsmaschine implementiert werden, die auf einer Hardware in einem herkömmlichen Computersystem läuft. Bei Verwendung einer Softwareimplementation führt die zentrale Verarbeitungseinheit (CPU) des Systems die Funktionen der ALU 40, die in 2 gezeigt ist, durch. Die CEU/Steuerung 34 und die ALU 40 werden durch separate Programme in einer Softwarebibliothek ersetzt, die nach Bedarf aufgerufen werden. Der Hauptspeicher 42 und der Stapelspeicher 44 werden als Speicherblöcke innerhalb des RAMs des Systems implementiert, und das I/O-Verarbeitungssystem des Systems ersetzt den IOP 38 für die Eingabe und die Ausgabe von Kombinatorausdrücken und Daten. Ein Auswertungsprogramm wird anstelle des Mikrocodes 36 verwendet, der nacheinander Elemente der besonderen Genkette abruft, die ausgewertet wird, und die geeignete Kombinatorbibliotheksunterroutine zum Implementieren der Auswertung aufruft.
  • Aufgrund der intrinsischen Parallel-Eigenschaft sowohl von Kombinatoren als auch genetischen Programmierens eignet sich die vorliegende Erfindung gut zum Gebrauch in parallel verarbeitenden Systemen. 3 zeigt ein Blockdiagramm eines genetischen Programmiersystems, das etliche Kombinatormaschinen verwendet, die parallel angeordnet sind. Mehrere Kombinatormaschinen 50 sind auf eine parallele Weise angeordnet. Jede Kombinatormaschine 50 kann entweder als Hardware (wie in 2 gezeigt) oder als Software, wie oben beschrieben, implementiert werden.
  • Eine beliebige Anzahl von Kombinatormaschinen 50 kann parallel angeordnet sein; die Anzahl von Kombinatormaschinen hängt von einer Reihe von Faktoren ab. Erstens können Kostenbegrenzungen die Anzahl von Kombinatormaschinen, die verwendet werden, begrenzen. Je größer die Anzahl verwendeter Kombinatormaschinen ist, desto gröber sind die Gesamtkosten des Systems.
  • Geschwindigkeitserfordernisse können ebenfalls die Anzahl von Kombinatormaschinen, die in einem bestimmten System verwendet werden, vorschreiben. Ein System, das eine schnelle Auswertung erfordert, benötigt eine größere Anzahl von Kombinatormaschinen, als ein System, das niedrigere Geschwindigkeitsanforderungen stellt. Zusätzlich wirkt sich die Komplexität des zu lösenden Problems auf die Anzahl von Kombinatormaschinen, die in einem bestimmten System erforderlich ist, aus. Vergleichsweise einfache Probleme werden im allgemeinen weniger Kombinatormaschinen benötigen als komplexe Probleme.
  • Schließlich variiert die Anzahl von Kombinatormaschinen, die in einem genetischen Programmiersystem verwendet werden, in Abhängigkeit der Anzahl von Genketten, die in einer bestimmten Generation ausgewertet werden. Ein System, das viele Genketten in jeder Generation auswerten muß, wird von einer größeren Anzahl von Kombinatormaschinen profitieren. Beispielsweise kann ein genetisches Programmiersystem, das 100 Genketten in jeder Generation auswertet, 100 Kombinatormaschinen aufweisen; das heißt eine Kombinatormaschine, um jede Genkette auszuwerten. In einem solchen System werden sämtliche 100 Genketten gleichzeitig ausgewertet, was zu einem insgesamt schnelleren Betrieb des Systems führt.
  • Wie in 3 gezeigt ist, wird jede Kombinatormaschine 50 an einen Daten-/Steuerungsbus 46 und an einen Programmgenkettenbus 48 angeschlossen. Eine genetische Programmiersteuerung (GP-Steuerung) 52 wird an den Daten-/Steuerungsbus 46 angeschlossen. GP-Steuerung 52 steuert den Gesamtbetrieb des genetischen Programmiersystems, in dem sie die Auswertungsarbeit unter den Kombinatormaschinen 50 verteilt, Ergebnisse von den Kombinatormaschinen abruft und die verschiedenen Genketten entwickelt.
  • 8 stellt ein Blockdiagramm eines Allzweckcomputers dar, der dazu in der Lage ist, mit der vorliegenden Erfindung verwendet zu werden. Ein Bus 10 verbindet die verschiedenen Systemkomponenten miteinander und stellt einen gemeinsamen Pfad für den Fluß von Daten, Anweisungen und dergleichen bereit. Eine Verarbeitungseinheit (CPU 12) ist an den Bus 10 angeschlossen und führt die eigentlichen Computerberechnungsschritte durch. Ein Schreib-Lese-Speicher 14 ist ebenfalls an den Bus 10 angeschlossen und bildet einen Platz zum Speichern von Daten und sonstiger Information. Eine Datenspeichervorrichtung 16 ist an den Bus 10 angeschlossen und bildet einen nichtflüchtigen Informationsspeicher. Datenspeichervorrichtung 16 können ein Diskettenlaufwerk, Bandlaufwerk oder sonstige Speichervorrichtungen sein.
  • Eine Eingabevorrichtung 18 ist an dem Bus 10 angeschlossen und ermöglicht einem Computerbenutzer eine Eingabe von Daten, Befehlen und sonstigen Informationen in das Computersystem. Eingabevorrichtung 18 kann eine Tastatur, ein optisches Abtastgerät, ein Mikrophon oder eine sonstige Vorrichtung sein, die dazu in der Lage ist, ein maschinenlesbares Signal für das Computersystem zu erzeugen. Die Eingabevorrichtung variiert in Abhängigkeit des besonderen Anwendungsfalls. Falls ein bestimmtes System zum Erkennen von Handschrift verwendet wird, muß die Eingabeeinrichtung dazu in der Lage sein, eine Handschrift einer Person zu lesen oder zu digitalisieren. In dieser Situation kann die Eingabevorrichtung ein optisches Abtastgerät, ein druckempfindliches Schreibbrett, ein Lichtgriffel mit einem Lichtleser oder eine sonstige ähnliche Vorrichtung sein.
  • In bestimmten Situationen werden mehrere Eingabevorrichtungen benötigt. Beispielsweise erfordert ein genetisches Programmiersystem, das in einem Spracherkennungssystem verwendet wird, sowohl ein Mikrophon oder eine ähnliche Vorrichtung, um ein bestimmtes Stimmmuster einzugeben, als auch eine Tastatur, um verschiedene Benutzer-definierte Parameter einzugeben.
  • In 8 ist eine Anzeigevorrichtung 20 über den Bus 10 an die sonstigen Systemkomponenten angeschlossen. Die Anzeigevorrichtung 20 ist ein Videomonitor, der dazu verwendet wird, Benutzer-definierte Parameter, Zustände von Programmbetrieb und Programmergebnisse anzuzeigen. Eine Ausgabevorrichtung 22 ist auch an dem Bus 10 angeschlossen und sorgt für eine permanente Kopie der Programmergebnisse. Vorzugsweise ist die Ausgabevorrichtung 22 ein Drucker.
  • Der Gesamtbetrieb des Entwicklungsablaufs, der von dem genetischen Programmiersystem verwendet wird, ist in 4 dargestellt. Wie in Schritt 58 gezeigt ist, müssen, bevor das genetische Programmiersystem damit beginnen kann, Genketten zu entwickeln, verschiedene Parameter und Daten dem System bereitgestellt werden.
  • In 5 gibt bei Schritt 86 ein Benutzer die Anzahl von Genketten ein, die in dem Genpool enthalten sein sollen. Als nächstes gibt der Benutzer bei Schritt 88 eine bevorzugte Länge oder einen Bereich von Längen für die Anfangsgenketten ein. Die Länge von Genketten bezieht sich auf die Anzahl von Genen, die in der Kette enthalten sind. Bei Schritt 90 gibt der Benutzer eine Frequenz von Mutationen der Genketten ein. Bei Schritt 91 gibt der Benutzer die Frequenz von Paarmutationen der Genketten ein. Die Information bezüglich der Paarungsrate von Genketten wird bei Schritt 92 eingegeben.
  • Alle diese Dateneingabeschritte 86 bis 92 können vom Benutzer des genetischen Programmiersystems wie oben beschrieben eingegeben werden. Sind sie einmal eingegeben, werden die Daten in einer Speichervorrichtung wie etwa dem GP-Speicher 54 gespeichert, der oben unter Bezugnahme auf die 3 beschrieben ist. Alternativ können jegliche Daten, die in den Schritten 86 bis 92 eingegeben sind, permanent in der Speichervorrichtung gespeichert werden und deshalb müssen sie nicht von dem Benutzer eingegeben werden. Bei einer anderen Alternative sind vorgegebene Parameterwerte vorgesehen. Falls der Benutzer keine Daten für einen bestimmten Schritt eingibt, werden die vorgegebenen Daten verwendet. Schließlich können die Daten, die in den Schritten 86 bis 92 eingegeben sind, zufällig von dem genetischen Programmiersystem innerhalb eines festgelegten Bereichs von Werten für einen gegebenen Parameter bestimmt werden. Beispielsweise kann die Mutationswahrscheinlichkeit zufällig zwischen den Werten 0,001 und 0,01 gewählt werden, die Länge von Anfangsgenketten kann zwischen 40 Zeichen und 100 gewählt werden, etc.
  • Wie in 5 gezeigt ist, gibt der Benutzer bei Schritt 94 die Eingabedaten ein, die auf jede Programmgenkette angewendet werden sollen. Wie oben erläutert wurde, werden die Eingabedaten in Abhängigkeit des zu lösenden Problems variieren. Diese Eingabedaten werden im Speicher zur Verwendung durch das genetische Programmiersystem gespeichert.
  • Bei Schritt 95 gibt der Benutzer sämtliche Werte ein, die als Konstanten zu verwenden sind. Wie unten erläutert, können bei der Repräsentation von Konstanten bei der Erzeugung von Genketten Konstanten einzelne Zeichenwerte sein, Ketten von Zeichen oder Zahlen. Diese Liste von Konstanten, die bei diesem Schritt eingegeben werden, wird beim Aufbau der Programmgenketten verwendet.
  • Bei Schritt 96 gibt der Benutzer eine Eignungsfunktion ein, die auch im Speicher gespeichert wird. Die Eignungsfunktion wird dazu verwendet, festzustellen, ob ein Ergebnis besser als ein anderes ist. Zusätzliche Einzelheiten bezüglich Auswahl und Anwendung von Eignungsfunktionen werden unten erläutert.
  • Bei Schritt 98 wird ein Satz von Beendigungskriterien von dem Benutzer eingegeben. Diese Beendigungskriterien werden dazu verwendet, festzustellen, wann eine Auswertung einer bestimmten Genkette beendet werden sollte. Zusätzliche Einzelheiten hinsichtlich einer Feststellung der Beendigungskriterien werden unten gegeben.
  • Wiederum in 4 wird bei Schritt 59 ein Anfangsgenpool erzeugt. Der Genpool besteht aus Programmgenketten, die unter Verwendung von Kombinatoren aufgebaut in sind. Dieser Schritt erfordert die zufällige Erzeugung von Ketten von Kombinatoren, Operatoren und Konstanten.
  • In 6 beinhaltet der erste Schritt beim Erzeugen eines Anfangsgenpools ein Abrufen der Parameter hinsichtlich der Größe des Anfangsgenpools, Schritt 100. Die Größe des Anfangsgenpools wird für gewöhnlich von dem Benutzer auf der Grundlage der Schätzung der Komplexität des Programms und dem Erfordernis von Vielfalt innerhalb des Pools von Kandidaten bestimmt, aber kann auch unter Verwendung eines vorgegebenen Wertes oder eines zufallsgenerierten Wertes bestimmt werden. Bei Schritt 102 bestimmt die Routine, ob der Genpool voll ist; das heißt ob die Anzahl von Genketten in dem Pool der Größe des Pools, die bei Schritt 100 festgelegt wurde, gleich ist. Anfänglich ist der Genpool leer und die Routine zweigt nach Schritt 104 ab, wo die Länge der nächsten Genkette bestimmt wird. Die Genkettenlänge kann zufällig bestimmt werden oder von dem Benutzer gewählt werden, wie oben beschrieben ist. Vorzugsweise wird ein Bereich von Längen verwendet, um eine breite Vielfalt von Kandidaten für den Anfangspool zu erzeugen. Beispielsweise kann die erste Kette 30 Elemente lang sein, die nächste 43, die nächste 22 und so weiter.
  • Bei Schritt 106 bestimmt die Routine, ob die Genkette genügend lang ist; das heißt ob die Genkettenlänge der Länge, die in Schritt 104 bestimmt wurde, gleich ist. Anfänglich hat die Erzeugung der Genkette nicht begonnen und die Routine zweigt nach Schritt 108 ab, wo ein Gen zufällig ausgewählt wird. Das ausgewählte Gen ist entweder ein Kombinator, eine Konstante oder ein Operator. Die Auswahl wird durch gewichtete Zufallswahl vorgenommen, wobei Kombinatoren preferiert werden.
  • Falls ein Kombinator bei Schritt 110 ausgewählt wird, wird der Kombinator dem Ende der Genkette bei Schritt 118 hinzugefügt. Falls der Kombinator das erste Gen in der Kette ist, formt er den Startpunkt zum Aufbau der Genkette.
  • Falls eine Konstante bei Schritt 112 ausgewählt wird, wird die Konstante dem Ende der Genkette bei Schritt 118 hinzugefügt. Wie bei dem obigen Kombinator bildet, falls die Konstante das erste Gen in der Kette ist, sie den Startpunkt zum Aufbau der Genkette.
  • Die Repräsentation von Konstanten in der Programmgenkette ist anwendungsspezifisch, jedoch muß sie generell einen Weg beinhalten, um klar zwischen Operatoren und Konstanten zu unterscheiden. Beispielsweise muß, falls der Konstantenwert des Buchstabens 'C' Teil der Konstanten ist, die in Genketten (z.B. zum Erkennen von Handschrift) beinhaltet ist, er sich von dem 'C'-Kombinator deutlich unterscheiden.
  • Es gibt viele Wege, dies zu tun. Die bevorzugte Implementierung verwendet die Konventionen einiger Programmiersprachen, bei denen Zeichenkonstanten als ein Zeichen mit einem einzigen Anführungszeichen-Zeichen darum herum definiert sind (beispielsweise 'C'), wobei der Kombinator ein "nacktes" C-Zeichen ist (beispielsweise C). Ähnlich werden Ketten von Zeichen, die Konstanten bilden, von Doppel-Anführungszeichen umgeben (beispielsweise "Fred"), während Zahlen nackte Zeichen in dem numerischen Bereich (0 bis 9) mit einem optionalen Dezimalpunkt und einem optionalen Vorzeichen-Zeichen (beispielsweise - 3.14159) sind. In dem Fall von Ketten sind diese eigentlich in den Programmgenketten als Unterbäume von Zeichenkonstanten (beispielsweise ('F' 'r' 'e' 'd')) beinhaltet, aber sie können in die Listen möglicher Konstanten in der Doppel-Anführungszeichen-Schreibweise ("Fred") eingegeben werden.
  • Als eine Alternative zum ausdrücklichen Beinhalten von Konstanten in der Programmgenkette kann der Benutzer einfach solche Werte eingeben, die als Teil der Daten, auf die die Programmgenketten angewendet werden, nützlich erscheinen. Beispielsweise kann ein Programm, das mathematische Werte berechnen soll, nützlicherweise solchen mathematischen Konstanten wie pi, e, usw. verwenden. Ein Programm, das chemische Substanzen analysieren soll, könnte chemische Konstanten usw. aufweisen. Indem solche Konstanten als ein Zweig der Daten, auf die die Programmgenkette angewendet wird, beinhaltet werden, besteht die Annahme, daß die Programmgenkette Operationen entwickeln kann, die diese Konstanten auswählen und nach Bedarf bei dem Versuch verwenden, ein nützliches Programm herzustellen. Mit diesem Ansatz ist es möglich, die Programmgenketten zu vereinfachen, so daß sie lediglich Kombinatoren und Operatoren beinhalten; die bevorzugte Ausführungsform ist jedoch die in 6 beschriebene, bei der Konstanten direkt in der Programmgenkette beinhaltet sind.
  • Nachdem bei Schritt 118 das Gen zu der Genkette hinzugefügt wurde, zweigt die Routine nach Schritt 106 ab, um zu bestimmen, ob die Kette genügend lang ist. Gene werden wiederholt zu der Genkette hinzugefügt, bis die gewünschte Länge erreicht wird. Wenn die Genkette abgeschlossen ist, zweigt das Programm nach Schritt 107 ab, wo die Klammern in den erzeugten Ausdrücken abgeglichen werden.
  • Dies ist erforderlich, weil Klammerpaare, die zusammen aufgefaßt werden, einen Operator bilden, der die Baumstruktur einer Genkette beschreibt. Beispielsweise weist die Genkette ( (2 3 + K) (4 7 *) 2 1 ) zwei Unterbäume auf , die aus den Ketten 2 3 + K und 4 7 * jeweils in separaten Zweigen des Baumes neben den zwei Zweigen bestehen, die lediglich die einzelnen Zahlen 2 und 1 aufweisen.
  • Wenn eine Genkette erzeugt wird, werden das öffnende Klammerzeichen ('(') und das schließende Klammerzeichen (')') als separate Wahlmöglichkeiten in der Liste möglicher Einträge in einer Genkette behandelt, und so muß am Ende des Schrittes 106 die erzeugte Kette untersucht werden und, falls es extra öffnende Klammern gibt, werden genügend schließende Klammern am Ende der Kette hinzugefügt, um die Anzahl öffnender und schließender Klammern in der Kette abzugleichen. Gleichermaßen wird, falls es mehr schließende Klammerzeichen gibt, öffnende Klammerzeichen am Anfang hinzugefügt. Während es andere Wege gibt, um dieses Abgleichen zu gewährleisten, wie etwa Hinzufügen sowohl eines öffnenden als eines schließenden Paares an zufälligen Orten in der Kette zur selben Zeit, wird dies als überlegenes Verfahren des Hinzufügens der notwendigen Struktur zu den Ausdrücken betrachtet.
  • Nach Schritt 107 kehrt das System an Schritt 102 zurück, um festzustellen, ob der Genpool voll ist. Falls das der Fall ist, ist nun die Erzeugung des Anfangsgenpools abgeschlossen. Anderenfalls wird eine andere Genkette erzeugt, wobei die oben beschriebenen Schritte befolgt werden.
  • In 4 wird nach Erzeugen des Anfangsgenpools mit Kombinatorketten die Anfangsgeneration unter Anwendung jedes Elements auf die Eingabedaten (Schritt 60) und unter Auswertung der Eignung (Schritt 62) durch Anwendung der Eignungsfunktion auf die bei Schritt 60 produzierten Ergebnisse ausgewertet.
  • In Schritt 60 wird die Anwendung der Eingabedaten unter Anwendung der Eingabedaten auf jede Genkette in dem Pool vorgenommen, um ein Ergebnis zu produzieren. Anfangs wird die erste Generation von Genketten vollständig aus zufällig erzeugten Genen zusammengesetzt sein. Bei späteren Generationen besteht der Pool aus den Genketten, die aus vorherigen Generationen entwickelt sind. Die benutzerzugeführten Eingabedaten werden auf jede Kette angewendet, um Kombinatorreduktionen bei den Daten durch eine oder mehrere Kombinatormaschinen zu ermöglichen. Die Kombinatorreduktion erzeugt einen Wert oder eine Menge von Werten.
  • In einem einfachen Beispiel wird, falls die Programmgenkette einen Kombinatorausdruck zum Quadrieren einer Zahl ist, und die Programmkette auf die Eingabe 5 angewendet wird, das Ergebnis 25 sein.
  • In diesem Schritt ist es erforderlich, daran zu denken, was passiert, wenn Operatoren auf verschiedene Arten von Daten angewendet werden. Beispielsweise muß eine Feststellung hinsichtlich der Frage getroffen werden, wie eine Kombinatorkette wie etwa 'A+3' von dem genetischen Programmiersystem ausgewertet werden soll. Vorzugsweise wird die Definition des '+'-Operators erweitert, um ein Ergebnis von 'D' (3 Buchstaben hinter 'A') zu schaffen. Unter Verwendung dieser Definition muß die Funktion von Operatoren über die Gesamtheit von Datentypen, die in dem System definiert sind, definiert sein. Deshalb sollte, falls ein Operator auf eine Liste mit vielen Elementen angewendet wird, die Operation einheitlich über die gesamte Liste angewendet werden. Beispielsweise würde '3+(1 2 3 )' den Ausdruck '(4 5 6)' ergeben (wobei 3 zu jeder Zahl in der Liste hinzugezählt wird).
  • Bei einer anderen Ausführungsform kann ein Ausdruck wie etwa 'A+3' als eine unzulässige Kombination behandelt werden und somit zurückgewiesen werden, wenn die Programmgenkette ausgewertet wird; aber die zuvor vorgeschlagene Erweiterung auf Operatoren wird für eine überlegene Lösung gehalten.
  • Zu jeder Zeit kann bei der Anwendung einer Genkette auf Eingabedaten ein Programmfehler auftreten. Zu einer solchen Zeit wird die Anwendung abgebrochen und dem Programm wird eine sehr niedrige Eignungsbewertung gegeben. Fehler können aus einer Reihe von Gründen auftreten, aber der häufigste besteht darin, daß eine unmögliche Operation versucht wird. Weil Genketten sich dauernd aufgrund der Kombination von Ketten verändern, besteht die Möglichkeit, daß unzulässige Ausdrücke wie etwa '+ * 3' auftreten. Diese Ausdrücke werden Fehler verursachen, wenn das Programm läuft, und solche Ausdrücke werden unter Zuweisung niedriger Eignungsbewertungen in Schritt 62 eliminiert, in dem die Programmketteneignung bewertet wird.
  • Nach Anwenden der Eingabedaten auf die Genketten fährt das System bei Schritt 62 fort, in dem die erhaltenen Ergebnisse mit der gewünschten Ausgabe unter Verwendung der Eignungsfunktion verglichen werden. Auf der Grundlage der Auswertung der Genketten wird jeder Genkette ein Eignungswert zugewiesen. Der Eignungswert repräsentiert die Ähnlichkeit zwischen der Ausgabe, die von der Genkette erhalten wurde, und dem gewünschten Ergebnis. Vorzugsweise wird der Eignungswert als ein numerischer Wert repräsentiert. Die Eignungsfunktion bildet ein objektives Maß dafür, "wie gut" das Programm ist, wenn es auf die Eingabedaten angewendet wird. Dieser Eignungsvergleich wird auf alle Programmgenketten einer Generation angewendet und ermöglicht, sämtliche Genketten bezüglich einander in eine Reihenfolge zu bringen. Programmgenketten, die höhere Eignungswerte haben, wenn sie mittels der Eignungsfunktion ausgewertet werden, werden höher eingeordnet, als mit schlechteren Werten. Anfangs werden die meisten zufällig erzeugten Genketten einen schlechten Eignungswert aufweisen, was sich aus der Zufallsnatur des Anfangsauswahlablaufs ergibt. Während jedoch aufeinanderfolgende Generationen erzeugt werden, entwickelt der Mechanismus der Evolution Genketten, die zunehmend höhere Eignungswerte aufweisen.
  • Eignungsfunktionen sind problemspezifisch und müssen von dem Benutzer angegeben werden, weil das System nicht wissen kann, was für ein bestimmtes Problem ein gutes Ergebnis ist. Beispielsweise können Eingabedaten für ein Handschrifterkennungssystem ein digitalisiertes handgeschriebenes Muster sein, auf das die Genketten angewendet werden. Die gewünschte Ausgabe ist die tatsächliche Kette von Zeichen, die in dem Handschriftsmuster enthalten sind. Jeder Kombinatorausdruck wird auf die Eingabedaten angewendet, um zu erzeugen und auszugeben, was mit der erwarteten Kette von Zeichen verglichen wird. In diesem Beispiel kann der Eignungswert anhand der Anzahl richtig identifizierter Zeichen, die an der richtigen Stelle angeordnet sind, bestimmt werden. In Abhängigkeit der Erfordernisse und Vorzüge des Benutzers kann eine richtige Reihenfolge der Buchstaben wichtiger sein als jedes Zeichen zu identifizieren. Andererseits könnte ein anderer Benutzer desselben Systems eine gröbere Betonung auf eine richtige Identifikation jedes Zeichens legen als daß jedes identifizierte Zeichen richtig eingeordnet wird.
  • Anfangs werden die Ergebnisse schlecht sein und können einige Ausgaben ohne jegliche richtige Zeichen enthalten, lediglich Neuanordnungen von Punkten. Die Genketten, deren Auswertungen Zeichen oder Ketten von Zeichen hervorbringen, werden höhere Eignungswerte haben als solche, deren Auswertungen weniger Zeichen identifiziert haben. Je näher eine Ausgabe des Programms einer Übereinstimmung der erwarteten Kette von Zeichen kommt, desto besser ist der Eignungswert des Programms.
  • Bei Schritt 64 bestimmt das System, ob die Evolution beendet werden soll. Mit anderen Worten muß es ein Kriterium zum Bestimmen geben, wenn eine oder mehrere der entwickelten Genketten "gut genug" ist, um den Zielen des Benutzers zu genügen. Dieses Beendigungskriterium ist problemabhängig und muß von dem Benutzer angegeben werden. Eine Eignungsfunktion wird als ein Maß zum Bestimmen der relativen Überlegenheit einer Lösung im Vergleich mit einer zweiten Lösung verwendet. Übliche Beendigungskriterien können erfordern, daß irgendein Schwellenwert erreicht wird, wenn die Eignungsfunktion angewendet wird. Ein anderes mögliches Beendigungskriterium kann der Umstand sein, daß die Eignung der Programmgenkette sich während der letzten 'n' Generationen nicht erkennbar verbessert hat. Alternativ kann das Beendigungskriterium beide diese Maßnahmen umfassen, so daß die Evolution beendet wird, wenn einem der Kriterien genügt wird.
  • Falls dem Beendigungskriterium genügt wird, wird das Programm beendet und die besten erzeugten Programmgenketten werden dem Benutzer des Systems als die besten Programmierungslösungen für das bestimmte Problem angegeben. Die Beendigungsfunktion wird in das System in Schritt 96 von 5 wie oben erläutert eingegeben.
  • In 4 schreitet, falls das Beendigungskriterium nicht erreicht wird, das System nach Schritt 66 fort, wo eine Operation ausgewählt wird, um zum Aufbau der nächsten Generation von Programmgenketten verwendet zu werden. Entweder wird Paaren (Schritt 68) oder Wiederholen (Schritt 70) gewählt, teilweise aufgrund der Paarungsrate, die als ein Systemparameter wie in Schritt 92 in 5 beschrieben eingegeben ist.
  • Wenn eine Operation einmal ausgewählt ist, wird sie auf die gegenwärtige Generation angewendet. Die Paarungsoperation (Schritt 68) beinhaltet ein Kombinieren zweier Programmgenketten, um zwei neue und verschiedene Genketten in der nächsten Generation zu erzeugen. Die Wiederholungsoperation (70) beinhaltet ein Wählen einer Programmgenkette aus der gegenwärtigen Generation und ein Kopieren derselben in die nächste Generation.
  • Für beide diese Operationen müssen Kandidaten aus der gegenwärtigen Generation gewählt werden. Im Falle des Paarens müssen zwei Kandidaten ausgewählt werden (Schritt 72). Im Falle des Wiederholens muß ein einziger Kandidat ausgewählt werden (Schritt 74). Das bevorzugte Verfahren zum Wählen von Kandidaten besteht in der Verwendung der Eignungsrangfolge, um die Auswahl von Kandidaten aus der gegenwärtigen Generation zu gewichten. Um dies zu tun, werden die Gesamtheit sämtlicher Eignungsbewertungen der gegenwärtigen Generation summiert. Die Wahrscheinlichkeit irgendeines Kandidaten, ausgewählt zu werden, ist dann das Verhältnis einer Eignung im Vergleich mit der Gesamteignung sämtlicher Kandidaten.
  • Beispielsweise hat, falls die Gesamteignung sämtlicher Genketten 250 war, und der Eignungswert der Genkette 'A' 25 war, diese dann eine Chance von 25/250 = 10 % gewählt zu werden. Ähnlich hat, falls die Genkette 'B' einen Eignungswert von 12.5 aufweist, diese dann 1/2 der Chance von 'A' (5 %) gewählt zu werden. Es gibt viele andere Strategien zur Auswahl überlegener Genketten, aber dieses Verfahren wird hier als ein Beispiel verwendet.
  • Beim Paaren wird die Genkette an einer oder mehreren Stellen, die Kreuzungspunkte genannt werden, getrennt und mit Stücken anderer erfolgreicher Genketten kombiniert, die auf ähnliche Weise an einer oder mehreren Stellen getrennt wurden. Die einfachste und mächtigste Weise, um zwei Genketten zu paaren, besteht darin, einen beliebigen Punkt in jeder Genkette herauszugreifen, jede Kette in zwei Teile zu zerbrechen und dann jeden Teil der ersten Kette mit einem entsprechenden Teil der zweiten Kette zu kombinieren.
  • Wie in 4 gezeigt ist, wird, nachdem zwei Partner bei Schritt 72 gewählt sind, ein Kreuzungspunkt für jede Genkette bei Schritt 76 bestimmt. Bei Fortsetzung an Schritt 78 werden die Stücke von zwei oder mehr Genketten aufeinander angewendet, wodurch neue Programmgenketten erzeugt werden.
  • In Schritt 79 wird jede neu erzeugte Kette überprüft, um sicherzustellen, daß die Anzahl öffnender Klammern in den Ketten mit einer gleichen Anzahl von schließenden Klammern übereinstimmt. Dies ist ähnlich dem Abgleichen von Klammern, das in Schritt 107 in 6 durchgeführt wird, indem die Anfangsgenketten erzeugt werden.
  • Beispielsweise wird, falls die Genkette S(S(B+)1C)KI mit B(C(KS)I*)7K1 gepaart wird, durch zufällige Wahl entschieden, die erste Genkette nach dem 'B'-Kombinator aufzubrechen und die zweite Genkette nach dem 'I'-Kombinator aufzubrechen, und dann die Stücke zu paaren, um die Ketten: S(S(B*)7K1 sowie +)1C)KIB(C(KS)I zu erzeugen. Man beachte, daß die erste Genkette, die aus dieser Paarung hervorgeht: S(S(B*)7K1 mehr öffnende Klammern als schließende Klammern hat. Dies bringt einen unfertigen Baum zum Ausdruck, und so wird eine schließende Klammer hinzugefügt, um einen fertigen Ausdruck S(S(B*)7K1) zu erzeugen. Im Falle der zweiten Genkette: +)1C)KIB(C(KS)I gibt es zwei schließende Klammern, die vor jeglicher öffnenden Klammer auftreten. Diese werden durch Hinzufügen zweier Klammern am Beginn des Ausdrucks abgeglichen, so daß dieser ((+)1C)KIB(C(KS) wird. Verfolgt man die Untersuchung dieser Kette weiter, so gibt es nun eine extra öffnende Klammer, die abgeglichen wird, indem eine schließende Klammer am Ende des Ausdrucks hinzugefügt wird. Somit wird die Kette: ((+)1C)KIB(C(KS)).
  • In diesem Beispiel besteht das Ergebnis des Paarens darin, zwei Genketten zu erzeugen, deren Längen sich von jenen ihrer Eltern unterscheiden. Dies ist sowohl üblich als auch erforderlich, weil es ermöglicht, die Länge der Programmgenketten, die durch Paarung erzeugt werden, in aufeinanderfolgenden Generationen zu ändern, und somit eine zusätzliche Komplexität von Genketten oder Vereinfachung von Genketten ermöglicht.
  • Verschiedene Strategien zum Paaren von Genketten sind verfügbar, und das oben beschriebene Verfahren ist ein üblicherweise verwendetes Verfahren. Das hier beschriebene genetische Programmierungssystem ist jedoch dazu entworfen, Benutzern die Möglichkeit zu geben, Schlüsselelemente des genetischen Programms zu "übergehen" oder zu ersetzen, wie etwa die Paarungs- oder Auswahlfunktionen, weil besondere Aufgaben einen anderen Ansatz erfordern können. Ferner schafft die Möglichkeit des "Übergehens" des Systems ein größeres Maß der Steuerung für Benutzer, die solch eine Möglichkeit wünschen, um jedes Programm "maßzuschneidern".
  • Bei Schritt 70 wird eine Genkette in der gegenwärtigen Generation in der nächsten Generation wiederholt. Genkettenwiederholung ist einfach das Kopieren einer Genkette in die nächste Generation. Dies ist ähnlich dem Überleben eines Individuums in der nächsten Generation in der natürlichen Welt. Die Genkette wird nicht geändert, sondern lediglich in den Genpool kopiert, der für die nächste Generation zur Verfügung steht. Genketten, die in der nächsten Generation wiederholt werden, sind im allgemeinen solche Ketten von der vorherigen Generation, die die höchsten Eignungsniveaus haben.
  • Bei Schritt 74 wird die eigentliche Wahl von Individuen zur Wiederholung getroffen. Diese Wahl wird durch gewichtete Zufallswahl wie in Schritt 72 oben angelegentlich der Wahl von Paarungspartnern beschrieben vorgenommen.
  • Wenn Zeichen in den Schritten 68 oder 70 gepaart bzw. wiederholt werden, werden sämtliche Ketten, die Kandidaten für die nächste Generation sind, den Permutation- und Mutationsoperationen, die in Schritten 80 bis 82 gezeigt sind, unterworfen.
  • Die Permutationsoperation, Schritt 80, wird durchgeführt, indem die Permutationsfrequenz, wie sie in Schritt 91 von 5 eingegeben ist, genommen und zufällig geprüft wird, ob irgendeine Kette permutiert wurde. Falls dies der Fall ist, wird die Reihenfolge von Kandidatengenen "durcheinandergewürfelt". Beispielsweise wird, falls die Kette S(SB(CK)SI)*7K, die wiederholt wird, zufällig auf Permutation überprüft. Falls eine Zufallsprüfung zeigt, daß die Kette in der nächsten Generation permutiert ist, kann die sich ergebende Kette S(BC7(CK)*I)SK oder irgendeine andere mögliche Neuordnung der Genkette sein. Permutation schafft einen effizienten Weg zur Transformation einer Genkette, die nahe einer richtigen Lösung ist, ohne sich auf andere Gene verlassen zu müssen, die eine Paarung schaffen, die eine solche Neuanordnung erzeugen. Somit können Programmgenketten, die einen relativ hohen Eignungswert aufweisen, einen noch höheren Eignungswert erreichen, falls die Gene lediglich in verschiedener Reihenfolge neu angeordnet werden.
  • Das bevorzugte Verfahren der Implementierung prüft jedes Gen in der Kette auf mögliche Permutation auf der Grundlage der Permutationsfrequenz. Falls zufällig entschieden wird, das Gen zu permutieren, wird ein anderes Gen zufällig gewählt und die Stelle des Gens innerhalb der Programmgenkette wird vertauscht. Beispielsweise wird, falls die Programmgenkette S(K*+3)C(4 –)5 ist und durch sequentielle Überprüfung herausgefunden wird, daß, während die ersten zwei Gene ('S' bzw. '(') nicht permutiert sind (auf der Grundlage der Zufallsprüfung gegen die Permutationsfrequenz), aber daß das dritte Gen ('K') permutiert ist, durch Zufallsauswahl ein anderes Gen (beispielsweise 'C') gewählt und die beiden werden vertauscht, wodurch die neue Programmgenkette S(C*+3)K(4 – )5 hergestellt wird. Die restlichen Gene würden dann auch geprüft, bevor die Permutationsoperation abgeschlossen wird.
  • Weil Permutation ein Verwürfeln der Klammern in dem Ausdruck verursachen kann, mit nicht-abgeglichenen Folgen von öffnenden und schließenden (beispielsweise kann sie verursachen, daß die Kette mit einer schließenden Klammer beginnt), muß der Klammerausgleichsablauf, der in Schritt 79 beschrieben ist, als Teil der Permutationsoperation wiederholt werden.
  • Der letzte Operator ist der Mutationsoperator, Schritt 82. Eine Mutation findet statt, wenn ein Gen sich spontan in einen anderen Wert transformiert. Die Möglichkeit zur Mutation basiert auf der Mutationsfrequenz wie in Schritt 90 von 5 gezeigt. Diese Frequenz wird verwendet, um die Möglichkeit irgendeines gegebenen Gens zu bestimmen, seinen Wert zu verändern. Beispielsweise wird, falls die Genkette S(S(B+)1C)KI eine Mutation in dem C-Kombinator aufweist, ein neues Gen auf eine Weise gewählt, die beim Erzeugen der anfänglichen Population verwendet wird. Das neue Gen ersetzt den C-Kombinator und kann zu einer neuen Kette S(S(B+)1K)KI führen. Mutationen führen zu Genketten, die deutlich verschieden sind, und können radikal neue Genketten schaffen, die das Potential zum Herstellen eines vollständig anderen Ansatz zur Lösung eines Problems aufweisen. Somit ist bei Mutation die Wahrscheinlichkeit höher, ein innovatives Ergebnis herzustellen.
  • Als Teil der Mutationsoperation muß, falls ein Klammerzeichen mutiert wird, die Klammerabgleichoperation, die in Schritt 79 zum Paaren beschrieben wurde, auf die neue Genkette angewendet werden.
  • Wenn neue Kandidaten auf mögliche Permutationen und Mutationen überprüft sind, werden sie der nächsten Generation hinzugefügt. In Schritt 84 wird die neue Generation auf Vollständigkeit überprüft und falls sie gefüllt ist, kehrt das System nach Schritt 60 zurück und beginnt den Zyklus erneut. Falls sie nicht gefüllt ist, kehrt das System nach Schritt 66 zurück und beginnt den Ablauf des Paarens oder Wiederholens, um das Füllen der Generation fortzusetzen.
  • Ein zu berücksichtigender Punkt ist der Umstand, daß zufällig erzeugte Programme nicht mit Sicherheit enden. Dies ist in der Literatur der Computerwissenschaften als Halteproblem bekannt und man hat bewiesen, daß ein Programmierungssystem nicht vorhersagen kann, ob ein Programm jemals enden wird oder nicht.
  • Dies schafft ein Problem insoweit, als ein Auswerten einer bestimmten Kombinatorgenkette eine endlose Auswertung von Eingabedaten produzieren kann, ohne jemals eine Ausgabe zu produzieren. Eine Lösung dieses endlosen Auswerteproblems beinhaltet eine zeitliche Abstimmung der Auswertung und ein Beenden jeder Auswertung, die nicht innerhalb einer vorgegebenen Zeitdauer ein Ergebnis produziert. Eine Genkette, die nicht innerhalb der bestimmten Zeitdauer ausgewertet werden kann, wird entweder nicht in den Kandidatengenpool für die nächste Generation aufgenommen, oder ihr wird eine sehr niedrige Eignungsbewertung gegeben.
  • Ein anderer Ansatz zu diesem Problem besteht in einem parallel verarbeitenden System wie jenem, das in 3 gezeigt ist. In diesem Fall wertet ein separater Prozessor (oder Prozeß, falls das System als eine Softwarezustandsmaschine implementiert wird) jede einzelne Programmgenkette in dem Genpool aus. Wenn Genketten ihre Auswertung abschließen, werden sie Kandidaten für die Wiederholungs- und Paarungsoperationen, die in Schritten 68 und 70 beschrieben sind. Anfänglich wird es nur wenige Kandidaten geben, aber schließlich wächst die Größe des Genpools. Programmgenketten mit niedrigen Eignungswerten werden für "unattraktiv" gegenüber geeigneteren Genketten gehalten. Die geeignetern Genketten werden sich einem Versuch der Paarung mit Genketten geringer Geeignetheit in einem Versuch widersetzen, auf attraktivere Genketten zu warten, die später in den Genpool eintreten werden. falls jedoch nach einer bestimmten Zeitdauer keine Genkette aufgetaucht ist, die genauso geeignet oder geeigneter ist, kann die hochgradig geeignete Genkette sich mit einer weniger geeigneten Genkette paaren.
  • Diese Lösung vermeidet das Halteproblem, indem nicht darauf gewartet wird, daß sämtliche Genketten in dem Kandidatenpool auftauchen. Im wesentlichen ist, falls eine Genkette eine lange Zeit braucht, um in den Kandidatenpool einzutreten, es zum Paaren nicht verfügbar und somit wird es, wenn es nicht außergewöhnlich geeignet ist, in der nächsten Generation sich nicht fortsetzen. Diese Genketten, die nie auftauchen, paaren sich nie. Dies ist einer "natürlichen Auslese" ähnlich, bei der die Verfügbarkeit zum Paaren im wesentlichen ein zusätzliches Maß der Eignung bildet.
  • In einem solchen System muß eine zusätzliche Überprüfung hinzugefügt werden, um Situationen zu vermeiden, bei denen zu viele der Prozessoren mit einer Auswertung endloser Probleme befaßt sind. Als die meisten oder alle der Kombinatormaschinen endlose Genketten auswerten, wird das genetische Programmiersystem ineffizient und kann das Problem nie lösen. Diese Situation kann vermieden werden, indem eine Zeitgrenze auf die Auswertung jeglicher Genkette gesetzt wird. Falls eine Kombinatormaschine eine bestimmte Genkette nicht innerhalb einer vorgegebenen Zeitdauer auswerten kann, wird die Auswertung gestoppt und eine neue Genkette wird dem Prozessor zugewiesen. Beispielsweise kann eine Zeitgrenze von fünf Sekunden verwendet werden, um irgendeine gegebene Programmgenkette auszuwerten. Falls die Auswertung innerhalb von fünf Sekunden nicht abgeschlossen ist, wird die Auswertung beendet und die Genkette, die ausgewertet wird, wird verworfen. Somit werden Genketten, die nicht innerhalb von fünf Sekunden ausgewertet werden, nicht bis in die nächste Generation überleben. Die Zeitgrenze, die auf eine Auswertung gesetzt wird, kann in Abhängigkeit der Komplexität der in Auswertung befindlichen Genketten variieren.
  • Ein ähnliches, aber weniger komplexes Problem entsteht, wenn eine Programmgenkette sich nicht vollständig auflöst. Das heißt, das Ergebnis enthält nach vollständiger Auswertung noch Kombinatoren und Operatoren. Beispielsweise würde die Programmgenkette * S * I, wenn sie auf das Eingabedatum 3 angewendet würde, den Ausdruck * *3 3 hervorbringen, der sich zu dem Ausdruck * 9 auflösen ließe. Unter der Annahme, daß keine monadische Definition für den *-Operator definiert ist, ist der Ausdruck insofern unvollständig, als ihm ein zweites Element für die *-Operation fehlt.
  • Der einfachste Weg, um mit diesem Problem fertig zu werden, besteht einfach darin, solchen Ausdrücken niedrige Eignungswerte zuzuweisen. Die bevorzugte Implementierung besteht jedoch darin, diesen Ausdruck auf die Eingabedaten erneut anzuwenden. In dem obenstehenden Beispiel würde der Ausdruck * 9 auf die Eingabe 3 angewendet, um den Ausdruck * 9 3 zu ergeben, was zu dem Ergebnis 27 führen würde.
  • Wie schon beschrieben, stellt 2 eine Kombinatormaschine zum Auswerten von Programmgenketten dar, die Kombinatoren beinhalten. Die Kombinatormaschine beinhaltet einen Hauptspeicher 42, der dazu entworfen ist, Elemente in einem Baumformat zu speichern, und Kombinatoren, die als Maschinenprimitiva implementiert sind. Solche speziellen Maschinen. sind effizient und können als ein einzelner, maßgeschneiderter integrierter Schaltkreis implementiert werden, wie etwa ein ASIC, und können parallel mit anderen Kombinatormaschinen laufen.
  • Alternativ kann eine Kombinatormaschine als Software implementiert werden, indem Kombinatoren als Stapelmanipulationen implementiert werden. Bei dieser Version, wird der Baum, auf den die Kombinatoren einwirken, auf einem Kellerstapelmechanismus, der auf den meisten gegenwärtig am Markt erhältlichen Computern verfügbar ist, aufgebaut. Auswertungsbäume werden als eine Serie von Zeigern auf den Maschinenstapel gebaut und die Kombinatoren ändern die Bäume durch Neuanordnung der Reihenfolge der Elemente in dem Stapel je nach Bedarf. Das funktioniert gut, weil die meisten gegenwärtigen Prozessoren effiziente Stapelmanipulationsoperatoren aufweisen, aber weniger effiziente Operatoren zur Manipulation von Baumstrukturen haben.
  • Zusätzlich zum Repräsentieren der Genketten durch Kombinatoren können die genetischen Algorithmusoperatoren auch in Kombinatorform ausgedrückt werden, weil Kombinatoren eine universelle Maschine bereitstellen. Deshalb besteht, falls eine spezialisierte Kombinatormaschine erzeugt wird, kein Bedarf, eine Maschine zu haben, die alles außer Kombinatorausdrücken erkennt.
  • Wie oben beschrieben stellt 3 ein genetisches Programmiersystem mit mehreren Kombinatormaschinen dar, die parallel angeordnet sind. Aufgrund des Erfordernisses, mehrere Genketten in dem Genpool zu haben, die kontinuierlich in jeder Generation ausgewertet werden müssen, gibt es einen natürlichen und wirksamen Weg zum Erzeugen eines parallelverarbeitenden Systems. Wie in 3 gezeigt ist, ist jede Kombinatormaschine dazu in der Lage, eine Kombinatorgenkette auszuwerten, wenn eine Menge von Eingabedaten gegeben ist. Diese Kombinatormaschinen werden verwendet, um jede der Genketten in dem Genpool auszuwerten. Somit werden, eher als eine aufeinanderfolgende Auswertung jeder Programmgenkette in dem Genpool, sämtliche Genketten gleichzeitig ausgewertet, wodurch Effizienz und Geschwindigkeit verbessert werden.
  • Die GP-Steuerung 52 steuert das gesamte genetische Programmiersystem und verwendet Daten/Steuerungsbus 46 zum Führen der Kombinatormaschinen 50. Die GP-Steuerung 52 verwendet die Eingabekriterien, Daten und Parameter, die in dem GP-Speicher 54 gespeichert sind, der als Teil des Programmierens des Systems geladen wird. Der GP-Speicher 54 speichert Informationen wie etwa Kettenlänge, Mutations- und Paarungsraten sowie Eingabedaten, Eignungsfunktion und Beendigungskriterien, die dazu verwendet werden, die Wirksamkeit der Programmgenketten auszuwerten, die entwickelt werden.
  • Die Kombinatormaschinen 50 können beliebige Genketten auswerten, wenn sie Eingabedaten erhalten. Zusätzlich können die Kombinatormaschinen Anweisungen speichern, um die erforderlichen Operationen, die in dem genetischen Algorithmus verwendet werden, zu implementieren.
  • Anfangs trägt die GP-Steuerung 52 jeder Kombinatormaschine 50 die Erzeugung einer Zufallsgenkette aus einer Menge von Kombinatoren, Konstanten und Operatoren auf. Die GP-Steuerung 52 steuert Paarung, Permutation und andere genetische Funktionen durch Analyse der Ergebnisse einer Generation, wie sie entlang des Daten-Steuerungsbusses 46 kommuniziert wird, und durch Ausgeben geeigneter Anweisungen an jede Kombinatormaschine hinsichtlich der Funktion, die sie als nächstes bezüglich jeder Programmgenkette durchführen sollte.
  • Auf der Grundlage dieser Anweisungen wird ein Teil oder alles einer Genkette zwischen Kombinatormaschinen weitergegeben, in Abhängigkeit davon, ob sie reproduziert oder mit einer Genkette in einer anderen Kombinatormaschine gepaart werden soll. Diese Genketten oder Genkettenfragmente laufen entlang dem Programmgenkettenbus 48.
  • Der parallele Entwurf, der in 3 dargestellt ist, beschleunigt den Ablauf der Evolution in Richtung auf eine überlegene Lösung erheblich, weil sämtliche Programmgenketten gleichzeitig ausgewertet werden können, anders als beim Durchführen einer aufeinanderfolgenden Auswertung jeder einzelnen Genkette. Die Kombinatormaschinen 50 sind nicht teuer und relativ einfach zu bauen. Deshalb können große Massiv parallele Berechnungssysteme aufgebaut werden, die hunderte oder tausende von Kombinatormaschinen verwenden.
  • Für lange Programmgenketten oder für Probleme, bei denen ungenutzte Kombinatormaschinen vorhanden sind; das heißt es gibt weniger Kandidaten in der Genmenge als Kombinatormaschinen verfügbar sind, kann die Auswertung einer einzelnen Genkette in Stücke aufgebrochen werden und mehrere Kombinatormaschinen können dazu verwendet werden, jedenGenkettenabschnitt auszuwerten. Dies ist möglich, weil sämtliche Kombinatoren auf eine von der Reihenfolge unabhängige Weise ausgewertet werden können und dasselbe Ergebnis erhalten, wenn sämtliche der Kombinatorstücke wiedervereinigt werden. Mit anderen Worten kann eine einzelne Genkette in Unterketten A, B und C aufgebrochen werden, die jede unabhängig von den anderen ausgewertet wird. Wenn die sich ergebenden Ketten rekombiniert werden, wird das abschließende Ergebnis dasselbe sein, wie wenn die Kette in einem einzigen Ablauf ausgewertet worden wäre.
  • Beispiel des reisenden Handelsvertreters
  • Ein Beispiel der vorliegenden Erfindung wird unter Anwendung derselben auf das weithin bekannte Problem des reisenden Handelsvertreters dargestellt. Dies ist ein Optimierungsproblem, dessen Ziel darin besteht, die kürzeste Route für einen Handelsvertreter zu finden, der sämtliche seiner oder ihrer Verkaufsstellen bereisen muß. Eine Tabelle mit Entfernungen zwischen Verkaufsstellen wird als Eingabedaten zur Verfügung gestellt und die gewünschte Route ist die, die die kürzeste Distanz bildet, während jeder Ort wenigstens einmal bereist wird.
  • Es ist kein Algorithmus oder Computerprogramm bekannt, das die kürzeste Route mit Sicherheit bereitstellt. Aufgrund der großen Anzahl von Wahlmöglichkeiten (n-1 Fakultät, wobei n die Anzahl von Städten in dem Problem ist) ist der einfache Ansatz, sämtliche mögliche Routen durchzurechnen, sehr ineffizient. Beispielsweise gibt es in einer Situation, in der 15 verschiedene Städte besucht werden müssen, beinahe 90 Milliarden mögliche Routen zwischen sämtlichen Städten.
  • Die vorliegende Erfindung kann eine Programmlösung finden, die unter der Voraussetzung einer Tabelle mit Entfernungen zwischen den Städten eine der besseren Routen hervorbringen wird. Zuerst erzeugt der Benutzer eine Baumstruktur, die die Eingabedaten beinhaltet; das heißt die Entfernungen zwischen sämtlichen Städten, die besucht werden müssen. Als nächstes gibt der Benutzer die Eignungsfunktion und die Beendigungsfunktion für das Problem ein.
  • Es gibt zwei Wege, um sich dem Problem zu nähern. Der erste Ansatz ist das, was man als die "schwache" Form genetischen Programmierens bezeichnen könnte, was bekannte Verfahren oder bekannte Lösungen benutzt, die als Programmgenketten geschrieben sind. Diese bekannten Programme werden verwendet, um den Anfangsgenkettenpool zu bevölkern. Dies ist ein Fall, in dem mit guten Anfangsgenketten in einem Versuch begonnen wird, eine noch bessere Lösung zu finden. Dieser Ansatz wird als die "schwache" Form genetischen Programmierens bezeichnet, weil die Wahrscheinlichkeit geringer ist, daß er ein innovatives Ergebnis hervorbringt, weil sämtliche der Anfangsgenketten bekannte Lösungen repräsentieren. Weil die bekannten Lösungen schon relativ zufriedenstellende Ergebnisse hervorbringen, ist die Wahrscheinlichkeit geringer, daß das genetische Programmiersystem ein innovatives Ergebnis hervorbringt, das sich erheblich von "allgemein Bekanntem" unterscheidet.
  • Für dieses Beispiel des reisenden Handelsvertreters wird jedoch eine "starke" Form genetischen Programmierens verwendet werden. Diese "starke" Form beinhaltet ein Bevölkern des Anfangsgenkettenpools mit zufällig erzeugten Programmgenketten, die entsprechend ihrer Eignung ausgewertet werden und wie vorstehend beschrieben ausgewählt werden. Wenngleich diese "starke" Form genetischen Programmierens anfänglich unterlegene Ergebnisse hervorbringt und länger braucht, um gute Programmgenzeicheketten zu finden, bietet es die Möglichkeit des Erzeugens einer radikal neuen und potentiell überlegenen Programmierlösung. Im wesentlichen enthalten die anfänglichen Programmgenketten keinerlei "Voreingenommenheiten" hinsichtlich dessen, was der Benutzer für eine gute Lösung des Problems hält. Statt dessen wertet das genetische Programmiersystem sämtliche möglichen Lösungen des Problems aus, anstatt sich auf eine vorgegebene Untermenge von Lösungen zu beschränken.
  • Um mit dem Lösen des Problems des reisenden Handelsvertreters zu beginnen, wird eine Baumstruktur (oder, mathematisch, ein Graph) erzeugt, der die Eingabe der Entfernungstabelle enthält. Weil die Kombinatorprogramme auf Graphen operieren, müssen die Eingabedaten durch einen Graphen repräsentiert werden. Solch eine Struktur ist in 7 gezeigt. Diese Figur stellt einen Baum dar, bei dem jeder Zweig ein Unterbaum ist, der die Entfernungen zwischen der Stadt, die durch den Zweig repräsentiert wird, und den anderen Städten in dem Baum beschreibt. Die Textkette, die unten in 7 gezeigt ist, ist eine Kettenrepräsentation desselben Graphen. Sie ist einfach eine kompaktere Art, um dieselbe Struktur zu beschreiben. Beispielsweise repräsentiert der erste Zweig in dem Baum die Entfernungen von der Stadt 'A' zu sämtlichen anderen Städten. Jeder dieser Zweige weist "Zweiglein" auf, die aus Entfernungen und einem "Etikettzweiglein" bestehen, die die Stadt identifizieren, der diese Entfernungen zugeordnet sind. Somit ist die Entfernung von 'A' nach 'B' 12, die Entfernung von 'A' nach 'C' ist 17 und die Entfernung von 'A' nach 'D' ist 45. Ähnlich repräsentiert der nächste Zweig an dem Baum die Entfernungen von der Stadt 'B' zu den anderen Städten; das heißt 'B' nach 'A' ist 12, 'B' nach 'C' ist 27 und 'B' nach 'D' ist 32. Der Baum setzt sich bis zu dem letzten Unterbaum fort, der die Entfernungen von der Stadt 'D' zu den anderen Städten angibt.
  • Die Programmgenketten, die von der Erfindung erzeugt werden, werden auf diesen Eingabebaum angewendet, um ein Ergebnis hervorzubringen. Das gewünschte Ergebnis ist eine Liste von Städten in der Reihenfolge, in der sie besucht werden sollten.
  • Die Eignungsfunktion muß die höchste Bewertung jenen Programmgenketten geben, die die kürzeste Gesamtentfernung hervorbringen. Die Eignungsfunktion muß jedoch auch Kandidaten auswerten, die keine vollständige Route hervorbringen. Somit muß das erste Maß der Eignung darin bestehen, ob eine bestimmte Programmgenkette eine vollständige Liste von Städten auswählt.
  • Weil die Eignung von der gesamten gereisten Entfernung abhängt, wird eine wünschenswerte Eignungsfunktion verschiedene Werte für jede Programmgenkette hervorbringen, und je niedriger der Wert, desto besser die Programmgenkette. Somit wird eine Programmgenkette, die eine kurze Reiseentfernung produziert, einen hohen Eignungswert erhalten. Umgekehrt wird eine Programmgenkette, die eine weite Reiseentfernung hervorbringt, einen niedrigen Eignungswert erhalten.
  • Um eine skalierte Schätzung der Effizienz einer Lösung vorzunehmen, wird eine versuchsweise Lösung mit einer Lösung im wahrscheinlich schlechtesten Fall verglichen. Eine Lösung im schlechtesten Fall wird erzeugt, indem die weiteste Entfernung zwischen jeglichen zwei Städten der Route aufgefunden wird und diese Entfernung mit der Anzahl der Städte minus eins der Route multipliziert wird. Beispielsweise ist in 7 die größte Entfernung zwischen den vier Städten 45 (A nach D). Diese Entfernung wird mit 4 multipliziert, um eine maximale Entfernung von 180 (weil 4 × 45 = 180) zu erhalten.
  • Diese Lösung im schlechtesten Fall ist wenigstens so groß wie irgendeine vorgeschlagene Lösung, weil jedenfalls keine Route, bei der sämtliche Städte besucht werden, die längste Reise bilden kann, wenn nicht sämtliche Entfernungen dieselben sind; das heißt dass sämtliche Städte voneinander gleich weit entfernt sind, was bei dem in 7 dargestellten Problem nicht der Fall ist. Infolgedessen kann diese Eignungsfunktion dazu verwendet werden, einen objektiven Vergleich vorgeschlagener Routen hervorzubringen. Dies wird so gemacht, daß man ein Verhältnis einer Reiseeffizienz durch Teilen der gereisten Entfernung bei einer vorgeschlagenen Route durch die Route im schlechtesten Fall produziert.
  • Das Kritierium zur Eignung wird dann durch die folgende Funktion bestimmt: f = (w(n–v)+d)/w wobei (die Werte von 7 sind in Klammern gezeigt):
    w = Entfernung im schlechtesten Fall (180)
    n = Anzahl von Städten auf der gesamten Route (4)
    v = Anzahl von Städten, die bei der vorgeschlagenen Route besucht werden
    d = Entfernung, die bei der vorgeschlagenen Route bereist wird
  • Somit wird für das in 7 gezeigte Problem die Eignungsfunktion f = (180(4–v)+d)/180.
  • Diese Eignungsfunktion legt groben Wert auf Vollständigkeit der Route, weil jedes Programm, das nicht endet, eine große Strafe in Form der Entfernung der Route im schlechtesten Fall multipliziert mit der Anzahl von Städten, die bei der vorgeschlagenen Route ausgelassen werden, tragen wird. Andererseits verringert sich für sämtliche vorgeschlagenen Routen, bei denen sämtliche Städte im Gebiet des Handelsvertreters besucht werden, die erste Hälfte der Funktion auf Null (weil n–v Null wird) und der zweite Teil, d/w, wird der entscheidende Faktor. Weil w eine Konstante ist, wird die Eignung umso besser, je kleiner der Wert von d bzw. je kleiner das Verhältnis ist. Weil die Entfernung als ein Verhältnis ausgedrückt ist, wird die relative Eignung von Routen nicht durch die Skala, die zum Messen von Entfernung verwendet wird, beeinflußt.
  • Die Eignungsfunktion funktioniert genauso gut mit Kilometern, Meilen oder Fuß. Um jedoch ein genaues Ergebnis hervorzubringen, müssen sämtliche Entfernungswerte unter Verwendung derselben Maßeinheit dargestellt werden; das heißt sämtliche Maße in Meilen oder sämtliche Maße in Kilometern.
  • Schließlich muß der Benutzer ein Beendigungskriterium bereitstellen, das dazu verwendet wird, zu bestimmen, wann eine bestimmte Programmgenkette "gut genug" ist. In diesem Fall werden wir einfach nach einem mangelnden Fortschritt bei den Ergebnissen schauen. Falls bei 100 Generationen (wobei eine Generation die Ausführung von Schritten 60 bis 84 in 4 ist), der beste Kandidat nicht um mehr als 5 verbessert wurde, ist die Evolution beendet und die Programmgenkette, die den besten Eignungswert aufweist, wird als die Lösung des Problems verwendet.
  • Weil wir jedoch vermutlich nach der besten Programmlösung für jeglichen Datensatz suchen, muß dieser Prozeß wiederholt für verschiedene Probleme durchgeführt werden. Dies ist einem natürlich entwickelten Lebewesen ähnlich, das in einer Anzahl verschiedener Situationen, die seine Eignung testen, überlebt. Mit anderen Worten kann es sein, daß eine Programmlösung, die gut für einen Satz von Eingabedaten funktioniert, für andere nicht gut funktioniert, weil der einzelne Satz von Eingabedaten, der dazu verwendet wird, die Programmlösung zu erzeugen, nicht hinreichend vielfältig ist, um eine allgemeine Lösung zu erzeugen.
  • In diesem Fall werden die besten Lösungen des Anfangsdatensatzes gegen einen verschiedenen Satz von Eingabedaten getestet. Diese Routine wird wiederholt, um eine Aufeinanderfolge von Verfeinerungen zu erzeugen, die eine Programmlösung erzeugen werden, die gute Resultate bei einer großen Anzahl von Problemen hervorbringt.
  • Das obige Beispiel des reisenden Handelsvertreters ist aus Gründen der Einfachheit auf vier Städte begrenzt und dient lediglich Zwecken der Anschauung. Dieselbe Baumstruktur kann jedoch dazu verwendet werden, die Entfernungen zwischen jeglicher Anzahl von Städten zu repräsentieren. Eine größere Anzahl von Städten führt lediglich zu einem größeren Baum, um die Eingabedaten zu repräsentieren. Dieselbe Eignungsfunktion (f = (w(n–v)+d)/w) wird ungeachtet der Anzahl n von Städten verwendet (mit entsprechenden Änderungen der Entfernung w des schlechtesten Falls und der Anzahl n der Städte auf der gesamten Route). Wenn die Anzahl von Städten wächst, steigt die Dauer, die zum Generieren einer annehmbaren Lösung erforderlich ist, aber die Routine, die zum Erzeugen, Entwickeln und Auswerten von Programmgenketten verwendet wird, bleibt unverändert. Somit kann, wenn einmal ein genetisches Programmiersystem entwickelt ist, um eine bestimmte Art von Problem zu lösen, dasselbe Programmiersystem mit verschiedenen Sätzen von Eingabedaten verwendet werden, um das beste Programm zum Lösen des gegebenen Problems zu bestimmen.

Claims (8)

  1. Computerimplementiertes Verfahren zum Lösen einer Programmieraufgabe unter Verwendung genetischer Programmiertechniken, wobei das Verfahren die Schritte umfasst: (a) Definieren einer Eignungsfunktion (96) zum Messen der relativen Überlegenheit einer ersten Lösung gegenüber einer zweiten Lösung; (b) Erfassen der Eingabedaten (94), auf deren Grundlage die Aufgabe gelöst werden wird; (c) Erzeugen (59) mehrerer Programmgraphen, wobei jeder Graph mittels einer Reihe von Graphreduktionsoperatoren dargestellt wird, die wirken, um die Struktur des Programmgraphen zu verändern, wobei jeder Programmgraph eine mögliche Lösung der zu lösenden Aufgabe darstellt; (d) Anwenden (60) jedes Programmgraphen auf die Eingabedaten, indem die Struktur des Programmgraphen gemäß den Graphreduktionsoperatoren verändert wird, um eine Lösung der Programmieraufgabe zu erzeugen; (e) Verwenden der Eignungsfunktion auf eine aufgabenspezifische Weise, um jedem Programmgraphen auf der Grundlage der mittels Anwendung des Programmgraphs auf die Eingabedaten erzeugten Lösung eine Eignung zuzuordnen (62); (f) Entwickeln der Programmgraphen auf der Grundlage der Auswertung (62) ihrer Eignung; und (g) Wiederholen der Schritte (d) bis (f) bis ein Kriterium zur Beendigung erfüllt ist.
  2. Verfahren nach Anspruch 1, wobei nach dem Schritt des Einstufens der Eignungsfunktion folgt, das Eignungsmaß zu skalieren, das auf eine aufgabenspezifische Weise erzeugt ist.
  3. Genetisches Programmiersystem zum Auffinden eines Programms zum Lösen einer Programmieraufgabe bei einer vorgegebenen bestimmten Eingabe, wobei das System umfasst eine Speichervorrichtung (42, 44) zum Speichern verschiedener Informationen; eine Eingabevorrichtung (18) zur Eingabe einer Menge mit Eingabedaten, die Informationen enthalten, zu denen eine Aufgabenlösung zu erstellen ist, wobei die Eingabedaten in der Speichervorrichtung gespeichert sind; eine Eignungsfunktion (96), die ein Maß zum Bestimmen der relativen Überlegenheit einer ersten Lösung gegenüber einer zweiten Lösung bereitstellt, wobei die Eignungsfunktion in der Speichervorrichtung gespeichert ist; mehrere Programmgraphen, die in dem genetischen Programmiersystem gespeichert sind, wobei jeder Programmgraph mittels einer Reihe von Graphreduktionsoperatoren dargestellt wird, die wirken, um die Struktur des Programmgraphen zu verändern; und eine zentrale Verarbeitungseinheit (12), die elektrisch mit der Speichervorrichtung verbunden ist und jeweils Mittel aufweist zum (d) Anwenden jedes Programms auf die Eingabedaten, indem die Struktur des Programmgraphen gemäß den Graphreduktionsoperatoren verändert wird, um eine Lösung zu der Programmieraufgabe zu erzeugen; (e) Verwenden der Eignungsfunktion auf eine aufgabenspezifische weise, um jedem Programmgraphen auf der Grundlage der erzeugten Lösung eine Eignung zuzuordnen, indem der Programmgraph auf die Eingabedaten angewendet wird; (f) Entwickeln der Programmgraphen auf der Grundlage der Auswertung ihrer Eignung; und (g) Wiederholen dieser Schritte (d) bis (f), bis ein Beendigungskriterium erfüllt ist.
  4. System nach Anspruch 3, wobei das System in einem gewöhnlichen elektronischen Schaltkreis verwirklicht ist.
  5. System nach Anspruch 3, wobei die zentrale Verarbeitungseinheit eine Programmsteuerung (52) umfasst.
  6. System nach Anspruch 3, wobei die Speichervorrichtung zum Speichern verschiedener Informationen ferner eine genetische Programmspeichereinheit (54) zum Speichern von Daten aufweist, die mit einem Betrieb des genetischen Programmiersystems in Zusammenhang stehen, wobei die genetische Programmeinheit elektronisch mit der zentralen Verarbeitungseinheit verbunden ist.
  7. System nach Anspruch 3, wobei Programmgraphen entwickelt werden, um sich einer erwünschten Lösung anzunähern.
  8. Verfahren nach Anspruch 1, ferner aufweisend die Schritte: Ausführen eines oder mehrerer der Schritte (a) bis (g) unter Gebrauch mehrerer Parallelcomputer-Verarbeitungseinheiten (50).
DE1996631694 1996-03-01 1996-03-01 Genetisches Programmiersystem und Verfahren unter Verwendung genetischer Programmiertechniken Expired - Lifetime DE69631694T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US1996/002758 WO1997032261A1 (en) 1996-03-01 1996-03-01 Method and system for genetic programming

Publications (2)

Publication Number Publication Date
DE69631694D1 DE69631694D1 (de) 2004-04-01
DE69631694T2 true DE69631694T2 (de) 2005-01-13

Family

ID=25680264

Family Applications (1)

Application Number Title Priority Date Filing Date
DE1996631694 Expired - Lifetime DE69631694T2 (de) 1996-03-01 1996-03-01 Genetisches Programmiersystem und Verfahren unter Verwendung genetischer Programmiertechniken

Country Status (8)

Country Link
US (1) US6327582B1 (de)
EP (1) EP0898750B9 (de)
JP (1) JP2000505580A (de)
KR (1) KR19990077006A (de)
CA (1) CA2239228C (de)
DE (1) DE69631694T2 (de)
ES (1) ES2217308T3 (de)
WO (1) WO1997032261A1 (de)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6532453B1 (en) * 1999-04-12 2003-03-11 John R. Koza Genetic programming problem solver with automatically defined stores loops and recursions
GB2361078A (en) * 2000-04-04 2001-10-10 Univ Wales Aberystwyth Apparatus and method for solving problems
PT102508A (pt) * 2000-08-10 2002-02-28 Maria Candida De Carvalho Ferr Algoritmos geneticos mistos - lineares e nao-lineares - para resolver problemas tais como optimizacao, descoberta de funcoes, planeamento e sintese logica
KR20030027542A (ko) * 2001-09-29 2003-04-07 주식회사 케이티 진화속도 향상을 위한 유전자 진화방법
US7444309B2 (en) * 2001-10-31 2008-10-28 Icosystem Corporation Method and system for implementing evolutionary algorithms
US7127436B2 (en) 2002-03-18 2006-10-24 Motorola, Inc. Gene expression programming algorithm
EP1611546B1 (de) 2003-04-04 2013-01-02 Icosystem Corporation Verfahren und systeme zur interaktiven evolutionären datenverarbeitung (iec)
US7333960B2 (en) * 2003-08-01 2008-02-19 Icosystem Corporation Methods and systems for applying genetic operators to determine system conditions
US7356518B2 (en) * 2003-08-27 2008-04-08 Icosystem Corporation Methods and systems for multi-participant interactive evolutionary computing
US7243086B2 (en) * 2003-12-19 2007-07-10 Fuji Xerox Co., Ltd. Methods and systems for automatically generating provably correct computer program code
US7707220B2 (en) 2004-07-06 2010-04-27 Icosystem Corporation Methods and apparatus for interactive searching techniques
WO2007035848A2 (en) 2005-09-21 2007-03-29 Icosystem Corporation System and method for aiding product design and quantifying acceptance
US7505947B2 (en) * 2005-10-20 2009-03-17 International Business Machines Corporation Computer controlled method using genetic algorithms to provide non-deterministic solutions to problems involving physical restraints
US9015145B2 (en) * 2006-12-22 2015-04-21 Singapore Technologies Dynamics Ptd Ltd. Method and apparatus for automatic configuration of meta-heuristic algorithms in a problem solving environment
US7792816B2 (en) 2007-02-01 2010-09-07 Icosystem Corporation Method and system for fast, generic, online and offline, multi-source text analysis and visualization
US7725409B2 (en) 2007-06-05 2010-05-25 Motorola, Inc. Gene expression programming based on Hidden Markov Models
US20090037352A1 (en) * 2007-08-01 2009-02-05 Electronic Data Systems Corporation System and method for automated determination of solutions to known equations
US8984259B2 (en) * 2008-11-04 2015-03-17 International Business Machines Corporation Method, system, and computer program product for optimizing runtime branch selection in a flow process
US9147206B2 (en) * 2009-08-31 2015-09-29 Accenture Global Services Limited Model optimization system using variable scoring
US20110060895A1 (en) * 2009-09-09 2011-03-10 Neal Solomon System and methods for generating and organizing modular program code components
US8838510B2 (en) 2011-09-16 2014-09-16 International Business Machines Corporation Choosing pattern recognition algorithms and data features using a genetic algorithm
GB201317203D0 (en) * 2013-09-27 2013-11-13 Cory Robert Computer program generation
US9753696B2 (en) * 2014-03-14 2017-09-05 Microsoft Technology Licensing, Llc Program boosting including using crowdsourcing for correctness
KR101725629B1 (ko) * 2015-04-27 2017-04-12 성균관대학교산학협력단 오차 크기를 고려하는 적합도 함수를 이용한 유전 프로그래밍 기반의 교통량 예측 시스템 및 방법
WO2018167885A1 (ja) * 2017-03-15 2018-09-20 楽天株式会社 情報処理装置、情報処理方法、および情報処理プログラム
US11038528B1 (en) 2020-06-04 2021-06-15 International Business Machines Corporation Genetic programming based compression determination
US20240111823A1 (en) * 2022-09-29 2024-04-04 Fujitsu Limited Storage medium, flow generation method, and information processing device

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4697242A (en) 1984-06-11 1987-09-29 Holland John H Adaptive computing system capable of learning and discovery
US4734848A (en) 1984-07-17 1988-03-29 Hitachi, Ltd. Combination reduction processing method and apparatus
US4821333A (en) 1986-08-22 1989-04-11 Environmental Research Inst. Of Michigan Machine learning procedures for generating image domain feature detector structuring elements
US5222192A (en) 1988-02-17 1993-06-22 The Rowland Institute For Science, Inc. Optimization techniques using genetic algorithms
US5255345A (en) 1988-02-17 1993-10-19 The Rowland Institute For Science, Inc. Genetic algorithm
US4935877A (en) * 1988-05-20 1990-06-19 Koza John R Non-linear genetic algorithms for solving problems
US5148513A (en) 1988-05-20 1992-09-15 John R. Koza Non-linear genetic process for use with plural co-evolving populations
US5343554A (en) * 1988-05-20 1994-08-30 John R. Koza Non-linear genetic process for data encoding and for solving problems using automatically defined functions
US5140530A (en) 1989-03-28 1992-08-18 Honeywell Inc. Genetic algorithm synthesis of neural networks
US5249259A (en) 1990-01-23 1993-09-28 Massachusetts Institute Of Technology Genetic algorithm technique for designing neural networks
WO1991014990A1 (en) 1990-03-28 1991-10-03 Koza John R Non-linear genetic algorithms for solving problems by finding a fit composition of functions
US5048095A (en) 1990-03-30 1991-09-10 Honeywell Inc. Adaptive image segmentation system

Also Published As

Publication number Publication date
CA2239228A1 (en) 1997-09-04
KR19990077006A (ko) 1999-10-25
WO1997032261A1 (en) 1997-09-04
DE69631694D1 (de) 2004-04-01
EP0898750B1 (de) 2004-02-25
US6327582B1 (en) 2001-12-04
EP0898750B9 (de) 2004-12-01
JP2000505580A (ja) 2000-05-09
EP0898750A4 (de) 1999-04-14
ES2217308T3 (es) 2004-11-01
CA2239228C (en) 2002-12-03
EP0898750A1 (de) 1999-03-03

Similar Documents

Publication Publication Date Title
DE69631694T2 (de) Genetisches Programmiersystem und Verfahren unter Verwendung genetischer Programmiertechniken
DE19532371C2 (de) Verwendung eines genetischen Algorithmus zur Optimierung von Speicherplatz
DE3916328A1 (de) Verfahren und computer zur problemloesung nach nicht-linearer genetischer methode
DE202019106182U1 (de) Neuronenarchitektursuche mit faktorisiertem hierarchischem Suchraum
DE112017005538T5 (de) Automatisierte Erzeugung von Arbeitsabläufen
DE3911465C2 (de) Verfahren zur automatischen Konfiguration technischer Systeme aus Komponenten
DE102008048478A1 (de) Probenermittlungsstrategie unter Verwendung genetischer Algorithmen bei der Optimierung eines technischen Entwurfs
DE112013006650T5 (de) Multi-Layer System zur Symbol-Speicher basierten Kompression von Mustern
DE102020005646A1 (de) Slot-Filling mit kontextbezogenen Informationen
WO2000072256A2 (de) Neuronales netz zum computergestützten wissensmanagement
DE69831710T2 (de) Genetisches Verfahren zur Zuteilung der Stockwerkanrufe bei einer Aufzugsgruppe
DE102021109468A1 (de) Hardware beschleuniger mit analog-inhaltlichem adressierbarem speicher (a-cam) für entscheidungsbaumrechnung
DE69821933T2 (de) System und verfahren zum erstellen von erfüllungsregeln für handelsysteme
DE10034694B4 (de) Verfahren zum Vergleichen von Suchprofilen sowie dessen Verwendung
DE102007050434A1 (de) Verfahren und Anordnung zum computergestützten Ermitteln mindestens einer Eigenschaft einer Haarcoloration basierend auf einer Formulierung aus chemisch reaktiven und/oder unreaktiven Rohstoffen, Verfahren und Anordnung zum computergestützten Ermitteln einer Formulierung einer Haarcoloration basierend auf chemisch reaktiven und/oder unreaktiven Rohstoffen, und Verfahren und Anordnung zum computergestützten Trainieren eines vorbestimmten Modells zum computergestützten Ermitteln mindestens einer Eigenschaft einer Haarcoloration basierend auf einer Formulierung aus chemisch reaktiven und/oder unreaktiven Rohstoffen
EP0898224A2 (de) Verfahren und Anordnung zum Entwurf von Regeln aus Trainingsdatenvektoren eines Trainingsdatensatzes nach dem Prinzip der Fuzzy Logic
Jones Avoiding patterns and making the best choice
EP1285385B1 (de) Verfahren zum auffinden von objekten
DE102020215589A1 (de) Steuern eines deep-sequence-modells mit prototypen
EP1170678B1 (de) Verfahren und Vorrichtung zur automatischen Suche relevanter Bilddatensätze
Liu et al. The postdoc problem under the Mallows model
DE19549300C1 (de) Verfahren zur rechnergestützten Ermittlung einer Bewertungsvariablen eines Bayesianischen Netzwerkgraphen
EP3637354A1 (de) Verfahren zur suche eines programmcodes für ein elektronisches gerät in einer datenbank
Do Towards simple, easy to understand, an interactive decision tree algorithm
DE19731499A1 (de) Verfahren und Vorrichtung zur Auswahl von Termen höherer Ordnung für ein holographisches Neuronennetz

Legal Events

Date Code Title Description
8364 No opposition during term of opposition