#棋类引擎 #国际象棋 #perft

perftree

棋类引擎的Perftree调试器。比较你的游戏树与Stockfish!

5个不稳定版本

0.3.0 2021年6月10日
0.2.0 2021年4月2日
0.1.2 2020年7月31日
0.1.1 2020年4月28日
0.1.0 2020年4月28日

#312 in 调试

Download history 13/week @ 2024-04-01 6/week @ 2024-05-20

每月55次下载
perftree-cli中使用

MIT许可证

10KB
264

perftree

一个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记法字符串,

  • $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 结果的差异。你的结果在左边,Stockfish 在右边。缺少的数字表示该移动在对应引擎的输出中不存在。

  • exit|quit - 退出程序。

示例

asciicast

无运行时依赖