
\section*{Einleitung}



"`\textbf{Der nächste Weltmeister im Schachspiel könnte ein Computer sein, der
übernächste einer, der von Computern programmiert wurde.}"'~\cite{strouhal96}, 
diese Zitat von Strouhal weist eine Richtung für die weitere Entwicklung
von intelligenten Programmen. 

Ernsthafte Versuche, denkende Maschinen zu bauen, setzten nach dem Zweiten Weltkrieg ein. 
Eine Forschungsrichtung, Kybernetik genannt, verwendete elektronische Schaltkreise, 
die das Nervensystem imitierten, um Maschinen zu konstruieren, die einfache Muster 
zu erkennen lernten, oder um schildkrötenartige Roboter zu bauen, die ihren Weg zur 
Aufladestation fanden. Ein anderer Ansatz, Künstliche Intelligenz genannt, verwendete 
die arithmetische Leistung der Nachkriegscomputer zum abstrakten Schlussfolgern.  
 Während der 60er Jahre wurden Computer hergestellt, die logische und geometrische Theoreme 
bewiesen, Rechenprobleme lösten und gute Schachspiele ausführen konnten. 
Vor einigen Jahren stellte die Carnegie Mellon University zwei tischgroße 
Computer her, \emph{Deep Blue} genannt, die mit den besten 100 Spielern der Welt 
auf dem Rang von Großmeistern Schach spielen können,
wenn deren Züge mit einer Tastatur 
eingegeben wurden, aber kein Roboter kann die Figuren auf einem Schachbrett 
so wie ein durchschnittlicher Mensch sehen und ergreifen.

Warum ist es leichter menschliches Denken, als Wahrnehmen und Handeln, zu imitieren? 
Über hunderte Millionen von Jahren überlebten unsere Vorfahren, indem sie besser 
sahen und sich bewegten als ihre Konkurrenz. Durch die Evolution wurden sie phantastisch 
effizient. Wir können unsere gewaltigen Fähigkeiten kaum würdigen, weil sie uns 
einfach gegeben sind und von allen Menschen und den meisten Tieren beherrscht 
werden. Auf der anderen Seite ist rationales Denken, wie man es für das Schachspiel 
braucht, eine neu erlangte Fähigkeit, die es vielleicht nicht länger als 100.000 
Jahre gibt. Die dazu benutzten Hirnbereiche sind nicht gut organisiert, weswegen 
wir das nur sehr schlecht können. Wir haben bis vor kurzem nicht bemerkt, wie 
schlecht wir dies können, weil wir keine Konkurrenz hatten, die es uns vor 
Augen geführt hat. 
Das Schachspiel ist ein sehr gutes Beispiel um den Unterschied zwischen Menschen
und Programmen erfahrbar zu machen. Prinzipiell gibt es beim Schach
10 hoch 120 verschiedene Spielmöglichkeiten; wenn ohne Vorkenntnisse alle
Möglichkeiten geprüft werden sollen, wird ein Programm nie zum Ergebnis kommen.
\emph{Deep Blue} überprüft immer noch Millionen von Brettstellungen, ehe es einen 
Zug bestimmt, die besten Spieler  betrachten allenfalls einige hundert Konstellationen.
Trotz dieses großen Unterschieds  können gute Schachspieler immer noch mit Computern
wie Deep Blue mithalten.
 
Trotz der großen Leistungen dieser KI-Programme gibt es immer noch Elemente,
die Computer nicht so effizient behandeln wie wir Menschen, so dass sie viele
Aufgaben nicht lösen können~\cite{Dreyfus:79,Dreyfus:92}. 
Könnten Menschen aber genau so effizent 
wie Programme den Suchraum aufspannen, wieviel besser wären Menschen dann beim
Schachspiel? Diese Frage können wir hier nicht beantworten, da wir wohl eine
Million Jahre Evolution abwarten müssten. Jedoch können wir die Fragestellung
verändern und somit eine künstliche Evolution mit der Verbesserung von Schachprogrammen
beauftragen. Die Fragen, die diese Arbeit beantworten soll, lauten: Kann
man mit einer künstlichen Evolution Schachprogramme entwickeln? Wenn diese Frage
positiv beantwortet werden kann, stellt sich die Frage, ob evolutionäre Verfahren,
wie die Genetische Programmierung, bekannte Computerschachverfahren verbessern können.

Das Zitat von Strouhal weist die Richtung, in die diese Arbeit gehen soll:
"`\textbf{Der nächste Weltmeister im Schachspiel könnte ein Computer sein, der
übernächste einer, der von Computern programmiert
wurde.}"'~\cite{strouhal96}. Nur mit dem Unterschied, dass wir hier den Beginn der
Entwicklung von Schachprogrammen sehen und somit noch nicht das Weltmeisterprogramm
evolvieren wollen.
Ein Computer soll also ein Programm entwickeln, welches Schach spielen kann.

Schach (vom pers.: Schah = König; stehende Metapher: "Das Königliche Spiel") 
ist ein strategisches Brettspiel für zwei Spieler, bei dem der Zufall keine 
Rolle spielt (außer beim Losen um die Farbe, d. h. um den ersten Zug), sondern 
lediglich das Können der Spieler über den Spielausgang entscheidet.
Schach ist, noch vor Dame und Mühle, das populärste Brettspiel in Europa. 

Das Schachspiel bietet ideale Voraussetzungen, um als Benchmarkproblem für
verschiedene Algorithmen zu dienen, denn man hat es im Schach mit einer
eng begrenzten Menge von Objekten zu tun, wie den Feldern, Figuren
und  Zügen, zwischen denen eindeutige Beziehungen existieren. Die
Regeln sind eindeutig und einfach zu beschreiben und auch das Ziel des
Spiels, das Schachmatt, ist einfach zu beschreiben. Dennoch besitzt
diese Welt eine so hohe Komplexität, dass es bis heute nicht gelungen
ist die Gesetzmäßigkeiten des Spiels ganz zu durchschauen.
Die Struktur des Schachspiels macht es
\emph{Brute Force} Verfahren nicht möglich gute Lösungen zu erreichen,
so dass \emph{intelligente Techniken} verwendet werden müssen. Gleichzeitig können
Techniken, die in Schachprogrammen verwendet werden, auch für
die Mustererkennung, Problemlösung, Optimierungsheuristiken und andere
\emph{real world} Probleme genutzt werden.



