解释
Perft从一个局面出发遍历合法着法树,并计算所有到达准确深度的序列。深度一表示计算当前可走的合法着法。深度二还包括对手的每一种合法应对,之后依此类推。即使两个不同序列到达相同棋盘状态,每个序列仍分别计数。对同一局面和深度,结果是可以复现的数字。
它的主要用途是验证程序的着法生成器。若总数与可信参考值不同,就说明某条规则或局面更新有误。一种称为divide的形式会为每步初始着法分别报告小计,帮助开发者定位差异从哪条分支开始。
Perft尤其擅长暴露与将军、吃过路兵这种特殊兵吃法、升变和这种王与车共同完成的特殊着法有关的细微错误。它也能揭示程序在撤销一步后,错误恢复轮到走棋的一方、王车易位权或吃过路兵目标格。
Perft不进行局面评估、最佳着法选择或分支剪枝。通过测试表示程序与已验证的合法着法计数一致,但不能证明棋力强。尽管名称来自performance test,正确计数才是核心目的;计时只是额外基准,并且取决于具体实现。
常见混淆
Perft与棋力
Perft验证规则和着法生成,不衡量局面理解、评估质量或战术实力。
Perft与哈希
实现可以使用识别局面,但正确的哈希键不能取代合法计数。
查看术语来源
- 1.Perft, Chess Programming Wiki
