Coherent 0.2.24: die Architektur im Zwischenstand

Diesen Beitrag anhören17 Min.

Von KI aus dem Text dieses Beitrags erstellt und von der synthetischen Stimme „Sulafat“ gelesen; keine wörtliche Fassung, Fehler sind möglich.

Coherent ist eine Schachengine, die das UCI Universal Chess Interface, das Textprotokoll zwischen einer Schach-Engine und dem Programm, das sie steuert.-Protokoll spricht. Version 0.2.24 ist der Stand, den das Orakel am 2026-10-23 im Lauf T-0202 übernommen hat. Dieser Beitrag beschreibt, wie sie aufgebaut ist: wie aus einer Stellung ein Zug wird, welche Suchverfahren sie nutzt und wie ihr neuronales Netz bewertet. Am Ende stehen die Spielstärkeangaben, die heute bekannt sind. Er zeigt den Stand einer Version. Die Angaben zum Aufbau sind aus dem Quelltext von 0.2.24 gelesen; Trainings- und Spielstärkeangaben stammen aus dem Register des Orakels und von der Website.

Auf einen Blick

Wie ein Zug entsteht

Schema der Engine. Die UCI-Schicht liest die Befehle und die Uhr und startet 1 Suchfaden. Darin vertieft die Wurzel Runde um Runde und ruft die Hauptsuche, die am Horizont an die Ruhesuche übergibt; beide rufen die Bewertung: das neuronale Netz, nach Material skaliert, dazu ein Term für König, Läufer und Springer gegen König, und in der Suche die Korrekturtafeln und die Dämpfung durch den Fünfzigzugzähler. Die Suchsitzung hält die Transpositionstabelle und die meisten Lerntafeln für die ganze Partie; die Remiserkennung nutzt Wiederholungen, eine Kuckuckstafel mit 3.668 Zügen, Material und die Fünfzigzugregel. Darunter liegt das Brett: eine Liste mit 64 Feldern und 8 Bitboards, Angriffsmasken beim Übersetzen, Zugerzeuger, Legalität je Knoten, Zobrist-Schlüssel, Copy-Make.
Aufbau von Coherent 0.2.24 (Schema)

Die UCI-Schicht liest die Befehle der Oberfläche: die Stellung samt den bisherigen Zügen, dann go mit der Zeit auf der Uhr. Sie macht aus der Uhr zwei Zeitgrenzen und startet die Suche in einem eigenen Faden. Die Suchsitzung hält die Transpositionstabelle und die meisten Lerntafeln für die ganze Partie; ucinewgame leert sie. An der Wurzel vertieft die Engine Schritt für Schritt, Runde um Runde. Jede Runde läuft durch die Hauptsuche, die am Horizont an die Ruhesuche übergibt. Stellungen bewertet das Netz. Nach jeder Runde meldet die Engine die bisher beste Folge; ist die Zeit um, spielt sie den besten Wurzelzug.

Brett und Zugerzeugung

Das Brett liegt doppelt vor: als Liste von 64 Feldern und als Bitboards, 1 je Farbe und 1 je Figurenart. Ein Zug passt in 4 Byte. Angriffsmasken für Springer, König und Bauern und 8 Strahlen je Feld entstehen schon beim Übersetzen des Programms. Tafeln, die nach der Belegung des Bretts indiziert sind, wie viele Engines sie für Gleitfiguren nutzen, gibt es nicht. Läufer, Turm und Dame folgen stattdessen jedem Strahl bis zum ersten Hindernis, das ein einzelner Bitscan findet.

Ein Zug kopiert das ganze Brett; die Rücknahme kopiert das alte Brett zurück. Fesselungen und schachgebende Steine werden einmal je Knoten berechnet, danach entscheidet je Zug eine Maskenprobe über die Legalität; Königszüge und En-passant-Schläge werden zusätzlich geprüft. Ein Zug aus der Transpositionstabelle wird unter denselben Bedingungen wie beim Erzeugen geprüft, bevor er gesucht wird.

Die Suche

