当前位置: 首页 > article >正文

强化学习算法:深度确定性策略梯度(DDPG)

强化学习算法深度确定性策略梯度(DDPG)1. 技术分析1.1 DDPG概述DDPG是针对连续动作的深度强化学习算法DDPG特点 确定性策略: 输出确定动作而非概率 Actor-Critic架构: 结合策略和价值 离线策略: 使用经验回放 核心创新: 确定性策略梯度 目标网络 探索噪声1.2 DDPG组成组件作用更新方式Actor输出确定性动作策略梯度Critic评估Q值TD学习目标网络稳定训练软更新1.3 DDPG优势特性DDPGPPO(连续)动作空间连续连续探索方式噪声注入随机策略样本效率高中2. 核心功能实现2.1 DDPG算法import numpy as np import random from collections import deque class DDPG: def __init__(self, actor, critic, target_actor, target_critic, actor_optimizer, critic_optimizer, replay_buffer_size100000, batch_size64, gamma0.99, tau0.001, noise_scale0.1): self.actor actor self.critic critic self.target_actor target_actor self.target_critic target_critic self.actor_optimizer actor_optimizer self.critic_optimizer critic_optimizer self.replay_buffer deque(maxlenreplay_buffer_size) self.batch_size batch_size self.gamma gamma self.tau tau self.noise_scale noise_scale def select_action(self, state, add_noiseTrue): action self.actor(state) if add_noise: action np.random.normal(0, self.noise_scale, sizeaction.shape) return np.clip(action, -1, 1) def add_to_replay(self, state, action, reward, next_state, done): self.replay_buffer.append((state, action, reward, next_state, done)) def update_target_networks(self): self._soft_update(self.target_actor, self.actor) self._soft_update(self.target_critic, self.critic) def _soft_update(self, target, source): for target_param, source_param in zip(target.parameters(), source.parameters()): target_param self.tau * source_param (1 - self.tau) * target_param def train(self, env, episodes1000): for episode in range(episodes): state env.reset() done False total_reward 0 while not done: action self.select_action(state) next_state, reward, done env.step(action) self.add_to_replay(state, action, reward, next_state, done) self._train_step() state next_state total_reward reward self.update_target_networks() def _train_step(self): if len(self.replay_buffer) self.batch_size: return batch random.sample(self.replay_buffer, self.batch_size) states np.array([exp[0] for exp in batch]) actions np.array([exp[1] for exp in batch]) rewards np.array([exp[2] for exp in batch]) next_states np.array([exp[3] for exp in batch]) dones np.array([exp[4] for exp in batch]) target_actions self.target_actor(next_states) target_q_values self.target_critic(next_states, target_actions) targets rewards self.gamma * target_q_values * (1 - dones) critic_loss np.mean((self.critic(states, actions) - targets) ** 2) self.critic_optimizer.step(critic_loss) actor_loss -np.mean(self.critic(states, self.actor(states))) self.actor_optimizer.step(actor_loss)2.2 DDPG网络class DDPGActorNetwork: def __init__(self, state_dim, action_dim, hidden_dim64): self.W1 np.random.randn(state_dim, hidden_dim) * 0.01 self.b1 np.zeros(hidden_dim) self.W2 np.random.randn(hidden_dim, hidden_dim) * 0.01 self.b2 np.zeros(hidden_dim) self.W3 np.random.randn(hidden_dim, action_dim) * 0.01 self.b3 np.zeros(action_dim) def forward(self, state): h1 np.maximum(0, state self.W1 self.b1) h2 np.maximum(0, h1 self.W2 self.b2) action np.tanh(h2 self.W3 self.b3) return action def parameters(self): return [self.W1, self.b1, self.W2, self.b2, self.W3, self.b3] class DDPGCriticNetwork: def __init__(self, state_dim, action_dim, hidden_dim64): self.W1 np.random.randn(state_dim action_dim, hidden_dim) * 0.01 self.b1 np.zeros(hidden_dim) self.W2 np.random.randn(hidden_dim, hidden_dim) * 0.01 self.b2 np.zeros(hidden_dim) self.W3 np.random.randn(hidden_dim, 1) * 0.01 self.b3 np.zeros(1) def forward(self, state, action): x np.concatenate([state, action]) h1 np.maximum(0, x self.W1 self.b1) h2 np.maximum(0, h1 self.W2 self.b2) q_value h2 self.W3 self.b3 return q_value[0] def parameters(self): return [self.W1, self.b1, self.W2, self.b2, self.W3, self.b3]2.3 探索噪声class OUNoise: def __init__(self, action_dim, mu0, theta0.15, sigma0.2): self.action_dim action_dim self.mu mu self.theta theta self.sigma sigma self.state np.ones(action_dim) * mu def reset(self): self.state np.ones(self.action_dim) * self.mu def noise(self): x self.state dx self.theta * (self.mu - x) self.sigma * np.random.randn(self.action_dim) self.state x dx return self.state class GaussianNoise: def __init__(self, action_dim, mean0, std0.1): self.action_dim action_dim self.mean mean self.std std def noise(self): return np.random.normal(self.mean, self.std, sizeself.action_dim) class AdaptiveNoise: def __init__(self, action_dim, initial_std0.1, decay_rate0.995, min_std0.01): self.action_dim action_dim self.std initial_std self.decay_rate decay_rate self.min_std min_std def noise(self): noise np.random.normal(0, self.std, sizeself.action_dim) self.std max(self.min_std, self.std * self.decay_rate) return noise3. 性能对比3.1 DDPG变体对比变体性能稳定性复杂度DDPG基准中低TD310%高中SAC15%很高高3.2 DDPG vs PPO(连续)指标DDPGPPO样本效率高中稳定性中高超参数敏感性高低3.3 噪声类型影响噪声类型探索效果稳定性OU噪声中高高斯噪声高中自适应噪声很高高4. 最佳实践4.1 DDPG配置def configure_ddpg(env_type): configs { simple: { noise_type: gaussian, noise_std: 0.1, tau: 0.001, gamma: 0.99 }, complex: { noise_type: adaptive, noise_std: 0.2, tau: 0.001, gamma: 0.99 } } return configs.get(env_type, configs[simple]) class DDPGConfigGenerator: staticmethod def from_environment(env_type): return configure_ddpg(env_type)4.2 TD3改进class TD3Improvements: staticmethod def twin_critics(): return {use_twin_critics: True} staticmethod def delayed_policy_update(delay2): return {policy_delay: delay} staticmethod def target_policy_smoothing(sigma0.2, clip0.5): return {target_smoothing: True, sigma: sigma, clip: clip}5. 总结DDPG是连续控制的经典算法确定性策略输出确定动作目标网络稳定训练探索噪声OU或高斯噪声TD3改进版DDPG对比数据如下TD3比DDPG更稳定SAC比DDPG性能更好自适应噪声优于固定噪声推荐使用TD3作为DDPG的改进版

