- 約 2KBサイズで動作する 軽量チェスエンジン で、制限されたルール内で完全なゲーム進行が可能
- 120セルのメールボックス盤面、ネガマックス探索、アルファベータ枝刈り などの中核アルゴリズムを含む
- 駒価値ベース評価(material-only eval) と キャプチャ優先(move ordering) 方式を使用
- キャスリング、アンパッサン、昇格、反復、50手ルールなどは 未実装
- 約 1170〜1200 Elo水準の性能 を示し、2KB以下のコードでチェスエンジンを実装した事例 として注目される
プロジェクト概要
- Sameshi は 制限されたルールをサポートする極小チェスエンジン で、コード全体のサイズは約 1.95KB にすぎない
- 主要ファイルは
sameshi.h で、読みやすい版は readable/sameshi.h に含まれる
- GitHub リポジトリには
main.c、Makefile、.gitignore なども併せて提供されている
- デモ動画 が YouTube に公開されており、実際の動作を確認できる
中核構造 (core)
- エンジンは次の6つの主要構成要素から成る
- 120セルのメールボックス盤面構造
- Negamax 探索アルゴリズム
- Alpha-Beta 枝刈り
- 駒価値ベース評価(material-only evaluation)
- キャプチャ優先(move ordering)
- チェック・チェックメイト・ステイルメイトを含む完全な合法手検証
- 未実装機能 として、キャスリング、アンパッサン、昇格、反復、50手ルールが明記されている
性能 (strength)
- 約 1170 Elo 水準と評価され、95%信頼区間は 1110〜1225 Elo
- Stockfish (1320〜1600 レベル) との240局の対戦結果を基に測定
- 深さ5(fixed depth 5)、最大60プライ、制限ルール 条件でテストされた
技術的特徴
- コード全体のサイズは 2KB未満 で、C言語 98.6%、Makefile 1.4% で構成される
- 軽量化とアルゴリズム効率 を極限まで高め、最小限のコードでチェスロジックを実装している
- チェスエンジン(chess-engine)、チェス(chess)、デモシーン(demoscene) 関連トピックに分類される
リポジトリの現況
- GitHub で スター143件、フォーク5件 を記録
- Issues、Pull requests、Projects、Security の各項目はすべて空
- リポジトリの説明は「a ~1200 Elo chess engine that fits within 2KB」と要約されている
1件のコメント
Hacker Newsのコメント
本当に素晴らしいプロジェクト。ステイルメイト機能があるのも良いが、ルール全体を実装するにはどれくらいの容量が必要なのか気になる
作者が述べているように、キャスリング、アンパッサン、プロモーション、反復、50手ルールが欠けているなら、現代チェスと呼ぶのは難しいと思う
小さなエンジンなら反復と50手ルールは省略できるかもしれないが、キャスリング、アンパッサン、プロモーションは必須だと思う
1980年の Video Chess は4KB以内で完全なルールをサポートしていた
なので、現在最小の UCI互換エンジン が何なのか気になる。それを上回る超小型の完全ルール対応エンジンを作るのは面白い目標になりそうだ
ちなみに、1980年代初頭に私が使っていた Fidelity CC3 もキャスリングとアンパッサンをサポートしていた
2KBのJavaScript版はキャスリング、アンパッサン、プロモーション、探索、GUIまで含んでおり
326バイトのアセンブリ版には特殊ルールが欠けている
UCI互換版はないが、GUIより実装は簡単そうだ。JS版のフォークの一部がその機能を追加しているかもしれない
素晴らしいプロジェクト。GNU Chessのフロントエンドを活用すればコード行数を減らしてバックエンドだけ実装することもできそうだ
バグ報告として、ポーンはすでに1マス動いた後は2マス前進できないのに
b6b4が許可される問題を見つけたチェスエンジン開発者が ELO推定 に最もよく使うツールは cutechess だ。内部的には SPRT を使っている
別のツールとして Ordo もあるが、自分では使ったことがない
1バイトあたり1 ELOを達成できるのか気になる。もっと小さくはできても、その分賢さは落ちるかもしれない
これはチェスというより チェスの駒を動かせるプログラム に近い。キャスリング、アンパッサン、プロモーション、反復、50手ルールが欠けているからだ
ときどき極端に小さいサイズでチェスを実装したと主張するものがあるが、実際には重要なルールを省いている場合が多い
本当に小さくて強いエンジンを探しているなら、x86アセンブリで書かれた asmFish(約130KiB)や、1000行程度の OliThink、そしてシンプルなCコードで強力な性能を出す Xiphos を勧める
TCECに登場した4KBエンジンもあるが、その主張には脚注(*)が付きそうな部分があると思う
Toledo は 小さいがかなり強いチェスプログラム の系統だ
私も最近、約400行の読みやすいコードで すべてのルールを含むチェスエンジン を実装した
最初はJavaで作り、その後自作言語の Bau に移植した
ターミナルUIまで含まれており、まだELOは測定中だが私は勝てなかった
特に キャスリングの実装 が厄介だったが、挑戦そのものが楽しかった
Bau言語のチェスコード を参照
Stockfishがキャスリングをしようとする対局をどう扱ったのか気になる。キャスリングは非常によく出る手なので、それをサポートしないとエンジンの強さを評価するのは難しいと思う
そのため、すべての対局は同じ「キャスリングなしの変則チェス」として進行した
この評価は完全なチェスではなく、その制限付きバリアントに対するものだ
本当に素晴らしい! このプロジェクトを HN Arcade に追加した
HN Arcadeリンク