PythonAI玩游戏百战百胜你

题外话:

不断的有家长在

编程就是那个拖来拖去就能做游戏的嘛(某猫?)?

编程不就是机器人么!乐高么!我家附近好多家呢!

我的孩子学编程不会沉迷游戏么?

编程学了有啥用?

有几个科普的文章大家可以先看下

少儿编程?机器人编程?人工智能编程?你想知道的答案都在这!

你肯定学了假的编程!

纳尼!MIT的最新研究表明学编程是在重构你的大脑?!!

想不被淘汰?从美国封锁的14类新兴技术,看未来什么专业最有用最有“钱”景?

其实家长反馈最多的就是,他们家的孩子沉迷玩游戏。得空就玩,抓住一切机会玩!本来都沉迷玩游戏了,再学编程?那不是更爱玩了那还得了啊!

其实人只有对未知的东西才会沉迷,才会上瘾。游戏本身并不会上瘾,上瘾的是游戏的设计所涉及的心理学。而学编程本身能让你明白游戏是如何做出来的,毕竟玩游戏带来快乐比起自己能创造新的游戏或者新的东西那是望尘莫及的,玩游戏得到的是消遣,而创造的过程获得的是技能的增长和自我满足!

小编这次,就用Python+AI来实现自动玩游戏,其目的只有一个,你掌握了Python了解了人工智能你能玩所有游戏,而且玩得比那些骨灰级的玩家还好(那种从一年级开始玩到中学、大学出社会了还在玩游戏的人)。最最关键的是你就有了大把的时间来学习新的知识!

开始操作:

好了我们开始吧!我这次以《超级玛丽》为例讲解但原理适合大部分游戏类型。我们先来梳理下流程

环境搭建

初始化环境

用机器学习模型训练玩游戏

修改参数挑选合适的模型

用训练好的模型玩游戏~~~

环境搭建:

虚拟环境创建,库安装(Window用户请先确保机器上有安装C++编译器)

环境初始化:

接下来我们需要初始化我们的游戏环境,因此我们安装了gym-super-mario-bros,nes-py,openAIgym等库。

首先我们导入必要的库

接下来简化下我们的游戏操作流程,因为我们要先用简单的方式训练我们的模型,所以我们定义我们的玛丽有限的游戏动作,我们通过以下方式实现这一点。

SIMPLE_MOVEMENT定义了玛丽能做的动作也同时定义了我们的模型所能操作的类型,这也意味着我们限制了七种不同的动作。

接下来我们设置我们的游戏然后运行起来,超级玛丽有很多版本我们选择SuperMarioBros2-v1吧

接下来我们就可以开始我们的游戏了

代码本身很简单,第一行是定义我们运行的状态以便我们开始或者停止它。为了开始我们的游戏我们先重置了环境(env.reset())这个for循环遍历游戏的每一帧,我们总共设置了帧。同时我们通过env.step()函数传递我们能对游戏所进行的操作。紧接着env.render()可以把游戏运行画面显示出来,然后我们就可以运行下代码块,看看游戏是否正确运行啦!

在这一阶段,我们所做的事情仅仅是让玛丽不停的跳,它甚至连第一个水管都跳不过去,哈哈哈~~~别着急,我们马上进入数据预处理环节!

数据预处理:

我们要应用两个预处理步骤:

灰度缩放

帧栈

由于我们的AI模型需要学习我们的每一帧,因此我们有必要进行灰度处理,这样能减少我们处理的数据量,利用帧栈能帮我们在训练模型的时候更高效的利用内存。

原理已经讲解了,接下来我们看下代码吧

模型训练:

我们将要用到强化学习训练我们的模型用来玩超级玛丽。强化学习的一般步骤如下:

Agent

Reward

Environment

Action

在这里玛丽就是我们的Agent,它所能做的动作就是我们给它限定的那七种,我们根据它的动作进行奖赏。所以我们的目标就是教我们的AI模型如何在我们设置的游戏环境里面进行最恰当的动作(玩游戏)因此我们用了一种算法PPO(有兴趣的可以留言)

接下来我们导入依赖关系库然后开始训练我们的模型。

我们利用了os库函数,因为PPO算法我们设置了基准每步保存一次模型。

我们的回调类如下:

接下来我们设置下我们的回调,我们设置了两个目录用来保存我们的训练模型和日志:

我们设置我们的回调以确保每步保存一次训练的模型,因此每步我们都会得到一个新的模型。

然后我们设置PPO/AI模型,只需要一行代码即可

