1 个不稳定版本

0.1.0 2020 年 9 月 4 日

#6#蒙特


用于 goban

MIT 许可证

23KB
518

氧蒙特卡洛树搜索

如果你不知道什么是蒙特卡洛树搜索,我打赌你知道 AlphaGo 这个程序,它击败了世界上最优秀的围棋选手。他们的方法很创新,因为他们使用了神经网络,但神经网络并非孤军奋战,神经网络“只是”引导蒙特卡洛树搜索。

更多信息: 维基百科链接

演示

用于与蒙特卡洛树搜索交互的库,它是针对游戏泛化的。参见 examples/tictactoe

此库在实现上也是泛化和模块化的。事实上,普通的蒙特卡洛树搜索可以分成四个操作:tree policy(selection, expansion)simulationbackprogation。通过这种实现,我们可以更改模拟而不更改选择,例如。任何编程操作都是可互换的。因此,任何人都可以实现自己的 tree policy,而无需触及我的代码,它将运行。我们可以将这个库视为 MCTS 和粘合剂的特性集合。易于扩展。

实现细节

此树不将“游戏”状态存储在树的节点中,而是只存储直到该状态的历史移动。如果“状态”是一个内存密集型的结构,则此方法可能有益。它还将有助于未来的并行化。

目前

  • 包含基本方法(UCT)(天真模拟)
  • 未经过充分测试
  • 未经过充分分析,但表现良好。
  • 节点不使用哈希。
  • 使用 UCT 方法即可直接使用。

待办事项

  • 可能使用持久列表来存储节点历史。
  • 使用另一个库来管理树。
  • 提供并行蒙特卡洛树搜索实现。
  • 提供使用哈希表的蒙特卡洛树搜索实现。
  • 使用特性来抽象节点和树。

实验

使用 C = 1.41421,10000 次滚动,在 6x6 的井字棋中,在 1000 场比赛中对抗一个随机机器人,使用蒙特卡洛树搜索的机器人以 52.4% 的概率获胜,有 41.5% 的空位,因此随机机器人以 6.1% 的概率获胜(见 examples/tictactoe)

依赖关系

~760KB
~14K SLoC