将棋エンジン Hayanagi

対局・検討から詰将棋の玉方まで

USI対応 C++17 棋力調整 詰み探索 ShogiBoardQサブモジュール

Hayanagiとは

ShogiBoardQと連携する、C++17で実装された将棋エンジン

Hayanagiは、将棋GUIと指し手や探索結果をやり取りするUSIプロトコルに対応した将棋エンジンです。ShogiBoardQのGitサブモジュールとして管理され、通常対局用の実行ファイルと、詰将棋用の組み込みライブラリを同じソースからビルドします。

利用方法できること・準備
USIエンジンとして登録対局、棋譜解析、検討、詰み探索に使えます。実行ファイルを「エンジン登録」で登録します。
詰将棋対局で内蔵利用問題の詰み判定や玉方の応手に使います。ShogiBoardQ本体に組み込まれているため、エンジン登録は不要です。

ソースコードと詳しい仕様はHayanagiのGitHubリポジトリで公開しています。このページはサブモジュールのHayanagi 1.5.1に基づく説明です。

対局と棋力調整

持ち時間・秒読み・加算時間、相手の手番中の先読みに対応。探索量を制限して棋力を調整できます。

検討と棋譜解析

評価値、読み筋、探索深さ、探索ノード数を通知。MultiPVで複数の候補手を比較できます。

定跡と対局ルール

やねうら王のDB2016形式の定跡に対応し、Floodgateの棋譜から作った独自の定跡を使います。千日手、連続王手の千日手、持将棋、入玉ルールの判定も備えています。

専用の詰み探索

王手の連続による強制詰みを探索。攻方の玉がない局面を扱え、玉方では最長抵抗や逃れの応手を返します。

ShogiBoardQで使う

通常の対局や検討には、USIエンジンの実行ファイルを登録します

1

実行ファイルを用意する

配布ZIPを展開したフォルダのHayanagi/hayanagi(Windows版はHayanagi\hayanagi.exe)を使えます。Linux版はAppImageの外、macOS版はDMGの外に置いています。定跡Hayanagi/book/hayanagi_book.dbも一緒に入っています。

ソースからShogiBoardQをビルドした場合はbuild/Hayanagi/hayanagiが生成されます。Windowsでは実行ファイル名に.exeが付き、ビルド方式によってはReleaseなどのサブフォルダに配置されます。Hayanagiだけを生成する場合はビルド方法を参照してください。Linux・macOSでは実行権限のあるファイルを選択します。

2

エンジン登録で登録する

「設定」→「エンジン設定…」で「エンジン登録」を開き、「追加」でHayanagiの実行ファイルを選択します。一覧に「Hayanagi 1.5.1」と表示されたら登録完了です。

エンジン登録にHayanagiを登録した画面

エンジン登録:一覧に「Hayanagi 1.5.1」が表示される

「設定」(またはダブルクリック)でエンジンの設定を開き、スレッド数や棋力などを変更できます。画面付きの操作説明はエンジン登録のガイドをご覧ください。

3

対局・解析で選択する

対局の設定でHayanagiを対局者に選ぶと、人間との対局やエンジン同士の対局ができます。検討モードや棋譜解析でも、使用するエンジンとして選択してください。

詰将棋を盤上で解く場合は「対局」→「詰将棋対局…」を開きます。問題一覧の「判定エンジン」で「Hayanagi(内蔵・31手まで)」を選べば、エンジンを登録しなくても始められます。操作は詰将棋対局のガイドで説明しています。

主なエンジン設定

登録したUSIエンジンの設定を、用途に合わせて調整できます

Hayanagiのエンジン設定画面

エンジン設定:「先読み」と、Hayanagiが報告したオプションの値を変更できる

