Artificial intelligence 击败一个极小极大的对手

Artificial intelligence 击败一个极小极大的对手,artificial-intelligence,minimax,alpha-beta-pruning,Artificial Intelligence,Minimax,Alpha Beta Pruning,我必须创建一个人工智能,它必须与其他人工智能竞争 两个AI将在相同的硬件上运行,具有相同的处理时间和内存。我知道对手AI将使用带有alpha-beta修剪的minimax算法 现在我的问题是-有什么方法可以打败这样的对手?如果我自己使用minimax,那么两个AI都能完美地预测对方的移动,并且游戏会根据游戏的固有属性(第一步获胜等)进行解决 显而易见的解决方案是以某种方式进一步了解可能的行动,这将允许更好的评估-因为处理器时间相同,我无法评估到更深入的程度(假设相反的AI代码同样优化)。我可以使

我必须创建一个人工智能,它必须与其他人工智能竞争

两个AI将在相同的硬件上运行,具有相同的处理时间和内存。我知道对手AI将使用带有alpha-beta修剪的minimax算法

现在我的问题是-有什么方法可以打败这样的对手?如果我自己使用minimax,那么两个AI都能完美地预测对方的移动,并且游戏会根据游戏的固有属性(第一步获胜等)进行解决

显而易见的解决方案是以某种方式进一步了解可能的行动,这将允许更好的评估-因为处理器时间相同,我无法评估到更深入的程度(假设相反的AI代码同样优化)。我可以使用预计算的树来获得额外的优势,但如果没有超级计算机,我肯定无法“解决”任何重要的游戏

有意挑选一个非最佳节点(比如alpha beta会修剪的节点)是否有价值?这可能会对对手造成CPU时间损失,因为他们必须返回并重新评估树。这将对我造成惩罚,同时我必须评估minimax树+alpha-beta,以查看alpha-beta将修剪哪些节点,而不会获得任何直接好处


针对这样的对手,还有哪些其他优化策略?

首先,选择一条非最佳路线没有任何价值。假设你的对手发挥最佳(这是极大极小搜索的一个基本假设),你的对手将利用这个错误采取行动。一个好的游戏引擎会有一个散列的反驳表条目,其中包含对你的错误的反击,所以你不会因为做出疯狂的举动而获得任何时间。做出错误的动作可以让电脑对手更快地找到正确的动作

对于像《奥赛罗》这样的游戏,你要意识到的关键是,直到游戏后期,你才能确定最佳动作是什么。这是因为搜索树几乎总是太大,无法彻底搜索所有赢或输的位置,因此minimax无法确切地告诉您哪些动作将导致胜利或失败。您只能试探性地决定停止搜索的位置,任意将这些节点称为“终端”,然后运行一个评估函数来猜测位置的赢/输可能性


评估功能的工作是评估职位的价值,通常使用静态指标,无需进一步搜索博弈树即可计算出这些指标。计件数、位置特征、比赛结束时的桌面,甚至对手心理都可以在这里发挥作用。您在评估功能中投入的智能越多,您的引擎通常会发挥得越好。但是静态评估的重点是替换代价太高的搜索。如果您的评估函数做得太多或效率太低,它可能会比获得相同信息所需的博弈树搜索慢。知道在求值函数中放入什么以及何时使用静态求值而不是搜索是编写一个好的游戏引擎的艺术的一大部分。

有很多方法可以通过AB修剪来改进标准极大极小值。例如,研究了提高顺序移动的杀手启发式尝试,因为顺序良好的移动会提高AB的效率


关于AB上不同搜索增强和变体的大量信息,请访问。

我们在谈论什么游戏?奥赛罗,特别是,但我也对解决此类问题的更一般的方法感兴趣。