Python做人工智能?让电脑自己学会玩游戏,实战带你入门机器学习
前言
之前本号就有一篇文章是关于用Python编写一个"拿石子"游戏,一个能让你与电脑对弈的小游戏,但其中电脑玩家的选择是随机的,意味着你是与一个智障电脑在玩游戏。
今天我们更进一步,编写程序让这个智障电脑可以自己与自己不断玩这个"拿石子"游戏,最终学会如何赢得这个游戏。不仅如此,我们还可以通过这个训练后的电脑玩家得知这个游戏的必胜秘诀(文末处)。下面看看示意动图。
高能预警,本文与之前的文章不一样,需要自己实现一个强化学习中的一个小算法,但这个算法不难,而且可以广泛应用到其他同类型的博弈问题中,可以让你做出有趣的东西出来。我们开始吧。
"拿石子"游戏规则
拿石子游戏规则很简单,开始有一定数量的石子(假如是10),然后两人轮流从石子堆中取走一定范围的数量(例如是1到3),以此类推,最后拿走剩余的所有石子的人就输了。
本文需要的库
- numpy
- pandas
- retrying
如果你已经看过我关于如何安装Anaconda的文章,那么这些库基本都不用安装了。
程序结构
由于本次程序较为复杂,并且日后我会继续使用不同的方式去改善他。因此本次不会使用上次文章中的代码结构,而是采用类的方式组织代码。 最后,如果你的时间不是很紧张,并且又想快速的python提高,最重要的是不怕吃苦,建议你可以架尉♥信(同音):276 3177 065 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~
整个游戏有3个角色:
- 人类玩家:UserPlayer
- 本次拿取数量:get_taken_num(current_num)
- 电脑玩家:CpuPlayer
- 本次拿取数量:get_taken_num(current_num)
- 学习:learning(current_num,taken_num,state)
- 裁判:Referee
- 准备开局:ready
- 获取当前剩余石子数量:current_num
- 判定当前局面状态:get_state(taken_num)
- 更新剩余石子:take_away(taken_num)
- 本局是否结束:is_end_game
上述所有实现都在models.py中,有兴趣的朋友请去github查看即可。
关键点说明
到底机器学习的程序与普通的应用开发程序有什么不一样?正如本文的实现,程序的逻辑走向不是通过我们写代码的方式编写的,而是通过数据来决定。
下面就来简单说明整个过程的关键点
- 整体上来说,电脑玩家每次选择拿取多少个石子,是通过一个表的数据判断出来。
- 图中的行索引(左边绿色框中的),表示当前盘面的石子数量。
- 列索引(上方红色框中),表示可以选择的数量
- 那么行列索引交叉点的数据,就表示这次选择的价值,这个值越大,电脑玩家就会越可能选择。
- 所以你可以看到,当你与电脑玩家对战时,其实他早就想好每一步要怎么走了。
问题是,这个表格中的价值数据是怎么得来的?没错,就是让他与自己不断的对战从而获得经验而来。 我们来分析一下这个对战过程
- 一开始的时候,整个表格的值全是0
- 假设当前剩余数量是10,那么他就会看行索引10对应的那一行的数据。
- 他发现那一行全是0,那么他就会随机来挑。对的,此时他就是在碰运气。
- 当他选好本次拿取数后,就会根据下一轮可能出现的状态来计算价值,然后更新到本次选择中。
- 上图包含了3种可能的选择中的每个情况
当然,第一次训练时,比较靠后的记录都不会有任何更新。直到遇到奖励或惩罚。下图表明了这样的情况
- 假如当前剩余数量是4,电脑玩家选择,他选了取走3个。
- 这是裁判反馈给他说,你赢了,因此在(行4,列3)那里的价值加了10分。这就是电脑玩家可以自己学会玩游戏的关键。
- 如果裁判反馈给他说,你输了,那么以一样的机制扣减价值分。
再来看看之后他是怎么得到下面行的分数。假设现在已经训练了几个回合,表格上方的行陆陆续续有些得分
- 假设当前剩余数量为6,电脑玩家随机选了1,那么就可以确定下一个可能的状态区域
- 发现3行数据没有一行全是0或全是负数,因此(行6,列1)那里的价值分加3行区域中的最大值*学习率(就是一个百分比)
- 以此类推,电脑玩家不断与自己玩游戏,不断更新表格中的分数。
- 注意一点,整个项目我们都没有编写任何的游戏逻辑代码。只有关于奖励与惩罚相关的逻辑。
游戏必胜秘诀
- 上图把电脑玩家学习到的表格数据显示出来
- 看到那些整行都是负数的吗,那些就是必定会输的状态。
- 这也是为什么我设定于电脑对战时默认是21开始并且是电脑先拿,这样我才有机会赢。
- 我们还看到从2开始,每个3段就会出现一个必输的盘面。
小结
本文利用了最简单的强化学习中的Q-Table机制,让电脑自学玩游戏,这是一个非常适合入门的例子(他需要你在Q-Table方法上做出变通)。以后我会继续改善这个游戏,用不同的机器学习的方式去实现这些功能,敬请期待。
如果觉得本文对你有所帮助,记得关注、评论、转发、收藏噢~
Python做人工智能?让电脑自己学会玩游戏,实战带你入门机器学习相关推荐
- 玩游戏的时候计算机弹出,win10电脑全屏玩游戏时自动弹出桌面的问题怎么解决...
win10电脑全屏玩游戏时自动弹出桌面的问题怎么解决 有的小伙伴在使用Windows10系统的电脑玩游戏时,总会自动弹出桌面,觉得非常麻烦,但是却不知道如何解决这一问题,那么小编就来为大家介绍一下吧. ...
- 刺激战场模拟器过检测的被封号了怎么办?电脑控制手机玩游戏了解一下
最近腾讯又搞大事情了,封禁了一大批模拟器用户,准确地说是用模拟器过检测匹配手机的玩家,但是很多正常的模拟器玩家也被误判封禁了,让很多人愤愤不平,纷纷转战刺激战场国际服. 其实除了可以用模拟器在电脑上玩 ...
- 怎么在网吧计算机查找游戏,网吧电脑可以边玩游戏边录视频吗?这样的方法很少人知道...
网吧电脑可以边玩游戏边录视频吗?游戏是每个年轻人喜爱的休闲方式之一!对于很多小伙伴来说,每到节假日都会约上朋友去网吧来上几盘.那么在此过程当中,如果想要将网吧电脑上的游戏录制成视频该如何实现呢?这里为 ...
- 黑客都用Python做什么?我们能学会这些技术吗?
黑客都用python做什么? 黑客们都会运用到Python,远程可以远程控制扫描仪.溢出exp,附近就能调用各种系统函数.内存注入代码.本地溢出攻击等等这些都能够通过Python完成,简单一个Pyth ...
- 学Python做人工智能的前景怎么样?如何入行?
已经没有什么能够阻挡Python了.根据最近火爆朋友圈的一则消息,Python已经进入山东省小学教材.Python这几年的火热,离不开人工智能和机器学习. 作为一种解释型语言,Python 的设计哲学 ...
- 计算机上可以玩游戏吗,剑网3缘起:五年前的电脑能畅玩游戏吗?玩家做了一个实验...
哈罗大家好,我是盟盟,本期和大家聊聊剑网3缘起的话题. 剑网3缘起公测在即,作为一款已经火了十几年的游戏,剑网3缘起在二测阶段就已经出现了"人潮涌动"的场景,放眼望去就是一排玩家在 ...
- 重温经典:Python版飞机大战源码 神器 玩游戏就玩自己开发的
目录 导语 正文 一.环境安装 二.我方飞机 三.敌方飞机 四.控制键盘移动 五.检测子弹碰撞 六.效果图 总结 免费源码领取处: 往期文章推荐-- Python从入门到实战-- 绘图Turtle系列 ...
- 怎样链接计算机一起玩游戏,怎么在投影上打游戏?电脑连接投影玩游戏教程 这样玩游戏才爽!...
虽然现在很多人喜欢在手机上没事儿玩两把游戏,放松一下,但是真正要爽快的玩游戏,还是得在电脑显示器或者是电视机上大屏幕玩主机.PC游戏来的过瘾.毕竟不管是主机游戏还是PC游戏,其画质和游戏的精美程度都是 ...
- 怎样链接计算机一起玩游戏,怎么在投影上打游戏?电脑连接投影玩游戏教程,这样玩游戏才爽!...
虽然现在很多人喜欢在手机上没事儿玩两把游戏,放松一下,但是真正要爽快的玩游戏,还是得在电脑显示器或者是电视机上大屏幕玩主机.PC游戏来的过瘾.毕竟不管是主机游戏还是PC游戏,其画质和游戏的精美程度都是 ...
- 如何设置计算机玩游戏不卡,win10电脑怎么设置玩游戏不卡?
很多人说Win10系统游戏兼容性差,游戏体验差.其实这个说法很不正确.对于大多数游戏玩家来说,Win10是一个不错的游戏平台.不仅兼容性好,Xbox的原生加持也让玩家更享受.很多人不知道Win10中有 ...
最新文章
- Kdtree(K-dimension tree)学习
- c++ 纯虚函数和抽象类那些事(一)
- Machinations——可视化游戏设计
- 关于计算机网络技术专业的演讲稿,有关互联网的演讲稿
- 浙大计算机系学霸,国内三个“图灵班”,学霸中的尖子才能考得上,全是计算机人才!...
- asp.net webapi bug : System.OperationCanceledException 异常处理
- 保证MQ消费消息的幂等性,真可以用版本号的方式?
- 基于JSP的数据库增删改查实现
- 找到指针的奇数位置 c语言,(ppt)【C语言程序设计】上机作业2010.ppt
- 聚焦2017博鳌亚洲论坛:数据安全仍是互联网金融的重中之重
- Spoiler Alert – 实现内容模糊隐藏效果的 jQuery 插件
- java echarts 饼图_饼图 | ECharts 数据可视化实验室
- 大数据shipin教程_大数据视频教程百度网盘下载
- 小米note2鸿蒙ROM,【ROM】小米note优化开发版MIUI9
- 程序与算法的区别和内在联系(算法是什么?程序又是什么?)
- 综合行政执法改革依据
- 都2022年你还不会安装系统?看我三分钟完事PE制作并进行Win11系统安装实践
- 基于协同过滤的电影推荐
- 显示器购买攻略【小白必看】
- OpenXml操作Word的一些操作总结. - 天天不在
热门文章
- 智驾仿真-摄像头仿真方案总纲
- wifi6无线网卡驱动linux,linux2.6.8内核装intel wifi link 5100无线网卡驱动的问题?
- ssk 2g安国6981量产xp
- idea使用maven私服时下载源码
- 【雪中漫步win7主题】情侣主题
- 新流星搜剑录服务器维护,一梦江湖1月15日更新内容介绍
- 原神的天空岛服务器位置,原神天空岛服和世界树服数据互通吗
- 建造者2全部岛屿_勇者斗恶龙建造者2空荡岛流程攻略介绍
- 《东周列国志》第四十九回 公子鲍厚施买国 齐懿公竹池遇变
- Kademlia、DHT、KRPC、BitTorrent 协议、DHT Sniffer