当前位置: 首页 > 知识库问答 >
问题:

静止搜索-处理换位表的精确/Alpha/Beta标志

姬天宇
2023-03-14

我在我的象棋引擎中添加了静止搜索,使用了alpha-beta prunning和称为内部MTD(f)算法的转置表。在我的主搜索中,在到达深度=0(叶节点)后,我调用了Quiescence search,它被实现为简单的alpha beta prunning,而没有转置表(因为测试表明,搜索仅捕获在没有TT的情况下工作得更快)

我注意到有关此主题的伪代码中未涵盖的内容:当我在主搜索中处于 depth=0(叶子)并且我调用静止搜索函数来获取节点评估时,我想我也应该获得评估类型:精确、alpha 或 beta:

... 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搜索通过捕获和此搜索开始与alpha beta边界不是(-inf,inf),我认为结果的静默AlphaBetaSearch将不总是精确的值,如果它存储在TT它应该被标记为标志返回从静默搜索,我是正确的吗?

我不太确定将当前的 alpha 和 beta 从主搜索传递到静态搜索在数学上是否正确,所以我也希望确认这个主题。

共有2个答案

养翔
2023-03-14

已经存在防止以错误方式使用静止TT值的保护。TT条目存储找到该值的深度,因此仅当搜索在相同或更深的搜索深度时使用。正如您所说,TT不会在离开节点上使用,所以无论该值是否来自quiecence search都没有关系。

马煌
2023-03-14

正如我所说,静态搜索的TT条目将很少使用。由于对主存储器的昂贵访问,不尝试TT命中并计算位置更快。如果您实现没有溢出列表的哈希表并覆盖哈希条目,当新条目在“更好”的深度中找到时,您肯定只覆盖现有条目。因此,当您开始填充哈希表时,很快就没有存储TT条目的选项,因为有更好的条目没有“超过”最大深度,就像这个静态条目一样。

但是,如果您想将静止节点写入TT表,您可以使用“正常”标志精确、上限和下限。当没有alpha或beta切割时,您可以使用“精确”标志,因为在相同位置开始的新静止搜索将返回相同的值。

 类似资料:
  • 好的,我的问题对于任何玩过棋盘游戏编程的人来说都应该很熟悉,所以这里是: 我实现了MiniMax算法的一种变体(返回移动而不是最小/最大值) 我还尝试将其设置为alpha beta版,尽管最终完全失败 这是我的极大极小码: 有什么想法吗?如何调整上述内容,使其成为Alpha Beta搜索? 下面是我尝试的Alpha-Beta转换(失败得很惨): 提示(以避免任何误解): > 此- 和分别被定义为一

  • 本篇将简要介绍α-β剪枝,这是一种基于剪枝( α-βcut-off)的深度优先搜索(depth-first search)。 一、什么是α剪枝? (1)将走棋方定为MAX方,因为它选择着法时总是对其子节点的评估值取极大值,即选择对自己最为有利的着法; (2)将应对方定为MIN方,因为它走棋时需要对其子节点的评估值取极小值,即选择对走棋方最为不利的、最有钳制作用的着法。 (3)在对博弈树(博弈树是指

  • 我已经使用换位表实现了 alpha beta 搜索。 关于在表中存储截止值,我有正确的想法吗? 具体来说,我在表命中时返回截止值的方案是否正确?(同样,存储它们。)我的实现似乎与这个冲突,但直觉上它似乎是正确的。 此外,我的算法从不存储带有 at_most 标志的条目。我应该何时存储这些条目? 下面是我演示主要思想的(简化)代码:

  • 如何知道何时可以停止增加使用negamax alpha beta修剪和换位表的迭代深化算法的深度?以下伪代码取自wiki页面: 这是迭代深化调用: 当然,当我知道游戏中的总移动次数时,我可以使用深度

  • y 标志允许在源字符串中的指定位置执行搜索。 为了掌握 y 标志的用例,看看它有多好,让我们来探讨一个实际的用例。 regexps 的常见任务之一是"词法分析":比如我们在程序设计语言中得到一个文本,然后分析它的结构元素。 例如,HTML 有标签和属性,JavaScript 代码有函数、变量等。 编写词法分析器是一个特殊的领域,有自己的工具和算法,所以我们就不深究了,但有一个共同的任务:在给定的位

  • 我现在从Elasticsearch开始。我为一些EDIFACT消息(一种史前数据格式;-)编制了索引,内容如下: 当我搜索短语UNH 66304 CODECO: D:95B时,它应该只返回一次命中,但它似乎返回了包含任何这些单词的所有文件(并且UNH在每个文档中)。我的查询是: 我尝试添加“and”操作符,如下所示: 但是没有返回结果。我在这里读到了建议:搜索需要使用双引号的确切短语。我试过“查询