项目提取竞赛的AI算法

时间:2013-01-11 23:12:54

标签: algorithm machine-learning artificial-intelligence neural-network

我想为以下游戏构建AI:

  • M x N 主板上有两名玩家
  • 每位玩家可以向上/向下或向左/向右移动
  • 主板上有不同的项目
  • 玩家在尽可能多的类别中赢得比其他玩家更多的物品(在一个类别中拥有更多物品使您成为此类别的赢家,拥有更多类别的玩家赢得游戏)
  • 您可以在一个回合中拿起您正站着的物品或移动
  • 玩家同时移动
  • 站在同一场地上的两名球员如果双方都有0.5次接球机会

如果满足以下条件之一,则游戏结束:

  • 所有物品都已被拿起
  • 已经有一个明显的赢家,因为一个玩家拥有超过一半类别的一半以上的项目

我不知道AI,但我不久前参加过机器学习课程。

  1. 如何开始解决此类问题?

  2. 是否存在这个问题的概括?

3 个答案:

答案 0 :(得分:2)

解决任何此类问题的常用方法是与现场对手一起玩这个游戏足够长的时间来找到一些启发式解决方案(短期目标),让您获得胜利。然后在解决方案中实现这些启发式方法。从真正的小板(1x3)和少量类别(1)开始,播放它们,看看会发生什么,然后进入更复杂的情况。

在没有玩游戏的情况下,我只能想象具有较少物品的类别更有价值,也包含目前距离您更近的物品的类别,以及距离您最远但仍然比您更接近对象的物品类别。< / p>

每个类别都有一个成本,即控制它所需的移动次数,但是你的成本与对手的成本不同,而且每次移动都会改变。如果您的成本接近对手的成本,则类别对您有更大的价值,但仍低于对手的成本。

每次你移动类别改变他们的价值观,所以你必须重新计算董事会并从那里决定你的下一步行动。假设对手使用与您相同的算法,目标是最大化您的值并最小化对手值。

如果您事先探索多次转弯,那么搜索最佳动作会变得更加复杂,但也会更有效。在这种情况下,你必须使用相同的算法模拟对手的移动,然后选择你的移动,对手有最弱的反击。此策略称为minimax

所有这些都不是AI,但它是算法的路线图。在另一个答案中提到的神经网络更像AI,但我对它们一无所知。

答案 1 :(得分:2)

像你提议的对抗性搜索游戏(称为两个玩家零和游戏)的规范选择称为Minimax搜索。从维基百科,Minimax的目标是

  

最大限度地减少最坏情况(最大损失)情况下的可能损失。或者,可以将其视为最大化最小增益。

因此,它被称为minimax或maximin。基本上,您构建了一个MaxMin级别的树,其中每个节点的分支因子等于每个回合的可能操作数,在您的情况下为4。每个级别对应一个玩家的回合,并且树一直延伸到游戏结束,允许您在每个回合中搜索最佳选项,假设对手正在最佳地玩< / em>以及。如果你的对手没有达到最佳状态,那么你的得分就会更高。基本上,在每个节点上,您模拟每个可能的游戏并为当前回合选择最佳动作。

如果生成所有可能的游戏似乎需要很长时间,那么你是正确的,这是一个指数复杂的算法。从这里你可以调查alpha-beta pruning,它基本上允许你根据你到目前为止找到的值来消除你枚举的一些可能的游戏,并且是对minimax的一个相当简单的修改。此解决方案仍然是最佳。我推荐维基百科文章进一步解释。

从那里,您可能希望尝试使用不同的启发式来消除节点,这可以修剪大量节点的树以进行遍历,但请注意,通过启发式消除节点可能会产生次优,但仍然是良好解决方案,具体取决于您的启发式方法。一种常见的策略是限制搜索树的深度,基本上你可以向前搜索5次以确定最佳当前移动,使用每个玩家在5次移动时的得分估计。再次,这是一个你可以调整的启发式。简单地计算游戏得分就好像它在那个回合结束时就足够了,这绝对是一个很好的起点。

最后,对于涉及概率的节点,对Minimax进行了轻微修改,称为Expectiminimax,它基本上通过添加为您选择随机选择的“第三”玩家来处理概率。第三个玩家的节点将随机事件的预期值作为其值。

答案 2 :(得分:1)

AI的目标是始终寻求维持胜利条件。

如果实际(取决于项目位置的存储方式),在每个回合开始时,AI应知道所有剩余项目的距离。理想情况下,这将在游戏开始时计算一次,然后根据AI移动的位置简单地“调整”,而不是在每个回合重新计算。如果人工智能不仅仅考虑到自己的情况,让AI为玩家做同样的事情也是不明智的。

从这里确定应该选择哪个项目作为以下考虑因素的优化:

  • AI目前有哪些项目和项目类别?
  • 玩家目前拥有哪些商品和商品类别?
  • AI附近有哪些项目和项目类别?
  • 播放器附近有哪些项目和项目类别?

你究竟如何做到很大程度上取决于你想要AI的难度。

一种简单的方法是使用贪婪的方法,只需追求“当前”的最佳选择。这可以通过简单地找到最近的项目来完成,该项目不在玩家当前通过这么多项目(可能是1-3)获胜的类别中。这会产生一个试图获胜的人工智能,但不会提前考虑使其更容易预测。

允许贪婪算法检查前面的多个回合将改进算法,并且考虑玩家将做的将进一步改进算法。

启发式技术将导致人工智能更加逼真,难以击败人工智能。可能甚至几乎不可能击败。