自动驾驶(六十一)---------蒙特卡洛搜索树

本文探讨了蒙特卡洛树搜索(MCTS)在自动驾驶决策中的潜在应用,详细介绍了博弈树、极小极大策略及MCTS的基本步骤。在自动驾驶场景下,MCTS能够通过模拟和反向传播,预测最优行驶策略,平衡乘客舒适性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      首先祝我自己元旦快乐,也祝在这个日子里看我blog的粉丝元旦快乐,今天申请了加班所以有时间写blog,程序员的生活就是这么单纯.........在这个特殊的日子里,为了充实节日气氛,学习一个名字很长的知识--蒙特卡洛搜索树,如果要问和自动驾驶有什么关系,我想在决策的时候可以用到吧,只是博弈论暂时并没有引入进自动驾驶中。另外它和A*算法类似,在导航上也有应用的可能。

      特别的自动驾驶进入冷静期,感知智能很快也接近极限,限制自动驾驶发展的关键是逻辑推理,所以我未来的方向将有可能涉及多方面,不会局限与深度学习方面,毕竟我已经落后很多了,需要弯道超车,现在的想法是认知智能、逻辑推理、迁移认知等等方面。总之一切的一切都是朝着自动驾驶方向前进。

1. 博弈树

      首先介绍博弈树的概念,博弈树是一种树形结构,其中每一个节点表征博弈的确定状态。从一个节点向其子节点的转换被称为一个行动,节点的子节点数量被称为分支因子,树的根节点也就是博弈的初始状态,端节点也就是叶子节点,表示博弈的最终状态,从一个根节点到一个端节点的树遍历表征了单个博弈过程。

2. 极小极大策略

      给定一个状态,并假定对手正在尝试最小化你的收益,你希望找到能最大化你的收益的动作,这也是该算法被称为极小极大的原因。举例说明:在车辆决策中,有一个评价函数:包含舒适性+安全性+稳定性,等多方面,在一次决策中:你可以选择左变道和直线,你想让你的评价函数最大化,周围车辆也想让他的评价函数最大化,我们可以模拟你的选择,对应分析他的最大化选择,相互博弈推演,最终选择对我最有利的策略。

      特别的,在推演过程中,我们假定对手在当前环境下,一定会选择对他最有利的策略,而判断在一个场景下,什么策略是最有利的,只有不断推演下去,计算最终结果的评价函数最大的概率。例如直线下,评价函数较大的概率是多少,变道下评价函数较大的概率是多少。

3. 基本概念

      蒙特卡洛树搜索算法分为四步,分别是选择(Selection)、扩展(Expansion)、模拟(Simulate)和反向传播。

     1. 选择:从根节点开始,根据UCT函数选择一个最有潜力的子结点,直到当前节点的还有可扩展的子节点,UCT函数的定义如下:其中vi表示当前节点,v表示vi​的父节点,表示vi节点胜利的次数,N(vi) 表示访问vi节点的次数,N(v)表示访问v节点的次数,这些参数是通过第四步反向传播得到的。

     2. 扩展:是对可拓展的节点进行的,即随机添加一个新的子节点。

     3. 模拟:是对上一步扩展出来的子节点进行一次模拟游戏,双方随机下子,直到分出胜负。

     4. 反向传播:从扩展出来的子节点向上回溯,更新所有父节点的Q、N参数,即获胜次数和被访问次数。

4. 与自动驾驶

     我们知道蒙特卡洛搜索一般用在下棋上,其实反而没有用在自动驾驶上合适,这是因为,下棋每一步的选择太多,要穷尽所以可能是很困难的一件事,并且结果只有输赢,只能推演到最后才能得到结果,一般地,我们是通过给一个模糊的概率(不准总比没有好),另外推演只选取值得推演的方向进行,从而大大简化的遍历的过程。

     幸运的是在自动驾驶中,并不存在这样的问题,一般我们可供的选择并不多,需要推演的种类可以计算,即使每一个时间周期都推演一次也可以,主要是相邻一段时间,面临的场景相似,这次的推演可以参考上一次的推演结果。

5. 总结

     在自动驾驶中使用蒙特卡洛搜索需要解决好以下几个问题:

    1. 如何设计评价函数,能量化输赢。

    2. 对手是否也采用相同的策略,最大化自己的评价函数。

    3. 自动驾驶再一次博弈中,如何平衡车上乘客和旁边人类驾驶员的关系。

 

      

### 自博弈强化学习概述 自博弈(self-play)是一种特殊的强化学习训练机制,在这种机制下,代理通过与不同版本的自己互动来提升决策能力[^1]。这种方法允许代理逐步改进策略,而无需外部对手或环境提供标签数据。 #### 实现方法 在实践中,自博弈通常涉及两个主要组件: - **初始策略初始化**:创建一个基础模型作为起点。 - **迭代对抗过程**:让当前最优版与其他历史版本相互竞争,收集交互产生的经验用于更新参数。随着轮次增加,整体性能不断提高。 具体来说,AlphaGo Zero展示了如何仅依靠自博弈达到超越人类水平的表现。其核心算法结合了蒙特卡洛树搜索(MCTS)和深度神经网络(DNN),能够在围棋游戏中不断自我挑战并优化权重。 ```python import numpy as np class SelfPlayAgent: def __init__(self, model): self.model = model def play(self, opponent=None): state = initial_state() while not game_over(state): action = choose_action(state, self.model) if opponent is None: next_state = apply_move(state, action) reward = evaluate_position(next_state) train_model(self.model, (state, action, reward)) state = next_state else: # Play against another version of itself during training phase. pass def main(): agent = SelfPlayAgent(initialize_network()) for episode in range(num_episodes): agent.play(opponent=agent) if __name__ == "__main__": main() ``` 此代码片段简化地描述了一个基于自博弈框架下的智能体类定义及其基本操作逻辑。实际应用中还需要考虑更多细节如状态表示、奖励设计等。 #### 应用场景 自博弈广泛应用于多个领域,特别是在那些具有明确规则但难以穷尽所有可能性的游戏环境中表现出色。除了经典的棋盘游戏外,还包括但不限于以下几个方面: - 多智能体系统中的合作与竞争模拟; - 对抗性任务如网络安全攻防演练; - 需要长期规划的任务自动化处理,例如自动驾驶汽车路径选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值