Schach ist ein strategisches Brettspiel, das von zwei Spielern gespielt wird. Die Spieler bewegen abwechselnd ihre Spielsteine auf dem Spielfeld (dem sogenannten Schachbrett). Das Ziel des Spiels ist es, die gegnerische Königsfigur anzugreifen, nämlich so, dass der angegriffene Spieler keine Möglichkeit mehr hat den Angriff durch das Bewegen einer seiner Figuren abzuwehren. Diese Position nennt sich dann Schachmatt.
Schach wird auf einem Schachbrett gespielt. Ein Schachbrett hat 64 Felder bestehend aus 8 Spalten und 8 Reihen. Zu Anfang eines Spiels sind 32 Spielfiguren auf dem Feld. Beide Spieler, der Beginnende Spieler (Weiß), wie auch der Antwortende Spieler (Schwarz), haben jeweils 16 Figuren zur Verfügung: einen König, eine Dame, zwei Türme, zwei Läufer, zwei Springer und acht Bauern.
Diese werden in die Ausgangsaufstellung gebracht, wie auf Abb.1 zu sehen ist. Der weiße Spieler beginnt mit seinem Zug, danach wechseln sich die Spieler fortlaufend ab.
Ein Zug ist nur gültig, wenn der eigene König nach dem Zug nicht im Schach steht (d.h. nicht unter Angriff steht). Bei einem Zug wird entweder
Grundsätzlich darf eine Figur
Eine Figur darf jedoch nie, auf ein durch eine eigene Figur besetzes Feld bewegt werden. Auch darf eine Figur nicht über das Spielfeld hinaus gezogen werden, und die Bewegung der Figur an anderer Stelle des Bretts fortgesetzt werden - die Bewegung einer Figur ist stets durch den Spielfeldrand begrenzt.
Das Spiel endet, sobald einer der beiden Spieler keine gültigen Züge mehr hat. In Wettkämpfen existieren darüberhinaus weitere Kritieren, nach denen ein Spiel beendet wird. Mehr dazu unter Spielende.
Der König darf horizontal, vertikal und diagonal auf anliegende Felder (d.h. um genau ein Feld) bewegt werden - somit hat dieser bis zu acht Zugoptionen. Die beiden Könige dürfen niemals nebeneinander stehen (d.h. auch nicht gezogen werden), da sie sich sonst gegenseitig ein Schach liefern würden.
Der König ist ebenfalls Teil der Rochadezugs, der einizge Zug im Schach bei dem zwei Figuren gleichzeitig bewegt werden dürfen. Mehr dazu unter Rochade.
Die Dame darf horizontal, vertikal und diagonal beliebig weit bewegt werden, jedoch ohne dabei Figuren zu überspringen. Die Dame vereint somit die Bewegungsmöglichkeiten eines Turm und Läufers in einer Figur.
Der Turm darf horiziontal und vertikal beliebig weit bewegt werden, jedoch ohne dabei Figuren zu überspringen.
Der Turm ist ebenfalls Teil der Rochadezugs, der einizge Zug im Schach bei dem zwei Figuren gleichzeitig bewegt werden dürfen. Mehr dazu unter Rochade.
Der Läfer darf diagonal beliebig weit bewegt werden, jedoch ohne dabei Figuren zu überspringen.
Der Springer macht L-förmige Züge. Er darf sich um genau zwei Reihen und einer Spalte bewegen oder umgekehrt, um genau zwei Spalten und einer Reihe.
Bauern bewegen sich grundsätzlich immer um genau ein Feld, nämlich in Richtung des Gegners. Ein weißer Bauer hat somit bis zu 3 mögliche Zielfelder: das Feld vor ihm (d.h. das Feld in direkter Richtung zur letzten Reihe, die Achte für Weiß und die Erste für Schwarz), oder die beiden Felder diagonal vor ihm.
Ein Bauer darf sich niemals diagonal (vor)bewegen, es sei denn auf dem Diagonalfeld steht eine gegnerische Figur. Einzige Ausnahme ist der En-Passant-Zug, bei welchem ein Bauer sich diagonal auf ein leeres Feld bewegen darf. Mehr dazu unter En-Passant.
Die Rochade ist der einzige Doppelzug im Schach - bei diesem werden der König und ein Turm gleichzeitig bewegt. Jeder Spieler darf die Rochade höchstens einmal spielen und nur dann, wenn
Bewegt ein Spieler einen Turm so verwirkt der Spieler sein Recht auf Rochade zu dieser Seite. Bewegt ein Spieler beide Türme oder den König so verwirkt der Spieler sein Recht auf Rochade gänzlich.
Bei der Rochade bewegt sich der König zwei Felder in Richtung des entsprechenden Turms und der Turm bewegt sich auf das Feld was soeben vom König übersprungen wurde (siehe Abb.10).
Hat ein gegnerischer Bauer einen Doppelschritt gemacht, so darf, wenn der eigene Bauer das vom gegnerischen Bauern übergangene Feld diagonal angreift, sich der Bauer diagonal auf das übergangene Feld vorbewegen und schlägt dabei den gegnerischen Bauern, als hätte dieser auf dem Zielfeld gestanden. Dieser sogenante En-Passant Zug muss direkt auf den Doppelschritt des Gegeners folgen, anderfalls verfällt das En-Passant Recht.
Hat einer der beiden Spieler keine gültigen Züge mehr so endet das Spiel. War der Spieler, der keinen Zug mehr machen konnte, im Schach, so verliert er das Spiel. War der Spieler allerdings nicht im Schach, so endet das Spiel in einem Unentschieden (ugs. "Remi durch Patt").
Im Wettkampfs-Schach wird überlicherweise mit Zeitkontrolle gespielt, d.h. beide Spieler haben nur eine gewisse Menge an verfügbare Zeit.
Weitere Gründe für das Enden einer Schachpartie sind:
Schach ist ein Zwei-Personen-Nullsummenspiel mit perfekter Information ohne Zufallskomponente und ist daher determiniert[1]. Das bedeutet, dass (zumindest in der Theorie)
Schach gilt in der Praxis jedoch weiterhin als ungelöst. Die Suchbaumkomplexität von Schach wurde 1950 von Claude Shannon mit ungefähr 10120 (auch bekannt als Shannon Number) und die Zustandskomplexität mit etwa 1043 abgeschätzt[2]. Aktuellere Schätzungen, bewegen sich in ähnlichen Bereichen (z.B. durch Viktor Allis im Jahr 1997 mit 10123 Zugvarationen und 1050 mögliche Schachstellungen)[3].
Der Mathematiker und Informationstheoretiker, Claude Shannon, begab sich bereits im Jahre 1950 in die Tiefen der Schachforschung. Seine wegweisende Publikation "Programming a Computer for Playing Chess" [2:1] markiert den einleitenden Schritt in die Entwicklung von Schachprogrammen.
Er berechnete, dass bei einer Berechnungsgeschwindigkeit von einer Variation pro Mikrosekunde (sehr optimistisch für damalige Zeiten) bereits 1090 Jahre für die Berechnung des ersten Zuges notwendig wären .
Shannon kam zu dem Schluss, dass es ungeeignet sei, Schach mithilfe von Brute-Force zu lösen. Stattdessen sollten Schachprogramme lieber approximative Methoden verwenden, mit dem Ziel, dennoch besser als der Mensch zu spielen. Trotz des Verzichts auf die tatsächliche Brute-Force-Lösung und der Anwendung von approximativen Methoden sind heutige Schachprogramme in der Lage, selbst Großmeister konsistent zu schlagen.
In seiner Arbeit führte er das Konzept von approximativ arbeitenden Schachprogrammen ein, die des Typs A und die des Typs B. Typ A verfolgt einen Brute-Force-Ansatz, indem er alle Suchbaumpfade bis zu einer gewissen Tiefe erfasst, während Typ B selektiv arbeitet und ausschließlich vermeintlich "wichtige" Suchbaumpfade untersucht, ähnlich zu menschlichem Schachspiel. Obwohl Shannon den Typ B bevorzugte, zeigen heutige Schachprogramme tendenziell mehr Ähnlichkeiten mit Typ A, was vermutlich auf die gesteigerte Rechengeschwindigkeit zurückzuführen ist. Nichtsdestotrotz integrieren moderne Schachprogramme Aspekte sowohl von Typ A als auch von Typ B.
Die Anwendung von Suchbaumalgorithmen im Schach ist von essenzieller Bedeutung, um optimale Spielzüge zu ermitteln. Heutzutage benutzen viele der besten Schachprogramme wie z.B. Stockfish, Berserk, Caissa, RubiChess und Obsidian.1 sogenannte Depth-First-Search (DFS) Algorithmen (meist eine Form der Alpha-Beta-Suche).
Trotz der Dominanz von DFS-Algorithmen haben sich im Laufe der Jahre aber auch vereinzelt Programme entwickelt, die auf Best-First-Search-Algorithmen wie Monte-Carlo-Tree-Search (MCTS) setzen. Ein herausragendes Beispiel ist AlphaZero[4], welches 2018 mithilfe von MCTS mit dem damalig stärksten DFS-basierendem Schachprogramm Stockfish konkurrieren konnte 2,3. In Anbetracht der Tatsache, dass der Sourcecode von AlphaZero nicht öffentlich einsehbar ist, entwicklete sich die Open-Source Engine Leela Chess Zero, welches ähnlich zu AlphaZero, MCTS nutzt. Leela Chess Zero belegt seit 2020 regelmäßig den zweiten Platz (hinter Stockfish) im Top Engine Chess Championship 4.
In diesem Wiki liegt der Fokus explizit auf Alpha-Beta-basierten Schachrechnern. Andere Ansätze und Algorithmen, die nicht auf Alpha-Beta basieren, werden in diesem Kontext nicht weiter beleuchtet.
Ein Großteil der heutigen starken Schachrechner basieren auf Alpha-Beta-Suche und bestehen meist aus drei Hauptkomponenten: dem Eröffnungsbuch, der Suche (inkl. Evalutation) und einer Endspieldatenbank.
Eröffnungsbuch
Bevor ein Schachrechner mit der zeitintensiven Suche beginnt, greift er auf das Eröffnungsbuch zurück, in welchem vorprogrammierte und etablierte Eröffnungszüge enthalten sind. Das Eröffnungsbuch bildet somit die Grundlage für einen schnellen und kenntnisreichen Start in die Partie.
Suche & Evaluation
Sobald die Schachpartie das Anfangsstadium verlässt, setzen Schachrechner eine Suche ein (in der Regel eine Alpha-Beta-Suche), um den besten Zug zu ermitteln. Im Verlauf dieser Suche wird eine Evaluationsfunktion verwendet, um abzuschätzen, wie gut oder schlecht eine Position ist. Diese beiden Aspekte – die Suche und die Evaluation – bilden die zentralen Punkte, die durch zahlreiche kleine kumulative Verbesserungen erhebliche Steigerungen in der Spielstärke von Schachrechner bewirken können.
Endspieldatenbank
Die Endspieldatenbank bildet den dritten Baustein und enthält vorberechnete Endspielstellungen.Die Endspieldatenbank ermöglicht es dem Schachrechner, in den finalen Phasen des Spiels präzise Evaluationen durchzuführen, da er auf bereits vollständig analysierte Endspielpositionen (Weiß/Schwarz gewinnt/Unentschieden) zurückgreifen kann, anstatt auf eine heuristik-basierte Evaluationsfunktion.
Die Alpha-Beta-Suche ist eine optimierte Version des Minimax-Algorithmus. Die Alpha-Beta-Suche kann durch weitere Optimierungen verfeinert werden, wodurch die Suche allerdings imperfekt wird. Die Herausforderung besteht darin, die Suche effizient zu gestalten, ohne dabei durch die Imperfektion der Suche übermäßig viele ungenaue Ergebnisse zu generieren. Die meisten Optimierungen lassen sich meist einer oder mehreren der folgenden Kategorien zuordnen:
Iterative Tiefensuche
Die iterative Tiefensuche (engl. Iterative Deepening) bildet den Grundbaustein (quasi) aller weiteren Optimierungen. Die Idee dabei besteht darin, anstelle einer direkten Suche bis zur Tiefe die Suche iterativ durchzuführen, beginnend mit der Tiefe und anschließend gestaffelt bis zur Tiefe . Dieser Ansatz hat zwei Hauptgründe: Erstens spielen Schachrechner oft unter Zeitkontrolle, und es ist vor Beginn einer -tiefen Suche unklar, wie lange diese dauern wird. Daher starten Suchen bei Tiefe 1 und steigern sich im Verlauf, sodass selbst bei Auslaufen der Zeit ein Ergebnis vorliegt [5]. Zweitens hat sich gezeigt, dass die iterative Tiefensuche tatsächlich schneller als eine normale Suche ist.[6] Dies liegt daran, dass Ergebnisse aus vorherigen Suchen für tiefere Suchen wiederverwendet werden können (siehe Move Ordering) und iterative Tiefensuche Informationen für weitere dynamische Optimierungen (wie 2,3,4) erzeugt.
Transposition Tables
Wie das Wort Transposition andeutet, gibt es im Schach Positionen, die durch verschiedene Zugreihenfolgen entstehen können. Zwei solcher Positionen werden als Transpositionen bezeichnet. Es wäre unpraktisch, jedes Mal, wenn man auf eine solche Position trifft, den gesamten Teilbaum erneut auswerten zu müssen. Hier kommen Transposition Tables zum Einsatz. In diesen Tabellen werden Informationen zu bereits analysierten Positionen gespeichert. Wenn man auf eine bereits bekannte Position trifft, kann man die bereits berechnete Evaluation aus der Tabelle nutzen [7].
Um Informationen in der Tabelle zu speichern und zu finden, muss jedoch ein Weg gefunden werden, um Positionen auf einen Index in der Tabelle abzubilden. Hierfür wird sogenanntes Zobrist-Hashing[8] verwendet. Die Grundidee des Zobrist-Hashings besteht darin, für jedes Figur-Feld-Paar eine zufällige (typischerweise) 64-Bit Zahl zu generieren. Ebenso erhalten weitere spielzustandsverändernde Flags, wie Rochaderechte, eine zufällige 64-Bit Zahl. Beim Zobrist-Hashing wird nun die eXklusive OR-Operation (XOR) auf die zufälligen Zahlen der relevanten Felder und Flags angewendet. Der Vorteil dieses Hashing-Verfahrens liegt in der Umkehrbarkeit des XOR, wodurch Zobrist-Hashes inkrementell, das heißt effizient, aktualisiert werden können.
Quiescence Search
Leider ist die Evaluationsfunktion im Schach nur eine Approximation für die Güte einer Position. Bei der Suche bis zu einer bestimmten Tiefe besteht nun die Gefahr, dass wichtige Bewertungsaspekte für die Evaluation übersehen werden, da sie über dem "Horizont", d.h. erst in einer tieferen Suche sichtbar werden. Dieses Phänomen nennt man Horizon Effect[9]. Ein Beispiel ist hierfür, wenn in einem Blattknoten - also am Horizont - eine Dame einen Bauern geschlagen hat. Die Evaluation bewertet dies möglicherweise als positiv, da eine Figur geschlagen wurde. Hätte man jedoch einen Halbzug tiefer gesucht, so hätte man gesehen, dass die Dame eventuell züruckgeschlagen wird, was nachteilig ist. Quiescence search[10], ist der Versuch, den Horizon Effect zu mildern. Die Idee besteht darin, die normale Suche zu erweitern, nämlich so weit, bis man in einer ruhigen (engl. quiet) Position gelangt ist. In ruhigen Positionen ist die (statische) Evaluation präziser. Typische unruhige Positionen sind Positionen, in denen eine Figur geschlagen werden kann, eine Umwandlung möglich ist oder der König im Schach steht.
Optimierung durch Selektivität
Optimierungen durch Anpassung von Alpha und Beta
Principal-Variation-Search
Principal-Variation-Search ist eine performantere Variante der Alpha-Beta-Suche, wenn eine gute Zugsortierung vorliegt. Bei PVS wird der erste Zug mit einem vollem Fenster untersucht, d.h. nach der Untersuchung des ersten Zuges ist . Für alle weitere Züge bestätigt man mithilfe einer Null-Fenster-Suche , dass diese tatsächlich schlechter als der erste, vermeintlich beste, Zug sind. Gibt die Null-Fenster-Suche jedoch einen Wert über züruck, d.h. es existiert ein Zug der besser als der erste Zug ist, so muss die Suche mit einem vollem Fenster wiederholt werden. Aus diesem Grund ist PVS nur besser, wenn der theoretisch beste Zug fast immer als Erstes untersucht wird[14].
Aspiration Windows
Typischerweise wird eine Alpha-Beta-Suche mit dem Initialfenster und gestartet. Aspiration Windows ist die Idee, die Evaluation aus der letzten Iteration der iterativen Tiefensuche zu nutzen, um die Breite des Initialfensters der Iteration sinnvoll zu verkleinern und so frühere Cut-Offs zu erreichen. Evaluationen sind im Schach meist in Bauerneinheiten kalkuliert. Aspiration Windows von etwa plus/minus einer Bauerneinheit um führen in der Praxis zu guten Ergebnissen [15].
Die Bewertung einer Schachposition erfolgt durch eine Evaluationsfunktion, die den relativen Wert dieser Position bestimmt. Optimalerweise nimmt diese Evaluationsfunktion nur drei Werte an: 1 (Sieg aus dieser Position), 0 (Unentschieden aus dieser Position) und -1 (Niederlage aus dieser Position). In diesem Fall könnten wir unmittelbar feststellen, welcher Spieler gewonnen hat, und eine Suche der Tiefe 1 wäre ausreichend, um den optimalen Zug zu identifizieren.
In der Praxis existiert jedoch keine Funktion, die den exakten Wert einer Position bestimmt3. Aus diesem Grund wird die Evaluationsfunktion benutzt um den relativen Wert einer Position zu approximieren. Das Ziel besteht darin, diese Approximation so präzise wie möglich zu gestalten. Das bedeutet, wenn Zug B die theoretische Antwort auf Zug A ist, sollten die Evaluationen der Positionen nach den Zügen A und B möglichst den gleichen Wert aufweisen. Insbesondere bedeutet dies, dass nicht der exakte Wert der Evaluationsfuntkion wichtig ist, sondern die relativen Wahrscheinlichkeiten des Gewinnens[16].
Nach welchen Aspekten eine Schachposition bewertet wird ist dem Entwickler ueberlassen. Wie Shannon 1950 erkannte, erscheint es jedoch sinnvoll, sich an Bewertungskriterien des menschlichen Spieles zu orientieren.
"Any good chess player must, in fact, be able to perform such a position evaluation. Evaluations are based on the general structure of the position, the number and kind of Black and White pieces, pawn formation, mobility, etc. These evaluations are not perfect, but the stronger the player the better his evaluations. Most of the maxims and principles of correct play are really assertions about evaluating positions, for example:
[...]"[2:2]
Im Folgenden sind einige gaengige Aspekte gelistet, die im menschlichen Spiel beruecksigt werden und in die Evaluation eines Schachrechners mit einfließen koennen.
Die oben angeführten Aspekte, sind nur einige der vielen Aspekte nach denen eine Position bewertet werden kann. Die einzelnen Kriterien werden miteinander verbunden. Eine simple Evaluationfunktion könnte sich dabei als Linearkombination der einzelenen Aspekte ergeben [2:4][19][20].
Vermehrt werden auch Spielphasen berücksichtigt, da verschiedene Aspekte in verschiedenen Phasen - der Natur des Spieles wegen - unterschiedliche Gewichtungen haben. Dies kann beispielsweise durch sogenanntes Tapered Evaluation[20:1] erreicht werden. Dabei findet man für die verschiedenen Spielphasen, z.B. Anfangs/Mittel-, und Endstadien, eigene Evaluationsfunktionen. Diese werden dann wieder durch Linearkombination verknüpft, beispielsweise so, dass ein größerer Anteil der Endstadienevaluation einfließt, wenn sich das Spiel im Endstadium befindet, und umgekehrt. Eine konkrete Umsetzung dieser Idee könnte wie folgt aussehen:
wobei ein Maß dafuer ist, wie sehr sich das Spiel im Anfangsstadium befindet.
Für Stockfish, eines der leistungsstärksten Schachprogramme weltweit9, gibt es ein Wiki für dessen Evaluation10. Dort können die verschiedenen Aspekte und die Tapered Evaluation nachvollzogen werden.
Im Jahr 2015 flossen in Stockfish ganze 9 Aspekte in die Evaluation mit ein: Material, Piece-Square Tables, Bauern Struktur, Figur-spezifische Evaluation, Mobilität, Königssicherheit, Gefahr, Raum und "Unentschiedenheit".[16:1]. Bereits ein Jahr zuvor, 2014, hatte Stockfish (zu der Zeit stärkster Schachrechner der Welt) den Grossmesiter Hikaru Nakamura mit 3 zu 1 besiegt8.
Eine Evaluationsfunktion, die auf einer linearen Kombination basiert, kann auf unterschiedliche Weisen optimiert werden. Dabei spielt die Ermittlung passender Gewichtungen eine Rolle, ebenso wie die Auswahl geeigneter Aspekte. Für linear kombinierte Evaluationsfunktionen ist wichtig, Aspekte zu wählen, die möglichst linear unabhängig sind. In der Praxis sind viele Bewertungsaspekte jedoch nicht perfekt linear unabhängig, wie zum Beispiel Königssicherheit und Bauernstruktur. Es ist oft wünschenswert, dass der König sich hinter Bauern "verstecken" kann 7, was jedoch im Widerspruch zu einer isolierten Betrachtung der Bauernstruktur stehen kann. Hier zeigt sich bereits einer der deutlichen Nachteile einer simplen Modellierung von Evaluationsfunktionen durch lineare Kombinationen.
Ungelernte Optimierung
Optimierungen können manuell vorgenommen werden. In diesem Prozess werden neue Bewertungsaspekte (wie Material, Position etc.) geschaffen und die Gewichtungen der einzelnen Aspekte angepasst. Anschließend erfolgt die Testphase, in der die neue Version gegen alte Versionen bzw. andere Schachrechner spielt. Dabei werden die Änderungen beibehlaten, die zu einer Verbesserung geführt haben. Ungelernte Optimierung hat den Nachteil, dass es sowohl langsam ist wie auch durch die Kreativität des Entwicklers beschränkt ist. Mitunter aus diesem Grund haben sich über die Jahre viele Versuche ergeben, Evaluationsfunktionen mit automatischen Methoden zu lernen wie z.B. im Schachrechner Giraffe[16:2].
Gelernte Optimierung
Gelernte Optimierung setzt auf automatisierte Methoden, um die Evaluationsfunktion eines Schachprogramms zu verbessern. Über die Jahre haben sind viele Methoden genutzt worden, darunter:
Verbesserungen der Evaluation durch Evolutionäre Algorithmen konnten bspw. 2010 gezeigt werden, aus dessen Arbeit[21:1] folgenden Grafiken (siehe Abb.13 und Abb.14) entnommen sind. Diese zeigen die deutliche Leistungssteigerung, sodass bereits nach der siebten Evolution, aus 50 Spielen, 11 Spiele mehr gegen den 1700 ELO bemessenenen Schachrechner Rybka , und 19 Spiele mehr gegen den 1900 ELO bemessenenne Schachrechner Rybka gewonnen wurden.
Mithilfe einfacher logistischer Regression, konnte der Schachrechner Texel - nach welchem auch die Parametertuning Methode Texel tuning benannt ist - neben anderen Verbesserungen des Programmes, seine Evaluation so sehr verbessern, dass dieser bereits in Version 1.04 eine Spielstärke von 2995 Elo erreichte[16:3]. Zum Vergleich: Magnus Carlsen der stärkste Schachspieler der Welt hatte Stand Januar 2024 eine ELO von 283012.
Erste Versuche der Anwendung von Neuronalen Netzwerken wie z.B. 1994 im experimental Schachrechner, NeuroChess[23:2], zeigten vorerst keine großen Erfolge. Dieser benutze NN und TD-Learning und gewann gerade mal 13% der Spiele gegen den gleichen Schachrechner mit linearer Evaluationsfunktion. Hauptgrund für die schlechten Ergebnisse wurden damals die deutlich längere Berechnungszeit für die Evalution ausgemalt, die der erhöhten Suchtiefe der schnelleren Berechnung der linearen Evaluation unterlegen war.
Erst im Jahr 2018 entwicklete Yu Nasu[25], ursprünglich für das Spiel Shogi, das effizient zu berechnende NNUE (Abk. für: efficiently updatable neural network). Die Grundidee des Netzwerkes ist es, als Input sogennante King-Piece-Encodings zu benuzten - mit der Idee - die Beziehung zwischen dem König und den restlichen Figuren auf dem Feld abzubilden.
Heute kommt NNUE, in angepasster und verbesserter Form, in den meisten der starken Schachprogrammen vor wie z.B. Stockfish, Berserk, und Caissa (Platz 1,4,7 der Computer Chess Rating List).
Für weitere Informationen ist hier eine sehr detaillierte Beschreibung des NNUE Netzwerks von Stockfish.
Das Eröffnungsbuch enthält eine umfangreiche Sammlung von vorprogrammierten etablierten Schacheröffnungen. Die Nutzung eines Eröffnungsbuches ermöglicht es Schachrechnern, strategisch fundierte Eröffnungszüge zu wählen, ohne dabei eine Suche durchzuführen. Dies hat zwei große Vorteile:
Typischerweise wird ein zufälliger Zug aus einer Menge aus Zugkandidaten gewählt, was insbesondere den Vorteil einer hoeheren Spielvaraition hat (da Schachprogramme ohne Eroeffnungsbuch mehr oder weniger determinisch arbeiten). Eröffnungsbücher können jedoch auch während des Spiels verbessert werden, sodass erfolgreichere Eröffnungszüge in Folgespielen präferiert werden[26][27].
Die Idee von Endspieldatenbanken ist es, für eine bestimmte (sehr begrenzte) Anzahl an Figuren, für alle Figuren-Feld-Kombinationen die theoretische Lösung zu kalkulieren. Wird in der Evaluation festgestellt, dass nur noch eine sehr begrenzte Anzahl von Figuren auf dem Spielfeld ist, so wird die Evaluation nicht mehr durch Heuristiken berechnet, sondern die Lösung aus der Datenbank genutzt. Bereits bei 3-Figuren ergeben sich 368079 viele Stellungen13. Stand 2018 sind Endspieldatenbanken bis zur einer Figurenanzahl von 7 berechnet worden[28]. Solch große Datenbanken sind jedoch nur in der Theorie nützlich, da bei dieser Größe bereits 140 Terabyte zur Speicherung nötig sind.
1 Die angegebenen Schachprogramme sind alle unter den Top-10 Schachprogramme Stand Januar 2024. Weitere Beispiele für Alpha-Beta basierte Schachprogramme sind ebenfalls auf der Liste zu finden.
2 Durch die enorme Anzahl an notwendigem Training und der Tatsache, das AlphaZero nicht für die Öffentlichkeit einsehbar ist, behält die Dominanz von AlphaZero gegenüber Stockfish einen pfaden Beigeschmack.
3 Mehr Informationen zum Duell Stockfish vs AlphaZero hier.
4 Erst- und Zweitplatzierung seit 2010 hier.
5 Sonst wäre Schach bereits geloest
6 Viele der hier gelisteten Schachrechner benutzen (oder haben in früheren Versionen) Piece-Square-Tables benutzt, wie z.B. Stockfish, RofChade, Pesto, Texel etc.
7 Viele der Heuristiken sind im Buch Chess the easy way aus dem Jahr 1942 von Rueben Fine, einem ehemaligen Schachgroßmeister, zusammengefasst worden und gelten auch noch noch als gute Praxis.
8 Siehe hier
10 Stockfish benutzt mittlerweile NNUE. Die Evaluierung bezieht sich hier auf die non-NNUE Evaluierung 2020.
11 Der Schachrechner Texel ist ein bekannter Schachrechner der logistische Regression genutzt hat hat um seine Evaluation zu verbessern.
12 Siehe hier
13 Siehe hier für mehr Informationen zu Endspielstellungen
Zermelo, Ernst. "Über eine Anwendung der Mengenlehre auf die Theorie des Schachspiels." Proceedings of the fifth international congress of mathematicians. Vol. 2. Cambridge: Cambridge University Press, 1913. S. 501-504. pdf ↩︎
Shannon, Claude E. "Programming a computer for playing chess." first presented at the National IRE Convention, March 9, 1949, and also in Claude Elwood Shannon Collected Papers. IEEE Press, 1993. S. 637-656. pdf ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Allis, Louis Victor. "Searching for solutions in games and artificial intelligence." Wageningen: Ponsen & Looijen, 1994. S. 171. pdf ↩︎
Silver, David, et al. "A general reinforcement learning algorithm that masters chess, shogi, and Go through self-play." Science 362.6419, 2018. S. 1140-1144. pdf ↩︎
Korf, Richard E. "Depth-first iterative-deepening: An optimal admissible tree search." Artificial intelligence 27.1, 1985. S. 97-109. pdf ↩︎
Schaeffer, Jonathan, and Aske Plaat. "New advances in alpha-beta searching." Proceedings of the 1996 ACM 24th annual conference on Computer science. 1996. S. 125 pdf ↩︎
Greenblatt, Richard D., Donald E. Eastlake III, and Stephen D. Crocker. "The Greenblatt chess program." Proceedings of the November 14-16, 1967, fall joint computer conference. 1967. S. 806-807. pdf ↩︎
Zobrist, Albert L. "A new hashing method with application for game playing." ICGA Journal 13.2, 1990. S. 69-73. pdf ↩︎
Berliner, Hans J. "Some Necessary Conditions for a Master Chess Program." IJCAI. Vol. 3. , 1973. pdf ↩︎
Beal, Don F. "A generalised quiescence search algorithm." Artificial Intelligence 43.1, 1990. S. 85-98. pdf ↩︎
Russell, Stuart J., and Peter Norvig. Artificial intelligence a modern approach. London, 2010. S. 169-170 pdf ↩︎ ↩︎
Dendek, Cezary, and Jacek Mandziuk. "A neural network classifier of chess moves." 2008 Eighth International Conference on Hybrid Intelligent Systems. IEEE, 2008. ↩︎
Greer, Kieran. "Computer chess move-ordering schemes using move influence." Artificial Intelligence 120.2, 2000. S. 235-250. ↩︎
Marsland, T. Anthony, and Murray Campbell. "Parallel search of strongly ordered game trees." ACM Computing Surveys (CSUR) 14.4, 1982. S. 533-551. pdf ↩︎
Shams, Reza, Hermann Kaindl, and Helmut Horacek. "Using Aspiration Windows for Minimax Algorithms." IJCAI. 1991. ↩︎
Lai, Matthew. "Giraffe: Using deep reinforcement learning to play chess." arXiv preprint arXiv:1509.01549, 2015. pdf ↩︎ ↩︎ ↩︎ ↩︎
Beal, Donald F., and Martin C. Smith. "Learning piece-square values using temporal differences." ICGA Journal 22.4, 1999. S. 223-235. ↩︎ ↩︎
Droste, Sacha, and Johannes Fürnkranz. "Learning the piece values for three chess variants." ICGA Journal 31.4, 2008. S. 209-233. pdf ↩︎ ↩︎
Kendall, Graham, and Glenn Whitwell. "An evolutionary approach for the tuning of a chess evaluation function using population dynamics." Proceedings of the 2001 Congress on Evolutionary Computation (IEEE Cat. No. 01TH8546). Vol. 2. IEEE, 2001. S. 996. pdf ↩︎ ↩︎
Chen, Jr-Chang, et al. "Comparison training for computer Chinese chess." IEEE Transactions on Games 12.2, 2019. 169-176. pdf ↩︎ ↩︎
Bošković, B., et al. "History mechanism supported differential evolution for chess evaluation function tuning." Soft Computing 15, 2010. 667-683. html ↩︎ ↩︎
Hauptman, Ami, and Moshe Sipper. "GP-endchess: Using genetic programming to evolve chess endgame players." European Conference on Genetic Programming. Berlin, Heidelberg: Springer Berlin Heidelberg, 2005. S. 120-131. pdf ↩︎
Thrun, Sebastian. "Learning to play the game of chess." Advances in neural information processing systems 7, 1994. pdf ↩︎ ↩︎ ↩︎
Baxter, Jonathan, Andrew Tridgell, and Lex Weaver. "TDLeaf (lambda): Combining temporal difference learning with game-tree search." arXiv preprint cs/9901001, 1999. pdf ↩︎
Nasu, Yu. "Efficiently updatable neural-network-based evaluation functions for computer shogi." The 28th World Computer Shogi Championship Appeal Document 185, 2018. english version pdf ↩︎
Walczak, Steven. "Improving opening book performance through modeling of chess opponents." Proceedings of the 1996 ACM 24th annual conference on Computer science. 1996. pdf ↩︎
Buro, Michael. "Toward opening book learning." ICGA Journal 22.2, 1999. S. 98-102. pdf ↩︎
Peterson, Christopher D. "The effect of endgame tablebases on modern chess engines." 2018. pdf ↩︎