In dieser Arbeit sollen, mit Hilfe der Genetischen Programmierung und
Evolutionären Algorithmen, Programme entwickelt werden, die Schach spielen
können.
Während der Versuche hat sich sehr schnell gezeigt, dass
die bekannten Strukturen für GP Individuen zur Lösung der
Aufgabe nicht flexibel genug sind. 
Daher wurden zur Lösung des Problems auch spezialisierte Individuen entwickelt,
die durch ihre Struktur und ihr Verhalten gut zur Lösung von Suchproblemen
genutzt werden können. 

Neben diesen neuen Strukturen werden den Individuen sehr viele Funktionen 
mit Problemwissen zur Verfügung gestellt. Denn für
viele Problemstellungen sind in der Literatur und Praxis schon Verfahren
und Funktionen bekannt, die das Problem oder Teilprobleme lösen
können. Das System kann dann geeignete Kombinationen dieser Funktionen 
finden, die es dem Individuum gestatten die Problemstellung gut zu lösen.
Durch die Einschränkung des Systems auf spezialisierte Funktionen wird die Evolution
zwar auf bestimmte Lösungsansätze festgelegt, aber durch den eingeschränkten
Suchraum wird auch die Möglichkeit eine Lösung zu finden erhöht. Der
Ansatz nutzt sehr viel Wissen über die Problemstellung aus und versucht so
schneller zu einem Ergebnis und zu einer Verbesserung bekannter Ansätze zu
gelangen. Dies spiegelt sich auch  in den verschiedenen
GP-Strukturen wieder, die für das System entwickelt wurden. 
Denn neben der Lösung des Schachproblems geht es auch darum, durch eine
Modularisierung und Nutzung von Vorwissen mit GP-Systemen neue Möglichkeiten
zu entwickeln um komplexe und \emph{real world} Probleme zu lösen.

%10
In den Kapiteln "Einführung in die Spieltheorie" und "Schach" werden wichtige
Elemente und Hintergründe zum Schachspiel dargestellt. Anschließend folgt eine
kurze Einführung in die Genetische Programmierung, hier werden grundlegende
Begriffe erläutert. Dann folgt ein Kapitel über die neuen GP Strukturen, die
für das \emph{GeneticChess} System entwickelt wurden, daran anschließend
folgt eine empirischen Analyse dieser Strukturen. 
Diesen Kapiteln folgt die Beschreibung des GeneticChess Systems und seiner
Vorgängersysteme. Die Arbeit endet mit den Ergebnissen aller Schachsysteme und
einem Ausblick, wie die Entwicklung weiter gehen könnnte.


%
%
%  Ende
%
%



\section{Glossar}

\begin{description}
\item [Abtausch]  Es werden in direkter Folge Figuren geschlagen und am Ende
hat jede Seite vom Wert her gleich viel Material gewonnen
bzw. verloren.

\item [Bewegungsregel] Gangart

\item [Bauer]
Die schwächste Figur im Schach. Der Bauer zieht immer nur ein Feld
vorwärts (in Richtung der gegnerischen Figuren in der
Grundstellung) und schlägt diagonal ein Feld nach vorne. Ausnahmen
sind der Doppelschritt, En Passent und die Umwandlung.

\item [Dame]
        Die stärkste Figur im Schach. Sie vereinigt die Eigenschaften von
        Läufer und Turm.

\item [Deckung]
        Eine Figur ist gedeckt, wenn eine andere Figur der gleichen Farbe auf
        das Feld dieser Figur ziehen könnte. Falls mehrere Figuren dazu in der
        Lage sind, ist sie mehrfach gedeckt.

\item [Diagonale]
        Eine Linie von Feldern gleicher Farbe, die sich an den Ecken berühren, heißen Diagonalen.

\item [Doppelschritt]
        Der Bauer in seiner Ausgangsposition darf ein oder zwei Felder vorwärts
        gehen. Wird die Option der zwei Felder in Anspruch genommen führt der
        Bauer einen Doppelschritt aus.

\item [Drohung]
        Falls ein Spieler nach einem Zug, falls er noch mal ziehen könnte, in
        Vorteil gelangen könnte, hat er eine Drohung aufgestellt. Da er jedoch
        nicht am Zug ist, hat der Gegner noch einen Zug Zeit etwas dagegen zu
        unternehmen.

\item [En passent]
        Ein Spezialzug des Bauern. Ein Bauer, der ein Feld angreift, das von
        einem gegnerischen Bauern überschritten worden ist, der von seinem
        Ursprungsfeld aus in einem Zug um zwei Felder vorgerückt ist, darf
        diesen gegnerischen Bauern so schlagen, als ob letzterer nur um ein
        Feld vorgerückt wäre. Dieses Schlagen darf nur in dem Zug geschehen,
        der auf ein solches Vorrücken folgt.

\item [Eröffnung]
        Die erste Phase einer Schachpartie, in der die Figuren aus der
        Grundstellung heraus in Stellung gebracht werden, ist die
        Eröffnung.

\item [erweiterten Zentrum]
        Quadrat aus 16 Feldern in der Mitte des Schachbrettes. Das
        Quadrat hat die Eckfelder c3, c6, f3 und f6.

\item [Fernfigur]
        Die langschrittigen Figuren  Läufer,  Turm und  Dame bilden die Fernfiguren.

\item [Fesselung]
        Falls eine Figur zugunfähig ist, weil sie ansonsten den König einem
        Schach aussetzen würde, nennt man sie gefesselt.       

\item [Gangart]
        Die Art und Weise in der die Schachfiguren  Bauer,  Turm,  Springer,
        Läufer,  Dame und  König bewegt werden. 

\item [Gegenschach]
        Ein Schachgebot, welches in einer solchen Weise durch dazwischen ziehen
        pariert wird, dass die dazwischen gezogenen Figur ihrerseits Schach
        gibt.

\item [Geschlossene Position]
       Eine Position wird als geschlossen bezeichnet, wenn mehr als sech
       Bauern das erweiterte Zentrum des Brettes besetzt halten.

\item [Gewinnschlagzug]
        Wenn ein Figur durch einen Zug das Feld einer gegnerischen
        Figur erreicht kann und die zu schlagende Figur höher- oder
        gleichwertig ist oder die zu schlagende Figur ungedeckt ist , wird
        dieser Zug als Gewinnschlagzug bezeichnet.


\item [Grundstellung]
        Jedes Spiel beginnt in der Grundstellung oder Ausgangsstellung.

\item [Halbfesselung]
        Wie Fesselung nur, dass der gefesselten Figur neben den verbotenen
        auch erlaubte Züge zur Verfügung stehen.

\item [Halb offene Linie]
        Eine halb offene Linie ist einen Linie ohne eigenen Bauern aber mit
        einem gegnerischen Bauern.

\item [Kombination]
        Eine Kombination ist eine Folge von Zügen, in der beide Spieler
        erzwungene Züge machen und die mit einem Vorteil für die beginnende
        Seite endet.

