我正在使用alpha-beta剪枝和置换表,在MTD(f)算法内部添加静态搜索到我的国际象棋引擎中。在我的主要搜索中,当达到深度为0(叶节点)时,我会调用Quiescence搜索,这是一个简单的alpha-beta剪枝,没有置换表(因为测试表明仅搜索捕获更快,不需要TT)。我发现在该主题的伪代码中有一些未涵盖的内容:当我在主搜索中递归到深度为0(叶节点)并调用quiescence函数来获得节点评估时,我认为我应该也获取评估类型:精确值、alpha值或beta值:
在典型的例子中,叶子节点评估在TT中总是以“精确”值存储,但是当节点评估基于alpha-beta搜索通过捕获并且此搜索从不是(-inf,+ inf)的alpha-beta范围开始时,我认为QuiescenceAlphaBetaSearch的结果将不会始终是精确值。如果在TT中存储它,则应使用来自静态搜索返回的标志进行标记,我是正确的吗?
我不确定从主搜索传递当前alpha和beta到Quiescence搜索是否在数学上是正确的,因此我希望在这个问题上得到确认。
... 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搜索是否在数学上是正确的,因此我希望在这个问题上得到确认。