解释
空着是只在国际象棋引擎计算内部使用的虚构停着,引擎是一种分析局面的程序。轮到走棋的一方不移动任何棋子,放弃一手让对手行动。这种停着在真实国际象棋对局中并不合法。它用于快速测试局面是否足够稳固。
引擎以缩减搜索进行这项测试,也就是比正常搜索少看几步。若在白送对手一手后,局面仍明显超过所需截断阈值,程序便假定至少有一步合法着法同样足够好。于是它可以停止这一分支,而不必逐一检查所有选择。
这种剪枝能节省大量工作,但其假设并非始终成立。在中,走棋反而有害,而允许停着会带来真实国际象棋不存在的优势。空着测试可能把一个局面判断为安全,但棋手因必须走棋实际上会输。某些少子残局中的风险更大。
因此,引擎会加入保护条件。王被将军时不会使用这项测试,并可能在子力很少时禁用它、采用较小的缩减幅度,或在接受截断前执行验证搜索。空着剪枝在等框架内运行,并与其他选择性技术结合,但它本身不决定哪一步最好。
用法与背景
剪枝是指在一项测试表明某分支无法改变主要决定后,避免完整检查该分支。
常见混淆
空着与失去一手
空着是内部搜索手段。没有棋手真的失去一手,这个动作也不会出现在对局中。
剪枝与错误
这种方法有意进行选择性搜索,其保护条件和验证搜索用于控制假设可能失效的情况。
来源
- 1.Null Move Pruning, Chess Programming Wiki