\item [Kurze Rochade]
        Der König bewegt sich zwei Felder auf seinen h-Turm zu, während der
        Turm über den König hinweg geführt wird und direkt neben den König
        gestellt wird. Alle Felder zwischen König und Turm müssen frei sein
        und König und Turm dürfen noch nicht gezogen haben.

\item [König]
         Die wichtigste Figur im Spiel. Der König kann ein Feld weit in jede
         Richtung ziehen.

\item [Königsbauer]
        Der Bauer, der vor dem König steht.

\item [Lange Diagonale]
        Die Diagonale von a1 nach h8 ist die lange schwarzfeldrige Diagonale,
        während die Diagonale von a8 nach h1 die lange weißfeldrige Diagonale
        ist.

\item [Lange Rochade]
        Der König bewegt sich zwei Felder auf seinen a-Turm zu, während der
        Turm über den König hinweg geführt wird und direkt neben den König
        gestellt wird. Alle Felder zwischen König und Turm müssen frei sein
        und König und Turm dürfen noch nicht gezogen haben.

\item [Leichtfigur]
         Springer und  Läufer bilden die Gruppe der Leichtfiguren.

\item [Linie]
        Die acht vertikalen Spalten des Schachbretts heißen Linien und sind
        von a bis h benannt. Die Bauern bewegen sich entlang der Linien. 

\item [Läufer]
        Figur im Schach. Der Läufer bewegt sich auf den Diagonalen des Schachbretts.

\item [Material]
         Die Gesamtheit der verbliebenen Figuren ohne die Könige auf dem Brett.

\item [Matt (Schachmatt)]
         Mögliches Spielende. Der mattsetzende Spieler ist der Sieger. Das
         Matt tritt ein, wenn der bedrohte König nicht in Sicherheit gebracht
         werden kann.

\item [Offene Linie]
        Die offene Linie ist einen Linie ohne einen Bauern.

\item [Partie]
         Ein Schachspiel.

\item [Patt]
        Mögliches Spielende. Das Patt gehört zu den Remisarten. Dem am Zug
        befindlichen Spieler seht kein regelgerechter Zug zur Verfügung, wobei
        er nicht im  Schach steht.

\item [Promotion]
       Umwandlung eines Bauern in einen anderen Figurtyp, wenn dieser die
       erste Reihe des Gegners erreicht.

\item [Reihe]
        Die acht horizontalen Zeilen des Schachbretts heißen Reihen und sind
        von 1 bis 8 durchnummeriert. In der Grundstellung stehen die Bauern
        auf der zweiten und siebenten Reihe.

\item [Remis]
         Mögliches Spielende. Unentschieden.

\item [Rochade]
        Spezialzug an dem König und Turm beteiligt sind. Siehe auch lange und
        kurze Rochade.

\item [Rösselsprung]
         Gangart des Springers. Der Springer zieht zwei Felder in eine
         Richtung and anschließend ein Feld zur Seite, wobei die Seite wählbar
         ist.

\item [Schach]
         Die Drohung den König im nächsten Zug zu schlagen.

\item [Schachmatt]
        Siehe Matt

\item [Schachmuster]
        Unter Schachmuster versteht man Manöver, Themen, Technik,
        Tricks, taktische und strategische Konstellationen, die so
        häufig vorkommen, dass es sich lohnt diese in den schachlichen
        Denkprozess aufzunehmen.

\item [Schlagen]
        Wenn ein Figur gemäß ihrer Gangart das Feld einer gegnerischen
        Figur erreicht, wird diese vom Feld genommen und durch Erstere
        ersetzt. Diesen Vorgang nennt man schlagen.

\item [Schlagzug]
        Wenn ein Figur durch einen Zug das Feld einer gegnerischen
        Figur erreicht kann, wird dieser Zug als Schlagzug bezeichnet.

\item [Schwerfigur]
         Dame und  Turm bilden die Gruppe der Schwerfiguren.

\item [Springer]
         Figur im Schach. Der Springer kann als einzige Figur über
         andere hinweg ziehen und bewegt sich mit dem Rösselsprung.

\item [Turm]
        Figur im Schach. Der Turm bewegt sich auf den Diagonalen und
        Reihen des Schachbrettes.

\item [Umwandlung]
         Wenn ein Bauer von sich aus gesehen die letzte Reihe erreicht
         hat, muß er sich noch im selben Zug in einen Turm, Springer,
         Läufer oder eine  Dame umwandeln.

\item [Variante]
 

\item [Verkürzte Figurinen Notation]
        Es gibt verschiedene Notationsarten in denen eine Schachpartie
        festgehalten werden kann. In der Figurinen Notation wird für
        die gezogene Figur ein Symbol benutzt. Verkürzt heißt, dass
        nur das Zielfeld der gezogenen Figur angegeben wird.

\item [Zentrum]
        Die vier zentralen Felder auf dem Schachbrett, d4, d5, e4 und e5.

\item [Zug]
         Ein Spieler, der eine seiner Figuren gemäß ihrer Gangart
         bewegt hat, hat seinen Zug gemacht. Wenn dies beide Spieler
         getan haben, ist der Zug komplett. Der Zug eines Spielers ist
         ein Halbzug.

\item [Zugpflicht]
        Unter Zugpflicht versteht man, dass kein Zug ausgelassen
        werden darf. Kein Spieler kann also auf seinen Zug verzichten,
        sondern muss irgendeine Figur bewegen.

\item [Zugzwang]
        Dies sind Stellungen
\end{description}






%Die Grundidee aller dieser Systeme war es ein Schachprogramm zu entwickeln,
%welches Evolutionäre Verfahren verwendet. Die Aufgabe ein Schachprogramm
%zu entwickeln ist schwieriges Problem, so stellte sich immer zwei zentrale
%Fragen, wie man GP Programme evolvieren was Schach spielt und wie dies mit
%der aktuellen Computerkraft in einer angemessenen Zeit tuen kann.


%To solve this problem we have to identify the structure of the
%individuals, the function and terminal set and also the datastructure
%of the individuals. The one question was, it is possible to solve the
%problem if the individual has only the datatype double or integer, or
%must we provide the individual with a more advanced datastructure.
%We decide to go the second way and give \gp\ the opportunity to use a
%data sturcture which was implemented for chess playing individuals we
%called it \emph{chess-board}~\ref{sub:dataStruct}.

