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 调试
每月55次下载
在perftree-cli中使用
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
,例如e2e4
或a7b8Q
。
脚本应将 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
- 退出程序。