Ablauf eines Knotens der Hauptsuche in Coherent 0.2.24. Vor den Zügen: Remisprüfung auf Wiederholung und Fünfzigzugregel, kommende Wiederholung mit der Kuckuckstafel, Mattdistanz, Schnitt durch die Transpositionstabelle außerhalb der Hauptvariante, Bewertung durch das Netz plus Korrektur, Razoring bis Tiefe 3, rückwärtige Futility bis Tiefe 8, Nullzug ab Tiefe 3 mit Prüfung ab Tiefe 13, ProbCut ab Tiefe 5, ein Halbzug flacher ohne Tabellenzug ab Tiefe 3 an PV- oder Cut-Knoten, singuläre Verlängerung ab Tiefe 5 mit Multi-Cut. Alle außer der Bewertung und der flacheren Suche können den Knoten beenden. Zugschleife, je Zug: nächster Zug aus der gestuften Sortierung, Beschneiden später, aussichtsloser, schlecht bewerteter oder verlierender Züge, Verlängerungen für singuläre Züge und Schachgebote, für spätere Züge eine reduzierte Probe, deren Reduktion mit dem Logarithmus von Tiefe und Zugnummer wächst, und die volle Suche für den ersten Zug oder wenn die Probe Alpha schlägt; die Schleife endet, wenn ein Zug Beta erreicht. Nach den Zügen: Verläufe, Killer und Gegenzug lernen, die 6 Korrektureinträge lernen, und das Ergebnis wird in der Transpositionstabelle gespeichert.
Die Schritte eines Knotens (Schema)

An der Wurzel sucht die Engine Tiefe 1, 2, 3 und so weiter, bis zur verlangten Tiefe oder bis die Zeit um ist. Ab Tiefe 4 sucht sie mit einem engen Aspirationsfenster um den letzten Wert; nach jedem Fehlschlag wird das Fenster breiter, über 1.200 Zentibauern ganz geöffnet. Der beste Zug der letzten Runde kommt zuerst, die übrigen folgen nach ihrem Aufwand, die stillen darunter danach, wie oft sie der beste waren.

In jedem Knoten geht die Hauptsuche eine feste Folge von Schritten durch, die das Bild zeigt. Zuerst kommen billige Prüfungen: Remis durch Wiederholung oder Fünfzigzugregel, eine Wiederholung, die die Seite am Zug erzwingen kann, Mattdistanz und ein Schnitt durch die Transpositionstabelle. Dann bewertet das Netz die Stellung, und die Korrekturtafeln justieren den Wert. Mit diesem Wert versuchen mehrere Schritte, den Knoten früh zu beenden: Razoring bis Tiefe 3, rückwärtige Futility bis Tiefe 8, der Nullzug ab Tiefe 3, ab Tiefe 13 mit echten Zügen bestätigt, und ProbCut ab Tiefe 5. Ab Tiefe 3 wird ein Knoten ohne Zug aus der Tabelle 1 Halbzug flacher gesucht, wenn er auf der Hauptvariante liegt oder dort ein Schnitt erwartet wird. Ab Tiefe 5 prüft die singuläre Verlängerung, ob der Tabellenzug die Stellung allein trägt; dann wird er tiefer gesucht, um bis zu 3 Halbzüge.

In der Zugschleife beschneidet die Engine wenig versprechende Züge, sobald ein Zug gezeigt hat, dass die Stellung nicht verloren ist: späte stille Züge, Züge unter einem Futility-Rand, stille Züge mit schlechtem Verlauf und Züge, die nach der statischen Abtauschbewertung zu viel Material verlieren. Spätere Züge werden zuerst flacher gesucht, um eine Reduktion, die mit dem Logarithmus von Tiefe und Zugnummer wächst; nur wenn diese Probe die Untergrenze des Fensters schlägt, folgt die volle Suche. Schachgebote, die kein Material verschenken, werden 1 Halbzug tiefer gesucht.

Am Horizont spielt die Ruhesuche nur Schläge und Umwandlungen, bis die Stellung ruhig ist. Im Schach probiert sie Ausweichzüge; sobald einer das Matt abwendet, folgen nur noch Schläge und Umwandlungen. Eine eigene Tiefengrenze hat sie nicht: Schläge verbrauchen Material, und Wiederholungen und die Halbzuggrenze des Suchstapels beenden jede Schachfolge.

Was die Suche unterwegs lernt

Die Reihenfolge, in der Züge probiert werden, entscheidet, wie viel die Suche beschneiden kann. Coherent probiert ungefähr zuerst den Zug aus der Transpositionstabelle, dann gute Schläge, dann 2 Killerzüge und den Gegenzug, dann stille Züge nach ihrem Verlauf und zuletzt schlechte Schläge; der Verlauf kann Züge zwischen diesen Stufen verschieben. Die Verläufe sind Tafeln, die die Suche unterwegs fortschreibt: für stille Züge nach Ausgangs- und Zielfeld und danach, ob diese Felder angegriffen sind, für Züge nahe der Wurzel, nach Bauernstruktur, für Schläge und für Folgezüge 1, 2 und 4 Halbzüge zurück.

