蒙特卡洛树
简介
1 蒙特卡洛树搜索是一类树搜索算法的统称,称为MCTS,是一种启发式搜索算法,在搜索空间极大的游戏中比较有效,它的目标是给定一个游戏状态,选择最佳的一步,如Alpha Go.
步骤
1 选择: 选择能够最大化UCB值的节点
1 | UCB = Vi+c*sqot(lnN/ni) c=2 |
2 扩展: 创建一个或多个子节点
3 仿真: 在某一结点用随机策略进行游戏
4 反向传播: 使用随机搜索的结果更新整个搜索树
5 在棋类游戏中应用mcts,本例将用五子棋应用mcts实现,实现五子棋的文件目录如下:
1 | ---gomoku |
然后就可以一个一个实现了,首先是board,我们需要首先实现board类其需要一些属性
1 |
|
然后需要实现几个函数:
1 |
|
实现完棋盘后,还需要实现游戏树节点,也就是node文件,其包含判定游戏树节点的一些操作,定义Node其属性具体如下:
1 | def __init__(self, board=None, parent=None, pre_pos=None): |
1 |
|
接下来是mcts实现,mcts其具体包含四个步骤,开篇已经提到了,接下来我们将具体实现
1 | # 到达叶结点 |
定义完成之后接下来就可以进行对局了,也就是play文件,其具体实现如下:
定义play,其属性包含board,然后实现print_board打印棋盘,startplay 开始对局,依次实现,代码如下
1 | from board import Board |
1 |
|
定义AI:
1 | class AI(): |
至此,一个以mcts实现的五子棋实现完毕!!!。