Fehler Vorlage:Schachbrett: Die Einbindung mit alter Syntax ist nicht mehr möglich!
Hilfe zur Umstellung auf die neue Syntax gibt es unter Vorlage:Schachbrett/Konvertieren.
Ein Schachprogramm ist ein Computerprogramm zum Spielen von Schach. Es läuft entweder auf Allzweckcomputern wie PCs als ein Programm unter vielen oder in speziell zum Schachspielen angefertigten Schachcomputern. Die Entwicklung von Schachprogrammen ist eine Disziplin des Computerschachs. Zur Begriffserklärung des Schach-Frontends siehe den nächsten Abschnitt.
In der Regel werden heute Schachprogramme, die im folgenden Zusammenhang auch Engine (engl. Motor, hier im Sinne von Rechenmaschine) genannt werden, mit einer grafische Oberfläche (auch Schach-Frontend, Schach-Interface oder Schach-GUI genannt) vertrieben. Dabei ist die Engine für die Berechnung der Züge und Bewertung der Schachstellungen zuständig. Das Schach-Frontend hingegen ist selbst ein Computerprogramm, welches die Figuren in der Regel grafisch auf dem Monitor darstellt und Zugeingaben mit der Maus akzeptiert und diese an die Engine weiterreicht. Durch diese klare Trennung zwischen Schach-Interface und Engine werden so Spiele zwischen verschiedenen Schach-Engines ermöglicht, sowie Verbindungen über das Internet (mit Hilfe eines Schachservers) oder über das lokale Netzwerk, um mit entfernten Gegnern zu spielen.
In diesem Artikel wird das Schachprogramm in seiner Form als Engine beschrieben. Schach-Frontends werden des Weiteren nicht mehr berücksichtigt. Auch soll auf kontrete Implementierungsdedails ob in Soft- oder Hardware verzichtet werden.
Für die Kommunikation zwischen Schachengine und Frontend gibt es zwei weit verbreitete offene Schach-Kommunikationsprotokolle. Einmal das XBoard-Protokoll und das neuere Universal Chess Interface (UCI). Die Stellungen und Partien werden in proprietären Formaten oder auch im offenen PGN-Format gespeichert.
In Gegensatz zur grafischen Darstellung der Figuren im Bildschirm ist auch der Einsatz von spezieller Schach-Hardware (z.B. DGT-PC-Schachbrett) möglich. Diese macht das Spielen mit dem Computer sehr komfortabel, da die Figuren wirklich greifbar vor dem Spieler stehen. Dies darf nicht mit Schachcomputern verwechselt werden, die speziell zum Schachspielen gebaut werden und in der Regel ein Schachprogramm als Firmware fest eingebaut haben.
Als eines der stärksten kostenlos erhältlichen Schachprogramme gilt das Open Source-Projekt Crafty von Robert Hyatt. Ein weiteres spielstarkes Open-Source-Schachprogramm ist Fruit, welches bei der Weltmeisterschaft im Computerschach 2005 den zweiten Platz belegte. Das Programm Zappa, das die Weltmeisterschaft 2005 überlegen gewinnen konnte, steht lediglich als Freeware im Internet zur Verfügung. Ebenfalls sehr bekannt ist das unter der GNU Public Licence (GPL) stehende Programm GNU Chess.
Zur komfortablen Bedienung wird noch eine Schach-Frontend benötigt. Hierzu kann beispielsweise das Programm XBoard genutzt werden. Es läuft unter den Betriebssystemen Windows (unter dem Namen WinBoard), Unix/Linux und Amiga und wird zusammen mit GNU Chess ausgeliefert. Auch das ebenfalls unter der GPL veröffentlichte José, ein graphisches java-basierendes Schach-Frontend mit Datenbankfunktionen, ist sehr gut. Das Schach-Frontend von KDE ist Knights.
Eine weitere beliebte Benutzeroberfläche für mehr als 250 Schachprogramme ist Arena, die als Freeware verfügbar ist. Es gibt auch weitere Freeware, die sich für den Einsteiger hervorragend eignet, so beispielsweise Arasan.
Ambitionierte Spieler greifen oft zu kommerziellen Programmen, die neben dem reinen Schachspiel auch viele Zusatzmöglichkeiten bieten, wie beispielsweise Partieanalyse und Schachtraining. Sehr bekannt dürften die Programme Shredder und Fritz sein. Diese Programme werden unter anderem von der Hamburger Firma ChessBase vertrieben, die den (europäischen) Markt für professionelle Schachsoftware – nicht zuletzt aufgrund langjähriger enger Zusammenarbeit mit dem Spitzenspieler Garri Kasparow – zunehmend beherrscht.
Inzwischen kann man hochklassiges Schach auch auf Mobiltelefon, PDA und sonstigen Handhelds spielen.
Um Schachvarianten einmal auszuprobieren kann das freie Programm ChessV benutzt werden.
Ein Schachprogramm besteht mindestens aus einem Zuggenerator, einer Bewertungsfunktion und einem Programmteil zur Steuerung der Suche und der Auswahl des nächsten Zuges. Eines der wichtigsten Unterscheidungsmöglichkeiten von Schachprogrammen ist die interne Brettdarstellung, die das Rückgrat bildet und alles anderen Bestandteile miteinander verbindet.
Der Zuggenerator erzeugt, ausgehend von einem bestimmten Spielstand, eine Liste aller bei diesem Spielstand regelkonformen Antwortzüge (mögliche Bewegungen der Spielfiguren). In der Anfangsstellung sind 20 Figurenbewegungen möglich (16 Bauernzüge, 4 Springerzüge), im weiteren Spielverlauf kann man mit ca. 40 möglichen Antwortzügen pro Stellung rechnen, wobei auch komplizierte Züge wie Rochaden, Bauernumwandlungen und en passant-Schläge zu berücksichtigen sind. Die Implementation des Zuggenerator hängt eng mit der internen Brettdarstellung zusammen. Hier gibt es drei wichtige Vertreter:
Grundstellung: 12x10-Darstellung
-1 (0) | -1 (1) | -1 (2) | -1 (3) | -1 (4) | -1 (5) | -1 (...) | -1 | -1 | -1 |
-1 (10) | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
-1 (20) | 21 | 22 | 23 | 24 | 20 | 23 | 22 | 21 | -1 |
-1 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | -1 |
-1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -1 |
-1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -1 |
-1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -1 |
-1 | 0 | 0 | 0 (73) | 0 | 0 | 0 | 0 | 0 | -1 |
-1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | -1 |
-1 | 11 | 12 | 13 | 14 | 10 | 13 | 12 | 11 | -1 |
-1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
-1 | -1 | -1 | -1 | -1 (...) | -1 (115) | -1 (116) | -1 (117) | -1 (118) | -1 (119) |
Figur | Codierung für Weiß | ...für Schwarz |
---|---|---|
leeres Feld | 0 | 0 |
Bauer | 1 | 2 |
Turm | 11 | 21 |
Springer | 12 | 22 |
Läufer | 13 | 23 |
Dame | 14 | 24 |
König | 10 | 20 |
ungültiges Feld | -1 | -1 |
Bewegung | Konstanten |
---|---|
wie ein Turm | -10, -1, +1, +10 |
wie ein Läufer (diagonal) | -11, -9, +9, +11 |
wie ein Springer | -21, -19, -12, -8, +8, +12, +19, +21 |
21 | 22 | 23 | 24 | 20 | 23 | 22 | 21 |
2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
11 | 12 | 13 | 14 | 10 | 13 | 12 | 11 |
0 8 16 24 32 40 48 56 63 | | | | | | | | | Bauern B 00000000 11111111 00000000 00000000 00000000 00000000 11111111 00000000 Türme T 10000001 00000000 00000000 00000000 00000000 00000000 00000000 10000001 Springer S 01000010 00000000 00000000 00000000 00000000 00000000 00000000 01000010 Läufer L 00100100 00000000 00000000 00000000 00000000 00000000 00000000 00100100 Damen D 00010000 00000000 00000000 00000000 00000000 00000000 00000000 00010000 Könige K 00001000 00000000 00000000 00000000 00000000 00000000 00000000 00001000 Farbe F 11111111 11111111 00000000 00000000 00000000 00000000 00000000 00000000
Die Bewertungsfunktion liefert die Bewertung einer Stellung zurück, ohne die Nachfolgezüge zu bestimmen. Sie setzt sich aus einer materiellen und einer positionellen Komponente zusammen. Die positionelle Komponente ergänzt die materielle, da die Stärke der Spielfiguren auch von ihren Positionen untereinander abhängen. Vereinfachte Bewertungsfunktionen können auch von menschlichen Spielern ausgeführt werden, was allerdings nur eine historische Bedeutung hat. Computerprogramme zeigen sehr oft die Bewertung einer Spielsituation numerisch (in sogenannten Bauerneinheiten) an, wobei positive Werte Vorteile und negative Werte Nachteile für einen bestimmten Spieler bedeuten.
Für die materielle Wertung werden für die auf dem Brett befindlichen Spielfiguren Werte addiert. Eine einfache Zuordnung ist in der folgenden Tabelle angegeben. Für Schwarz gelten die entsprechenden negativen Werten:
Bauer | Springer | Läufer | Turm | Dame |
---|---|---|---|---|
100 | 275 | 325 | 465 | 900 |
Der König braucht nicht mitgezählt zu werden, da beide Parteien während des Spiels jeweils einen König haben.
Die positionelle Wertung zu bestimmen, ist eine Aufgabe von größerer Komplexität, in der sich die verschiedenen Schachprogramme deutlich voneinander unterscheiden und die Bewertungsfunktionen der kommerziellen Programme deren gut gehütetes Geheimnis ist. Dabei wird versucht, Stellungen aufgrund von schachrelevanten Parametern zu bewerten. Schachrelevante Parameter lassen sich grob klassifizieren in Königssicherheit, Bauernstruktur, beherrschte und bedrohte Felder sowie Figurenentwicklung.
Innerhalb dieser Kategorien gibt es quasi beliebig viele Parameter (für Bauernstrukturen z. B.: Freibauer, Doppelbauer, Hebel, Widder, Isolani, Bauernketten; für Königssicherheit z. B. König kann leicht links oder rechts rochieren, oder im Zentrum bleiben, Bauern vor dem König). Es bietet sich an, diese Parameter zunächst wertneutral aus der gegebenen Stellung zu extrahieren. Kann ein Schachprogramm die Werte dieser Parameter pro Stellung effizient bestimmen, müssen diese untereinander gewichtet werden. Die Gewichtung der positionellen Komponente kann teilweise automatisch über das Analysieren von Schachdatenbanken oder durch Spiele gegen andere Schachprogramme erfolgen. Einfacher aufgebaute Bewertungsfunktionen verwenden für die positionelle Komponente statische Positionsgewichte für die sechs Spielfigurentypen, die aber für Eröffnung, Mittel- und Endspiel jeweils unterschiedlich ausfallen.
Schachprogrammierer stehen vor der Entscheidung, wie viel Rechenzeit sie für die positionelle Komponente einer ausgefeilten Bewertungsfunktion aufwenden sollen, und welche Parameter überhaupt einfließen sollen: Je tiefer die Schachprogramme den Suchbaum analysieren können, desto eher wird nämlich die Umwandlung positioneller Vorteile in materielle Vorteile sichtbar.
Die Bewertungsfunktion kann außer in Grenzfällen wie Endspielen oder Matt- oder Pattsituationen keine objektiv richtigen Ergebnisse liefern. Indem die Bewertungsfunktion die materielle und positionelle Komponente zu einer einzigen Bewertungszahl zusammenfasst, ermöglicht sie aber die Sortierung und Auswahl des "besten" bzw. "schlechtesten" Zuges.
In der Regel wird die Bewertungsfunktion vom Programmierer implementiert und während des Spieles nicht mehr verändert. Eine erweiterte Möglichkeit besteht darin, während des Spieles vergleichbare Stellungen aus einer Schachdatenbank zu ermitteln und so die Gewichtung der positionellen Parameter zu optimieren. Dies entspricht eher dem menschlichen Ansatz. Ein erfahrener Spieler berücksichtigt Kriterien wie Königssicherheit oder Freibauern auch unter Einbeziehung ihm bekannter Partien und deren Ergebnissen.
Grundsätzlich basiert die Steuerung der Suche auf dem Aufbau eines Positionsbaumes (Suchbaum) beginnend bei der aktuellen Stellung, allen Antwortzügen des Anziehenden, sowie für jeden Antwortzug aller möglichen Antwortzüge des Nachziehenden und so weiter, allein begrenzt durch die Rechenleistung und die für den Zug zur Verfügung gestellte Zeit. Jede dabei entstehende Stellung wird prinzipiell bewertet. Am Ende der Berechnung erfolgt die Zugauswahl nach dem Minimax-Algorithmus.
Da die Anzahl der zu untersuchenden Stellungen exponentiell wächst, andererseits eine höhere Suchleistung eine entsprechende Spielstärkeverbesserung hervorbringt, wurde von Programmierern in den rund 50 Jahren der Programmentwicklung ein ganzes Arsenal an Beschleunigungsmaßnahmen erfunden, zum Beispiel:
Schach wird im Wettkampf auf Zeit gespielt, das heißt, für eine Anzahl von Zügen steht nur eine definierte Zeit zur Verfügung. Viele Schachprogramme sind daher mit einer Eröffnungsbibliothek ausgestattet, in der sehr viele "gute" Zugreihenfolgen in der Eröffnungsphase von Schachspielen abgespeichert sind. In der Anfangsphase des Schachspiels sieht das Programm in dieser Bibliothek nach, welcher Zug in einer bestimmten Brettstellung der geeignetste ist. Dieses "Nachsehen" geht schneller, als den Zug auszurechnen. Die so gesparte Rechenzeit steht dem Programm dann in späteren Phasen des Spiels zur Verfügung. Das Verfahren, Brettstellungen einschließlich der "guten" Züge abzuspeichern, ist nur für Eröffnung und Endspiel sinnvoll, da hier die Anzahl der Brettstellungen noch überschaubar ist. Eröffnungsbibliotheken kommerziell erhältlicher Programme haben derzeit eine Größe von 200 bis 250 Megabyte. Sie werden meist aus Meisterpartien generiert. Dies birgt die Gefahr, dass auch unbemerkte Fehler übernommen werden, die das Programm aus eigener Berechnung nicht spielen würde.
Einen großen Anteil an der Spielstärke hat die Abstimmung der Eröffnungsbibliothek auf die später in der Partie genutzte Bewertungsfunktion.
Im Endspiel, wenn nur noch wenige Figuren auf dem Brett sind, kann man den optimalen Zug im Vorhinein durch vollständige Analyse berechnen. Es gibt nicht wenige Endspielstellungen, in denen das menschliche Denken, aber auch die Computeranalyse in Echtzeit völlig überfordert wären. Viele Schachprogramme verwenden deshalb Endspiel-Datenbanken, die alle möglichen Stellungen mit 3, 4 oder 5 Steinen sowie deren Ausgang (bei optimalem Spiel) enthalten. Das Erstellen von Endspiel-Datenbanken geht auf Ken Thompson zurück. Die ersten Sechssteiner wurden 1991 von Lewis Stiller vollständig berechnet.
Schachdatenbanken enthalten gespielte Partien. Sie helfen z.B. beim Studium von Eröffnungen und bei der Vorbereitung auf die nächsten Gegner.
Für Schachprogramme lassen sich aus dem Datenbestand Eröffnungsbibliotheken generieren. Auch ist es möglich, während der Partei vergleichbare Stellungen aus einer Schachdatenbank zu ermitteln und unter Berücksichtigung des dort verzeichneten Partieverlaufs positionelle Bewertungsparameter (siehe oben) zu optimieren (dynamische Bewertungsfunktion).
Die Geschichte des Schachprogramms hängt sehr eng mit der Geschichte des Schachcomputers zusammen und lässt sich zumeist nicht getrennt behandeln. Hier werden lediglich Entwicklungen der grundlegenden Algorithmen beschrieben. Zu den in den letzen Jahren medienwirksam ausgetragenen Wettbewerben mit Weltklassespielern siehe den Artikel Computerschach.
Alan Turing entwickelte während des zweiten Weltkrieges in Bletchley Park ein Verfahren, welches jedem möglichen Zug einen Wert zuweist. So funktionierte Turings Schachprogramm:
Da jedoch, besonders in der Eröffnungsphase, die meisten zur Auswahl stehenden Züge das gleiche Ergebnis (+/- Null) lieferten, führte Turing auch einige positionelle Bewertungskriterien ein.
Fehler Vorlage:Schachbrett: Die Einbindung mit alter Syntax ist nicht mehr möglich!
Hilfe zur Umstellung auf die neue Syntax gibt es unter Vorlage:Schachbrett/Konvertieren.
Die erste Partie der Papiermaschine von Turing fand im Jahr 1952 statt und soll hier beispielhaft aufgeführt werden:
Zu der Papiermaschine von Alan Turing gibt es auch Implementierungen für heutige Computer.
In den Bell Laboratories hielt Claude Shannon am 9. März 1949 einen für die Entwicklung von Schachprogrammen entscheidenen Vortrag. Er beschrieb dort die interne Brettdarstellung, die Baumsuche, die Bewertungsfunktion sowie die Zugsuche mit Hilfe des Minimax-Algorithmus. Er gab auch schon zwei verschiedene Strategien zur Bestimmung des besten Zuges an: A-Strategie und B-Strategie
John von Neumann klassifizierte das Schachspiel in seiner Spieltheorie als Zwei-Personen-Nullsummenspiel mit vollständiger Information. Diese Klasse von Problemen (dazu gehört auch Tic Tac Toe) kann mit dem Minimax-Algorithmus gelöst werden. Schach ist jedoch zu komplex, um den Suchbaum vollständig abarbeiten zu können. Schachprogramme sind deshalb auf Näherungsverfahren angewiesen.
Das Schachprogramm von John von Neumann wurde Mitte der 50er Jahre fertiggestellt und lief auf dem 1950 aufgestellten Röhrenrechner MANIAC I. Zur Vereinfachung wurde nur auf einem 6x6 Brett gespielt. Das Programm spielte insgesamt 3 Partien: Die erste gegen sich selbst, eine weitere verlor es gegen einen starken Schachspieler, obwohl dieser ihm eine Dame vorgab, und die dritte gewann es gegen eine junge Frau, die erst seit einer Woche Schach spielte und extra für dieses Spiel trainiert hatte.
Zum ersten Mal hat ein Mensch gegen ein Schachprogramm verloren. Diese vereinfachte Schachvariante wird auch Los Alamos Chess genannt (siehe auch Schachvarianten).
1958 wurde die Alpha-Beta-Suche von Allen Newell, John Shaw und Herbert Simon entdeckt und brachte einen gewaltigen Leistungsschub.
Fehler Vorlage:Schachbrett: Die Einbindung mit alter Syntax ist nicht mehr möglich!
Hilfe zur Umstellung auf die neue Syntax gibt es unter Vorlage:Schachbrett/Konvertieren.
Das erste Programm, das an menschlichen Turnieren teilnahm, war MacHack, das 1966 von Richard Greenblatt am MIT entwickelt wurde.
Von 1967 bis 1970 kam es zu einem Boom in der Schachprogrammierung, welcher in die erste Computerschach-Meisterschaft der Geschichte mündete, die von der Associaton for Computing Machinery (ACM) ausgetragen wurde. Sieger war Chess 3.0.
Ken Thompson entwickelte 1979 die berühmte Schachmaschine Belle (siehe Schachcomputer), die mit einer Eröffnungsbibliothek und Hashtables arbeitete.
Die Verteilung des Rechenaufwandes auf viele einzelne Teilprozesse, die parallel ablaufen können und so Multi-Prozessor-Systeme sinnvoll nutzen, ist aufgrund der Baumsuche nicht trivial und ein aktuelles Forschungsgebiet der Schachprogrammierung. (siehe Hydra)
Es gibt eine Vielzahl an Wettbewerben bei denen sich Schachprogramme in ihrer Spielstärke gegenseitig messen. Einer der wichtigsten ist die WCCC (World Computer Chess Championship):
Nr. | Termin | Austragungsort | Siegerprogramm | Entwickler | Herkunftsland | Hardware |
---|---|---|---|---|---|---|
1. | 1974 | Stockholm, Schweden | Kaissa | Mikhail Donskoy | Russland | |
2. | 1977 | Toronto, Kanada | Chess 4.6 | David Slate, Larry Atkin | USA | CDC |
3. | 1980 | Linz, Österreich | Belle | Kenneth Lane Thompson | USA | DEC PDP-11/23 + 1700 Spezialchips, entwickelt von Ken Thompson |
4. | 1983 | New York, USA | Blitz | Robert Hyatt | USA | Cray X-MP |
5. | 1986 | Köln, Deutschland | Blitz | Robert Hyatt | USA | Cray X-MP |
6. | 1989 | Edmonton, Kanada | Deep Thought | Feng-hsiung Hsu, Thomas Anantharaman, Murray Campbell, Andreas Nowatzyk, Mike Browne | USA | Dual Prozessor Spezialchips, entwickelt von Feng-hsiung Hsu |
7. | 23.-27. November 1992 | Madrid, Spanien | ChessMachine (Rebel) | Ed Schröder | Niederlande | Archimedes RISC |
8. | 25.-29. Mai 1995 | Hong Kong | Fritz 3 | Frans Morsch | Niederlande | Pentium 90MHz |
9. | 14.-19. Juni 1999 | Paderborn, Deutschland | Shredder | Stefan Meyer-Kahlen | Deutschland | Pentium III 550MHz |
10. | 6.-11. Juni 2002 | Maastricht, Niederlande | Deep Junior 7 | Amir Ban, Shay Bushinsky | Israel | Multiprozessor |
11. | 22.-29. November 2003 | Graz, Österreich | Shredder | Stefan Meyer-Kahlen | Deutschland | Dual Intel Xeon 3GHz |
12. | 4.-12. Juli 2004 | Ramat-Gan, Israel | Junior | Amir Ban, Shay Bushinsky | Israel | 4 CPUs 2.2 GHz, Proliant HP |
13. | 13.-21. August 2005 | Reykjavik, Island | Zappa | Anthony Cozzie | USA | 2 AMD Opteron Dualcore CPUs 2.2 GHz |
Wichtig ist auch zu wissen, dass eine große Spielstärke gegen ein anderes Schachprogramm nicht bedeuten muss, dass dieses auch gegen einen menschlichen Gegner besser ist. Wettbewerbe von Schachprogrammen untereinander sagen nur bedingt etwas über die Spielstärke gegen Menschen aus.