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