やねうら王のソースコード解説 - mizar/YaneuraOu GitHub Wiki
やねうら王のソースコード解説
ファイルの説明
docs/ 古い資料。現在では[更新履歴.txt](https://github.com/yaneurao/YaneuraOu/blob/master/docs/%E6%9B%B4%E6%96%B0%E5%B1%A5%E6%AD%B4.txt)以外は、[やねうら王Wiki](https://github.com/yaneurao/YaneuraOu/wiki)に移動させた。
source/
config.h 各種コンパイルオプションに基づき、configurationを行なう。
types.h/.cpp コンパイル時の設定や、各種構造体の定義。
bitboard.h/.cpp Bitboard(盤面の駒のある場所や、ある駒による利きなどを表現するのに使う)
evaluate.h/ 評価関数用のヘッダー。評価関数部の本体は、"eval"フォルダに。
misc.h/.cpp 各種ツール類、バージョン情報出力など。
movegen.cpp 指し手生成器(おそらく世界最速)
move_picker.h/.cpp 指し手のオーダリング器。
position.h/.cpp 盤面クラス
search.h 探索部のヘッダー。探索部の本体は"engine"フォルダに。
thread.h/.cpp 探索用のスレッドclass。
thread_win32_osx.h threadのwrapper class。thread stackを拡張する。
tt.h/.cpp 置換表
usi.h/.cpp USIプロトコルによる入出力
usi_option.cpp USIのオプションを解釈したり保持したりするclass。
timeman.cpp 思考時間制御用。
main.cpp main()関数が書かれている。起動時の初期化処理。
YaneuraOu.vcxproj Visual Studioのプロジェクトファイル。
YaneuraOu.vcxproj.filters Visual Studioのプロジェクトファイル。
packages.config Visual Studioがプロジェクトで使用しているpackageを管理するのに使う。
Makefile makeコマンドでビルドする時に用いるMakefile。
wasm_pre.js WASM版を作る時に使うmain()に相当するもの。
engine/
yaneuraou-engine/ やねうら王 探索部
dlshogi-engine/ ふかうら王 探索部
tanuki-mate-engine/ tanuki-さん作 詰将棋エンジン
yaneuraou-mate-engine/ やねうらお作 詰将棋エンジン
yo-cluster/ クラスター化エンジン
user-engine/ ユーザーが独自のエンジンを作るときの作業用フォルダ
eval/
evaluate_no_eval.cpp 評価関数なしのときのダミーヘッダ
evaluate_bona_piece.cpp BonaPieceを用いるときの共通ヘッダ
kppt/ KPPT型の評価関数とその学習用
kpp_kkpt/ KPP_KKPT型の評価関数とその学習用
nnue/ NNUE型の評価関数とその学習用
material/ 駒得評価関数とその拡張
deep/ ふかうら王で使うニューラルネットワークを用いた評価関数
evaluate_io.h/cpp 評価関数のメモリからファイルへ書き出し、ファイルからメモリへ読み込み。
evaluate_common.h 評価関数の共通ヘッダー。
evaluate.cpp 評価関数のデフォルト実装。
evalhash.h KPPT型/KPP_KKPT型の評価関数で用いる、評価関数をcacheしておくclass。
evalsum.h KPPT型/KPP_KKPT型の評価関数で評価値の計算に用いるclass
evaluate_bona_piece.cpp Bonanzaの駒番号。盤面上の駒を特徴量として使いたい時に変換するのに用いる。
evaluate_mir_inv_tools.h/.cpp Bonanzaの駒番号に関するツール類。
testcmd/
benchmark.cpp ベンチマークコマンドの実装。
mate_test_cmd.cpp 詰将棋関係のテストコマンド。
normal_test_cmd.cpp "test"コマンド。
unit_test.h/.cpp 主要classのUnitTest用。"unittest"コマンドで呼び出される。
book/ 定跡関連の処理
book.h/.cpp 定跡処理部の本体
apery_book.h/.cpp Aperyの定跡を読み込むためのもの。
makebook.cpp 定跡生成コマンド("book"コマンド)の実装
makebook2015.cpp 定跡関連コマンド(2015年ぐらいに作っていたもの)
makebook2019.cpp テラショック定跡生成部
makebook2021.cpp スーパーテラショック定跡生成部
extra/ 拡張用クラス(Stockfishから、やねうら王が独自に追加したもの)
all.h すべてのheaderをincludeする横着なheader
bitop.h/.cpp SSE、AVXの命令をsoftwareでemulationするためのマクロ群
key128.h 128bit,256bitのhash key。
long_effect.h/.cpp 遠方駒による長い利きとBitboardなどへの変換子
macros.h マクロ集
sfen_packer.cpp 局面(sfen)ををハフマン符号化して32[byte]に詰め込む。
super_sort.cpp AVX2を用いた高速なソート。(速度が向上しなかったので使っていない)
mate/
mate.h/.cpp 詰将棋ルーチンの共通部
mate1ply.h 1手詰めのヘッダー
mate1ply_with_effect.cpp 利きを利用した超高速1手詰め判定関数(おそらく世界最速)
mate1ply_without_effect.cpp 利きを用いない、Bonanza6風の1手詰め
mate_dfpn.hpp df-pnを用いた詰将棋ルーチン
mate_move_picker.h 詰将棋用のオーダリングルーチン
mate_solver.cpp 3手詰め5手詰めを全探索に近い形で解く専用ルーチン
learn/ 評価関数パラメーターの機械学習関連
learn.h ここで学習関係のオプション設定を行なうことが出来る。
learner.cpp 棋譜自動生成等(あとで整理する予定)
learning_tools.h/.cpp 学習関連のツール
multi_think.h/cpp マルチスレッドで、Search::think関数を呼び出したいときに用いるthread worker
half_float.h fp16みたいなもの。現状、使っていない。
props/ Visual Studioのプロパティシート。(Visual Studioにそういう機能がある)
これを組み合わせてプロジェクトの定義を行う。
やねうら王の仕組みを理解する
やねうら王オープンソースプロジェクト - やねうら王ブログの連載記事が参考になるはず。