使用python与tensorflow实现的简易alpha-go

资源下载地址:https://download.csdn.net/download/sheziqiong/85656335
资源下载地址:https://download.csdn.net/download/sheziqiong/85656335

一、Alpha-go原理初探

通过阅读论文,我们可以简单理解alpha-go的基本原理。大致分为四个版块,获得初始rollout,policy,自我博弈获得更好的policy network,根据已有数据训练value network用于非终止情况下的棋局评估,最终使用MCTS进行游戏。

首先,基于大量人类专家棋谱,使用监督学习(SL)训练得到policy network,这一步的目的在于减少每一个状态下可行操作的数量,通过计算每一个可行操作的可能性排序来得到。此外,使用任意一种较为简单的能快速获得动作返回的算法,作为rollout policy,用于进行之后的蒙特卡洛树搜索以及自我博弈学习。

在这里插入图片描述

接着使用强化学习(RL)来提升policy network的强度。在自我对弈过程中,通过不断与自己的历史版本博弈,来最大化自身对于某历史版本的胜率,以此达到更好的效果。

在完成以上两个网络的训练后,额外训练一个value network,用来基于当前棋局判断局势好坏情况。它的作用是降低蒙特卡洛树的搜索深度,这样在某些情况下可以不需要走到最终状态判断输赢,而是对当前状态直接用value network获得value值来进行判断为一次正尝试还是一次负尝试。

在这里插入图片描述

最终,通过蒙特卡洛树将上述三个网络加以结合使用。在每一步可行空间的选择上使用policy-network来缩减状态空间,在向后探索的过程中,以一定概率使用rollout-network来快速选择出一条走到终态的路径并计算胜负,或者以一定概率直接用value-network来近似判断胜负。如此不断展开蒙特卡洛树,与其它agent进行对弈。

在这里插入图片描述

二、实现Alpha-go

最后一步使用蒙特卡洛树与随机模型对抗在文件alpha_go/MCTS_with_trained_models中实现,执行它将进行已有网络与随机模型的对抗实验。用于生成它所需的数个网络以及蒙特卡洛树的关键部分如下所述。

2.1 Rollout 与 policy 两个网络的初值

实现在/alpha_go/generate_policy_rollout.py。参考网页要求,我们分别使用两个不同参数的DQN模型来和随机agent进行对弈,其中较为复杂且胜率相应较高的一个作为我们的policy-network初值,而较为简单的一个作为今后的rollout-policy。其分别存储在saved_model/important/下的policy_final和rollout_final模型中。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 用对手池方法训练policy-network

实现在/alpha_go/self_rival.py。在每一轮训练中首先将self _ 与rival的初值设为上一次保存的模型,接着维持rival不变,将self_优化对rival胜率训练,并把训练完成后的self_保存,以备下一轮对手训练。

在这里插入图片描述
在这里插入图片描述

2.3 MCTS的实现

蒙特卡洛树的实现参考中的calss MCTS, 并对我们所需要的接口进行了重新封装得到基于蒙特卡洛树的Agent类MCTSAgent,其实现代码在原agent.py后续。

蒙特卡洛agent接收一个policy,一个rollout,一个value三个网络用于蒙特卡洛过程,并会在step的过程中动态更新蒙特卡洛树节点保存的成功率与总次数等值。

在这里插入图片描述

三、修改参数与性能分析

由于时间有限,暂时未进行参数调整。最终用MCTS于随机Agent对弈的结果如下。

在这里插入图片描述

资源下载地址:https://download.csdn.net/download/sheziqiong/85656335
资源下载地址:https://download.csdn.net/download/sheziqiong/85656335

猜你喜欢

转载自blog.csdn.net/newlw/article/details/125311860