相关文章:

强化学习算法:深度确定性策略梯度(DDPG)

强化学习算法:深度确定性策略梯度(DDPG) 1. 技术分析 1.1 DDPG概述 DDPG是针对连续动作的深度强化学习算法: DDPG特点确定性策略: 输出确定动作而非概率Actor-Critic架构: 结合策略和价值离线策略: 使用经验回放核心创新:确定性策略梯度目标网络探索噪声…...

DETR模型ONNX推理实战:从输出张量到可视化检测框的完整解析

DETR模型ONNX推理实战:从输出张量到可视化检测框的完整解析 在目标检测领域,DETR(Detection Transformer)以其独特的端到端架构和简洁的流程设计,正在改变传统基于锚框(anchor-based)方法的格局…...

ZYNQ AXI DMA Scatter/Gather模式实战:从PL到PS的高效数据流构建与FreeRTOS任务调度

1. 理解AXI DMA Scatter/Gather模式的核心价值 在ZYNQ平台上构建高效数据流系统时,AXI DMA的Scatter/Gather模式(简称SG模式)绝对是硬件加速的利器。我第一次接触这个功能时,发现它完美解决了传统DMA传输中的两大痛点:…...

期权量化交易基础库:模块化设计与回测实战指南

1. 项目概述:一个为期权交易者打造的“地基” 如果你在量化交易或者期权策略开发领域摸爬滚打过一段时间,大概率会和我有同样的感受:每次想测试一个新想法,都得从零开始搭建数据接口、计算希腊字母、管理仓位、回测框架……这些重…...

Translumo完整指南:5分钟掌握Windows实时屏幕翻译神器,彻底告别语言障碍

Translumo完整指南:5分钟掌握Windows实时屏幕翻译神器,彻底告别语言障碍 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirro…...

Visara:可视化代码仓库分析工具的设计原理与工程实践

