2018-07-26 更新:就是这样!我们现在正在接近这种游戏可以解决的地步!使用 OpenAI 并基于游戏 DotA 2,一个团队可以制作一个可以在 5v5 游戏中击败半职业游戏玩家的 AI 。如果您了解 DotA 2,您就会知道这款游戏在机制方面与类似暗黑破坏神的游戏非常相似,但有人可能会说,由于团队合作,它更加复杂。
正如预期的那样,这要归功于强化学习和深度学习的最新进展,以及使用像 OpenAI 这样的开放游戏框架,它可以简化 AI 的开发,因为您可以获得简洁的 API,还因为您可以加速游戏(AI 玩相当于每天对自己进行 180 年的游戏!)。
2018 年 8 月 5 日(10 天后!),计划让这个 AI 对抗顶级 DotA 2 游戏玩家。如果这成功了,期待一场巨大的革命,也许不像围棋游戏的解决那么中介化,但它仍然是游戏 AI 的一个巨大里程碑!
2017 年1 月更新:自 AlphaGo 成功以来,该领域发展非常迅速,几乎每个月都有新的框架来促进游戏机器学习算法的开发。这是我发现的最新列表:
- OpenAI 的 Universe:一个使用机器学习玩几乎任何游戏的平台。API 是 Python 的,它在 VNC 远程桌面环境后面运行游戏,因此它可以捕获任何游戏的图像!您可能可以通过机器学习算法使用 Universe 玩暗黑破坏神 II!
- OpenAI 的 Gym:类似于 Universe,但专门针对强化学习算法(因此它是 AlphaGo 使用的框架的一种概括,但适用于更多游戏)。Udemy 上有一门课程,涵盖了使用 OpenAI Gym 将机器学习应用于 breakout 或 Doom 等游戏。
- TorchCraft : Torch(机器学习框架)和星际争霸:母巢之战之间的桥梁。
- pyGTA5:一个在 GTA5 中仅使用屏幕截图(有很多在线视频)构建自动驾驶汽车的项目。
非常激动人心的时刻!
重要更新(2016-06):正如 OP 所指出的,训练人工网络以仅使用视觉输入来玩游戏的问题现在正在由几个严肃的机构解决,并取得了非常有希望的结果,例如DeepMind Deep-Qlearning-Network (DQN ) .
现在,如果您想接受下一个级别的挑战,您可以使用各种AI 视觉游戏开发平台之一,例如ViZDoom,这是一个高度优化的平台 (7000 fps),仅使用视觉输入来训练网络玩《毁灭战士》 :
ViZDoom 允许开发仅使用视觉信息(屏幕缓冲区)播放 Doom 的 AI 机器人。它主要用于机器视觉学习的研究,尤其是深度强化学习。ViZDoom 基于 ZDoom 提供游戏机制。
结果非常惊人,请在此处查看他们网页上的视频和不错的教程(用 Python 编写)!
Quake 3 Arena 也有一个类似的项目,称为Quagents,它还提供了对底层游戏数据的简单 API 访问,但您可以废弃它并仅使用屏幕截图和 API 来控制您的代理。
如果我们只使用屏幕截图,为什么这样一个平台有用?即使您不访问底层游戏数据,这样的平台也提供:
- 游戏的高性能实现(您可以用更少的时间生成更多的数据/游戏/学习代,以便您的学习算法可以更快地收敛!)。
- 一个简单且响应迅速的 API来控制您的代理(即,如果您尝试使用人工输入来控制游戏,您的一些命令可能会丢失,因此您还要处理输出的不可靠性......)。
- 轻松设置自定义场景。
- 可定制的渲染(可用于“简化”您获得的图像以简化处理)
- 同步(“回合制”)播放(因此您一开始不需要您的算法实时工作,这是一个巨大的复杂性降低)。
- 额外的便利功能,例如跨平台兼容性、追溯兼容性(当有新游戏更新时,您不会冒险让您的机器人不再使用游戏)等。
总而言之,这些平台的伟大之处在于它们减轻了您之前必须处理的大部分技术问题(如何操作游戏输入,如何设置场景等),因此您只需要处理学习算法本身。
所以现在,开始工作,让我们成为有史以来最好的人工智能视觉机器人;)
旧帖子描述了仅依赖视觉输入开发 AI 的技术问题:
与我上面的一些同事相反,我不认为这个问题是棘手的。但这肯定是一个很难的!
上面指出的第一个问题是游戏状态的表示:你不能只用一张图像来表示完整的状态,你需要保持某种记忆(健康,还有装备的物品和可用的物品,任务和目标等)。要获取此类信息,您有两种方法:一种是直接访问游戏数据,这是最可靠、最简单的方法;或者您可以通过实施一些简单的程序(打开清单、截屏、提取数据)来创建这些信息的抽象表示。当然,从屏幕截图中提取数据要么让你放入一些有监督的程序(你完全定义),要么是无监督的(通过机器学习算法,但是它会扩大很多复杂性......)。对于无监督机器学习,您将需要使用一种称为结构学习算法的最新算法(它学习数据的结构,而不是如何对它们进行分类或预测值)。http://techtalks.tv/talks/54422/
然后,另一个问题是,即使您获取了所需的所有数据,游戏也只是部分可观察的。因此,您需要注入世界的抽象模型,并为其提供经过处理的游戏信息,例如您的头像的位置,以及屏幕外的任务物品、目标和敌人的位置。您可能会为此查看 Vermaak 2003 的 Mixture Particle Filters。
此外,您需要有一个自主代理,目标是动态生成的。您可以尝试的著名架构是 BDI 代理,但您可能必须对其进行调整,以使该架构在您的实际案例中工作。作为替代方案,还有递归 Petri 网,您可能可以将它与 Petri 网的各种变体结合来实现您想要的,因为它是一个经过充分研究和灵活的框架,具有很好的形式化和证明程序。
最后,即使您完成了上述所有操作,您也需要找到一种方法来加速模拟游戏(使用视频可能很好,但问题是您的算法只能在没有控制的情况下观看,并且能够为自己尝试对学习很重要)。事实上,众所周知,当前最先进的算法需要更多时间来学习人类可以学习的相同内容(强化学习更是如此),因此如果不能加快这个过程(即,如果你不能加快游戏时间),你的算法甚至不会在一个生命周期内收敛......
总而言之,您想要在这里实现的是当前最先进算法的极限(并且可能有点超出)。我认为这可能是可能的,但即使是这样,你也会花费很多时间,因为这不是一个理论问题,而是你正在处理的实际问题,因此你需要大量实施和组合不同的人工智能方法来解决它。
整个团队几十年的研究可能还不够,所以如果你一个人并兼职工作(因为你可能有一份工作谋生),你可能会度过一生而无法到达附近的任何地方一个可行的解决方案。
所以我在这里最重要的建议是降低期望,并尝试降低复杂性尽可能使用所有信息来解决您的问题,并尽可能避免依赖屏幕截图(即尝试直接挂钩到游戏中,寻找 DLL 注入),并通过实施监督程序来简化一些问题,不要让您的算法学习一切(即,现在尽可能放弃图像处理并依赖内部游戏信息,稍后如果您的算法运行良好,您可以将 AI 程序的某些部分替换为图像处理,从而逐渐达到您的全部目标,例如,如果你可以让某些东西很好地工作,你可以尝试复杂化你的问题,并用截图上的无监督机器学习算法替换监督程序和记忆游戏数据)。
祝你好运,如果成功了,一定要发表一篇文章,你一定能以解决如此困难的实际问题而闻名!