首页/新闻资讯/正文详情

面向连续控制任务的 Dopamine continuous_domains 模块全解:Runner 机制、Agent 工厂与 Gin 配置实战

发布时间:2026/9/24 13:10:09 来源:云帆数科 栏目:资讯中心
面向连续控制任务的 Dopamine continuous_domains 模块全解:Runner 机制、Agent 工厂与 Gin 配置实战
机器学习深度学习【免费下载链接】dopamineDopamine is a research framework for fast prototyping of reinforcement learning algorithms.项目地址https://gitcode.com/gh_mirrors/do/dopamine点击查看免费下载Dopamine 的continuous_domains子包是专门为连续状态与连续动作空间如 MuJoCo 的 HalfCheetah、Walker2d 等强化学习实验设计的入口层。本文围绕 docs/api_docs/python/dopamine/continuous_domains.md 中定义的run_experiment模块展开从 Agent 工厂函数、两种 Runner 实现到配套 Gin 配置逐层拆解帮助你掌握如何在 Dopamine 中启动 SAC、PPO 等连续控制智能体的训练与评估流程。读完本文你将能够理解create_continuous_agent支持的 Agent 类型及选择逻辑区分ContinuousRunner与ContinuousTrainRunner两种调度模式通过 dopamine/continuous_domains/train.py 入口运行实验并基于 sac.gin 与 ppo.gin 复现标准超参数配置。模块概览continuous_domains 在 Dopamine 中的定位在 Dopamine 的目录结构中continuous_domains与discrete_domains平行存在。discrete_domains面向 Atari 等离散动作环境而 continuous_domains/init.py 对外只暴露一个子模块run_experiment其职责正如模块 docstring 所述Module defining classes and helper methods for general agents即为连续控制 Agent 定义实验运行所需的 Runner 类与工厂函数。从源码结构看该模块是一个典型的胶水层复用了离散域的通用组件gym_lib.create_gym_environment 负责创建 Gym 环境、iteration_statistics 负责迭代统计、run_experiment.Runner 作为基类汇集了多种连续控制 Agentdqn_agent.JaxDQNAgent、ppo_agent.PPOAgent、sac_agent.SACAgent以及实验性 Agent ppo_cale.PPOCALEAgent、sac_cale.SACCALEAgent 与 deepmind_control_lib统一了指标上报通过 collector_dispatcher.CollectorDispatcher 与 statistics_instance.StatisticsInstance 完成训练/评估统计的采集分发。该模块顶层仅有两个公开工厂函数和两个 Runner 类下文逐一剖析。create_continuous_agent连续控制 Agent 工厂函数签名与参数create_continuous_agent是经过gin.configurable装饰的工厂函数签名如下实现见 dopamine/continuous_domains/run_experiment.pygin.configurable def create_continuous_agent( environment: gym_lib.GymPreprocessing, agent_name: str, summary_writer: Optional[tensorboard.SummaryWriter] None, ) - dqn_agent.JaxDQNAgent:参数类型说明environmentgym_lib.GymPreprocessing一个 Gym 环境连续控制环境用于读取观测空间与动作空间的形状、边界、dtypeagent_namestr要创建的 Agent 名称决定走哪个分支summary_writerOptional[SummaryWriter]可选的 TensorFlow SummaryWriter用于把 Agent 内部的训练统计写入 TensorBoard返回值为一个强化学习 Agent当agent_name不在支持列表内时抛出ValueError源码中为raise ValueError(fUnknown agent: {agent_name})。支持的分支与空间类型校验函数体对agent_name做字符串匹配并针对不同 Agent 做空间类型断言sac要求action_space与observation_space均为spaces.box.Box随后以动作空间形状、动作上下界(action_space.low, action_space.high)、观测形状以及对应 dtype 构造 sac_agent.SACAgentppo同样要求spaces.Box类型的动作与观测空间构造 ppo_agent.PPOAgent注意 PPO 分支不传动作边界PPO 通常输出高斯策略动作由网络直接采样agent_name.startswith(sac_cale)构造 sac_cale.SACCALEAgent即结合 CALContrastive Accelerated Learning的 SAC 变体同样需要动作上下界与 dtypeagent_name.startswith(ppo_cale)构造 ppo_cale.PPOCALEAgentCAL 版 PPO也需要动作上下界其余名称抛出ValueError。值得注意的细节分支判断使用了startswith(sac_cale)/startswith(ppo_cale)的写法意味着 CAL 系列 Agent 的名称只需以该前缀开头即可命中为未来扩展子变体保留了空间。而sac分支的assert isinstance(environment.action_space, spaces.box.Box)意味着若在离散动作环境上误用agent_namesac会在构造阶段立即失败起到前置校验作用。测试用例印证仓库中的单元测试 tests/dopamine/continuous_domains/run_experiment_test.py 直接验证了工厂行为testCreateContinuousAgentReturnsAgent用spaces.Box环境构造create_continuous_agent(self.env, sac)断言返回实例是sac_agent.SACAgenttestCreateContinuousAgentWithInvalidNameRaisesException传入invalid_name断言抛出ValueErrorsetUp 中需要预先gin.bind_parameter(ReplayBuffer.max_capacity, 10)与gin.bind_parameter(ReplayBuffer.batch_size, 2)说明 SAC Agent 在构造时依赖 ReplayBuffer 的 gin 参数也印证了配置先行的使用方式。create_continuous_runnerRunner 工厂与调度模式create_continuous_runner同样是 gin 可配置的工厂函数实现见 dopamine/continuous_domains/run_experiment.pygin.configurable def create_continuous_runner(base_dir, schedulecontinuous_train_and_eval):参数类型说明base_dirstr承载所有子目录checkpoint、日志、TensorBoard 等的基础目录schedulestr选择哪种 Runner 类型默认continuous_train_and_eval调度映射如下schedule取值返回的 Runner行为continuous_train_and_evalContinuousRunner持续执行训练 评估循环直到达到max_num_iterationscontinuous_trainContinuousTrainRunner仅持续训练不执行评估阶段直到达到max_num_iterations其他值抛出ValueError(Unknown schedule: {})—测试 tests/dopamine/continuous_domains/run_experiment_test.py 的testCreateContinuousRunnerCreatesCorrectRunner参数化用例验证了两种 schedule 分别返回ContinuousRunner与ContinuousTrainRunnertestCreateContinuousRunnerFailsWithInvalidName则验证非法 schedule 抛ValueError。ContinuousRunner连续域实验主控ContinuousRunner继承自离散域的 run_experiment.Runner但专门面向 JAX/Flax Agent源码注释明确写道 This is mostly the same as discrete_domains.Runner, but is written solely for JAX/Flax agents。构造参数全部 gin 可配置gin.configurable class ContinuousRunner(base_run_experiment.Runner): def __init__( self, base_dir, create_agent_fn, create_environment_fngym_lib.create_gym_environment, checkpoint_file_prefixckpt, logging_file_prefixlog, log_every_n1, num_iterations200, training_steps250000, evaluation_steps125000, max_steps_per_episode1000, clip_rewardsFalse, use_legacy_loggerTrue, ):参数默认值说明base_dir必填承载全部子目录的基础目录create_agent_fn必填接收环境、返回 Agent 的函数通常传create_continuous_agentcreate_environment_fngym_lib.create_gym_environment创建 Gym 环境的工厂函数checkpoint_file_prefixckptcheckpoint 文件前缀logging_file_prefixlog日志文件前缀log_every_n1写日志的频率num_iterations200迭代次数阈值必须大于起始迭代数training_steps250000每轮迭代的训练步数evaluation_steps125000每轮迭代的评估步数max_steps_per_episode1000单幕最大步数超过即终止clip_rewardsFalse是否将奖励裁剪到 [-1, 1]连续域默认不裁剪use_legacy_loggerTrue是否使用旧版 Logger未来将替换为新的 CollectorDispatcher 体系构造函数依次完成创建目录 → 创建 TensorBoard SummaryWriter → 通过create_environment_fn()创建环境 → 通过create_agent_fn(environment, summary_writer...)创建 Agent → 调用_initialize_checkpointer_and_maybe_resume初始化 Checkpointer 并尝试从最新 checkpoint 恢复 → 创建CollectorDispatcher并通过set_collector_dispatcher挂接到 Agent若 Agent 支持。训练/评估统计的 TensorBoard 上报_save_tensorboard_summaries方法展示了标准的指标命名空间见 dopamine/continuous_domains/run_experiment.pyTrain/NumEpisodes训练幕数Train/AverageReturns训练平均回报Train/AverageStepsPerSecond每秒平均步数吞吐量Eval/NumEpisodes评估幕数Eval/AverageReturns评估平均回报这些标量以迭代号作为 global_step 写入SummaryWriter并立即 flush便于在 TensorBoard 中实时观察训练曲线。ContinuousTrainRunner纯训练模式ContinuousTrainRunner继承自ContinuousRunner专用于只训练不评估的场景如 PPO 这类在训练过程中本身就会周期性采样评估的环境。其核心差异有两点实现见 dopamine/continuous_domains/run_experiment.py构造时显式设置self._agent.eval_mode False保证 Agent 始终处于训练模式重写_run_one_iteration仅执行训练阶段统计Train/NumEpisodes、Train/AverageReturns、Train/AverageStepsPerSecond三项指标并通过CollectorDispatcher.write(...)上报同时写入 TensorBoard。从源码看其_save_tensorboard_summaries只写训练侧三个指标不再有Eval/*与纯训练语义一致。实战入口train.py 与命令行用法连续域训练入口位于 dopamine/continuous_domains/train.py基于 absl flags 设计支持三个 flagFlag类型说明--base_dirstr必填承载所有子目录的基础目录--gin_filesmulti_string一个或多个 gin 配置文件路径如dopamine/jax/agents/sac/configs/sac.gin--gin_bindingsmulti_string覆盖配置文件中参数值的 gin 绑定形如Agent.paramvalue主流程见 train.py为run_experiment.load_gin_configs(gin_files, gin_bindings) runner run_experiment.create_continuous_runner(base_dir) runner.run_experiment()即先加载 gin 配置 → 创建 Runner → 运行完整实验。其中load_gin_configs直接复用base_run_experiment.load_gin_configs见 run_experiment.py。运行命令示例python -m dopamine.continuous_domains.train \ --base_dir/tmp/dopamine/sac_halfcheetah \ --gin_filesdopamine/jax/agents/sac/configs/sac.gin # 或通过 gin_bindings 覆盖关键参数如更换环境、调整迭代数 python -m dopamine.continuous_domains.train \ --base_dir/tmp/dopamine/sac_walker2d \ --gin_filesdopamine/jax/agents/sac/configs/sac.gin \ --gin_bindingscreate_gym_environment.environment_nameWalker2d注意base_dir为必填 flagflags.mark_flag_as_required(base_dir)且连续控制训练通常需要 GPU 支撑 JAX 计算。Gin 配置实战SAC 与 PPO 超参数解析SAC软演员-评论家sac.ginsac.gin 的超参数遵循 Haarnoja 等人在 Soft Actor-Critic Algorithms and ApplicationsarXiv:1812.05905中附录 D 表 1 的设置。核心绑定如下Agent 层面SACAgent.reward_scale_factor 0.1奖励缩放因子处理大尺度奖励环境的关键项SACAgent.network continuous_networks.ActorCriticNetwork网络结构使用 continuous_networks.ActorCriticNetworkSACAgent.num_layers 2、SACAgent.hidden_units 256两层 256 宽 MLPSACAgent.gamma 0.99折扣因子SACAgent.update_horizon 1更新视野SACAgent.min_replay_history 10_000开始学习前最少积累的 Agent 步数SACAgent.update_period 1每个环境步都做网络更新SACAgent.target_update_type soft、SACAgent.target_smoothing_coefficient 0.005软目标网络更新Polyak 平均SACAgent.target_entropy None默认取-num_action_dims/2SACAgent.optimizer adam优化器类型SACAgent.seed None按当前时间播种SACAgent.observation_dtype %sac_agent.STATE_DTYPE优化器create_optimizerlearning_rate 3.0e-4、beta1 0.9、beta2 0.999、eps 1.0e-8Adam 默认参数环境与 Runnercreate_gym_environment.environment_name HalfCheetah、version v2MuJoCo HalfCheetah-v2create_continuous_runner.schedule continuous_train_and_eval训练 评估模式create_continuous_agent.agent_name sac选择 SAC AgentContinuousRunner.num_iterations 3_200、training_steps 1_000、evaluation_steps 10_000、max_steps_per_episode 1_000、clip_rewards False回放缓冲区ReplayBuffer.max_capacity 1_000_000百万级容量ReplayBuffer.batch_size 256采样批量PPO近端策略优化ppo.ginppo.gin 遵循 Schulman 等人的 Proximal Policy Optimization AlgorithmsarXiv:1707.06347附录 A 表 3 设置PPOAgent.network continuous_networks.PPOActorCriticNetwork使用 continuous_networks.PPOActorCriticNetworkPPOAgent.num_layers 2、PPOAgent.hidden_units 64、PPOAgent.activation tanhPPOAgent.update_period 2048收集 2048 步后做一次策略更新PPOAgent.optimizer adam、max_gradient_norm 0.5create_optimizer.learning_rate 3e-4、eps 1e-5、anneal_learning_rate True、anneal_steps 160_000学习率线性退火PPOAgent.num_epochs 10、batch_size 64、gamma 0.99、lambda_ 0.95GAE、epsilon 0.2裁剪阈值、vf_coefficient 0.5、entropy_coefficient 0.0、clip_critic_loss True环境侧create_gym_environment.use_legacy_gym True、use_ppo_preprocessing TruePPO 需要的专用预处理调度侧create_continuous_runner.schedule continuous_train纯训练模式、create_continuous_agent.agent_name ppoContinuousRunner.num_iterations 500、training_steps 2048、max_steps_per_episode None不限制单幕步数ReplayBuffer.max_capacity 2048、batch_size 2048PPO 用回放缓冲区暂存一条轨迹对比可见SAC 走continuous_train_and_eval训练与评估交替PPO 走continuous_train纯训练这正是create_continuous_runner两种 schedule 设计的实际用途体现。扩展与引用CAL 系列与像素输入 Agentcreate_continuous_agent还支持两个实验性前缀sac_cale*/ppo_cale*对应 dopamine/labs/cale/sac_cale.py 与 dopamine/labs/cale/ppo_cale.py 中的 CAL 变体。CALContrastive Accelerated Learning通过对比学习目标加速样本效率其 gin 配置见 sac_cale.gin 与 ppo_cale.gindeepmind_control_lib该模块在 run_experiment.py 中被以仅为副作用导入unused-import pylint disable的方式引入为 DeepMind Control Suite 环境提供支持其实现位于 dopamine/labs/sac_from_pixels/deepmind_control_lib.py像素输入 SAC 配置见 sac_pixels.gin。这些扩展说明continuous_domains并非封闭模块而是开放给 labs 实验代码的注册点只要你的 Agent 构造器接收 Box 空间环境并返回标准 Agent 接口就能通过create_continuous_agent的命名约定接入同一套 Runner 流程。小结从文档到源码的调用链回顾整条调用链train.py加载 gin →create_continuous_runner(base_dir, schedule)依据 schedule 创建ContinuousRunner或ContinuousTrainRunner→ Runner 构造时调用create_continuous_agent(environment, agent_name, summary_writer)→ 依据 agent_name 实例化 SAC/PPO/CAL 系列 Agent → Runner 每轮迭代运行训练/评估阶段经CollectorDispatcher与SummaryWriter输出指标。整条链路都可以通过 gin 配置文件如 sac.gin、ppo.gin或命令行--gin_bindings覆盖实现开箱即用且高度可定制的连续控制实验。赞分享机器学习深度学习【免费下载链接】dopamineDopamine is a research framework for fast prototyping of reinforcement learning algorithms.项目地址https://gitcode.com/gh_mirrors/do/dopamine点击查看免费下载相关推荐Dopamine create_continuous_agent 深度解析连续控制域 RL Agent 的统一工厂与 Gin 配置实战Dopamine create_continuous_agent 深度解析连续控制域 RL Agent 的统一工厂与 Gin 配置实战 导读 在 Dopami机器学习深度学习LunaTranslator视觉小说翻译3步把满屏假名变成中文台词LunaTranslator视觉小说翻译3步把满屏假名变成中文台词 一款日文视觉小说刚点开满屏假名看得人头皮发麻连继续按钮都不想点。这时候就需要一个能机器学习深度学习Dopamine JAX ClassicControlDQNNetwork经典控制环境 DQN 全连接 Q 网络源码解析与 gin 实战配置Dopamine JAX ClassicControlDQNNetwork经典控制环境 DQN 全连接 Q 网络源码解析与 gin 实战配置 本篇文章围绕 D机器学习深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