%The next question was how the individuals look like. Can we use a
%common \gp-structure to solve the problem; take one \gp-program and
%some adf's as the individual structure and some chess games % $$$ Partien
%as fitness case. Include some chess functions to the function and
%terminal set and start the evolution. We decide the this approch will
%lead to a deadend, because of the complexity of hand written programs
%and the time span this approach will need to evolve a simple chess
%program. So we developed a hierarchical structure for the individual.
%Each part of an individual solves a subproblem so the hole individual
%can play chess see section~\ref{sub:ChessInds}.

%Im folgenden werden die grundlegenden Ideen der Dissertation
%beschrieben.
%Der zentrale Punkt der Arbeit ist die Evolution eines Algorithmuses
%zur Lösung von Problemen, die als Suchprobleme dargestellt werden
%können. Als Benchmarkproblem wurde das
%Schachproblem gewählt. Dies wurde aus zwei Gründen getan, erstens
%Schach ist eines der bekanntesten Probleme. Somit ist es
%auch eines der am Besten untersuchten Problem, diese ermöglicht es die
%Ergbenisse des Evolutionssystems einfach zu bewerten. Ein weitere
%Vorteil der Bekanntheit des Problems ist es, dass das Problem direkt
%verstanden wird und nicht erst bewiesen werden muss, das es sich um
%ein schweres Problem handelt.

%Der zweite Grund für die Wahl von Schach als Benchmarkproblem ist die
%Aussage das GP, EA,...


%Im \emph{GeneticChess} System wird diese Idee nun auf zwei Ebenen
%eingesetzt, erstens hat man eine schweres Problem welches nur durch
%einen Algorithmus mit problemspezifischen Wissen gelöst werden
%kann. Es ist aber schwer und zeitaufwendig solche Algorithmen zu
%entwickeln, somit währe die Möglichkeit der automatischen Erzeugung
%solcher Algorithmen vorteilhaft. Aber hierzu zeigten sich die
%bekannten Strukturen als zu inflexibel, so dass spezielle Strukturen
%entwickelt wurden um gute Lösungen zu erhalten.


%In der Arbeit sollen durch GP, dabei zwei Wege zum Ziel verfolgt
%werden. Der eine Weg ist es aktuelle Schach- und Suchalgorithmen als
%Grundgerüst zu benutzen, um die verschiedenen heuristischen
%Komponenten dieser Algorithmen mit GP, EA oder anderen CI Methoden
%weiterzuentwickeln. Diesen Algorithmen werden mittels evolutionärer Verfahren
%dadurch neue Wege und flexiblere Lösungen ermöglicht.

%Ein zweiter Weg soll es sein selbst dies Grundalgorithmen mittels GP
%zu evolvieren, um ganz neue Lösungen für das gestellte Problem zu
%erhalten.


%1
Als die ersten Computer erfunden wurden, gab es die großartigsten
Erwartungen im Bereich der Künstlichen Intelligenz (KI), viele dieser Spekulationen
gingen allerdings in die falsche Richtung. Die Computertechnologie und die
Informatik machten zwar riesige Fortschritte, aber nicht immer auf den von den
Experten vermuteten Gebieten~\cite{dreyfus}.


%Wenn jemand in einen
%unbekannten Raum geht, erfolgt zuerst eine Orientierungsphase, z.B., handelt
%es sich um einen geschlossenen oder offenen Raum (d.h. gehe ich ins Freie oder
%in einen abgegrenzten Raum). Die Aufmerksamkeit konzentriert sich sofort
%(erfahrungsgemäß) auf bestimmte Dinge: Lichtquellen, Bewegungszentren etc.
%Entsprechend konzentriert sich die Suche nach Regelmäßigkeiten. Wenn solche
%Zuspitzung nicht gelingt (optische Täuschungen, verwirrende Situationen) und
%sozusagen alle Möglichkeiten bedacht werden müssen, führt das in die
%kombinatorische Explosion, wo auch die größten Rechner keine Chance haben.
Am Beispiel des Schachspiels kann das Problem der kombinatorische Explosion
quantifiziert werden. Prinzipiell gibt
es 10 hoch 120 verschiedene Spielmöglichkeiten, von denen auch die besten
Spieler allenfalls einige Hundert durchprüfen entsprechend der jeweiligen
Konstellation. Wenn ohne Vorkenntnissen alle Möglichkeiten geprüft werden
sollten, wird ein Programm nie zum Ergebnis kommen.



Der Denkfehler liegt hier in der Programmiertechnik, denn die
Computerschachprogramme sind keine lernenden sich selbst korrigierenden
Maschinen. Alle Systeme brauchen explizite Anweisungen der
Programmierer, von alleine kann keines dieser Programme seine
Schachkunst verbessern. Das intelligente Verhalten wurde nicht durch
ein Programm erzeugt, sondern durch die Personen, die das Programm
entwickelten. So kann man immer noch sagen, dass der Mensch von der
Maschine nicht besiegt wurde, denn die Programme wurden von Menschen
erschaffen und nicht von einer Maschine.

%----------------------------------------------------------------------
\subsection{Neuro-Team}
%----------------------------------------------------------------------
\label{sec:neuroTeam}

%----------------------------------------------------------------------
\subsubsection{Die Struktur}
%----------------------------------------------------------------------




\begin{figure}
  \centerline{\epsfig{figure=Pictures/Graphik/neuroindv.eps,width=15cm}}
  \caption{Struktur eines Linear-Graph Individuums. Der Graph bildet den
 möglichen Programmfluss ab und die linearen Sequenzen den Datenfluss
in den einzelnen Knoten. Die Knoten des Graphen bestehen aus einem
linearen GP-Programm, hier blau dargestellt und dem Branching Knoten,
als rote Pyramide dargestellt.}
  \label{fig:linGraphProg}
\end{figure}




%----------------------------------------------------------------------
\subsubsection{Neuronales Netz}
%----------------------------------------------------------------------
\label{sec:neuronet}

Der Begriff des \emph{Neuronalen Netzes}\index{Neuronales Netz} wird im
folgenden häufiger benutzt, dabei handelte es sich immer um ein
\emph{Multilayer-Perceptron}\index{Multilayer-Perceptron} \cite{net2}. 
Ein \emph{Multilayer-Perceptron (MLP)} ist ein vorwärtsbetriebenes Neuronales
Netz, 
das aus einer Eingabeschicht, einer oder mehreren inneren Schichten (hidden
layers) und einer Ausgabeschicht besteht. Die Einheiten der Eingabeschicht
führen keine Verarbeitung durch. Ihr Zustand wird ausschließlich von
außen gesetzt. Demnach ist ein Multilayer-Perceptron mit $n - 1$ inneren
Schichten ein $n$-schichtiges bzw. $n$-stufiges Neuronales Netz. An der
Ausgabeschicht sind mehrere Ausgabeeinheiten zugelassen, da sich dies nicht
ohne weiteres durch eine parallele Schaltung gleicher Systeme erzeugen
läßt. Durch eine parallele Schaltung gleicher Systeme erhielte man jeweils
eine weitere innere Schichten mit unterschiedlichen Repräsentationen, was
jedoch nicht immer erwünscht ist. 