Eine zweite Art des Lernens korrigiert die Bewertung. Für jeden Knoten ohne Schach liest die Suche 6 Einträge: nach Bauernstruktur, nach der Stellung der weißen Figuren, der schwarzen Figuren, nach dem letzten Zug, nach den Leichtfiguren und nach den Schwerfiguren, die letzten beiden jeweils mit beiden Königen. Ihre gewichtete Summe kommt zum Netzwert hinzu. Sagt das Suchergebnis mehr als die Bewertung, gehen die Einträge einen Schritt darauf zu. Zuletzt zieht der Fünfzigzugzähler den Wert umso stärker gegen 0, je höher er steht.

Tabelle, Remis und Uhr

Das Netz

Oberer Teil: Schema des Netzes. Je Sicht 6.144 binäre Eingänge, 8 Königseimer mit je 768; eine erste Schicht auf 768 Werte je Sicht mit 4.718.592 Gewichten; beide Sichten verbunden zu 1.536 Werten, die Seite am Zug zuerst; verdeckte Schichten mit 16 und 32 Neuronen; 1 Ausgang, auf Zentibauern skaliert. Zusammen 4.744.529 Parameter, 99,5 Prozent davon in der ersten Schicht. Unterer Teil: 2 Bretter mit den Königseimern aus der eigenen Sicht. Version 0.2.23 hatte 4 Eimer: auf der 1. Reihe a und b Eimer 0, c und d Eimer 1; auf den Reihen 2 bis 8 a und b Eimer 2, c und d Eimer 3; die Linien e bis h nutzen dieselben Eimer gespiegelt. Version 0.2.24 hat 8: die 1. Reihe wie zuvor mit Eimer 0 und 1, die 2. Reihe mit Eimer 2 und 3, dann 1 Eimer für die ganze 3. Reihe (4), die 4. Reihe (5), die Reihen 5 und 6 (6) und die Reihen 7 und 8 (7), auf den Linien e bis h gespiegelt.
Netz und Königseimer (Schema)

Das Netz sieht das Brett zweimal, einmal aus jeder Sicht. Je Sicht gibt es 768 Eingänge: 2 Farben, eigen oder fremd, mal 6 Figurenarten mal 64 Felder. Das Feld des eigenen Königs wählt 1 von 8 Sätzen dieser Eingänge, die Königseimer; steht der König auf den Linien e bis h, wird die Sicht gespiegelt. Die erste Schicht macht aus jeder Sicht 768 Werte. Beide Sichten werden verbunden, die Seite am Zug zuerst, und gehen über Schichten mit 16 und 32 Neuronen zu 1 Ausgang in Zentibauern. Das Netz hat 4.744.529 Parameter, davon 99,5 % in der ersten Schicht, und rechnet nur mit ganzen Zahlen.

Die erste Schicht wird nicht für jede Stellung neu gerechnet. Ein Zug merkt sich, welche Steine er bewegt hat, und die Summen werden erst nachgeführt, wenn eine Stellung bewertet wird, ausgehend von der nächsten schon gerechneten. Wechselt der eigene König den Eimer oder die Spiegelung seiner Sicht, wird die Sicht aus einem Zwischenspeicher neu aufgebaut. Vektorwege für AVX2 und AVX-512 ergeben dasselbe Ergebnis wie der einfache Weg.

Nach dem Netz wird der Wert nach dem Material skaliert: mit allen Steinen auf dem Brett um etwa 1,56. Für König, Läufer und Springer gegen König führt ein Term von 40 Zentibauern je Abstandseinheit, gezählt in Linien plus Reihen, den nackten König in die nächste Ecke der Läuferfarbe. Von der handgeschriebenen Bewertung früherer Versionen sind nur die Steinwerte noch in Gebrauch: für die statische Abtauschbewertung und für die Materialzählung.

Was sich seit 0.2.21 geändert hat

Nach 0.2.21 wurden 3 Versionen übernommen, jede in einem Lauf des Orakels gegen ihren Vorgänger:

