エンジン設定

ShogiArena は USI エンジンを YAML で定義します。 トーナメント設定の engines からこの YAML を参照するか、artifact を直接指定します。

ローカルエンジン

実行ファイルと、評価関数や定跡の配置に合わせて設定します。 Linux や macOS では、実行ファイルに実行権限を付けてください。

name: "Local Engine"
engine_path: "/path/to/engine"
working_directory: "/path/to"
engine_args:
  - "--usi"
environment:
  OMP_NUM_THREADS: "2"
options:
  Threads: 2
  USI_Hash: 256
go_options:
  nodes: 1000000
enable_early_ponder: false
handshake_timeout: 10
io:
  collect_info_strings: false
  collect_raw_io: true
  collect_stderr: true
  collect_outbound: true
option_validation:
  default: strict
  overrides:
    BookFile: allow_unlisted_combo_value

主なフィールド:

フィールド説明
name表示名。省略時は engine_path などから派生
engine_pathUSI エンジン実行ファイル
working_directoryエンジンの作業ディレクトリ
engine_argsエンジン起動時の引数
environmentエンジンプロセスへ渡す環境変数
optionsUSI setoption として送る値
go_optionsgo depth / go nodes へ渡すエンジン単位の既定値
enable_early_ponderponderhit を早めに送る実験的オプション
handshake_timeout起動、usiok、readyok、停止回収などの待機秒数
ioinfo string / raw USI I/O / stderr / outbound command の収集方針
option_validationUSI option 値の検証方針

engine_path、working_directory、options 内のパス値には相対パスや {engine_dir} を使えます。 go_options は depth と nodes のみを受け付けます。 movetime、btime、wtime、byoyomi、infinite などの時間制御は、対局中の持ち時間管理と競合するためエンジン設定では指定できません。 時間制御は run 設定の rules.time_control で指定してください。

入出力の記録とオプションの検証

USI コマンドやエンジンの出力を記録するには、io を指定します。

io:
  collect_info_strings: true   # UsiThinkResult.info_strings に info line を残す
  collect_raw_io: true         # stdin/stdout の typed UsiIoEvent を発行する
  collect_stderr: true         # stderr も UsiIoEvent(direction="stderr") として扱う
  collect_outbound: true       # ShogiArena から送った command も記録する

USI option は既定で strict に検証されます。 mode は strict、warn、raw、allow_unlisted_combo_value です。 allow_unlisted_combo_value は、combo option の候補一覧に出ないファイル名を渡す必要がある場合だけ option 単位で指定してください。

option_validation:
  default: strict
  overrides:
    BookFile: allow_unlisted_combo_value

詰み探索と起動待機の設定

必要に応じて、次の項目もエンジン YAML に指定できます。

フィールド用途
mate_default_ply_limitrun mate / Python mate search の既定 ply 上限
mate_default_node_limitmate search の既定 node 上限
mate_default_infinitemate search の既定を go mate infinite にする
mate_wait_for_bestmovemate result 後の trailing bestmove を待つ
isready_sync_strategyisready 同期の方式。direct、wait、stop
isready_lock_key / isready_lock_templateoption 値から isready lock key を作る
isready_lock_check_key / isready_lock_check_template / isready_lock_check_templateslock 解放確認に使う file path template
isready_lock_skip_if_existslock file が既にある場合に待機を省略する

内蔵定跡

YaneuraOu 系エンジンの BookDir / BookFile は、エンジン内蔵定跡として扱います。 ShogiArena は定跡ファイルを検証して出所を記録し、USI オプションとしてエンジンへ渡します。 定跡から指し手を選ぶのはエンジンです。

options:
  USI_OwnBook: true
  BookDir: "./book"
  BookFile: "user_book1.db"
  BookOnTheFly: true

USI_OwnBook が明示的に false でなく、BookFile が no_book でない場合、BookDir + BookFile の実体パスを起動前に検証します。 大きな YANEURAOU-DB2016 形式の book では BookOnTheFly: true を使う運用を推奨します。

BookFile: user_book1.db の .db がなく、同じ場所に user_book1.ybb がある場合は、.ybb を定跡ファイルとして使います。 元の指定と実際に使ったパスを記録し、リモート実行でも .ybb を配布します。

エンジンが BookFile を combo option として宣言していて、任意の book ファイル名を var に列挙しない場合は、上の option_validation.overrides.BookFile で allow_unlisted_combo_value を指定します。 これは値の送信を許可するだけで、ShogiArena の path preflight と provenance 記録は引き続き実行されます。

各指し手には、着手の由来を示す move_source と、定跡候補手に含まれるかを示す book_hit が記録されます。 ShogiArena が通常の USI 出力から観測できる範囲では、book を示す info string があれば book、探索統計があれば search、断定できない手は unknown です。 search は探索統計を観測したという意味であり、book 由来ではないことの断定ではありません。 book_hit は book lookup などで明示的に判定された場合だけ入り、未測定は null のままです。

実力比較や SPSA でエンジンごとに異なる内蔵定跡を使うと、定跡の違いも結果に影響します。 定跡を使わずに比較するには、BookFile: no_book または USI_OwnBook: false を指定してください。 サンプルのオプション上書き用 YAML では BookFile: no_book を使っています。

共通の開始局面や、先後を入れ替えて同じ手順を使う設定は、rules.initial_positions で指定します。 指し手列は対局前に初期局面の SFEN へ変換され、棋譜には挿入されません。 内蔵定跡を有効にしている場合は、その初期局面からさらに定跡手が続くことがあります。

artifact エンジン

ビルド済み成果物やリポジトリ定義からエンジンを解決する場合は artifact を使います。

name: "YO-mainline"
artifact: "YaneuraOu/9f89431a"
build_options:
  target_cpu: ZEN3
  edition: YANEURAOU_ENGINE_NNUE_HALFKP_512X2_8_64
options:
  Threads: 4
  USI_Hash: 2048

artifact と engine_path は同時に指定できません。 artifact を使う場合、通常は build_options.target_cpu が必要です。

トーナメント側からの上書き

同じエンジン YAML を使いながら、トーナメントごとに名前や USI オプションを変えられます。

engines:
  - engine_path: "engines/yaneuraou.yaml"
    name: "YaneuraOu_Strong"
    options:
      Threads: 4
      USI_Hash: 1024
  - engine_path: "engines/yaneuraou.yaml"
    name: "YaneuraOu_Light"
    options:
      Threads: 1
      USI_Hash: 128

options_overlays を使うと、USI オプション上書き用 YAML を段階的にマージできます。 overlay YAML は必ず options: ブロック配下に書きます。

engines:
  - artifact: "YaneuraOu/9f89431a"
    build_options:
      target_cpu: ZEN3
    options_overlays:
      - "examples/configs/resources/engines/overlays/YaneuraOu.yaml"
    options:
      Threads: 4

overlay YAML の例:

options:
  USI_Hash: 1024
  BookFile: no_book

動作確認

単体エンジンの起動確認:

shogiarena run analyze engine.yaml startpos --nodes 100000
shogiarena run mate engine.yaml startpos --ply-limit 5

トーナメント設定込みの検証:

shogiarena run tournament tournament.yaml --dry-run

サンプル

  • examples/configs/resources/engines/local_example.yaml
  • examples/configs/resources/engines/artifact_example.yaml
  • examples/configs/resources/engines/overlays/