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