やねうら王のソースコード解説 - 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にそういう機能がある)
                                これを組み合わせてプロジェクトの定義を行う。

やねうら王の仕組みを理解する

やねうら王オープンソースプロジェクト - やねうら王ブログの連載記事が参考になるはず。