Wie denkt ein Schachprogramm?

Werbung
1
Wie denkt ein Schachprogramm?
Ich möchte hier einmal auf den grundlegenden Unterschied, zwischen dem menschlichen Schachspiel und der Zugwahl
eines Computers eingehen. Ein menschlicher Schachspieler mit einer Wertungszahl über 2000 sollte in der Lage sein,
einen langfristigen Plan für eine konkrete
Spielstellung, zu entwerfen. Dabei spielt
Erfahrung eine sehr grosse Rolle.
Réti sagte einmal auf die Frage, wieviele
Züge er vorausrechne: "Genau einen, - das
ist aber dann der Richtige.". Wir sprechen
oft von einem Gefühl, das uns in die eine
oder andere Richtung leitet. Manchmal ist
es rational auch nicht komplett begründbar, wieso wir uns gerade für den einen
Plan entscheiden. Sicherlich erlernt ein
starker Schachspieler auch die genaue Vorausberechnung. Das heisst aber nicht, dass
Spieler ab einer Stärke von 2000 wesentlich
tiefer rechnen, als solche, die unterhalb
dieser Spielklasse liegen. Der wesentliche
Punkt ist der Plan und das Verständnis
in verschiedenen Stellungen die "passende"
Züge zu spielen.
Figure 1.
MinMax-Verfahren
Ergebnisse für eine Zugwahl zu
nutzen. Wer sich die Mühe machen
möchte, versuche dies: "Notiere alle
unterschiedlichen Stellungen, die nach
einer Zuganzahl von 4 möglich sind".
Es werden ca. 2.6 Millionen Stellungen
sein (bei einer Zugtiefe von 14 haben
wir soviele Stellungen wie Sterne im
Universum [aus "Schach am PC"]).
Aber wie kann ein Schachmotor
abzuschätzen, welcher Zug besser ist als
ein anderer?
Wie spielt ein Computer?
Dazu schauen wir kurz in das Innere
eines Schachmotors. Ein Schachprogramm
bekommt als Eingabe eine Stellung und
soll (abhängig von Zeit oder Tiefe) den
besten in dieser Stellung möglichen Zug
finden und zurückliefern. Dazu werden von
dieser Stellung aus alle regelkonformen
Züge ermittelt und in einer Zugliste gespeichert. Die von dieser Stellung, mit den
Zügen der Zugliste, erreichbaren Stellungen betrachtet das Programm auf gleiche
Weise und fährt bis zu einer konkreten
Zugfolgenanzahl, sagen wir t fort.
Durch die Komplexität des Schachspiels,
ist
es
einem
Schachprogramm
nicht möglich (ausser in konkreten
Endspielstellungen) bis zum Partieende
vorauszuschauen und die entstehenden
Dazu macht man sich folgende Regel zu
nutze: "Wir gehen in der Schachprogrammierung davon aus, dass jeder Spieler immer den für sich besten Zug spielen wird.".
Jetzt können wir versuchen, die in der Tiefe
t entstandenen Stellungen abzuschätzen,
z.B. "gut für Weiss" oder "sehr gut für
Weiss". Für genauere Analysen führen wir
einen Zahlenwert ein, wobei ein positiver
Wert besser für Weiss und ein negativer
besser für Schwarz ist.
Der Teil eines Schachmotors, der sich
mit dieser Stellungsbewertung befasst,
entscheidet fast allein über das Spielniveau
des Schachprogrammes. Sollte sich z.B. die
Bewertung einer Stellung ausschließlich
auf das Material beziehen, so macht der
Computer wahrscheinlich den erstbesten
Zug, da er keinerlei Kombinationen sieht,
die Material aus der Startstellung gewinnt.
Nun müsste man ihm beibringen, dass es
2
wichtig ist, in der Eröffnungsphase die Leichtfiguren zu entwickeln und das Zentrum
unter Kontrolle zu bringen. Realisieren läßt
sich solch eine Eigenschaft eigentlich nur
durch eine Bewertung der Felder, z.B.
sind Felder im Zentrum höher bewertet
als Randfelder. Das Programm versucht,
ohne Material zu verlieren, das Zentrum zu
besetzen.
Aber wie erfährt das Schachprogramm, welcher Weg zu der besten Stellung führt?
Dazu wird in den Blättern (Knoten in
unterster Ebene) die Bewertung gespeichert
und je nachdem, welche Farbe am Zug ist,
das Maximum für Weiss und das Minumum
für Schwarz an den Knoten darüber weitergeleitet. Da Weiss das Maximum wählt,
wir erinnern uns, versucht er einen Zug
zu wählen, der für ihn besser ist als die
anderen (siehe dazu Abbildung 1). Was
können wir dieser Technik entnehmen? Ein
Schachprogramm versucht im Laufe eines
Schachspiels lediglich seine Figuren etwas
besser hinzustellen (z.B. um den Aktionsradius einer Figur zu erhöhen) und die Figuren des Gegners auf schlechte Felder zu
drängen. Wir können also nicht von einem
Plan sprechen. Aus strategischer Sicht ist
ein Schachprogramm dem Menschen weit
unterlegen, - aber der grosse Vorteil ist
seine genaue und (nun schon recht tiefe)
Vorausberechnung. Ein Computer macht
keine Fehler und bestraft die seines Gegners gnadenlos.
Von der Fazination der Schachprogrammierung gebannt, habe ich im Oktober
2002 mit meinem Mitkommolitonen Till
Zoppke eine Schachprogrammier AG in
der Freien Universität Berlin gegründet
(nunmehr sind es über 30 Mitglieder).
Auch vom Schachverein ZIB/ACCSB sind
einige dabei: Maro Bader, Jan Kretzschmar,
Nima Keshvari, Mario Martin und Dominic
Freyberg. Wir haben uns das Ziel gesetzt
zunächst "alles einmal auszuprobieren" und
nicht ein Schachprogramm zu schreiben,
das einfach durch Kopieren anderer bereits entwickelter und veröffentlichter Ideen
entsteht. Wir wollen unsere eigenen Erfahrungen machen und wenn es darauf hin-
deutet, dass es in dem einen oder anderen
Bereich nur mit den aktuellen Verfahren zu
lösen ist, diese weiter zu verbessern. Die
Programmquellen sind frei verfügbar und
somit hat jeder die Möglichkeit den Aufbau und Inhalt unseres Schachprogramms
anzuschauen.
Wer gegen unseren FUSC# (FU Schachprogrammierung, C# ist gewählte Programmiersprache) spielen möchte, kann dies
tun. Es spielt auf dem Schach.de-Server
unter dem Namen "DeepFusch". Anregungen und Kritiken sind sehr erwünscht! Jedem ist es auch erlaubt das Programm
von der Internetseite herunterzuladen und
auf dem HeimPC zu verwenden. Es ist
sogar möglich gegen FUSC# auf der FritzOberfläche zu spielen. Eine kostenlose
Alternative wäre Arena, eine graphische
Oberfläche, auf der ebenfalls mit FUSC#
gespielt werden kann.
Den
ersten
öffentlichen
Auftritt
hatte FUSC# in einem Blitzturnier
am 14.Juni 2003 zur Langen Nacht der
Wissenschaften. Es landete bei einem
starken Spielerfeld im Mittelfeld und
stürzte nicht ab (was bei so einigen
anderen Computerschachdebüts anders
war). Wir hatten uns, wie im Vorjahr,
eine ganze Menge Rund ums Schachspiel
überlegt. Damals bot Miguel Domingo
ein Blindspiel gegen ein schachlich
wirklich anspruchsvolles Publikum. Es
gab viele Schachprogrammiervorträge,
ein Turnier und Simultanschach (Dennis
Epple, Dominic Freyberg). Als Highlight
hatten wir uns, da es im Vorjahr ein
sehr großer Erfolg war, zwei Spieler
eingeladen, die unter etwas unwürdigen
Bedingungen im Foyer (Eingangshalle des
Informatikbereiches) spielten, im Vorjahr
spielten an gleicher Stelle Peter Held
und Sebastian Kitte. Diese beiden Spieler
waren in diesem Jahr Thomas Trösch
und Benjamin Dauth. Die spannenden
Partien wurden unter den Kommentaren
von Miguel Domingo und Christian Düster
in eine anderen Raum übertragen. Das
Feedback der Besucher war sehr positiv
und ich wurde gebeten auch für das
nächste Jahr eine solche Veranstaltung
zu organisieren. Doch das alles war
nicht möglich ohne die FUSC#-Crew
und alle bereits erwähnten Beteiligten, -
3
nocheinmal vielen Dank an Euch!
Beitrag von Marco Block
FUSC# ist im Internet unter folgender
Adresse zu finden:
http://www.inf.fu-berlin.de/~fusch
Herunterladen