1 个不稳定版本

0.1.0 2021 年 6 月 10 日

#496调试

27 每月下载量

MIT 许可证

17KB
409

perftree

A perft 调试器。比较你的棋引擎与 Stockfish,快速找到生成走法的差异。

工作原理

在调试棋引擎时,通常通过 perft 函数的结果将它的走法生成与已知良好的引擎进行比较,该函数计算从某个初始位置到某个给定深度的所有节点。使用这些结果,可以快速隔离问题子树,并找出两个引擎之间走法生成的差异。

而不是比较结果并手动遍历树,我使用了并维护了 perftree,这是一个半自动调试器,为您完成这项艰苦的工作。它可以跟踪你在游戏树中的位置,评估当前位置的 perft 函数,并自动比较结果,突出显示差异,以便于识别。

安装

perftree 使用 Stockfish,这是一个在棋类社区中得到广泛应用的知名引擎,作为 perft 结果的可靠来源。如果您尚未下载并安装 Stockfish,请从 Stockfish 下载,并确保您可以使用命令 stockfish 从命令行运行它。

使用 cargo 从 crates.io 仓库安装 perftree CLI 应用程序

cargo install perftree-cli

用法

您的 perft 脚本

perftree 需要一种方式来调用你的棋引擎中的 perft 函数。目前,它期望用户提供一个脚本,该脚本将按以下方式调用

./your-perft.sh "$depth" "$fen" "$moves"

其中

  • $depth 是评估的最大深度,

  • $fen 是某个基准位置的对局表示法字符串(Forsyth-Edwards Notation),详细信息请参考Forsyth-Edwards Notation

  • $moves 是从基准位置到要评估的位置的可选空格分隔的走法列表,每个走法格式为 $source$target$promotion,例如 e2e4a7b8Q

脚本应将 perft 函数的结果输出到标准输出,格式如下:

  • 对于当前位置的所有可行走法,打印走法和给定深度的节点数,节点数为该走法的祖先节点数,节点数与走法之间用空格分隔。

  • 在走法列表之后,打印一个空行。

  • 最后,打印总节点数,单独占一行。

例如,这是起始位置深度为3的 perft 的样子:

$ ./your-perft.sh 3 "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"
a2a3 380
b2b3 420
c2c3 420
d2d3 539
e2e3 599
f2f3 380
g2g3 420
h2h3 380
a2a4 420
b2b4 421
c2c4 441
d2d4 560
e2e4 600
f2f4 401
g2g4 421
h2h4 420
b1c3 440
g1h3 400
b1a3 400
g1f3 440

8902

运行 perftree

从命令行运行 perftree,并将脚本路径作为第一个参数传递

perftree ./your-script.sh

perftree 理解以下命令:

  • fen [new_fen] - 设置根节点的 FEN 字符串,并清除走法列表。当未提供 new_fen 时,将打印当前的 FEN 字符串。

  • moves [new_moves ...] - 设置走法列表。当未提供 new_moves 时,将打印当前的走法列表。

  • depth [new_depth] - 设置 perft 的最大深度。当未提供 new_depth 时,将打印当前的深度。

  • root - 清除走法列表,实际上变为游戏树中的根节点。

  • child|move <move> - 将给定走法推送到走法列表中,实际上变为当前状态下由给定走法标识的子节点。

  • parent|unmove - 从走法列表中弹出一个走法,实际上变为当前状态的父母节点。

  • diff - 计算并输出当前节点的 perft 结果的 diff。你的结果在左侧,Stockfish 在右侧。缺失的数字表示相应的引擎输出中不存在该走法。

  • exit|quit - 退出程序。

示例

asciicast

依赖关系

~0–7.5MB
~43K SLoC