更新2018-07-26:就是这样!我们现在正在接近解决这类游戏的地步!使用OpenAI并基于游戏DotA 2,团队可以制作出可以在5v5游戏中击败半职业游戏玩家的AI 。如果您了解《 DotA 2》,您会知道这款游戏在机制上与《暗黑破坏神》类似的游戏非常相似,但有人会说,由于团队合作,它甚至更加复杂。
不出所料,这要归功于强化学习和深度学习的最新进展,并使用了OpenAI之类的开放游戏框架,这使AI的开发变得轻松,因为您拥有了一个精巧的API并且还可以加速游戏(相当于每天有180年的游戏历史!)。
在2018年8月5日(10天之内!),计划将此AI与顶级DotA 2游戏玩家对抗。如果能够解决问题,那将是一场巨大的革命,也许不会像Go游戏的解决方案那样媒介化,但是对于AI游戏来说,这将是一个巨大的里程碑!
2017年1月更新:自AlphaGo成功以来,该领域的发展非常迅速,并且几乎每个月都有新的框架来促进游戏中机器学习算法的开发。这是我发现的最新列表:
- OpenAI的Universe:一个几乎可以使用机器学习玩任何游戏的平台。该API使用Python,可以在VNC远程桌面环境下运行游戏,因此可以捕获任何游戏的图像!您可能可以使用Universe通过机器学习算法来玩Diablo II!
- OpenAI的Gym:与Universe类似,但专门针对强化学习算法(因此,它是AlphaGo使用的框架的一种概括,但适用于更多游戏)。Udemy上有一门课程,内容涉及使用OpenAI Gym将机器学习应用于诸如Breakout或Doom的游戏。
- TorchCraft:Torch(机器学习框架)与StarCraft:育雏战争之间的桥梁。
- 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视觉机器人;)
旧帖子描述了仅依靠视觉输入来开发AI的技术问题:
与上面的一些同事相反,我认为这个问题不是很难解决的。但这肯定是一件很难的事!
上面指出的第一个问题是游戏状态的表示:您不能仅用单个图像来表示完整状态,您需要保持某种记忆(健康,还有装备,可用物品,任务和目标等)。要获取此类信息,您有两种方法:一种是直接访问游戏数据,这是最可靠,最容易的;或者,您也可以通过执行一些简单的步骤(打开清单,截屏,提取数据)来创建这些信息的抽象表示。当然,从屏幕快照中提取数据要么让您进行某种监督(完全定义),要么不受监督(通过机器学习算法,但是这样会大大增加复杂性……)。对于无监督的机器学习,您将需要使用一种称为结构学习算法的最新算法(该算法学习数据的结构,而不是如何对数据进行分类或预测值)。http://techtalks.tv/talks/54422/
然后,另一个问题是,即使已经获取了所需的所有数据,游戏也只能部分观察到。因此,您需要注入一个抽象的世界模型,并从游戏中获取经过处理的信息,例如化身的位置,以及任务物品,目标和屏幕外敌人的位置。您可能为此而研究了Vermaak 2003的混合粒子过滤器。
另外,您需要有一个自治代理,可以动态生成目标。您可以尝试使用一种著名的体系结构,即BDI代理,但是您可能必须对其进行调整才能使该体系结构在实际情况下起作用。作为替代方案,还有递归Petri网,您可以将其与Petri网的各种变体结合以实现所需的功能,因为它是一个经过充分研究和灵活的框架,具有大量的形式化和证明程序。
最后,即使您进行了上述所有操作,您仍需要找到一种以加速速度模拟游戏的方法(使用视频可能会不错,但问题是您的算法只会在没有控制的情况下进行旁观,并且能够自己尝试对学习非常重要)。确实,众所周知,当前的最新算法需要花费更多的时间来学习人类可以学习的相同东西(强化学习时甚至更多),因此如果不能加快这一过程(也就是说,如果您不能加快游戏时间),您的算法甚至不会在一个生命周期内收敛...
总而言之,您要在此处达到的目标是当前技术水平的极限(可能会超出极限)。我认为这是可能的,但是即使是这样,您也将花费大量时间,因为这不是理论问题,而是您在此处要解决的实际问题,因此您需要实现和组合很多以解决不同的AI方法。
由整个团队进行数十年的研究可能是不够的,因此,如果您独自一人并兼职工作(因为您可能有一份谋生的工作),您可能会花一辈子的时间而无法接近一个可行的解决方案。
因此,我在这里最重要的建议是降低您的期望,并尝试降低复杂性通过使用所有可能的信息来解决问题,并尽可能避免依赖屏幕截图(即,尝试直接挂接到游戏中,寻找DLL注入),并通过实施监督程序来简化某些问题,请不要让您算法学习所有知识(即,尽可能多地放弃图像处理并依靠内部游戏信息,然后,如果算法运行良好,则可以用图像处理替换AI程序的某些部分,从而逐步实现您的完整目标,例如,如果您可以使某些功能正常运行,则可以尝试使问题复杂化,并使用屏幕快照上的无监督机器学习算法替换有监督程序和内存游戏数据。
祝您好运,而且如果可行的话,请确保发表一篇文章,您肯定会因解决这样一个棘手的实际问题而闻名!