Bap*_*bes 3 algorithm chess artificial-intelligence minimax alpha-beta-pruning
我正在尝试使用 alpha-beta 剪枝和转置表来实现极小极大算法。这是针对可能循环的 pacman 代理,因此必须特别注意这一点。如果一个状态(游戏和回合的状态(pacman 或 Ghost))在换位表中,并且之前看到的状态是该节点的父节点(祖父节点,...),则可以将其丢弃。这适用于没有 ab 剪枝的极小极大。从之前的搜索来看,tt(转置表)与ab的实现似乎要困难得多。我试图使代码尽可能清晰,它基于伪代码Artificial Intelligence: A Modern Approach。我希望使用第一种方法使最终结果尽可能接近。
我发现的每个伪代码都以非常不同的方式定义:
大多数差异看起来只是表面上的。但这些代码都没有完全符合我正在寻找的结构:用 ab 剪枝除以 minValue 和 maxValue 的 minimax
提前致谢,
请询问任何进一步的解释
对于更高级的人工智能优化,我还是个新手,但我会分享我所学到的知识。其中两个伪代码链接(1 和 3)都是 Negamax,这比 minimax 更棘手,因为它不太直观。1 和 3 中 Negamax 的两种不同实现需要不同的评估函数,这是它们差异的主要原因(更多内容见下文)。您发布的第二个链接是针对 MTD(f) 的,我之前没有实现过,但我相信它仍然与 Minimax 和 Negamax 不同。我相信 MTD(f) 被认为更快。最后,我见过的带有换位表的 Minimax 的唯一资源就在这里,我真的不确定它是否正确。Negamax 几乎是标准,如果您可以使用 Minimax,那么您可能也可以使用 Negamax。
\n\n虽然 Negamax 和 Minimax 看起来不同,但它们本质上做的是相同的事情。这篇博文很好地描述了它们之间的关系,但没有解释它们之间的差异。我将在下面尝试解释为什么它们不同。
\n\n为什么 minimax 和 negamax 看起来不同但本质上是相同的,在考虑了一些与 Minimax 相关的事情后就变得更加明显了:
\n\n关于 Negamax 的几点:
\n\n通过 Minimax,我们提出了积极和消极的评估。使用 Negamax,我们总是创建积极的评价,然后根据需要反转它们,因此是 Nega。这是可能的,因为游戏是零和游戏,玩家 1 的一分意味着玩家 2 失去一分。
\n\n为什么使用Negamax?因为它更简单。第一次实施更具挑战性,但会让事情变得更简洁。我还认为 Minimax 的换位表条目需要以不同于 Negamax 的方式处理(更复杂)。最重要的是,其他人都使用它。我希望我能更好地解释原因。
\n\n这是我找到的用于使用 Negamax 实现换位表的最佳资源(大多数伪代码并不是很有帮助):
\n\n如果由于某种原因您无法实现 Negamax,这是我找到的用于使用 Minimax 实现换位表的唯一资源。
\n\n最后,我想抛出几点:
\n\n