Formal kann ein Multilayer-Perceptron wie folgt definiert werden:
\begin{defn}[Multilayer-Perceptron] \label{def:MLP}

Ein Multilayer-Perceptron ist ein Neuronales Netz $MLP = ( U,W,A,O,NET,ex)$,
das die folgenden Charakteristika aufweist:
\begin{itemize}
\item (i) $U = U_{1} \cup \ldots \cup U_{n}$ ist eine Menge von
  Verarbeitungseinheiten, wobei $n \geq 3$ vorausgesetzt wird. Es gilt dabei,
  $U_{i} \neq \emptyset$ für alle $i \in \{1, \ldots, n \}$ und $U_{i} \cap
  U_{j} = \emptyset$ für $i \neq j$. $U_{1}$ heißt Eingabeschicht und
  $U_{n}$ Ausgabeschicht. Die $U_{i}$ mit $1 < i < n$ werden innere Schichten
  genannt.

\item (ii) Die Netzwerkstruktur ist durch die Abbildung $W : U \times U \nach
  \reals$ festgelegt, wobei nur Verbindungen zwischen direkt
  aufeinanderfolgenden Schichten existieren. Formal gilt also $W(u,v) \neq 0 :
   \exists\ i : u \in U_{i} \andl v \in U_{i+1}$,
   mit $i \in\ \{1; \ldots, n-1 \}$. 

\item (iii) $A$ ordnet jeder Einheit $u \in U$ eine Aktivierungsfunktion
  $A_{u} :  \reals \nach [0,1]$ zur Berechnung der Aktivierung $a_{u}$ zu, mit 
  \[ a_{u} = A(ex(u)) = ex(u) \]
  für alle $u \in U_{1}$ und
  \[ a_{u} = A(net_{u}) = f(net_{u}) \]
  für alle $u \in U_{i}, (i \in \{2,\ldots ,n \})$. $f : \reals \nach [0,1]$
  ist dabei eine für alle Einheiten fest gewählte nicht-lineare Funktion.

\item (iv) $O$ ordnet jeder Einheit $u \in U$ eine Ausgabefunktion $O_{u} :
  \reals \nach [0,1]$ zur Berechnung der Ausgabe $o_{u}$ zu, wobei $o_{u} =
  O_{u}(a_{u}) = a_{u}$ für alle $u \in U$ gilt.

\item (v) $NET$ ordnet jedem Neuron $v \in U_{i}$ mit $w \leq i \leq n$ eine
  Netzeingabefunktion (Propagierungsfunktion) $NET_{v} : (\reals \times 
  \reals)^{U_{i-1}} \nach \reals$ zur Berechnung der Netzeingabe $net_{v}$ zu,
  mit 
  \[ net_{v} = \sum_{u\in U_{i-1}} W(u,v) * o_{u} + \theta_{v}. \]
  $\theta_{v} \in \reals$ ist der Bias der Einheit $v$.

\item (vi) $ex : U_{1} \nach [0,1]$ ordnet jeder Eingabeeinheit $u \in U_{1}$
  ihre  externe Eingabe $ex_{u} = ex(u)$ zu.

\end{itemize}
\end{defn}

Damit ein Multilayer-Perceptron lernfähig ist, ist die Verwendung einer
kontinuierlichen Schwellenwertfunktion unumgänglich, da der Lernalgorithmus
eine
differenzierbare Aktivierungsfunktion benötigt. Im Fall der in \gps-System
verwendeten Neuronalen Netze wird die sogenannte \emph{logistische}
\index{logistische Funktion} oder auch \emph{sigmoide Funktion}\index{sigmoide
  Funktion} 
\[  f(x) =  \biggl(\frac{1}{(1 + e^{-x*\lambda})} \biggl) , \ \ \  
\lambda > 0  \]
verwendet.

%----------------------------------------------------------------------
\subsubsection{Backpropagation}
%----------------------------------------------------------------------
\label{sec:Back}
\index{Backpropagation}

Der Begriff \emph{Backpropagation}~\cite{net1} bezeichnet die rückwärtige
Ausbreitung 
eines Fehlersignals durch das Netzwerk. Die Idee der Lernregel besteht darin,
nach der Propagierung eines Musters durch das System das erhaltene
Ausgabemuster mit einer Vorgabe zu vergleichen und daraus den Fehler jeder
Ausgabeeinheit zu ermitteln. Dieser Fehler wird nun rückwärts, also in
Richtung der Eingabeschicht, durch das Netz propagiert. Aufgrund dieses
Fehlersignals sind die inneren Neuronen in der Lage, ihren eigenen Fehler zu
bestimmen. Die Fehler aller Neuronen bilden schließlich die Grundlage der
Gewichtsmodifikation. Das Backpropagation Lernverfahren wurde von Rumelhart,
Hinton und Williams~\cite{net3} entwickelt und wird auch als
\emph{verallgemeinerte Delta-Regel}\index{verallgemeinerte Delta-Regel}
bezeichnet. 

\begin{defn}[Backpropagation] \label{def:Back}

Gegeben seien ein Multilayer-Perceptron MLP mit $U = U_{1} \cup \ldots \cup
U_{n}$ und die sigmoiden Aktivierungsfunktion $A_{u}(net_{u}) = f( net_{u})$
für alle $u \in U_{i}, i \geq 2,$ sowie eine feste Lernaufgabe \Mc. Der
überwachte Lernalgorithmus, der die Veränderung der Gewichtsstruktur $W$ von
MLP nach der Propagation des Eingabemuster $i^{(e)}, e \in \Lc$ durch
\[ \Delta_{e} W(u,v) = \eta\ \delta_{v}^{(e)} a_{u}^{(e)} \]
mit $u \in U_{i-1}, v \in U_{i}, 2 \leq i \leq n$ und $\eta > 0$, bestimmt,
wobei 

\begin{equation}
\delta_{u}^{(e)}= 
\begin{cases} f'(net_{u}^{(e)}) \ (t_{u}^{(e)} - a_{u}^{(e)}) 
  & \text{falls }  u \in U_{n} \\  
  f'(net_{u}^{(e)}) \  \sum_{v \in U_{j+1}} \delta_{v}^{(e)} W(u,v)  
  & \text{falls } u \in U_{j}, 2 \leq j \leq n-1\\ 
