基于强化学习开发人机对弈五子棋游戏
强化学习主要包括状态空间、价值函数、状态转移三个部分,通过状态之间的转移来得到每个状态的价值,强化学习的目标是使得总价值达到最大。注意,与监督学习不同的是,监督学习通常需要大量的样本来获得有价值的信息,而强化学习却不需要,强化学习可以不需要预先给定任何知识,只需要指定一定的策略和回报,它可以通过不断地尝试和探索,从而可以进行最优的决策,而且随着尝试的次数增多,决策也会越来越最优。(原文在个人微信公众号:deeplearningdigest)
今天通过一个实例来具体讲解状态空间、价值函数等概念,例子是编写一个可以人机对弈的五子棋程序。由于完整的棋盘导致状态空间太大,个人PC一时难以训练,因此这里我们使用的是5*5大小的棋盘。加入两个玩家的棋子为X和O,那么赢的情况就是:
同一行或者同一列的棋子相同;
正对角线或反对角线的棋子相同。
那么如何定义价值函数呢?首先,我们把棋盘上每一种布局看做一种状态空间,然后每一种状态空间又对应一个价值,我们把所有价值组合起来称为价值空间,价值空间中的每个状态的价值都是要通过价值函数得到。不同状态之间的价值相对大小决定着该状态赢得棋局的概率大小,例如如果状态A的价值大于状态B的价值,那么我们可以认为状态A能赢的概率大于状态B能赢的概率。
关于所有状态的价值初始化方法如下:假如我们棋子X为例,那么只要有三个X棋子在一条线上,说明此时棋盘状态表示X已经赢了,那么这个状态的价值就设置为1,也就是说能赢的状态的价值都设置为1;反之,如果有三个O棋子在一条直线上,也就代表X输了,于是此时棋盘状态的价值就设置为0。还有一些状态就是打平手了,我们把所有平局的状态的价值都设置为0;然后还有一些状态是表示棋还没下完,无法判断输赢或平局,这种情况价值设置为0.5,因为我们觉得双方都有可能会赢。
那么如何进行状态转移呢?首先状态转移只能是转移到棋盘上的空位置处,这里假设棋盘上的状态只有三种情况,分别是X、O、Empty,状态转移只能是转移到Empty的点。
具体玩家指定下一步是到哪一个Empty点的策略是:为了保证能在机器学习的exploration和exploitation二者之间做出一个折中,通常有两种算法,一种是贪婪算法,另外一种是随机算法。贪婪算法的目的是选择出此刻最优的Empty点,而随机算法是去探索更多可能性。就好比平常我们在叫外卖时,你可以去点一个之前自己最喜欢的外卖,也可以去尝试一种新的口味,那么第一种情况对应的就是贪婪算法,也就是机器学习中的exploitation;第二种情况对应的就是随机算法,也就是机器学习中的exploration。
有了贪婪算法和随机算法过后,就要考虑何时使用贪婪算法和随机算法了,毫无疑问,贪婪算法使用的情况应该要占大多数,因此我们这里设置一个概率阈值0.1,在每一次状态转移之前,通过随机抽样0~1之间的数来采取不同的算法。如果它小于0.1,我们采取随机算法;如果它大于0.1,我们就采取贪婪算法。
随机算法的执行很简单,随机在Empty的位置集合里去挑选一个位置即可作为下一步的位置;而贪婪算法的执行过程是遍历所有的Empty位置得到所有的状态,并且计算每个状态的价值,找出其中最大价值的那个状态。与随机算法所不同的是,贪婪算法每一步都会更新价值空间,也就是说对上一个状态空间的价值进行更新,具体的更新公式如下:
V(s)=V(s)+alpha*[V(s')-V(s)]
其中V表示价值空间,s表示上一个状态,s'表示下一个状态,alpha表示一个类似学习率一样的参数,本文中设置为0.99,这里可以类比梯度下降算法,只不过这里使用的是时间上的差分。
按照以上的描述,我们就可以设计一个会下五子棋的Agent了,这个Agent先让它自己与自己对弈一定次数,次数越多,技术越强。它具备了基本的技术以后,就可以进行人机对弈了,并且,随着人机对弈次数越来越多,它也会变得越来越强大了。
由于五子棋状态空间较多,计算量较大,而如果设置机器人自身对弈次数较小的话,演示效果不佳;因此这里给出9宫格的演示结果(三个连成一条线就代表赢了),首先让Agent自己与自己下了30000局,然后我来和它下,结果如下图所示,X代表我,O代表Agent:
第一步,我走(0,0):
然后机器走出(1,1):
第二步,我走(1,0),然后机器走出(2,0):
第三步,我走出(0,2),然后机器走出(0,1):
第四步,我走出(2,1),然后机器走出(2,2),最后只剩一个地方我走了(1,2),因此最终达成平局。
从上可以看出,机器以及具备了基本的下棋技能。对于五子棋,演示方式也是和上面的一样。下面给出开发人机对弈的五子棋程序Python代码:
转载于:https://my.oschina.net/zzw922cn/blog/801603
基于强化学习开发人机对弈五子棋游戏相关推荐
- python_强化学习算法DQN_玩五子棋游戏
本文公开一个基于强化学习算法DQN的五子棋游戏自动下棋算法源码,并对思路进行讲解. 完整代码和预训练模型(Saver文件夹)地址: python_强化学习算法DQN_玩五子棋游戏 一个基于CNN构成的 ...
- 使用Python实现基于强化学习与游戏化学习典型算法
作者:禅与计算机程序设计艺术 随着现代社会和互联网的快速发展,基于网络.移动终端等新型信息技术的应用也越来越多,为人类提供了无限可能.同时,由于计算机科学和互联网技术的飞速发展,计算机已逐渐成为人类社 ...
- [内附完整源码和文档] 基于Android的移动手机端五子棋游戏APP的设计与实现
一.项目概述 近年来,随着安卓手机的普及,安卓游戏成为广大用户关注的方向.五子棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用Java开发五子棋游戏,主 ...
- 论文浅尝-综述 | 基于强化学习的知识图谱综述
转载公众号 | 人工智能前沿讲习 论文来源:https://crad.ict.ac.cn/CN/10.7544/issn1000-1239.20211264 摘要:知识图谱是一种用图结构建模事物及事物 ...
- 今晚8点:基于强化学习的关系抽取和文本分类 | PhD Talk #18
「PhD Talk」是 PaperWeekly 的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和交流可能会让知识的传播更加有意义 ...
- 直播预告:基于强化学习的关系抽取和文本分类 | PhD Talk #18
「PhD Talk」是 PaperWeekly 的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和交流可能会让知识的传播更加有意义 ...
- 【实践】基于强化学习的 Contextual Bandits 算法在推荐场景中的应用
文章作者:杨梦月.张露露 内容来源:滴滴科技合作 出品平台:DataFunTalk 导读:本文是对滴滴 AI Labs 和中科院大学联合提出的 WWW 2020 Research Track 的 Or ...
- 论文阅读|Nash Q-Learning for General-Sum Stochastic Games基于强化学习的多智能体研究(附代码)
论文:Nash Q-learning for general-sum stochastic games 链接:http://www.jmlr.org/papers/volume4/hu03a/hu03 ...
- 基于强化学习的坦克大战python语言实现
这个项目是基于一个人工智能算法(基于全连接线性BP网络的增强学习模型)代理玩经典游戏坦克大战. 在个游戏中,机器控制的坦克主要目标是射击敌方坦克并保卫自家的根据地. 游戏中坦克的动作空 ...
最新文章
- 机器翻译注意力机制及其PyTorch实现
- Python 文件操作二
- cpu子系统(优化)
- 蓝桥杯:基础练习 特殊的数字
- Exclusive monitor在spinlock中的应用
- 使用Diskpart建立GPT磁盘分区图文教程
- 【Qt】QModbusPdu类
- 企业级NGINX的重定向rewrite
- ubuntu vnc 远程连接桌面
- MySQL小黑框怎么打开_打开你的小黑框命令行,来跟我一起嗨嗨嗨
- Spring : SpringBoot的ApplicationRunner和CommandLineRunner
- fckeditor零碎要点---3.FCK:editor instanceName=myeditor value=李德伟欢迎您 height=400/FCK:editor
- mac安装thrift
- CPU读/写一个存储单元
- 如何自动升级php数据库,php – 如何在现实世界中“升级”数据库?
- xposed hook 静态函数_Xposed 实现原理分析
- 透视形变(perspective distortion)
- linux上机考试题(Linux基础)
- Scratch3.0学习视频链接
- 我要悄悄学习 Java 字节码指令,在成为技术大佬的路上一去不复返