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

阿尔法贝塔搜索迭代深化反驳表

戚逸清
2023-03-14

我已经实现了迭代深化的alpha beta搜索,并且我已经阅读了一些技术来进一步优化算法,首先搜索从以前的深度搜索中出现的最佳移动。

据我所知,我可以只将先前深度搜索的主要变化html" target="_blank">存储在动态长度列表中吗?例如,假设我使用PV[1,0,2,3]搜索到深度4,这意味着在深度1选择移动数1,在深度2选择移动数0,在深度3选择移动数2,等等...,然后对于深度5搜索,该算法将首先从先前的深度PV搜索节点的子节点。

这就是你所谓的反驳表吗?

此链接中的反驳表说明:对于每次迭代,搜索都会为从根节点到叶节点的每次移动生成路径,从而产生正确的最小最大值分数或其值的上限。从 d - 1 层搜索的路径可用作搜索到 d 层的基础。通常,搜索上一个迭代的路径或反驳移动作为当前迭代检查的初始路径将证明足以更深入地反驳移动。

如果不一样,你能解释一下什么是反驳表吗(因为对我来说,两者似乎相等,但我不确定)以及使用反驳表而不是我首先提到的方式的优势是什么?

共有1个答案

冯良才
2023-03-14

从您的链接提供的描述来看,我假设反驳表或多或少地将三角PV表的概念扩展到了所有根移动。换句话说,不仅最佳根移动,而且所有根移动都与三角形PV表相关联。

不过,我可能弄错了,因为我以前从未使用过甚至听说过这种技术。在当今世界,分配足够大的换位表是没有问题的,我看不到反驳表与换位表、杀手级移动和历史表的标准技术相比有什么优势(尽管许多引擎不再使用后者)。

我的建议:如果你还没有实现换位表和杀手级移动,我强烈建议你从那里开始,以改进移动顺序。

 类似资料:
  • 我最近实现了极小极大和阿尔法贝塔修剪算法,我100%确定(自动分级器)我正确地实现了它们。但是当我执行我的程序时,它们的行为不同。我99%确定极小极大和阿尔法贝塔的结束状态应该是相同的。我说得对吗?它们在实现结果的路径上会有所不同吗?因为我们忽略了min将选择的一些值,而max不会选择这些值,反之亦然。

  • 本篇简述一下迭代加深搜索,并列出了伪代码帮助大家理解。 迭代加深是一种每次限制搜索深度的深度优先搜索。 (1)本质:它的本质还是深度优先搜索,只不过在搜索的同时带上了一个深度d ,当d达到设定的深度时就返回,一般用于找最优解。如果一次搜索没有找到合法的解,就让设定的深度+1 ,重新从根开始。 既然是为了找最优解,为什么不用BFS呢?我们知道BFS的基础是一个队列,队列的空间复杂度很大,当状态比较多

  • 我在做什么:我正在用C编写一个象棋引擎。我最近更新了我的引擎的minimax搜索算法,该算法使用alpha-beta修剪来利用迭代深化,以便在时间限制下运行。这是它的外观: 我的问题:这个实现的问题是,当搜索任何大于1的深度时,它将在搜索所需深度之前搜索所有之前的深度。也就是说,此迭代深化搜索首先搜索深度为1的所有移动。然后,它将再次搜索深度1,然后再搜索深度2,而不是在下一次搜索时选择深度2。然

  • 我正在尝试建立一个国际象棋AI。我的带有 alpha-beta 修剪的 negamax 函数 (ABP) 比使用 ABP 的单独最小和最大函数运行得慢得多(约 8 倍),尽管返回的移动是相等的. 我的棋盘评估函数总是返回一个关于红色玩家的值,即红色玩家越高越好。仅对于 Negamax,当返回深度 0 时,黑色玩家的此值乘以 -1。 我的Netamax函数: 根调用: 我的最小和最大函数: 根分别调

  • 为了通过Alpha-Beta剪枝提高最小极大算法的性能,我实现了迭代深化: 其中方法<code>iterativeDeepening</code>只返回最佳移动的id。 首先,我不确定这是否是实现迭代深化的正确方法。 其次,我注意到AI开始做错误的动作。迭代深化有可能影响决策吗? 在使用转置表和迭代深化时,我衡量了算法速度的显著提高,但我真的不想为了速度而牺牲AI质量。

  • 我正在为2048年开发一个人工智能,并且即将应用极大极小算法。 然而,2048的搜索树实际上就像一棵没有民角色的期望极小树。我想知道如果我没有民角色,我怎么能在实践中应用α-β剪枝? 如果我不应该在这个场景中应用alpha-beta修剪,我怎么能减少无用的搜索分支? 任何想法将不胜感激。谢谢你。