- Eine leichtgewichtige Schach-Engine mit einer Größe von nur etwa 2 KB, die innerhalb eingeschränkter Regeln ein vollständiges Spiel ermöglicht
- Enthält zentrale Algorithmen wie ein 120-Zellen-Mailbox-Board, Negamax-Suche und Alpha-Beta-Pruning
- Verwendet materialbasierte Bewertung (material-only eval) und Capture-Priorisierung (move ordering)
- Nicht implementiert sind Rochade, En passant, Umwandlung, Wiederholung und die 50-Züge-Regel
- Erreicht eine Spielstärke von etwa 1170 bis 1200 Elo und fällt als Beispiel für eine Schach-Engine in weniger als 2 KB Code auf
Projektüberblick
- Sameshi ist eine minimale Schach-Engine mit Unterstützung eingeschränkter Regeln, deren gesamter Code nur etwa 1,95 KB umfasst
- Die Hauptdatei ist
sameshi.h, eine besser lesbare Version befindet sich in readable/sameshi.h
- Im GitHub-Repository sind außerdem
main.c, Makefile, .gitignore und weitere Dateien enthalten
- Auf YouTube ist ein Demo-Video veröffentlicht, in dem sich die tatsächliche Funktionsweise ansehen lässt
Kernstruktur (core)
- Die Engine besteht aus den folgenden sechs Hauptkomponenten
- 120-Zellen-Mailbox-Board-Struktur
- Negamax-Suchalgorithmus
- Alpha-Beta-Pruning
- Materialbasierte Bewertung (material-only evaluation)
- Capture-Priorisierung (move ordering)
- Vollständige Prüfung legaler Züge einschließlich Schach, Schachmatt und Patt
- Als nicht implementierte Funktionen werden ausdrücklich Rochade, En passant, Umwandlung, Wiederholung und die 50-Züge-Regel genannt
Spielstärke (strength)
- Wird auf etwa 1170 Elo geschätzt, mit einem 95-%-Konfidenzintervall von 1110 bis 1225 Elo
- Gemessen auf Basis von 240 Partien gegen Stockfish (Level 1320–1600)
- Getestet unter den Bedingungen Tiefe 5 (fixed depth 5), maximal 60 Ply und eingeschränkte Regeln
Technische Merkmale
- Der gesamte Code bleibt unter 2 KB und besteht zu 98,6 % aus C und zu 1,4 % aus Makefile
- Durch die Maximierung von Schlankheit und algorithmischer Effizienz wird Schachlogik mit minimalem Code umgesetzt
- Eingeordnet unter Themen wie chess-engine, chess und demoscene
Repository-Status
- Auf GitHub verzeichnet das Projekt 143 Stars und 5 Forks
- Die Bereiche Issues, Pull requests, Projects und Security sind alle leer
- Die Repository-Beschreibung wird zusammengefasst als: "a ~1200 Elo chess engine that fits within 2KB"
1 Kommentare
Hacker-News-Kommentare
Wirklich ein tolles Projekt. Es ist schön, dass Patt unterstützt wird, aber ich frage mich, wie viel Platz nötig wäre, um die vollständigen Regeln zu implementieren
Wie der Autor erwähnt, fehlen Rochade, en passant, Umwandlung, Wiederholung und die 50-Züge-Regel, und ich denke, ohne diese lässt es sich kaum als modernes Schach bezeichnen
Bei einer kleinen Engine könnte man Wiederholung und die 50-Züge-Regel vielleicht weglassen, aber Rochade, en passant und Umwandlung halte ich für unverzichtbar
Video Chess von 1980 unterstützte die vollständigen Regeln in 4KB
Deshalb frage ich mich, was aktuell die kleinste UCI-kompatible Engine ist. Eine ultrakleine Engine mit vollständigen Regeln zu bauen, die das unterbietet, wäre ein interessantes Ziel
Zur Einordnung: Mein Fidelity CC3, das ich Anfang der 1980er benutzt habe, unterstützte ebenfalls Rochade und en passant
Die 2KB-JavaScript-Version enthält Rochade, en passant, Umwandlung, Suche und sogar eine GUI
Die 326-Byte-Assembler-Version lässt Sonderregeln weg
Eine UCI-kompatible Version gibt es nicht, aber das wäre vermutlich leichter umzusetzen als eine GUI. Einige Forks der JS-Version könnten diese Funktion bereits hinzugefügt haben
Tolles Projekt. Mit einem Frontend für GNU Chess könnte man vielleicht die Zahl der Codezeilen reduzieren und nur das Backend implementieren
Als Bugreport: Ein Bauer darf nicht zwei Felder vorrücken, nachdem er bereits ein Feld gezogen ist, aber
b6b4wird erlaubtDas von Schach-Engine-Entwicklern am häufigsten verwendete Tool zur ELO-Schätzung ist cutechess. Intern verwendet es SPRT
Ein weiteres Tool ist Ordo, das ich aber selbst noch nicht benutzt habe
Ich frage mich, ob man 1 ELO pro Byte erreichen kann. Man könnte es noch kleiner machen, aber dann vielleicht auch weniger klug
Das ist eher ein Programm, das Schachfiguren bewegen kann, als wirklich Schach. Rochade, en passant, Umwandlung, Wiederholung und die 50-Züge-Regel fehlen ja
Oft wird behauptet, Schach in extrem kleiner Größe implementiert zu haben, tatsächlich werden aber wichtige Regeln weggelassen
Wenn man eine wirklich kleine und starke Engine sucht, würde ich asmFish (etwa 130KiB) empfehlen, geschrieben in x86-Assembler, außerdem OliThink mit ungefähr 1000 Zeilen und Xiphos, das mit einfachem C-Code starke Leistung liefert
Es gibt auch 4KB-Engines, die bei der TCEC aufgetaucht sind, aber ich finde, bei diesen Behauptungen ist ein Sternchen(*) angebracht
Toledo ist eine Familie kleiner, aber ziemlich starker Schachprogramme
Ich habe kürzlich selbst eine Schach-Engine mit allen Regeln in etwa 400 Zeilen gut lesbarem Code implementiert
Zuerst in Java, später habe ich sie in meine eigene Sprache Bau portiert
Eine Terminal-UI ist ebenfalls enthalten, und das ELO wird noch gemessen, aber ich konnte sie nicht schlagen
Vor allem die Implementierung der Rochade war knifflig, aber genau diese Herausforderung hat Spaß gemacht
Siehe den Schach-Code in der Bau-Sprache
Ich frage mich, wie Partien behandelt wurden, in denen Stockfish rochieren wollte. Das ist ein so häufiger Zug, dass sich die Stärke einer Engine ohne diese Unterstützung kaum sinnvoll bewerten lässt
Dadurch wurden alle Partien als dieselbe „schachartige Variante ohne Rochade“ gespielt
Diese Bewertung bezog sich also nicht auf vollständiges Schach, sondern auf diese eingeschränkte Variante
Wirklich großartig! Ich habe dieses Projekt zu HN Arcade hinzugefügt
HN-Arcade-Link