1. 项目概述:一个面向开发者的视觉化代码仓库分析工具最近在和一些团队做代码评审和架构梳理时,我常常遇到一个痛点:面对一个陌生的、动辄几十上百个文件的代码仓库,如何快速理解它的整体结构、模块依赖和关键文件?传统…...

RK3566(泰山派)实战:D310T9362V1SPEC触摸屏驱动从零适配与调试(竖屏)

1. RK3566与D310T9362V1SPEC屏幕简介 RK3566是瑞芯微推出的一款高性能嵌入式处理器,采用四核Cortex-A55架构,主频可达1.8GHz。这款芯片在工业控制、智能家居和物联网设备中广泛应用,特别适合需要图形显示和触摸交互的场景。我最近在一个智能终…...

终极指南:如何用NoFences桌面分区工具提升3倍工作效率

终极指南:如何用NoFences桌面分区工具提升3倍工作效率 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否厌倦了Windows桌面上杂乱无章的图标?每天…...

Godot引擎命令行插件GDShell:提升开发效率与自动化实践

1. 项目概述:当游戏引擎遇见命令行如果你是一位游戏开发者,尤其是使用Godot引擎的同行,那么你一定对编辑器里那个功能强大但有时略显“笨重”的场景树、资源面板和属性检查器又爱又恨。爱的是它们提供了可视化的创作环境,恨的是当…...

MIMO AONN架构:量子干涉实现超低功耗光学神经网络

1. MIMO AONN架构的核心价值光学神经网络(AONN)正在突破传统电子计算的物理极限。在传统电子神经网络中,非线性激活函数需要消耗大量能量进行电子-光子转换,而基于量子干涉的光学非线性机制可以直接在光域实现这一关键操作。我们实…...

CSS3 媒体查询完全指南:响应式设计的核心利器

在移动设备种类繁多的今天,一套网页需要在手机、平板、笔记本、大屏显示器上都能呈现出良好的布局与可读性。CSS3 媒体查询(Media Queries) 正是实现这种“一次设计,处处适应”的关键技术。它允许开发者根据设备特性(如视口宽度、屏幕分辨率、方向、色彩能力等)有条件地应…...

尝试Taotoken不同模型节点对生成速度的细微影响感受

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 尝试Taotoken不同模型节点对生成速度的细微影响感受 1. 测试背景与动机 在日常使用大模型进行开发或内容创作时,除了模…...

保姆级教程:用ADAMS 2023复现人体行走与跌倒仿真(附完整模型参数与源文件)

ADAMS 2023生物力学仿真实战:从人体步态建模到跌倒临界点分析 在工程仿真领域,人体运动动力学一直是极具挑战性的研究方向。ADAMS作为多体动力学仿真软件的标杆,其2023版本在生物力学仿真方面新增了多项实用功能。本文将带您从零开始&#xf…...

浏览器智能体开发指南:从语义驱动到LLM集成的自动化实践

1. 项目概述:一个能“看”会“想”的浏览器智能体最近在折腾自动化工具和智能体(Agent)的时候,发现了一个挺有意思的项目:smouj/agent-browser。光看这个名字,你可能会觉得它只是一个普通的浏览器自动化库&…...

JUCE框架移植MDA经典音频插件:从VST2到现代跨平台开发实践

1. 项目概述:JUCE框架下的MDA插件遗产如果你在音频插件开发领域摸爬滚打过一段时间,尤其是对开源社区有所关注,那么“mda-plugins-juce”这个名字大概率会唤起你的一些记忆。这个由hollance维护的GitHub仓库,本质上是一个“移植”…...

HS2-HF_Patch:3步完成Honey Select 2汉化去码与插件整合

HS2-HF_Patch:3步完成Honey Select 2汉化去码与插件整合 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为《Honey Select 2》的游戏体验而烦恼…...

在 Claude Code 中配置 Taotoken 以解决封号与 Token 不足问题

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在 Claude Code 中配置 Taotoken 以解决封号与 Token 不足问题 对于依赖 Claude Code 进行编程辅助的开发者而言,服务中…...

一个经典嵌入式问题:如何安全读取 64 位计时器

在一个嵌入式系统中,需要读取一个持续自增的 64-bit 硬件计时器。由于系统只能通过 32-bit MMIO register 访问该计时器,所以硬件把它拆成两个 32-bit 寄存器:#define TIMER_LOW_ADDR 0x40001000 #define TIMER_HIGH_ADDR 0x40001010其中&…...