3 Versionen seit 0.2.21: jede bestand beide Stufen gegen ihren Vorgänger 3 Versionen seit 0.2.21: jede bestand beide Stufen gegen ihren Vorgänger. Kurze Stufe, 8 s + 0,08 s je Zug, mit 95-%-Halbbreite: 0.2.22 4,6, 0.2.23 5,64, 0.2.24 9,23; Lange Stufe, 40 s + 0,4 s je Zug, mit 95-%-Halbbreite: 0.2.22 4,22, 0.2.23 2,65, 0.2.24 12,61. 05101520Kurze Stufe, 8 s + 0,08 s je Zug, mit 95-%-HalbbreiteLange Stufe, 40 s + 0,4 s je Zug, mit 95-%-HalbbreiteElo gegen den VorgängerÜbernommene Version0.2.220.2.230.2.24Kurze Stufe, 8 s + 0,08 s je Zug, mit 95-%-Halbbreite, 0.2.22: 4,6 ± 3,28Kurze Stufe, 8 s + 0,08 s je Zug, mit 95-%-Halbbreite, 0.2.23: 5,64 ± 3,55Kurze Stufe, 8 s + 0,08 s je Zug, mit 95-%-Halbbreite, 0.2.24: 9,23 ± 5,13Lange Stufe, 40 s + 0,4 s je Zug, mit 95-%-Halbbreite, 0.2.22: 4,22 ± 3,19Lange Stufe, 40 s + 0,4 s je Zug, mit 95-%-Halbbreite, 0.2.23: 2,65 ± 2,18Lange Stufe, 40 s + 0,4 s je Zug, mit 95-%-Halbbreite, 0.2.24: 12,61 ± 6,33

3 Versionen seit 0.2.21: jede bestand beide Stufen gegen ihren Vorgänger. Kurze Stufe, 8 s + 0,08 s je Zug, mit 95-%-Halbbreite: 0.2.22 4,6, 0.2.23 5,64, 0.2.24 9,23; Lange Stufe, 40 s + 0,4 s je Zug, mit 95-%-Halbbreite: 0.2.22 4,22, 0.2.23 2,65, 0.2.24 12,61.

3 Versionen seit 0.2.21: jede bestand beide Stufen gegen ihren Vorgänger (Daten des Schachprojekts).

Die Werte sind bedingte logistische Elo Stärkeabstand zum Gegner, aus den Partien geschätzt, mit 95-Prozent-Halbbreite, wo das Orakel eine berichtet hat. Nie eine absolute Wertung.-Schätzungen gegen den Vorgänger, in der kurzen Stufe bei 8+0,08 Sekunden und in der langen Stufe bei 40+0,4 Sekunden; ± gibt das ungefähre 95-Prozent-Intervall. Jeder Test endete, sobald er seine Schranke erreichte.

Spielstärke: was bekannt ist

AngabeVersionWertArt
Arena, veröffentlicht0.2.213701, Gesamtband ±51, davon ±5 statistischMessung gegen 10 fremde Engines
AFE0.2.223703 [3693; 3712]Schätzung
AFE0.2.233703 [3690; 3716]Schätzung
AFE0.2.243710 [3695; 3726]Schätzung

Der Arena-Wert ist die jüngste Messung gegen Engines anderer Autoren mit gelisteter Wertung, verankert an den CCRL Computer Chess Rating Lists, eine öffentliche Rangliste von Schach-Engines aus Partien unter Standardbedingungen.-Blitz-Wertungen der Gegner. Die Website weist ihn als nur eingeschränkt belastbar aus; die Gründe stehen im Beitrag „Arena-Messung EV-3: veröffentlicht 3701, ohne hobbes 3688“. Die AFE Anker-Fortschreibung der Elo: eine Schätzung der Spielstärke einer Coherent-Fassung auf der Skala der letzten Verankerung, fortgeschrieben mit den gemessenen Gewinnen der Läufe seither. Eine Schätzung, keine Messung. Ausführlich erklärt schreibt diesen Wert mit den Gewinnen fort, die das Orakel seither in der langen Stufe gemessen hat. Sie ist eine Schätzung, keine Messung; die Klammern geben ihr nominelles 90-Prozent-Modellintervall. Bevor es den Arena-Wert von 0.2.21 gab, lag die AFE dieser Version bei 3735, fortgeschrieben aus einer früheren Verankerung. Der neue Ankersatz ist mit dem alten nicht überbrückt; die Differenz ist deshalb keine gemessene Veränderung. Wie das statistische Band enthält auch das AFE-Intervall das gesonderte Band für die Übertragung auf die Rangliste nicht. Enginewertungen sind keine FIDE-Zahlen.

Wie das geprüft wurde

Jede Aussage zum Aufbau ist aus dem Quelltext von Version 0.2.24 gelesen, der auf dem Hauptzweig beim Schreiben unverändert ist; ein Skript bindet die Zahlen an den Code. Die Elo-Werte stammen aus dem Register des Orakels. Die AFE-Werte stammen von den Laufseiten der Website und wurden mit dem veröffentlichten Verfahren aus dem Arena-Wert und dem Register nachgerechnet. Ein Agent einer anderen Modellfamilie hat den Text an denselben Quellen geprüft.

Coherent entwickelt sich weiter: Jede Version, die das Orakel übernimmt, ändert einen Teil dieses Bildes.