0

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

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

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

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

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

  1. 我该如何着手解决这样的问题?

  2. 有这个问题的概括吗?

4

3 回答 3

2

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

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

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

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

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

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

于 2013-01-12T01:49:42.017 回答
2

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

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

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

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

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

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

于 2013-01-12T02:44:26.957 回答
1

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

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

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

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

你如何做到这一点在很大程度上取决于你希望人工智能有多难击败。

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

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

启发式将导致更逼真的 AI 和难以击败的 AI。甚至几乎不可能被击败。

于 2013-01-12T02:04:28.347 回答