全屋智能不烧钱:家居+商用一套系统打通落地复盘
全屋智能不烧钱:家居+商用一套系统打通落地复盘

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:10:09

Maven多模块拆分实战:Spring Boot项目编译从30分钟降至8分钟
Maven多模块拆分实战:Spring Boot项目编译从30分钟降至8分钟

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:10:09

Speedgoat实时仿真:Simulink模型到HIL测试的确定性落地
Speedgoat实时仿真:Simulink模型到HIL测试的确定性落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:10:03

同城小程序源码实战:多城市部署与二次开发全指南
同城小程序源码实战:多城市部署与二次开发全指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:37:44

Cytoscape.js breadthfirst 布局完全指南:基于 BFS 的层次化树图布局算法与参数详解
Cytoscape.js breadthfirst 布局完全指南:基于 BFS 的层次化树图布局算法与参数详解

数据可视化 【免费下载链接】cytoscape.js Graph theory (network) library for visualisation and analysis 项目地址: https://gitcode.com/gh_mirrors/cy/cytoscape.js 点击查看 免费下载 导读:breadthfirst 是 Cytoscape.js 内置的八种布局之一&… · 2026/9/24 13:37:44

开源掌机DIY工作坊:从硬件选型到系统烧录的完整指南
开源掌机DIY工作坊:从硬件选型到系统烧录的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:37:44

