首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >击败minimax对手

击败minimax对手
EN

Stack Overflow用户
提问于 2013-03-29 12:42:17
回答 2查看 2.7K关注 0票数 2

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

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

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

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

有意识地选择一个非最优节点是否有一定的价值?这可能会导致对手的CPU时间惩罚,因为他们必须返回并重新评估树。这会给我带来惩罚,因为我必须评估极小极大树+ alpha beta,以查看alpha beta将修剪哪些节点,而不会获得任何直接好处。

针对这样的对手进行优化的其他策略是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-30 02:04:34

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2013-03-30 12:33:13

有很多方法可以通过AB剪枝来提高标准的极大极小值。例如,杀手启发式尝试改善移动的顺序,因为AB的效率与有序的移动更好。

chessprogramming.wikispaces.com上可以找到许多关于AB的不同搜索增强和变体的信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15697479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档