使用50行Python代码从零开始实现一个AI平衡小游戏-创新互联-成都快上网建站

使用50行Python代码从零开始实现一个AI平衡小游戏-创新互联

使用50行Python代码从零开始实现一个AI平衡小游戏 

成都创新互联专注于企业成都营销网站建设、网站重做改版、砀山网站定制设计、自适应品牌网站建设、H5建站商城网站建设、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为砀山等各大城市提供网站开发制作服务。

集智导读:

本文会为大家展示机器学习专家 Mike Shi 如何用 50 行 Python 代码创建一个 AI,使用增强学习技术,玩耍一个保持杆子平衡的小游戏。所用环境为标准的 OpenAI Gym,只使用 Numpy 来创建 agent。

各位看官好,我(作者 Mike Shi——译者注)将在本文教大家如何用 50 行 Python 代码,教会 AI 玩一个简单的平衡游戏。我们会用到标准的 OpenAI Gym 作为测试环境,仅用 Numpy 创建我们的 AI,别的不用。

这个小游戏就是经典的 Cart Pole 任务,它是 OpenAI Gym 中一个经典的传统增强学习任务。游戏玩法如下方动图所示,就是尽力保持这根杆子始终竖直向上。杆子由于重力原因,会出现倾斜,到了一定程度就会倒下,AI 的任务就是在此时向左或向右移动杆子,不让它倒下。这就跟我们在手指尖上树立一支铅笔玩“金鸡独立”一样,只不过我们这里是个一维的简单游戏(但是还是很有挑战性的)。

你可能好奇最终实现怎样的结果,可以在repl.it 上查看 demo:

 https:// repl.it/@MikeShi42/Cart Pole 

使用50行Python代码从零开始实现一个AI平衡小游戏

增强学习速览

如果这是你第一次接触机器学习或增强学习,别担心,我下面介绍一些基础知识,这样你就可以了解本文使用的术语了:)。如果已经熟悉了,大可跳过这部分,直接看看编写 AI 的部分。

增强学习(RL)是一个研究领域:教 agent(我们的算法/机器)执行某些任务/动作,但明确告诉它该怎样做。把它想象成一个婴儿,以随机的方式伸腿,如果宝宝偶然间走运站立起来,我们会给它一个糖果作为奖励。同样,Agent 的目标就是在其生命周期内得到最多的奖励,而且我们会根据是否和要完成的任务相符来决定奖励的类型。对于婴儿站立的例子,站立时奖励 1,否则为0。

增强学习 agent 的一个著名例子是 AlphaGo,其中的 agent 已经学会了如何玩围棋以大化其奖励(赢得游戏)。在本教程中,我们将创建一个 agent,或者说 AI,可以向左或向右移动小车,让杆子保持平衡。

状态

状态是目前游戏的样子。我们通常处理游戏的多种数字表示。在乒乓球比赛中,它可能是每个球拍的垂直位置和 x,y 坐标和球的速度。在我们这个游戏中,我们的状态由 4 个数字组成:底部小车的位置,小车的速度,杆的位置(以角度表示)和杆的角速度。这 4 个数字都是给定的数组(或向量)。这个很重要,理解状态是一个数字数组意味着我们可以对它进行一些数学运算来决定我们根据状态采取什么行动。

使用50行Python代码从零开始实现一个AI平衡小游戏

策略

策略是一种函数,其输入是游戏的状态(例如棋盘的位置,或小车和杆的位置),输出 agent应该在该位置采取的动作(例如,将小车向左边移动)。在 agent 采取我们选择的操作后,游戏将使用下一个状态进行更新,我们会再次将其纳入策略以做出决策。这种情况一直持续到游戏结束。策略非常重要,也是我们一直追求的,因为代表了 agent 背后的决策能力。

点积

两个数组(向量)之间的点积简单地将第一个数组的每个元素乘以第二个数组的对应元素,并将它们全部加在一起。假设我们想找到数组 A 和 B 的点积,只需计算是 A [0] * B [0] + A [1] * B [1] ......我们将使用这种运算将状态(一个数组)乘以另一个数组(我们的策略)。

创建我们的策略

为了完成这个推车平衡游戏,我们希望让我们的 agent(或者说 AI)学习策略赢得比赛或获得大奖励。

对于我们今天要开发的 agent,我们将策略表示为 4 个数字的数组,分别代表状态的各个部分的“重要性”(小车位置,杆子的位置等)然后我们会计算状态和策略数组的点积,得到一个数字。根据数字是正数还是负数,我们将向左或向右推动小车。

如果这听起来有点抽象,那么我们选择一个具体的例子,看看会发生什么。

假设小车在游戏中居中并且静止,杆子向右倾斜且可能倒向右边。它看起来像这样:

使用50行Python代码从零开始实现一个AI平衡小游戏

相关状态可能如下所示:

使用50行Python代码从零开始实现一个AI平衡小游戏

那么状态数组将是 [0,0,0.2,0.05]。

从直觉上,我们要把小车推向右边,将支杆拉直。我从训练中得到了一个很好的策略,其策略数据如下:[ - 0.116,0.332,0.207 0.352]。我们快速计算一下,看看该策略会输出怎样的动作。

这里,我们将状态数组 [0,0,0.2,0.05] 和上述策略数组结合计算点积。如果数字是正数,我们将车推向右边,如果数字是负数,我们向左推。

使用50行Python代码从零开始实现一个AI平衡小游戏

结果为正,意味着策略会向右推动小车,符合我们的预期。

现在比较明显了,我们需要 4 个像上面这样的神奇数字来帮我们解决问题。那么我们该如何获得这些数字?如果我们只是随机挑选它们会怎样?AI 的效果会怎样?我们来一起看代码!

启动你的编辑器!

首先在repl.it 上打开一个 Python 实例。Repl.it 能让我们快速启动大量不同编程环境的云实例,并在任何地方都能访问的强大云 IDE 中编辑代码!

使用50行Python代码从零开始实现一个AI平衡小游戏

安装软件包

我们首先安装这个项目所需的两个软件包:numpy 帮助进行数值计算;OpenAI Gym 作为我们代理的模拟器。

使用50行Python代码从零开始实现一个AI平衡小游戏

只需在编辑器左侧的包搜索工具中输入 gym 和 numpy,然后单击加号按钮即可安装包。

创建基础框架

我们首先将我们刚刚安装的两个依赖项导入到main.py 脚本中,并设置一个新的 gym 环境:

import gymimport numpy as npenv = gym.make('CartPole-v1')

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:使用50行Python代码从零开始实现一个AI平衡小游戏-创新互联
文章路径:http://kswjz.com/article/docjhs.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流