现在我们的模型设置好了PPO算法而且也传递了CNN策略(这是一个基于计算机的大脑,CNN神经网络在处理图像上速度非常快)我们同时传递了我们的预处理数据,同时也设置了我们的日志输出。

让我们开始训练我们的模型吧。

看看我们的训练日志,我们可以看到训练所有参数,几个耗时参数,以及训练的参数调节。

我们可以看到如我们所期望的那样,每步就会保存一个模型。一旦我们的模型训练结束我们就可以开始玩我们的游戏啦。

用模型玩游戏:

我们挑一个AI训练好模型来玩我们的游戏吧。我们先用的这个模型吧。

然后重置下我们的游戏

接下来开始游戏

次训练模型

视频是我们训练了10万次的模型自动玩超级玛丽的效果,我们可以看到强化学习10万次训练能达到一般水平,我们可以尝试把训练的次数加大比如(0)然后我们看看我们的玛丽表现会如丝般顺滑!

大家可以尝试下,看看你们的超级玛丽玩得有多嗨!!!(友情提示,如果电脑配置不太好的同学训练万次的话可能得好几天哈)

重点来了,利用AI算法和模型通过训练,少则几个小时多则几天,我们的模型学会了玩游戏,而且不是一般的牛逼,而是达到一般人无法达到的水平!换句话说算法几个小时的功夫已经超过了你苦练几十年的游戏的技能!!!而同样的算法能应用在大部分游戏上面,也就是只要你乐意你能教会你的算法成为一个玩大部分游戏的高手,而在此过程你得到的远不止是游戏玩得好,你还掌握了人工智能的知识和算法的编写。这样的技能不仅仅能用在游戏上还能用在你能想到的各种场景:比如报考专业、房价分析预测、租房房源获取和分析、热门专业和就业分析等等。

现在回到我们一开始的那几个问题上,你开始问自己以下问题:

你听说或者在学的那种编程是不是只能做游戏和动画?

你听说或者在学的那种编程是不是只能拼一拼硬件积木?或者机器人?

你听说或者在学的那种编程是不是只能参加比赛?地方性比赛?

你听说或者在学的那种编程可以学几年?或者学多久就没得学了?没后续?

如果以上问题你都能回答的话,那么再问自己这几个问题:

如果你觉得编程很重要,那么你希望学到什么?学到什么程度?

如果未来是人工智能的时代,那么你现在学的和人工智能有啥关系?

如果做什么事浅尝辄止,那么未来你的竞争力有在哪里?

其实我们需要思考的是一个思维模式的突破,也就是一件事情要么不做要做要做到什么程度的问题。投入和产出比的问题。为什么很多事情一开始总是少数人在做,大部分人都是吃瓜?等大多数人都一起上的时候。门槛也高了,汤都喝不上。

举一个通俗一点的例子,如果在几十年前你会英语,那可是很牛逼的人。但是现在会英语的满大街都是。同样几十年前如果你会组装电脑会编程那绝对是神一般的存在,现在呢?满大街都是不是么?未来的人工智能时代如果需要新的思维需要编程思维、计算思维那么你是希望成为未来富有竞争力的人还是满大街都是的那种?所以选择很重要,问问自己,你是希望只学会几个英语单词还是掌握一门外语?编程也一样,你希望以后拖一拖积木块做个动画或者游戏?拼一拼机器人?然后假装自己也懂编程(在未来类似会几个英语单词)还是真正掌握编程和计算思维接触人工智能这个新兴领域(类似掌握一门外语)!这样也许也就不会再自欺欺人,也不会像菜市场买菜讨价还价,对比谁家的菜更便宜。你问问你自己的目的,你就明白什么是重点!该做何选择!

最后我想说的是时代在变,这世界永恒不变的东西就是变化。只有与时俱进才能永葆生机,不要以为编程只是专业人士的事,一旦我们实现向数字化的过渡,那算法就是成为决策最关键的因素了,而算法的编写需要通过编程来实现,每一个人都应该学习编程,你不一定非得要成为谁,而是你能学到一种新的能力一种在未来社会领先一步的技能。

每一个人都应该学习编程你不一定非要成为什么,而是它能教会你用新的方式去思考。

荣趣AI编程为你提供专业的编程学习方案采用人工智能第一语言Python结合智能硬件、机器人、人工智能等一站式定制化服务

小白

荣趣AI编程

大神

未来专列

仅限你我

人工智能

只要BUG还在我就不开

预览时标签不可点收录于合集#个上一篇下一篇

转载请注明:http://www.aierlanlan.com/rzfs/361.html