前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >神经网络小游戏——泥煤排球

神经网络小游戏——泥煤排球

作者头像
庹阳
发布2018-02-06 18:15:58
1.1K0
发布2018-02-06 18:15:58
举报
文章被收录于专栏:TencentcloudTencentcloud

还记得泥煤小排球游戏吗?你能打败他们吗?

我记得在当年Java小程序仍然很受欢迎的时候有个游戏叫“软泥小排球”。虽然这个游戏在物理上面有一些投机取巧的部分,但是许多跟我一样的孩子却被它深深的吸引了,并且日以继夜的花费时间在宿舍打游戏而没有做其他实际性工作。

由于现在除了陈旧的Java小应用程序之外,我几乎在网上找不到任何关于这个游戏的版本,所以我开始创建我自己的基于js + html5 canvas的游戏版本(完成了不切实际的街机风格的“物理”操作)。我着手尝试应用之前编码的遗传算法来达到建立一个简单的循环神经网络来玩泥煤排球的目的。基本上,我想知道在探索NEAT之类的更先进的方法之前,即使是一个简单的传统的神经进化技术,是否可以训练一个神经网络成为这个游戏的专家。

第一步是写一个简单的物理引擎程序,让球从地面反弹,与围墙碰撞,并与球员碰撞。这是通过在javascript中使用设计p5.j​​s来完成的,还有一些简单的物理数学例程。我必须刷矢量数学才能使球弹跳功能正常工作。完成这一切后,下一步就是添加键盘/触摸板,以便玩家可以移动和跳跃,即使在使用智能手机/平板电脑时也是如此。

有趣并且令人兴奋的部分是创建AI模块来控制代理,并看看它是否能够擅长玩游戏。最后,我使用基本的CNE方法作为初始测试,来训练标准的循环神经网络,使用convnet.js库一起入侵。下面是我们将训练发挥粘液排球的复发网络图,魔术完成后:

网络的输入将是代理的位置和速度,球的位置和速度以及对手的速度。输出将是三个信号,这将触发“前进”,“后退”和“跳跃”控件。另外,一个额外的4个隐藏的神经元将作为隐藏状态并反馈给输入,这样它本质上是一个无限深的前馈神经网络,并可能自动记住以前的事件和状态,希望能够制定更多复杂的游戏策略。有一点需要注意的是,激活功能只有在信号高于某个阈值(0.75)时才会触发。

我也让代理人的状态是相同的,无论代理人在围栏的左边还是右边玩,他们的位置都是相对于围栏的,而球的位置是根据他们是哪一方这样一来,训练有素的代理人就可以使用相同的神经网络在围栏的任何一边进行游戏。

我没有使用sigmoid函数,而是使用双曲正切(tanh)函数来控制convnet.js支持的激活。

tanh函数定义如下:

tanh函数对于神经网络来说可能是一个合理的激活函数,因为当输入被单向或者另一个转向时,趋向于+1或者-1。x轴将是游戏输入,例如代理,球和对手的位置和速度(全部缩放为+/- 1.0给出或采取另一个1.0)以及输出和隐藏状态神经网络(定义在+/- 1.0以内)。

由于速度和球的位置可以是正面的或负面的,与乙状结肠相比,这可能是更有效和更自然的选择。正如前面所解释的那样,我也缩放了我的输入,所以它们都是+/- 1.0的大小,类似于隐藏的神经元的输出状态,所以到网络的所有输入将具有大致相同的数量级的大小一般。

训练这样一个经常性的神经网络涉及到我之前做的遗传算法训练器的调整,因为实际上没有可以返回得分的适应度函数,因为任何一个人都可以赢得或者失去一个匹配。我最终做的是写一个类似的培训功能,让每个代理人在培训人群对其他代理人玩。如果代理人获胜,则其得分增加1,如果失败则减1。在关系上(游戏时间超过模拟的20秒),不会添加或减去分数。每个代理将在训练循环中对抗人群中的10个随机代理。人口最多的20%被保留,其余的被丢弃,交叉和突变被执行下一代。这被称为“军备竞赛”的方法来训练代理玩一对一的游戏。

通过使用这种方法,代理人不需要手工编程任何启发式和游戏规则,而只是简单地探索游戏并找出如何取胜。最终的结果表明,经过几百代的进化,它们似乎相当出色!大家可以在YouTube视频中查看下面最终结果的演示。

下一步可以采用更高级的方法,比如NEAT,或者AI,但是对于一个简单的pong-line游戏来说这可能是过分的。由于游戏策略非常简单,它也是应用已经建立在深度的Deep Q-Learner的人选。现在我想我已经创造了一个相当强大的泥人排球运动员,几乎不可能被单人球员击败。

当然,你也可以自己亲自去尝试玩游戏,看看你是否一样可以打败它。它可以在桌面(键盘控制)或智能手机/平板电脑上通过触摸控制。桌面版本更容易通过键盘箭头或鼠标拖动来控制。你可以随意玩Github上的源代码,但道歉,它可能不是最好的结构化代码,因为它是为了储备更多的的草稿栏和数据库,而不是成为一个恰当的的程序。

更新(2015年5月13日)

这个演示一度到达了Y Combinator的黑客新闻的头版。我做了另一个演示,展示了代理行为随着时间的演变,如果你没有从头跟起。那么请看这个帖子了解更多信息。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档