蒙特卡洛树搜索介绍

原帖地址:蒙特卡洛搜索树原文

2015年9月7日周一 由Jeff Bradberry

      与游戏AI有关的问题一般开始于被称作完全信息博弈的游戏。这是一款对弈玩家彼此没有信息可以隐藏的回合制游戏且在游戏技术里没有运气元素(如扔骰子或从洗好的牌中抽牌),    井字过三关,四子棋,跳棋,国际象棋,黑白棋和围棋用到了这个算法的所有游戏。因为在这个游戏类型中发生的任何事件是能够用一棵树完全确定,它能构建所有可能的结果,且能分配一个值用于确定其中一名玩家的赢或输。尽可能找到最优解,然而在树上做一个搜索操作,用选择的方法在每层上交替取最大值和最小值,匹配不同玩家的矛盾冲突目标,顺着这颗树上搜素,这个叫做极小化极大算法。
      用这个极小化极大算法解决这个问题,完整搜索这颗博弈树花费总时间太多且不切实际。考虑到这类游戏在实战中具有极多的分支因素或每转一圈可移动的高胜率步数,因为这个极小化极大算法需要搜索树中所有节点以便找到最优解且必须检查的节点的数量与分支系数呈指数增长。有解决这个问题的办法,例如仅搜索向前移动(或层)的有限步数且使用评价函数估算出这个位置的胜率,或者如果它们没有价值可以用pruning算法分支。许多这些技术,需要游戏计算机领域的相关知识,可能很难收集到有用的信息。这种方法产生的国际象棋程序能够击败特级大师,类似的成功已经难以实现,特别是19X19的围棋项目。
      然而,对于高分支的游戏已经有一项游戏AI技术做得很好且占据游戏程序领域的主导地位。这很容易创建一个仅用较小的分支因子就能给出一个较好的游戏结果的算法基本实现,相对简单的修改可以建立和改善它,如象棋或围棋。它能被设置任何游戏规定的时间停止后,用较长的思考时间来学习游戏高手的玩法。因为它不需要游戏的具体知识,它可用于一般的游戏。它甚至可以适应游戏中的随机性规律,这项技术被称为蒙特卡洛树搜索。在这篇文章中我将描述MCTS是如何工作的,特别是一个被称作UCT博弈树搜索的变种,然后将告诉你如何在Python中建立一个基本的实现。
      试想一下,如果你愿意这么做,那么你面临着老虎机的中奖概率,每一个不同的支付概率和金额。作为一个理性的人(如果你要发挥他们的话),你会更喜欢使用的策略,让您能够最大化你的净收益。但是,你怎么能这样做呢?无论出于何种原因附近没有一个人,所以你不能看别人玩一会儿,以获取最好的机器信息,这是最好的机器通过构建统计的置信区间为每台机器做到这一点.

这里:1.平均花费机器i.   2.ni:第i个机器玩家. 3.n:玩家的总数.

       然后,你的策略是每次选择机器的最高上界。当你这样做时,因为这台机器所观察到的平均值将改变且它的置信区间会变窄,但所有其它机器的置信区间将扩大。最终,其他机器中将有一个上限超出你的当前机器,你将切换到这台机器。这种策略有你沮丧的性能,你只将在真正的最好的老虎机上玩的不同且根据该策略你将赢得预期奖金,你仅使用O(ln n)时间复杂度。对于这个问题以相同的大O增长率为理论最适合(被称为多臂吃角子老虎问题),且具有容易计算的额外好处。

       而这里的蒙特卡洛树是怎么来的,在一个标准的蒙特卡罗代码程序中,运用了大量的随机模拟,在这种情况下,从你想找到的最佳移动位置,以起始状态为每个可能的移动做统计,最佳的移动结果被返回。虽然这种移动方法有缺陷,不过,是在用于仿真中任何给定的回合,可能有很多可能的移动,但只有一个或两个是良好。如果每回合随机移动被选择,他将很难发现最佳前进路线。所以,UCT是一个加强算法。我们的想法是这样的,如果统计数据适用于所有仅移动一格的位置,棋盘中的任何位置都可以视为多臂吃角子老虎问题。所以代替许多单纯随机模拟,UCT工作用于许多多阶段淘汰赛。

        第一阶段,你有必要持续选择处理每个位置的统计数据时,用来完成一个多拉杆吃角子老虎机问题。此举使用了UCB1算法代替随机选择,且被认为是应用于获取下一个位置。然后选择开始直到你到达一个不是所有的子结点有记录数据的位置。

选择:此处通过在每一步UCB1算法所选的位置并移动标记为粗体。注意一些玩家间的对弈记录已经被统计下来。每个圆圈中包含玩家的胜场数/次数。

         第二阶段,扩容,发现此时已不再适用于UCB1算法。一个未访问的子结点被随机选择,并且记录一个新节点被添加到统计树。

扩张:记录为1/1的位置位于树的底部在它之下没有进一步的统计记录,所以我们选择一个随机移动,并为它添加一个新结点(粗体),初始化为0/0。

          扩容后,其余部分的开销是在第三阶段,仿真。这么做是经典的蒙特卡洛模拟,或纯随机或如果选择一个年轻选手,则用一些简单的加权探索法,或对于高端玩家,则用一些计算复杂的启发式和估算。对于较小的分支因子游戏,一个年轻选手能给出好的结果。

仿真:一旦新结点被添加,蒙特卡洛模拟开始,这里用虚线箭头描述。模拟移动可以是完全随机的,或可以

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值