task 03 策略梯度及 PPO 算法

在 reinforcement learning 中有 3 个components,一个actor,一个environment,一个reward function。

如果要 learn 的 agent 跟和环境互动的 agent 是同一个的话, 这个叫做on-policy(同策略)。
如果要 learn 的 agent 跟和环境互动的 agent 不是同一个的话, 那这个叫做off-policy(异策略)。

Tips:
第一个 tip 是 add 一个 baseline。 如果 given state s 采取 action a 会给你整场游戏正面的 reward,就要增加它的概率。如果 state s 执行 action a,整场游戏得到负的 reward,就要减少这一项的概率。
第二个 tip:给每一个 action 合适的 credit。

REINFORCE: Monte Carlo Policy Gradient
蒙特卡洛可以理解为算法完成一个 episode 之后,再拿这个 episode 的数据来去 learn 一下,做一次更新。因为我们已经拿到了一整个 episode 的数据的话,也能够拿到每一个 step 的 reward,我们可以很方便地去计算每个 step 的未来总收益,就是我们的期望,就是我们的回报。

时序差分强化学习是指在不清楚马尔可夫状态转移概率的情况下,以采样的方式得到不完整的状态序列,估计某状态在该状态序列完整后可能得到的收益,并通过不断地采样持续更新价值。
蒙特卡洛强化学习则需要经历完整的状态序列后,再来更新状态的真实价值。

如果要 learn 的 agent 跟和环境互动的 agent 是同一个的话, 这个叫做on-policy(同策略)。
如果要 learn 的 agent 跟和环境互动的 agent 不是同一个的话, 那这个叫做off-policy(异策略)。

PPO 算法有两个主要的变种:PPO-Penalty 和 PPO-Clip。

强化学习(Reinforcement Learning, RL)中的近端策略优化(Proximal Policy Optimization, PPO算法在多无人机(multi-UAV)协同任务分配问题中具有良好的应用潜力。PPO 算法是一种基于策略梯度的深度强化学习方法,能够在保证训练稳定性的同时实现高效的策略更新,适用于复杂的动态环境和高维动作空间的问题[^1]。 ### 多无人机协同任务分配问题建模 在多无人机系统中,任务分配的目标是将多个任务高效地分配给不同的无人机,以最小化任务完成时间、能耗或最大化整体任务收益等目标。此类问题通常建模为一个组合优化问题,其关键要素包括: - **状态空间(State Space)**:包括无人机的位置、剩余能量、当前任务状态、通信状态等。 - **动作空间(Action Space)**:每个无人机可执行的动作,如选择下一个任务、调整飞行路径、改变通信信道等。 - **奖励函数(Reward Function)**:设计合理的奖励机制来引导智能体学习最优策略,例如任务完成获得正奖励,碰撞或能量耗尽给予负奖励。 - **策略网络(Policy Network)**:使用神经网络表示无人机群体的联合策略,输入当前状态,输出动作概率分布。 ### 使用 PPO 实现多 UAV 协同任务分配的步骤 1. **环境建模与仿真平台搭建** - 利用仿真工具(如 Gazebo、AirSim、NS-3 或自定义 Python/C++ 环境)构建多无人机任务分配的模拟环境。 - 定义任务生成机制、通信模型、能耗模型以及障碍物或敌方干扰等动态因素。 2. **构建强化学习框架** - 使用 Stable Baselines3、RLlib 或自定义 PyTorch/TensorFlow 模型实现 PPO 算法。 - 设计多智能体环境接口(如 PettingZoo),支持并行交互与训练。 3. **策略训练与评估** - 在仿真环境中进行多轮训练,利用 PPO 的 clipped surrogate objective 来限制策略更新幅度,提升训练稳定性。 - 引入 curriculum learning 逐步增加任务复杂度,提升泛化能力。 - 设置评估周期,记录任务完成率、平均延迟、资源利用率等指标。 4. **策略迁移与部署** - 将训练好的策略迁移到真实无人机系统中,考虑传感器噪声、通信延迟等现实因素。 - 可结合事件驱动重调度策略,实现在线动态任务重分配[^2]。 ### 示例代码片段(使用 Stable Baselines3) 以下是一个简化的 PPO 训练示例,适用于单无人机任务分配环境,扩展至多无人机需引入多智能体框架: ```python import gym from stable_baselines3 import PPO from stable_baselines3.common.env_util import make_vec_env # 自定义任务分配环境 class TaskAssignmentEnv(gym.Env): metadata = {'render_modes': ['console']} def __init__(self, render_mode=None): super(TaskAssignmentEnv, self).__init__() self.action_space = gym.spaces.Discrete(5) # 假设有5个可选任务 self.observation_space = gym.spaces.Box(low=0, high=100, shape=(10,), dtype=np.float32) # 初始化状态信息 def reset(self, seed=None, options=None): # 重置环境状态 return observation, info def step(self, action): # 执行动作,返回 reward, done, info 等 return observation, reward, done, False, info def render(self): pass # 创建向量化环境 env = make_vec_env(lambda: TaskAssignmentEnv(), n_envs=4) # 构建 PPO 模型 model = PPO("MlpPolicy", env, verbose=1, learning_rate=3e-4, n_steps=2048, ent_coef=0.01) # 开始训练 model.learn(total_timesteps=100000) # 保存模型 model.save("ppo_task_assignment") # 加载模型并测试 model = PPO.load("ppo_task_assignment") obs, _ = env.reset() while True: action, _states = model.predict(obs) obs, rewards, dones, _, info = env.step(action) env.render() ``` ### 研究方向与挑战 - **异构性处理**:不同类型的无人机具备不同的机动能力、传感器配置和计算资源,如何在 PPO 中有效建模异构智能体仍是一个研究难点[^2]。 - **通信约束下的协同**:在部分可观测或通信受限的情况下,如何设计去中心化的观测与决策机制是关键挑战之一[^1]。 - **多目标优化**:在任务分配中往往需要同时优化多个目标(如能耗、时延、覆盖率),可通过多目标 PPO(Multi-Objective PPO)进行扩展。 - **与传统启发式算法融合**:结合粒子群优化(PSO)、遗传算法(GA)等经典方法,在 PPO 的基础上设计混合策略,提高全局搜索能力[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值