我正在使用 alpha-beta 修剪和在 MTD(f) 算法内部调用的转置表向我的国际象棋引擎添加静止搜索。在我的主要搜索中,在达到 depth=0(叶节点)后,我调用 Quiescence 搜索,它被实现为没有转置表的简单 alpha beta 修剪(因为测试表明,没有 TT,搜索只捕获工作得更快)
我注意到有关此主题的伪代码中未涵盖的内容:当我在主搜索中处于 depth=0(叶)并且我调用静止搜索函数来获得节点评估时,我认为我也应该获得评估类型:精确,阿尔法或贝塔:
... beginning of main alpha-beta search, checking node in TT
if (depth == 0)
{
// calling quiescence search with current alpha beta
int qresult = QuiescenceAlphaBetaSearch(node, alpha, beta);
saveInTT(node, qresult.Type, qresult.Value);
}
else
{
... run alpha beta search of node.children
}
在典型示例中,叶节点评估始终作为“精确”值存储在 TT 中,但是当节点评估基于通过捕获的 alpha beta 搜索并且此搜索以非 (-inf,+inf) 的 alpha-beta 边界开始时,我认为 QuiescenceAlphaBetaSearch 的结果并不总是准确的值,如果它存储在 TT 中,它应该标有从静止搜索返回的标志,我正确吗?
我不确定将当前的 alpha 和 beta 从主搜索传递到 Quiescence 搜索是否在数学上是正确的,所以我也希望能确认这个主题。