ManageEngine卓豪-多域环境推荐用什么 AD 域管理工具?
ManageEngine卓豪-多域环境推荐用什么 AD 域管理工具?

熟悉AD域管理的运维人员都清楚,单域场景下,系统自带的ADUC图形工具足以满足日常操作,复杂场景依靠PowerShell脚本就能兜底。但企业业务持续扩张、分子公司独立部署、企业并购整合,都会催生多域、多林的复杂AD架构。 不同于单域管… · 2026/9/24 13:37:38

【Dv2Admin】CRUD时间范围区间周选择组件
【Dv2Admin】CRUD时间范围区间周选择组件

在编程开发中,日期选择器是非常常见的组件,特别是在需要对时间进行严格管理的场景中,正确地配置起始时间和结束时间显得尤为重要。默认情况下,el-date-picker 的日期选择器以周日为一周的开始,这与某些用户的时间管理习惯可能不符,尤其在涉及国际项目时。 为了满足多样化… · 2026/9/24 13:37:38

palera1n 完整指南:如何用 checkm8 越狱工具让 A8–A11 老设备快速越狱
palera1n 完整指南:如何用 checkm8 越狱工具让 A8–A11 老设备快速越狱

palera1n 完整指南:如何用 checkm8 越狱工具让 A8–A11 老设备快速越狱 【免费下载链接】palera1n Jailbreak for A8 through A11, T2 devices, on iOS/iPadOS/tvOS 15.0, bridgeOS 5.0 and higher. 项目地址: https://gitcode.com/GitHub_Trending/pa/palera1n … · 2026/9/24 13:37:32

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码