ソースコードで読む将棋エンジン

Hayanagi で学ぶ
将棋エンジンの仕組み

本書は、C++17 で実装された USI プロトコル対応将棋エンジン Hayanagi(約 4,900 行)のソースコードを題材に、 将棋エンジンの設計と実装を基礎から解説する教科書です。

データ表現、合法手生成、探索アルゴリズム、評価関数、USI プロトコルなど、 将棋エンジンを構成する要素をひとつずつ、実際のコードを読みながら理解していきます。

  • 15章5部構成
  • 約4,900行題材のソースコード
  • C++17USI プロトコル対応

対象読者

  • C++ の基本文法を理解している方
  • 将棋のルールを知っている方
  • ゲームAI・探索アルゴリズムに興味がある方

目次

第I部

基礎とデータ構造

  1. 第1章 はじめに 将棋エンジンとは何か/USIプロトコルの概要/Hayanagiの全体構成/ビルドと動作確認
  2. 第2章 型とデータ表現 盤面の座標系/駒の表現/Move構造体/駒の価値と入玉ポイント/終局状態の分類
  3. 第3章 ビットボード 81マスを2つのuint64_tで表現/基本操作/集合演算とイテレーション/コンパイラ組み込み関数
第II部

局面管理と合法手生成

  1. 第4章 局面管理 — 基礎編 盤面配列・持ち駒・手番の管理/色別・駒種別ビットボード/SFEN文字列の読み書き/Zobristハッシュ
  2. 第5章 攻撃テーブルと利き計算 事前計算テーブルの構築/ステップ型の利き/スライダー型の利き/between テーブル
  3. 第6章 合法手生成 直接生成方式の設計/ピン判定と王手検出/駒種別の手生成/駒打ちと打ち歩詰め判定
  4. 第7章 終局判定と特殊ルール 千日手/連続王手の千日手/持将棋と入玉宣言勝ち/入玉ルールバリアント/手数上限
第III部

探索と評価

  1. 第8章 探索アルゴリズム — 基礎編 反復深化とNegamax法/Alpha-Beta枝刈り/PVS/静止探索/時間管理
  2. 第9章 探索の高速化テクニック 置換表/ヌルムーブ枝刈り/LMR/着手順序の最適化/SEE
  3. 第10章 詰み探索 王手限定の専用探索/攻撃側・防御側探索/通常探索との統合
  4. 第11章 評価関数 駒得/駒の位置評価/利きの広さ/玉の安全度/テンポボーナス
第IV部

並列化とプロトコル

  1. 第12章 並列探索 ルート手分割/ワーカースレッド管理/共有置換表のアトミック操作/ノードカウンタ
  2. 第13章 定跡 やねうら王DB2016フォーマット/SFENキーによる定跡検索/エンジンとの統合
  3. 第14章 USIプロトコルの実装 コマンドループとディスパッチ/オプション管理/探索スレッド管理/Ponder・MultiPV対応
第V部

発展

  1. 第15章 まとめと発展 設計判断の振り返り/強化の方向性(NNUE、Magic Bitboard、MCTS等)/参考文献

ソースコード構成

ファイル行数役割
types.h304型定義・定数・駒操作ユーティリティ
bitboard.h11481マスビットボード
position.h162局面管理ヘッダ
position.cpp1,686局面管理・合法手生成・終局判定
search.h126探索アルゴリズムヘッダ
search.cpp1,482探索・評価関数・置換表
usi_engine.h61USIエンジンヘッダ
usi_engine.cpp863USIプロトコル処理
book.h28定跡ヘッダ
book.cpp59定跡読み込み・検索
main.cpp12エントリポイント

行数は執筆時点のものです。最新の構成はリポジトリの src/ を参照してください。