将棋引擎 Hayanagi

从对局、研究到诘棋中的守方

支持 USI C++17 棋力调节 诘棋搜索 ShogiBoardQ 子模块

截图在 Linux 上以简体中文界面拍摄。

什么是 Hayanagi

与 ShogiBoardQ 配合使用、以 C++17 实现的将棋引擎

Hayanagi 是支持USI 协议(将棋 GUI 与引擎交换着法和搜索结果的协议)的将棋引擎。它作为 ShogiBoardQ 的 Git 子模块管理,用同一套源码构建普通对局用的可执行文件和诘棋用的内置库。

用法功能与准备
注册为 USI 引擎可用于对局、棋谱分析、研究和诘棋搜索。在“引擎注册”中注册可执行文件。
在诘棋练习中内置使用用于判定题目和走守方的应着。它内置在 ShogiBoardQ 中,无需注册引擎。

源码和详细规格公开在 Hayanagi 的 GitHub 仓库。本页基于子模块中的 Hayanagi 1.5.1。

对局与棋力调节

支持基本时间、读秒、加时,以及对手回合中的后台思考。可通过限制搜索量调节棋力。

研究与棋谱分析

输出评价值、主要变化、搜索深度和节点数。可用 MultiPV 比较多个候选着法。

定式与对局规则

支持 YaneuraOu 的 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。请根据电脑的 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 引擎。诘棋练习的内置判定使用题目列表的“诘棋引擎”“搜索时间”,以及练习画面的“搜索时间”。

诘棋搜索与诘棋练习

区分将死、不诘和未判定,并调查攻方与守方的着法

用途动作
诘棋搜索通过标准 USI 的 go mate 请已注册的 Hayanagi 搜索。找到将死时,返回包括守方最长抵抗在内的全部手顺。
诘棋练习由内置 Hayanagi 判定题目,并针对用户的将军走守方的应着。错过将死时会显示解围的着法。
诘棋局面生成器由内置 Hayanagi 预先筛选候选局面。也可以选择已注册的 Hayanagi 作为确认将死的 USI 引擎。

标准 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 等准备请参阅从源码构建中各操作系统的步骤。在 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(日文)。