sameshi:2KBに収まるミニマルなチェスエンジン

Library

概要

sameshiは「できるだけ小さく、しかし実用的に動くチェスエンジン」を目指したプロジェクトです。エンジン本体はヘッダファイル(sameshi.h)に収められ、サイズは約1.95KB。内部表現には120セル(10x12)メールボックスを採用し、手の生成と盤外判定を容易にしています。探索アルゴリズムはネガマックスを基本とし、アルファベータ枝刈りと簡易的な手順(キャプチャ優先)で探索効率を高めています。評価は駒の価値だけに依存するシンプルな実装で、複雑な評価関数は意図的に排除しています。キャスリング・アンパッサン・昇格などの完全ルールは省かれていますが、チェックやチェックメイト、ステイルメイトの判定は実装済みで、学習用や超小型組込み用途、デモとして魅力的なコードベースです。

GitHub

リポジトリの統計情報

  • スター数: 63
  • フォーク数: 0
  • ウォッチャー数: 63
  • コミット数: 14
  • ファイル数: 5
  • メインの言語: C

主な特徴

  • 非常に小さい実装(sameshi.h が約1.95 KB)
  • 120セルメールボックス方式のボード表現で境界判定を簡略化
  • ネガマックス探索+アルファベータ枝刈り、取り手優先の手順順序付け
  • フルなチェック/チェックメイト/ステイルメイト判定(ただし一部ルールは未実装)

技術的なポイント

sameshiの中心は「最小化されたコードでチェスの基本が動くこと」を優先した設計です。120セルメールボックス(10x12)を使うと、オフボード判定を配列アクセスのみで行えるため、境界チェックのための条件分岐を減らせます。これにより生成された手が盤外かどうかを簡潔にチェックでき、コード行数と分岐を抑えられる点が利点です。

探索はネガマックス(負の最大化)アルゴリズムに基づいており、同系列のミニマル実装に多く見られるスタイルです。ここにアルファベータ枝刈りを組み合わせることで実効的な探索幅を削減し、限られた深さでも実用的な手を返します。さらに「キャプチャを先に試す」簡易手順順序付けを行うことで、早期に高スコアな分岐を見つけやすくし、枝刈り効果を高めています(ただし高度な履歴ヒューリスティクスやMVV-LVAは未実装)。

評価関数は「マテリアルのみ」に依存するシンプルなモデルです。各駒に固定の重みを割り当て、その差分を評価値とします。これにより評価処理は極めて軽量で、コード量も最小化できますが、ポジショナルな判断や戦術的な深い読みが必要な局面では弱点になります。また、合法手の判定はチェックの有無を含めて実施するため、不正確な手を返すリスクが低く、メイト/ステイルメイトの判定まで対応しています。

サイズを抑えるため、多くのチェスエンジンで常識的に使われる拡張機能(反復深化、トランスポジションテーブル、複雑な評価項目、昇格の細かい扱いなど)は省かれています。結果として実装は教育的で読みやすく、最小限の機能でどこまで遊べるかを示す良いサンプルになります。性能面では240局の対戦から約1170 Eloの推定が出ており、軽量エンジンとしては実戦性も確認されています。

将来的な改良案としては、昇格やキャスリング等のルール追加、反復深化や時間管理、トランスポジションテーブル導入、より洗練された手順順序付け(MVV-LVAや履歴探索)などが考えられますが、いずれもコードサイズと可読性のトレードオフになります。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitignore: file
  • Makefile: file
  • README.md: file
  • main.c: file
  • sameshi.h: file

まとめ

超小型ながら実用的なチェス学習用エンジン。コードの簡潔さが最大の魅力。

リポジトリ情報:

READMEの抜粋:

sameshi

Watch Demo Video

A minimal chess engine supporting a constrained subset of the game.

sameshi.h: 1.95 KB

core

  1. 120 cell mailbox board
  2. negamax search
  3. alpha beta pruning
  4. material only eval
  5. capture first move ordering
  6. full legal move validation (check / mate / stalemate)

[!NOTE] not implemented: castling, en passant, promotion, repetition, 50-move rule.

strength

~1170 Elo (95% CI: 1110-1225)
240 games…