オプション内容
Threads探索に使うスレッド数。既定値は1、範囲は1〜128です。PCのCPUと他の作業に合わせて指定します。
Hash / USI_Hash通常探索の局面を記憶するメモリ量(MB)。どちらも同じ設定で、既定値は16 MBです。
MultiPV出力する候補手の数。エンジンは1〜32に対応します。ShogiBoardQの検討では「候補手の数」の設定が使われます。
USI_Ponder相手の手番中の先読み。既定は無効です。エンジン設定の「先読み」にある「相手の手番中に先読みする」で切り替えます。
USI_LimitStrength
USI_Strength
棋力制限を有効にすると、-15〜6の値で探索の深さとノード数を制限します。負数は級、正数は段の目安で、0は1級相当として扱います。既定では棋力制限は無効です。
USI_AnalyseMode解析用のモード。棋力制限、定跡による即答、自動投了、先読み要求を無効にします。時間無制限の探索は別途指定します。
USI_OwnBook
BookDir / BookFile
定跡を使うか、どのファイルを読むかを指定します。既定は有効で、実行ファイルと同じ場所のbook/hayanagi_book.dbを読みます(BookFileをno_bookにすると定跡を使いません)。ソースからビルドすると定跡ファイルがビルド先に配置され、配布ZIPにも同梱しています。ShogiBoardQから使う場合は、エンジンのあるフォルダから起動するのでこの定跡が読まれます。定跡ファイルが見つからないときは、定跡なしで探索して指します。
EnteringKingRuleエンジン自身が入玉宣言する基準。24点法・27点法・トライルールなどを選択でき、既定値はCSARule24です。宣言の成否は、ShogiBoardQの対局ダイアログの「持将棋」で選んだルールで判定します。

棋力設定の段級位は、対局による校正前の目安です。人間の同じ段級位と一致する保証はありません。Hayanagiは簡易な評価関数を使う最小構成のエンジンで、駒得・駒の働き・玉の安全度などを評価します。

この設定表は登録したUSIエンジン用です。詰将棋対局の内蔵判定では、問題一覧の「判定エンジン」「判定時間」と、対局画面の「判定時間」を使います。

詰み探索と詰将棋対局

詰み・不詰・未判定を区別し、攻方と玉方の手を調べます

用途動作
詰み探索登録したHayanagiに標準USIのgo mateで探索を依頼します。詰みが見つかると、玉方の最長抵抗を含む全手順を返します。
詰将棋対局内蔵Hayanagiで問題を判定し、ユーザーの王手に対して玉方の応手を指します。詰みを逃した場合は逃れの手を示します。
詰将棋局面生成内蔵Hayanagiで候補局面を事前に選別します。詰みを確認するUSIエンジンとして、登録したHayanagiを選ぶこともできます。

標準USIのgo mateの探索上限は63手、ShogiBoardQの詰将棋対局で行う内蔵の初期局面判定は31手までです。時間切れや探索上限への到達は、不詰の証明とは区別して扱います。

深さ優先の探索なので、長手数の詰将棋(おおむね15手以上)は解くのに時間がかかる場合があります。長手数の問題には、問題一覧の「判定エンジン」で別途登録したKomoringHeightsを選べます(登録してあれば、初めて開いたときはKomoringHeightsが選ばれます)。その場合も玉方の応手はHayanagiが指し、どの応手を選ぶかはKomoringHeightsの詰み手数で決めます。

ソースからビルドする

ShogiBoardQと一緒に、またはHayanagiだけをビルドできます

ShogiBoardQと一緒にビルド

ShogiBoardQのリポジトリ直下で実行します。サブモジュールを取得した後、通常どおりビルドすると、アプリ本体とHayanagiが生成されます。

git submodule update --init --recursive
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release

Qtなどの準備はソースからビルドの各OSの手順を参照してください。Linux・macOSの標準的な構成ではbuild/Hayanagi/hayanagiをエンジン登録に使います。定跡ファイルはbuild/Hayanagi/book/hayanagi_book.dbに配置されます。

Hayanagiだけをビルド

サブモジュール取得後、ShogiBoardQのリポジトリ直下で次を実行します。Hayanagi単体はQtに依存せず、CMake 3.16以上とC++17対応コンパイラを使います。

cmake -S Hayanagi -B build-hayanagi -DCMAKE_BUILD_TYPE=Release
cmake --build build-hayanagi --config Release
./build-hayanagi/hayanagi --version

最後のコマンドはLinux・macOSの例で、Hayanagi 1.5.1と表示されます。Windowsでは生成先にあるhayanagi.exeを実行します。USIコマンド、探索の仕組み、テスト、変更履歴の詳細はHayanagiのREADMEを参照してください。