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.
Wird geladen …
Von KI aus dem Text dieses Beitrags erstellt und von der synthetischen Stimme „Sulafat“ gelesen; keine wörtliche Fassung, Fehler sind möglich.Position und Geschwindigkeit bleiben in diesem Browser und werden nirgendwohin gesendet.
Die Aufnahme konnte nicht abgespielt werden. Audiodatei öffnen
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
- Etwa
7.200ZeilenC++20in3Übersetzungseinheiten, dazu eine erzeugte Datei mit den Netzgewichten. 1Suchfaden. Die Engine bietet3UCI-Optionen: Größe der Hashtabelle (Vorgabe64MB), eine Vorgabetiefe und den ProbCut-Rand.- Suche: Alpha-Beta als Hauptvariantensuche, mit iterativer Vertiefung, Aspirationsfenstern und Ruhesuche.
- Bewertung: nur das neuronale Netz, nach dem Material auf dem Brett skaliert, dazu ein kleiner Term für ein Endspiel. Korrekturtafeln in der Suche justieren den Netzwert.
- Nicht enthalten: Endspieltafeln, ein eigenes Eröffnungsbuch, mehrere Suchfäden.
- Die Suche hat
114benannte Parameter und die Zeiteinteilung5weitere, jeder mit Vorgabe und zulässigem Bereich.
Wie ein Zug entsteht
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
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
- Transpositionstabelle:
10Byte je Eintrag,3Einträge in einem Block von32Byte. Sie bekommt, was das Hash-Budget nach den anderen Suchtafeln übrig lässt. Eine neue Stellung nimmt im Block den Platz des Eintrags mit dem kleinsten Rang: leere zuerst, sonst Tiefe minus4mal Alter. - Remis: Im Suchbaum gilt eine einmal wiederholte Stellung als Remis; vor der Wurzel braucht es das dritte Vorkommen. Wiederholungen, die die Seite am Zug mit einem einzigen umkehrbaren Zug erzwingen kann, findet eine Kuckuckstafel mit
3.668umkehrbaren Zügen, ohne Züge zu erzeugen. - Uhr: Die Engine hält
5% der Restzeit als Reserve zurück, mindestens30ms und höchstens die Hälfte. Der Rest wird auf die noch erwarteten Züge verteilt, dazu59% des Inkrements; das ist die weiche Grenze. Die harte Grenze ist3,24-mal so lang, aber nie länger als die Zeit nach der Reserve. Bei8Sekunden plus0,08je Zug, wie in der kurzen Stufe des Orakels, bekommt der erste Zug247ms, höchstens800ms. Nach jeder Runde hört die Engine auf, sobald die weiche Grenze verstrichen ist, skaliert danach, wie stabil der beste Zug ist, ob der Wert fällt und wie viel der Arbeit in den besten Zug ging; die harte Grenze beendet auch eine laufende Runde.
Das Netz
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:
0.2.22(2026-10-21): Steigt die Bewertung, sinkt der Rand der rückwärtigen Futility um den tatsächlichen Anstieg, höchstens um die früheren festen40Zentibauern.0.2.23(2026-10-22):4Tempoänderungen, die die Suchergebnisse bei gleichem Suchaufwand unverändert lassen: Der Eintrag der Transpositionstabelle wird früher geholt, die Netzsummen laufen auf Prozessoren, die es können, in512-Bit-Registern, eine billige Vorprobe spart Nachschläge in der Kuckuckstafel, und für das damalige Netz wurden die Ausgänge der ersten Schicht so umsortiert, dass die nächste Schicht mehr Nullen überspringen kann.0.2.24(2026-10-23): ein neues Netz mit8statt4Königseimern. Die neuen Eimer unterscheiden, wie weit der eigene König vorgerückt ist. Sein Startnetz wurde16Epochen mit dieser Aufteilung trainiert und dann4Epochen auf148,8Millionen Stellungen nachtrainiert, die Coherents eigene Suche bewertet hatte.
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.
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
| Angabe | Version | Wert | Art |
|---|---|---|---|
| Arena, veröffentlicht | 0.2.21 | 3701, Gesamtband ±51, davon ±5 statistisch | Messung gegen 10 fremde Engines |
| AFE | 0.2.22 | 3703 [3693; 3712] | Schätzung |
| AFE | 0.2.23 | 3703 [3690; 3716] | Schätzung |
| AFE | 0.2.24 | 3710 [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.