我正在尝试使用alpha-beta修剪 AND 换位表实现minimax算法。这是针对可能循环的吃豆人特工,因此必须特别注意。如果某个状态(游戏状态和转弯状态(吃豆人或幽灵))在转置表中,并且先前要看到的是该节点的父级(祖父母,...),则可以将其丢弃。这适用于没有a-b修剪的minimax。从以前的搜索来看,带有a-b的tt(换位表)似乎很难实现。我试图使代码尽可能清晰,它基于此伪代码Artificial Intelligence: A Modern Approach。我想通过第一种方法尽可能地保持最终结果。
我发现的每个伪代码都是以非常不同的方式定义的:
First pseudo-code; Second pseudo-code; Third pseudo-code
大多数差异看起来都是表面的。但是这些代码都没有我要寻找的结构:除以minValue和maxValue并经a-b修剪的minimax
预先感谢
请要求进一步的解释
答案 0 :(得分:1)
对于高级AI优化我还是很陌生,但是我将分享我学到的东西。伪代码链接中的两个(1和3)都是Negamax,它比minimax棘手,因为它不那么直观。 Negamax在1和3中的两种不同实现方式需要不同的评估功能,这是它们不同的主要原因(更多信息请参见下文)。您发布的第二个链接是针对我之前未实现的MTD(f),但我认为仍然与Minimax和Negamax有所不同。 I believe MTD(f) is considered to be faster。最后,the only resource I have ever seen for Minimax with transposition tables is here我真的不确定它是否正确。 Negamax几乎是标准配置,如果您可以使用Minimax,则可以改用Negamax。
虽然Negamax和Minimax看起来不同,但它们实际上是在做相同的事情。 This blog post很好地描述了它们之间的关系,但没有解释它们之间的区别。我会在下面解释为什么它们不同。
在考虑与Minimax相关的几件事后,为什么minimax和negamax看起来不同,但本质上相同,所以变得更加明显了:
关于Negamax的几点要点:
借助Minimax,我们可以得出正面和负面的评价。借助Negamax,我们始终会创建积极的评估,然后根据需要将其转化为Nega。这是可能的,因为游戏的总和为零,玩家1的点数等于玩家2的点数。
为什么要使用Negamax?因为它更简单。第一次实施更具挑战性,但事情变得更加简洁。我还认为,对于Minimax和Negamax,需要以不同的方式(更复杂)处理换位表条目。最重要的是,其他所有人都使用它。我希望我能更好地解释为什么。
这是我发现的使用Negamax实现换位表的最佳资源(大多数伪代码并没有什么用):
如果由于某种原因您无法实现Negamax,请this is the only resource I have found for implementing Transposition Tables with Minimax。
最后,我想扔几件事: