#chess #move #perft #性能测试 #叶节点

app chess_perft

此包对特定的棋局位置执行'perft'测试。将每一步棋移动到一定的深度,并计算叶节点的数量。这用于验证棋步生成是否正确且快速。此外(可选)验证哈希函数为每个位置生成唯一值。

16个版本 (10个稳定版)

3.1.1 2019年7月14日
3.0.1 2019年1月16日
2.0.1 2018年10月29日
1.0.7 2018年10月16日
0.0.5 2016年5月29日

#4 in #leaf-node

每月44次下载

LGPL-3.0+GPL-3.0+

25KB
169 代码行

crates.io/chess/ 和 crates.io/shakmaty/ 的 Perft 测试基准

此简单程序测试了 'chess' 包和 'shakmaty' 包的性能。由于它似乎不再维护(并且我最近无法编译它),已删除 'chess-move-gen' 包。

运行

要运行程序,您必须指定一个有效的 FEN 字符串(表示棋局位置)和搜索深度。

程序将报告从该位置开始找到的叶节点数量以及搜索所需的时间(忽略设置时间,目前这部分时间较长)。

您还可以使用 -a [大小] 选项在每次深度缓存结果,从而加快 perft 性能。

您还可以使用 -m 选项使用 MoveGen 结构,这是一个迭代器,用于测试其功能。(这在大多数情况下是生成棋步的最快方式,对于 'chess' 包。)

您还可以指定 -c 选项使用 'chess' 包,-s 选项使用 'shakmaty' 包,或 -g 用于 'chesss-move-gen' 包。注意:此应用程序支持的所有功能并不都在 'shakmaty' 包中,因此对于所有命令行参数,我默认调用其 'perft' 函数。

性能

以下是我使用命令 'RUSTFLAGS="-C target-cpu=native" cargo bench | python graph_benches.py' 比较了 chess 和 shakmaty 的性能数据(数值越低越好)。

Performance Numbers SVG

如果在 crates.io 上查看,您可以在 https://github.com/jordanbray/chess_perft 上查看性能数据。

示例

[jordan@razer chess_perft]$ ./target/release/chess_perft -f "r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1" -d 6 -m # Test the KiwiPete Position
chess   : Perft 6 of r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1       Result: 8031647685      Time: 22s 492ms

依赖关系

~1.5MB
~25K SLoC