基于大语言模型的学术论文阅读辅助分析系统的研究与应用

基于大语言模型的学术论文阅读辅助分析系统的研究与应用 摘要 随着科研论文数量的指数级增长,科研工作者面临着前所未有的信息过载挑战。传统学术论文阅读方式依赖线性文本呈现,难以快速定位关键信息,跨文献知识整合效率低下。大语言模型的发展为解决这一问题提供了新的技…...

宏和电子冲刺港股:年营收11.7亿,利润2亿 股价一年上涨超10倍 市值1213亿

雷递网 雷建平 5月17日宏和电子材料科技股份有限公司(简称:“宏和电子”)日前递交招股书,准备在港交所上市。宏和电子2019年7月已在上交所上市。宏和科技在2025年5月时股价才9元,但一年时间股价上涨超过10倍&#xff0…...

理发师会被 AI 取代吗?这可能是 AI 时代最有意思的一个社会学问题

今天去理发了。对着镜子,看着我的头发随着剪刀的飞舞一点点掉下来时,我忽然开始神游:AI 会不会取代理发师? 这问题乍一听有点像胡思乱想,可越想越觉得,它其实非常适合拿来当成 AI 时代的一块切片。 因为理发…...

企业内如何利用Taotoken实现APIKey的集中管理与审计追溯

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业内如何利用Taotoken实现APIKey的集中管理与审计追溯 对于需要将大模型能力集成到业务流程中的企业而言,管理多个开…...

51单片机驱动SG90舵机:从PWM原理到按键控制实战

1. SG90舵机与51单片机的基础认知 第一次接触SG90舵机时,我盯着那三根彩色导线发愣——这玩意儿怎么就能精准控制角度呢?后来发现它其实是微型伺服系统的典型代表,红色接5V电源,褐色接地线,黄色信号线接任意IO口&#…...

Arm DynamIQ架构缓存一致性协议解析与优化

1. Arm DynamIQ架构中的缓存一致性技术解析在异构计算架构中,缓存一致性协议是确保多核处理器高效协同工作的关键技术。作为Arm体系结构的重要组成部分,DynamIQ共享单元(DSU)通过AMBA ACE和CHI协议实现了灵活的系统级缓存一致性管理。这两种协议虽然设计…...

STM32驱动段码屏实战:手把手教你用HT1621B做个简易电子钟(附完整代码)

STM32与HT1621B打造高精度电子钟:从硬件连接到动态显示全解析 在嵌入式开发领域,能够将理论知识转化为实际项目的能力至关重要。本文将带您完成一个完整的电子钟项目,使用STM32微控制器和HT1621B驱动器来驱动段码液晶屏。不同于简单的驱动演示…...

在模型广场中根据任务需求与预算选择合适的模型

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在模型广场中根据任务需求与预算选择合适的模型 面对文本生成、代码编写、逻辑推理等多样化的任务,开发者常常需要从众…...

JetBrains IDE终极代码高亮指南:MultiHighlight让复杂代码一目了然

JetBrains IDE终极代码高亮指南:MultiHighlight让复杂代码一目了然 【免费下载链接】MultiHighlight Jetbrains IDE plugin: highlight identifiers with custom colors 🎨💡 项目地址: https://gitcode.com/gh_mirrors/mu/MultiHighlight …...

离线语音模块在塔扇智能化中的集成与应用实践

1. 项目概述:当塔扇“听懂”你的话 家里的塔式风扇,你是不是也经常遇到这样的场景:晚上躺在床上,风扇对着吹有点冷,想调小一档或者关掉,结果发现遥控器不知道被塞到哪个沙发缝里了,只能挣扎着爬…...

3分钟搞定网易云音乐NCM解密:ncmdump工具让你的音乐随处播放

3分钟搞定网易云音乐NCM解密:ncmdump工具让你的音乐随处播放 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾为网易云音乐下载的歌曲只能在特定客户端播放而烦恼?当你想要在车载音响、智能音箱或其他…...

应用连接协议桥接器:打通异构系统,实现数据自动化流转

1. 项目概述:一个连接不同应用生态的“桥梁”最近在折腾一些自动化流程,发现不同平台、不同应用之间的数据互通是个老大难问题。比如,你在A平台创建了一个任务,希望它能自动同步到B平台的日历,或者把C应用里的数据变化…...