\end{cases}
\end{equation}
gilt, heißt verallgemeinerte Delta-Regel oder Backpropagation-Algorithmus. Dabei
ist $a_{u}^{(e)}$ die Aktivierung des Neurons $u$ nach der Propagation des
Eingabemuster $i^{(e)}$ und $t_{v}^{(e)}, v \in U_{n}$ ist die durch das
Ausgabemuster $t^{(p)}$ für eine Ausgabeneuron $u_{n}$ vorgegebene Ausgabe.
\end{defn}


Das Backpropagationverfahren realisiert einen Gradientenabstieg bezüglich der
sogenannter Energiefunktion $E$ mit
\[ E = \sum_{e \in \Mc} E^{(e)} = \frac{1}{2} \sum_{e \in \Mc} \sum_{v \in
  U_{n}} (t_{u}^{(e)} - a_{u}^{(e)})^{2}, \]
bezüglich einer festen Lernaufgabe \Mc. Die Aktivierung eines Neurons
\[ a_{v}^{(e)} = f(net_{v}^{(e)}) \]
einer Einheit $v \in U_{i}, 2 \leq i \leq n$ für ein Muster $e \in \Lc$ ist
durch die sigmoide Funktion $f$ über der Netzeingabe
\[  net_{v}^{(e)}= \sum_{u\in U_{i-1}} W(u,v) * a_{u}^{(e)} + \theta_{v} \]
gegeben.

In der Lernphase werden dem Netz Lernmuster $e \in \Mc$ trainiert, indem die
Gewicht $W(u,v)$ und $\theta_{v}$ verändert werden, wodurch es zu einer
Minimierung des Fehlers bezüglich der Eingabe kommen soll.


%----------------------------------------------------------------------
\subsubsection{Evaluierung der Neuro-Teams}
%----------------------------------------------------------------------



%----------------------------------------------------------------------
\subsubsection{ Crossover der Neuro-Teams}
%----------------------------------------------------------------------

%----------------------------------------------------------------------
\subsubsection{ Mutation der Neuro-Teams}
%----------------------------------------------------------------------







%----------------------------------------------------------------------
\subsection{Selectionsmethode}
%----------------------------------------------------------------------

\subsection{Diversität}
\label{sec:diversitaet}

Der Begriff der \emph{Diversität}\index{Diversität} taucht im Bereich der
\GP\ häufiger auf und beschreibt im allgemeinen die
Unterschiedlichkeit eines Pool oder den Unterschied zweier \GP-Individuen. Für
diese Arbeit soll die Diversität ausgehend von der phänotypischen Distanz
definiert werden.


\begin{defn}[Phänotypische Distanz] \label{def:inddiv}

Sei $\einmenge' \subset \einmenge $ eine endliche Eingabemenge  dann ist die
Phänotypische Distanz $d(indv_{i},indv_{j})$ zwischen den 
beiden Individuen $indv_{i},indv_{j} \in\ \indv$ definiert durch,

