MCTS
参考:蒙特卡洛树搜索
首先,我们给MCTS下两个定义。第一,MCTS是一个决策时规划算法;第二,MCTS是一个rollout算法。不同之处在于MCTS中会部分的保存值函数,从而能够指导仿真产生更高回报值的轨迹。
在MCTS中,每当我们遇到一个新的状态,需要选择动作时,就会执行MCTS(决策时规划)。每一个MCTS更新过程都是一个迭代过程。这个迭代过程会仿真很多从当前状态开始直到终止态的轨迹(rollout)。MCTS的核心思想是专注于哪些获得高的评估回报的仿真,并且基于先前的高回报仿真轨迹不断的往外扩展,产生新的仿真经验。
蒙特卡洛树搜索(Monte Carlo Tree Search, MCTS)是一种搜索策略,严格来说它和DFS、BFS是相当的。不同之处在于,它通过一个权重表(取决于具体的实现)来决定每次搜索的试探方向:到底是探向更深的一层,还是停留在当前层试探其他节点。
因此,MCTS是一种兼而有之的搜索策略——它估计当前节点和最优解的距离,启发式地决定到底应该采用类DFS的搜索模式,还是采用类BFS的搜索方式。因此,它可以兼具两者的优势并弥补其不足。
*选择 (Selection):*找出几个较好的动作,如使用置信度上界(upper confidence bound, UCB)的动作选择
bonus = reward_i + sqrt((2 *total_counts) / float(counts_i); //reward是选择动作后的平均奖励,counts为选择动作的次数,total_counts为总次数
在最开始时,所有的动作的置信度都很低,因此每个动作都会被选中几次,此时选中最优动作的概率不高,当已经选择了很多次时,每个动作的置信度都已经相当高了,此时会一直选择最优动作,偶尔选择其他置信度低的动作。
*扩展 (Expansion):*如果L节点不是game end,则在节点执行选择的动作a,把得到的新节点C加入到搜索树中;如果L是game end,则直接进入第4步把最终的游戏结果向上传播。
*模拟(Simulation):*对新加入的节点C进行一次(或多次)rollout,即从结点C开始random play(AlphaGo中使用的是强化训练出来的网络做自博)直到游戏结束,得到游戏结果
回溯(Backpropagation): 从节点C开始反向遍历搜索路径,对于路径中的每个节点,更新访问计数和总效益
MCTS在自动驾驶的应用(可用于泊车)
为了计算自我车辆的最优规划,我们使用目标概率和预测轨迹来使用蒙特卡洛树搜索(MCTS)算法。该算法执行许多闭环模拟,从当前状态s开始,一直到某个固定的搜索深度或直到达到目标状态。
在每次模拟开始时,对于每个障碍物车辆,我们首先对其当前运动状态进行采样,然后使用相关的概率对车辆进行轨迹采样。博弈树上的每个结点对应一个状态,在状态点上过滤掉非法动作,然后依据UCB算法选择一个宏观动作。基于无人车动作生成的轨迹以及障碍物车辆的轨迹,在搜索树上继续向前做模拟(simulation),然后可以得到规划的轨迹以及新的结点。轨迹的前向模拟使用比例控制与自适应巡航控制相结合控制智能车的acceleration和steering。根据车辆的观测数据,对每个时间步的机动终止条件进行监测。在生成的轨迹上进行碰撞检测,此时得到碰撞奖励。如果MCTS搜索达到了最大深度dmax(没有碰撞或到达目标点),我们设置终端奖励 R t e r m R_term Rterm,它可以是一个常数或基于类似于A* 搜索的启发式奖励估计,最后将得到的奖励反向回溯。