1 个不稳定版本
0.1.0 | 2020 年 9 月 4 日 |
---|
#6 在 #蒙特
用于 goban
23KB
518 行
氧蒙特卡洛树搜索
如果你不知道什么是蒙特卡洛树搜索,我打赌你知道 AlphaGo 这个程序,它击败了世界上最优秀的围棋选手。他们的方法很创新,因为他们使用了神经网络,但神经网络并非孤军奋战,神经网络“只是”引导蒙特卡洛树搜索。
更多信息: 维基百科链接
演示
用于与蒙特卡洛树搜索交互的库,它是针对游戏泛化的。参见 examples/tictactoe
。
此库在实现上也是泛化和模块化的。事实上,普通的蒙特卡洛树搜索可以分成四个操作:tree policy(selection, expansion)
,simulation
,backprogation
。通过这种实现,我们可以更改模拟而不更改选择,例如。任何编程操作都是可互换的。因此,任何人都可以实现自己的 tree policy
,而无需触及我的代码,它将运行。我们可以将这个库视为 MCTS 和粘合剂的特性集合。易于扩展。
实现细节
此树不将“游戏”状态存储在树的节点中,而是只存储直到该状态的历史移动。如果“状态”是一个内存密集型的结构,则此方法可能有益。它还将有助于未来的并行化。
目前
- 包含基本方法(UCT)(天真模拟)
- 未经过充分测试
- 未经过充分分析,但表现良好。
- 节点不使用哈希。
- 使用 UCT 方法即可直接使用。
待办事项
- 可能使用持久列表来存储节点历史。
- 使用另一个库来管理树。
- 提供并行蒙特卡洛树搜索实现。
- 提供使用哈希表的蒙特卡洛树搜索实现。
- 使用特性来抽象节点和树。
实验
使用 C = 1.41421,10000 次滚动,在 6x6 的井字棋中,在 1000 场比赛中对抗一个随机机器人,使用蒙特卡洛树搜索的机器人以 52.4% 的概率获胜,有 41.5% 的空位,因此随机机器人以 6.1% 的概率获胜(见 examples/tictactoe)
依赖关系
~760KB
~14K SLoC