\begin{equation}
d(indv_{i},indv_{j})= 
\sum_{e \in \einmenge', \intp(indv_{i},e) \neq \intp(indv_{j},e)} 1.
\end{equation}

\end{defn}

Die \emph{Phänotypische Distanz}\index{Phänotypische Distanz} beschreibt nicht
direkt den Unterschied zweier Individuen untereinander sondern den
Unterschied in ihrem  Abbildungsverhalten bezüglich einer Eingabemenge. 
Die Phänotypische Distanz zweier Individuen steigt je unterschiedlicher ihrer
Ausgabemenge auf dieselbe Eingabemenge ist.  

Erweitert man die Definition~\ref{def:inddiv}, indem nicht nur der
Abstand von zwei Individuen zueinander berechnet, sondern die
der Abstände einer Menge $\pop \subset \indv$ von Individuen untereinander,
so erhält man ein Diversitätsmaß der Menge \pop.

\begin{defn}[Diversität] \label{def:div}

Sei \pop\ eine Population von Individuen und $d : \pop \times \pop \nach\
\naturals$ eine phänotypische Distanz, dann ist die Diversität wie folgt
bestimmt: 


% dann wird die Diversität $\Dc_{\Pc}$
%der Menge durch den Phänotypischen Abstand aus Definition~\ref{def:inddiv},
%mit \Ec\ eine endliche Eingabemenge, $\Ac_{\Ic}$ den Ausgabemengen von
%Individuen $\Ic\ \in \Pc$ bezüglich eines Interpreters \Rc\, wie folgt
%bestimmt.

\begin{equation}
\Dc_{\Pc} = \sum_{indv_{i} \in \pop} \sum_{indv_{j} \in \pop} 
 d(indv_{i},indv_{j}). 
\end{equation}

\end{defn}

Für die Diversität gilt, daß je höher der Wert von $\Dc_{\pop}$ ist, desto
höher ist die Diversität der Individuen in der Menge \pop\ bezogen auf ihr
Abbildungsverhalten.

Die hier definierte Diversität entspricht \emph{nicht} der allgemeinen
Definition der Diversität. Grundsätzlich beschreibt die Diversität aber durch
einen Wert die Verschiedenheit der Elemente in einer Menge, dies erfüllt auch
die hier definiert Diversität. Die Diversität ist hier auf den Ausgaben der
Individuen und nicht auf den Individuen selbst definiert, da sie so einfacher
zu berechnen ist und für das \gps-System einen wesentlichen Teil erfaßt, der
die Verschiedenheit von Individuen untereinander beschreibt.





 Nach dieser Täuschung entwickelte sich das Computerschach gleichsam
 als "Drosophila" der Künstlichen Intelligenz. 1950 wurde das erste
 Schachcomputerprogramm von Alan Turing verfasst. Obwohl das Programm
 ein elendiger Patzer war, erbrachte Turing der Beweis, dass Computer
 überhaupt Schach spielen können. Die darauf folgende Geschichte ist
 eine einzige Blamage der menschlichen Prätention, dass nur der
 menschliche Geistesblitz und die Vereinigung aller
 Persönlichkeitsmomente eines Spielers zu wirklich herausragenden
 Leistungen in der Lage seien. So hielt es der ehemalige russische
 Schachweltmeister Botwinnik, der zugleich Mathematiker und
 Schachprogrammierer war, für unmöglich, dass Maschinen einst die
 genialen Inspirationen von Menschen übertreffen könnten. Noch 1978
 wettete der Internationale Meister Levy erfolgreich mindestens ein
 Remis im Kampf gegen die immer unheimlicheren Maschinen erzielen zu
 können. 



 Although Herbert Simon and Allen Newell predicted in 1956 that a
 computer program would become world champion in only ten more years,
 several decades passed before a computer could win a match against
 the world champion. The reason seems to be that good human players
 are capable of identifying patterns in the chess board that led them
 to inspect only a handful of possible moves. Whereas computer chess
 programs can play decently because they examine thousands or millions
 of moves per second, a human player applies a higher-level
 strategy. Good moves "pop up" in the mind of a great master, the way
 we recognize a human face in the crowd. The process of recognition
 itself is not open to introspection. We can do it, but we don't know
 why. To their credit, Simon and Newell refined the minimax strategy
 by applying "alfa-beta pruning", a technique that identifies
 unfavorable branches in the move tree and removes them early.




1988 machte "Deep Thought" mit Großsprecher Levy kurzen Prozess. 1989
polierte Weltmeister Garry Kasparow gegen dieses Programm zwar den
gekränkten Narzissmus des Menschen wieder auf. Aber die Ehre der
Menschheit währte nicht allzu lange. Der geniale IBM Gedächtnisriese
"Deep Blue", der 250 Millionen Stellungen in einer Sekunde berechnet,
verwies den Weltmeister, der in dieser Zeit gerade mal drei bis vier
Konstellationen verinnerlicht, auf die Plätze.



Wer heute Rubinsteins geniale Kombinationen einem in jedem besseren
Spielzeugladen erhältlichen Schachcomputerprogramm einspeist, muss
regelmäßig nur wenige Sekunden warten, bis das Programm die
"menschlichen Geistesblitze" ausspuckt. Reuben Fines großmeisterliche
Einschätzung, beim Schach keine "leblose mathematische Übung" zu
sehen, sondern den Triumph des Geistes über die Materie" vereinbart
sich keineswegs mit dem Bild von dumpfen Gedächtnisleistungen der
Maschine. Die Maschinen haben mit ihren Siegen über menschliche Gegner
längst den Turing-Test bestanden. Ihre Kombinationen, "Opferfreude und
Waghalsigkeit" lassen eine Differenz zu menschlichen Strategien nicht
mehr erkennen.
 


Menschliche Gehirne haben Speichergrenzen, die für Computer nicht
gelten. Die Geschichte des Mensch-Maschinen-Wettkampfs ist vor allem
aber paradigmatisch für die Demontage einer Semantik, die den blinden
Flecken in der Selbstbeobachtung des Menschen besonders deutlich
macht. So sagte der große Meister Richard Reti im Schachspiel
offenbare sich, ob jemand Fantasie und Initiative habe. Der
eigentliche, feinste Reiz des Schachspiels liege darin, dass man dabei
geistig produktiv tätig ist. Zwischen Vatermord und Kastrationsangst
wurde Schach als menschliches Urdrama beschrieben und der französische
Psychologe Alfred Binet meinte: "Wenn wir in den Kopf eines
Schachspielers schauen könnten, würden wir eine ganze Welt aus
Gefühlen, Bildern, Emotionen und Leidenschaften sehen." Mag sein, aber
Schachprogramme kommen auch ohne diese bunte Welt erfolgreich zu
beeindruckenden Ergebnissen. Der Jahrhundertspieler Akiba Rubinstein,
dessen Kombinationen mitunter um die Welt telegrafiert wurden, um die
Virtuosität des menschlichen Geistes unter Beweis zu stellten, hatte
eine Einstellung, die nach den genannten Erkenntnissen dem Wesen des
Spiels wohl sehr viel näher kommt: "Gegen wen spielen Sie heute
Abend?" Rubinstein antwortete wie ein emotionsloser Rechner: "Heute
Abend spiele ich gegen die schwarzen Steine!"
 


 1991  & Fritz 1 / KnightStalker emerges as a fast 'null mover'. MChess
 dominates the PC market with some highly selective searching.\\
&   \\
 1992 Genius 1 by Richard Lang. This marks the move from dedicated to PC
 programs. Genius uses a selective search algorithm and dominates the
 market. \\
&   \\
 1995  & Fritz 3 reaches 100,000 nodes / second on a Pentium 90. The power of
 the PC now means that programmers can have the luxury of trying and testing
 much more elaborate search techniques. HIARCS also starts to do well as
 does Junior, both written in 'C' \\
&   \\
 ~1996  & Crafty launched by Bob Hyatt as a open source project. This marks the
 starts of the strong amateur programs. The internet becomes prevalent and
 it becomes relatively easy to find all necessary info on computer chess
 programming. Bob also introduces the World to bitboard as a way of
 generating chess moves. From this stage selective search rules - a pure
 brute force wouldn't stand a chance. \\

& \\
   1996      &  Deep Blue verliert gegen Kasparow mit 4 : 2. \\
%\hline 
& \\
    1997     &  Erstmals verlor ein Weltmeister (Kasparow) bei einem
                Schachduell gegen einen Computer. Der IBM-Computer 
                Deep Blue gewann gegen den PCA-WM mit 3,5 : 2,5. \\
%\hline 
&   \\
 1997  & Due to ICC and FICS (online chess) the programs are thoroughly tested
 against computer chess savvy opponents. King safety emerges as a major
 weakness. Programmers beef up king safety aspects of the evaluation.
 Shredder comes from nowhere to win the WCCC. \\
&   \\
 1998  & Parallel PC programs emerge Crafty and Deep Junior (1999). On the
 fastest hardware this gives 1,000,000 nodes per second. CSTal by Chris
 Whittington is launched. This aims to know how to attack and has a
 sophisticated evaluation function and slow search (5k node/sec)\\
&   \\
 1999  & Plethora of Winboard programs become freeware. This has definitely
 changed the market. Commercial apps no longer look so attractive. Anyone
 can have >50 engines on their PC without spending a penny.\\
&   \\
 2000  & Shredder is clearly strong. Gambit Tiger may have a more successful
 CSTal type approach and Rebel is still making progress with Century
 3.0 \\
2002 & Fritz 7 erreicht auf einem Athlon 1200 MHz Rechner ein Rating
        von 2748 Punkten.  \\



%---------------------------------------------------------------------- 
\subsubsection{LCT-Test}
%---------------------------------------------------------------------- 


%---------------------------------------------------------------------- 
\subsubsection{Der Bednorz-Schumacher-Test}
%---------------------------------------------------------------------- 


Der BS-2830-Test von Hubert Bednorz und Heinz-Josef Schumacher ist auf
aktuelle und vielleicht auch zukünftige Schachprogramme zugeschnitten,
für den Bereich ab ca. 2300 Elo. Der Test besteht aus 27 Stellungen

Jede Stellung wird dem Computer eingegeben und 15 Minuten lang
in der Grundeinstellung des Schachprogramms, aber ohne
Eröffnungsbibliothek, auf der Analysestufe berechnet. Notiert wird die
Zeit, nach der der Lösungszug am Bildschirm erscheint und bis zur
fünfzehnten Minute beibehalten wird. Verwirft das Programm den Zug
wieder, so werden 15 Minuten bzw. die Zeit notiert, nach der der
Lösungszug wieder erscheint. Findet das Programm ihn nicht, so wird
die Maximalzeit von 15 Minuten (900 Sek.) eingesetzt. Die 27
Einzelzeiten werden zu einer Gesamtzeit (GZ) in Minuten addiert, aus
der sich mit Hilfe der folgenden Formel der BS-Wert ergibt:

\[
BS = 2830 - (GZ / 17)^2
\]
%Ein kurzes Beispiel dazu: Ein Programm erreicht eine Gesamtzeit von
%337,9 Minuten. Wir teilen 337,9 durch 17 und multiplizieren das
%Zwischenergebnis anschließend mit sich selbst. Am Schluß ziehen wir
%das Ergebnis, in diesem Fall 395, vom Grundwert 2830 ab. Wir erhalten
%den BS-Wert 2435.


Der BS-Wert ist als Richtwert für die durchschnittliche Spielstärke
der Programme gegen Menschen auf der Turnierstufe (40 Züge in 2
Stunden) gedacht und genauso relativ wie die vergleichbaren Resultate
der SSDF-Ratingliste. Die Fehlertoleranz soll bis zu +/- 50 Elo
betragen.


%---------------------------------------------------------------------- 
\subsubsection{Nunn-Test}
%---------------------------------------------------------------------- 


Der ursprüngliche Nunn-Test war so konstruiert, dass er die Spielstärke
von Schachmaschinen unabhängig von ihrem Eröffnungsbuch testen
sollte. Er bestand aus zehn Teststellungen aus der ersten Phase des
Mittelspiels. Die Computer sollten aus jeder dieser Stellungen
gegeneinander antreten, einmal mit Weiß und einmal mit Schwarz. Das
Ergebnis diente als Indikator für die relative Spielstärke.


Dieser erste Test erwies sich als recht beliebt und einflußreich,
erregte aber auch teils mehr, teils weniger berechtigte Kritik. Der
vielleicht stichhaltigste Punkt war, dass zehn Stellungen einfach nicht
ausreichen, eine repräsentative Stichprobe der verschiedenen möglichen
Mittelspielpositionen zu bilden. Deshalb wurde ihre Anzahl in diesem
zweiten Nunn-Test auf 20 erhöht. Ich möchte an dieser Stelle etwas
genauer schildern, wie ich die Auswahl getroffen habe.


Zuallererst habe ich die Häufigkeit analysiert, mit der verschiedene
Eröffnungen im praktischen Spiel auftraten. Dafür benutzte ich die
große Datenbank MegaBase 2000. Daraus wählte ich 20
Eröffnungsvarianten, die einer von mir errechneten allgemeinen
Verteilungshäufigkeit von Eröffnungen entsprachen. Natürlich ist die
Entsprechung nicht perfekt, weil auch 20 Stellungen nicht genug sind,
jede wichtigere Eröffnung zu repräsentieren. Innerhalb jeder Eröffnung
suchte ich anschließend eine Stellung nach den folgenden Kriterien
aus:


Die Stellung sollte für die betreffende Eröffnung repräsentativ sein.


Die Stellung sollte für die betreffende Eröffnung von gewisser
Wichtigkeit sein und in der Praxis häufig auftauchen. Jede Position,
die weniger als 100 mal in der Mega 2000 stand, wurde verworfen.


Die Stellung sollte nicht die eine oder andere Seite klar in Vorteil
bringen. Jede Position, in der die praktischen Ergebnisse eine Seite
mit mehr als 60:40 begünstigten, wurde ausgeschlossen. (Hier wie auch
bei anderen Zahlen habe ich alle Prozentwerte auf volle Zahlen
gerundet.)

 Die Stellungen insgesamt sollten möglichst viele verschiedene Typen
 von Mittelspielpositionen beinhalten, z.B. offenes, geschlossenes
 Zentrum, dynamisches Zentrum, Rochaden auf der gleichen und auf
 entgegengesetzten Seiten, unterschiedliche Bauernstrukturen, und
 anderes mehr.


Die Stellungen sollten denen aus dem ersten Test nicht ähnlich sein.

Ich sollte einen Punkt betonen: Genau wie beim ersten Nunn-Test habe
ich in keiner Phase irgendein Schachprogramm verwendet. Genauer
gesagt: Ich habe keine der Positionen einem Computer eingegeben oder
analysiert, und ich habe keine Ahnung, was die Ergebnisse des Test
sein könnten.


Ein Kritikpunkt am alten Test, der jeder Grundlage entbehrte, war, er
sei so konstruiert, dass er einige Maschinen begünstige und andere
benachteilige. Das war für den ersten Test nicht wahr und stimmt auch
nicht für diesen. Vielleicht stellt sich heraus, dass irgendeine
Maschine im neuen Test schlechte Ergebnisse erzielt. Wenn das
passiert, sollte man sich fragen, ob ein Programm, das bei 20 häufig
auftretenden Positionen aus den wichtigsten Eröffnungen schlecht
abschneidet, nicht einfach tatsächlich schlechter Schach spielt als
ein Programm, das gute Ergebnisse erzielt.


Ich hoffe, dieser Test wird so populär wie der erste, und bietet eine
neue und genauere Möglichkeit, Buch-unabhängig die Spielstärke zu
erfassen.



Im Kapitel~\ref{sub:GCAna} haben wir eine Anaylse über
die Häufigkeit der benutzten Funktion in den einzelnen Modulen der Individuen
durchgeführt. Auf dieser Grundlage könnte man wahrscheinlich eine bessere Auswahl 
der Funktions- und Terminalmengen durchführen, als sie in den Vortests durchgeführt
wurden. Eine weitere Möglichkeit das Problem der Funktionsmengen zu lösen
wäre der Einsatz von  Developmental Genetic Programming (DGP)
\index{Developmental Genetic Programming} wie sie Robert Keller in den Artikeln~\cite{keller:1999:TEGCGP}
und \cite{keller:2001:gecco} vorgestellt hat. 




Diese kann leider durch diese Art der Analyse nicht erkannt werden.
Durch die genutzte Individuenstruktur, kann aber die Kombination der Funktionen
untereinander durch eine statische Analyse des Individuum nicht herraus gefunden
werden, da sich ja die aktiven Bereiche des Individuum durch den Programmfluss und
somit der Eingabe ergeben.
