【问题标题】:AI algorithm for item pickup race物品拾取竞赛的 AI 算法
【发布时间】:2012-12-26 15:01:15
【问题描述】:

我想为以下游戏构建一个 AI:

  • M x N 棋盘上有两个玩家
  • 每个玩家都可以向上/向下或向左/向右移动
  • 板上有不同的项目
  • 在尽可能多的类别中拥有比其他玩家更多物品的玩家获胜(在一个类别中拥有更多物品使您成为该类别的赢家,拥有更多类别的玩家赢得游戏)
  • 在一个回合中,您可以拿起站立或移动的物品
  • 玩家动作是同时进行的
  • 站在同一场地的两名玩家如果都这样做,则有 0.5 的拾取机会

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

  • 所有物品都已取走
  • 已经有明显的赢家了,因为一名玩家拥有超过一半类别的一半以上的物品

我对人工智能一无所知,但我前段时间参加过机器学习课程。

  1. 如何着手解决此类问题?

  2. 这个问题有没有概括?

【问题讨论】:

  • 根据您提供的信息,获胜策略尚不明确。是忽略玩家已经拥有物品的类别的所有物品更好,还是仅仅拥有更多物品的玩家可以战胜拥有更多类别的玩家?
  • 另外,玩家可以拾取的物品数量是否有限制?还有一个问题是游戏如何结束。当所有物品都被拾起时它会结束还是什么?
  • @MC 你是对的。我已经更新了这个问题。第一:玩家只能通过类别获胜,物品的总和无关紧要。第二:没有限制,没有。我已经添加了游戏终止条件。
  • 你的任务是生成算法吗?你的算法会与其他学生的算法竞争吗?另外,每回合有时间限制吗?
  • @Dialectus 没有。没有。最后一个:没有,为什么?但我想它应该不会太低效:)

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


【解决方案1】:

解决任何此类问题的常用方法是与现场对手玩足够长的时间以找到一些启发式解决方案(短期目标),从而使您取得胜利。然后在您的解决方案中实施这些启发式方法。从非常小的棋盘 (1x3) 和少量类别 (1) 开始,播放它们,看看会发生什么,然后进入更复杂的案例。

如果不玩游戏,我只能想象物品较少的类别更有价值,还有目前离你更近的物品的类别,以及离你最远但离你比对手更近的物品的类别。

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

每次您进行移动时,类别都会更改其值,因此您必须重新计算棋盘并从那里开始决定下一步。目标是最大化你的价值并最小化对手的价值,假设对手使用与你相同的算法。

如果您提前探索不止一回合,搜索最佳着法会变得更加复杂,但也更加有效。在这种情况下,您必须使用相同的算法模拟对手的动作,然后选择对手的反动作最弱的动作。此策略称为minimax

这并不是真正的人工智能,而是算法的路线图。另一个答案中提到的神经网络更像是人工智能,但我对它们一无所知。

【讨论】:

  • 感谢您详尽的回答,真的很有帮助。不幸的是,我只能接受一个答案boo。当我有足够的声誉时,我至少会投票!
【解决方案2】:

AI 的目标是始终寻求保持获胜条件。

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

从确定应该选择什么项目作为优化以下考虑的问题:

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

您如何做到这一点很大程度上取决于您希望 AI 有多难击败。

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

允许贪心算法检查前方的多个转弯将改进算法,并考虑玩家将做什么将进一步改进算法。

启发式算法将带来更逼真的 AI,并且难以击败 AI。甚至几乎不可能被击败。

【讨论】:

  • 感谢您详尽的回答,真的很有帮助。不幸的是,我只能接受一个答案boo。当我有足够的声誉时,我至少会投票!
【解决方案3】:

像您提出的对抗性搜索游戏(称为两人零和游戏)的典型选择称为Minimax 搜索。根据维基百科,Minimax 的目标是

最小化最坏情况(最大损失)情况下的可能损失。或者,它可以被认为是最大化最小增益。

因此,它被称为 minimax 或 maximin。本质上,您构建了MaxMin 级别的树,其中每个节点的分支因子等于每轮可能的操作数,在您的情况下为 4。每个级别对应于玩家的一个回合,并且树一直延伸到游戏结束,允许您在每个回合搜索最佳选择,假设对手正在玩最佳 也是如此。如果你的对手打得不好,你只会得分更高。本质上,您在每个节点模拟所有可能的游戏并为当前回合选择最佳动作。

如果生成所有可能的游戏似乎需要很长时间,那么您是对的,这是一种指数复杂度算法。从这里你会想要调查alpha-beta pruning,它本质上允许你根据你目前发现的值消除一些你正在枚举的可能的游戏,并且是对极小极大的一个相当简单的修改。此解决方案仍将是最佳。我遵从维基百科的文章以获得进一步的解释。

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

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

【讨论】:

  • 作为附录,我浏览了康奈尔大学的一个资源,找到了here,它以图形方式解释了极小极大搜索和 alpha-beta 修剪,看起来做得很好,可能是一个很好的资源。不添加到我的原始答案中,因为谁知道链接将存在多长时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多