2

我必须创建一个必须与其他 AI 竞争的 AI。

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

现在我的问题是 - 有什么方法可以击败这样的对手?如果我自己使用 minimax - 那么两个 AI 都可以完美地预测彼此的动作,并且游戏会根据游戏的固有属性(先手获胜等)来解决。

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

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

还有哪些其他策略可以针对这样的对手进行优化?

4

2 回答 2

3

首先,选择非最佳打法没有任何价值。假设您的对手会以最佳方式进行游戏(这是极小极大搜索的基本假设),您的对手将采取利用错误的行动。一个好的游戏引擎会有一个散列的反驳表条目,其中包含你的错误的反动作,所以你不会通过疯狂的动作获得时间。做出错误的动作可以让计算机对手更快地找到好动作。

像奥赛罗这样的游戏要实现的关键是,直到游戏后期,您才能确定最佳移动是什么。那是因为搜索树几乎总是太大而无法详尽地搜索所有赢或输的位置,因此极小极大不能确定地告诉您哪些动作会导致胜利或失败。您只能启发式地决定在哪里停止搜索,任意将这些节点称为“终端”,然后运行一个评估函数来猜测一个位置的赢/输潜力。

评估函数的工作是评估位置的价值,通常使用无需进一步搜索博弈树即可计算的静态指标。棋子计数、位置特征、残局表库,甚至对手心理都可以在这里发挥作用。您在评估功能中投入的智能越多,通常您的引擎就会发挥得越好。但是静态评估的重点是替换过于昂贵的搜索。如果您的评估函数做得太多或效率太低,它可能会比获取相同信息所需的博弈树搜索慢。知道在评估函数中放入什么以及何时使用静态评估而不是搜索是编写优秀游戏引擎的艺术的重要组成部分。

于 2013-03-29T18:04:33.803 回答
0

有很多方法可以通过 AB 剪枝来改进标准极小值。例如,研究了改进顺序移动的杀手启发式尝试,因为 AB 的效率在有序移动的情况下更好。

可以在chessprogramming.wikispaces.com上找到有关 AB 的不同搜索增强和变体的大量信息。

于 2013-03-30T04:33:12.910 回答