You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在含连续与离散混合动作空间的自定义Gym环境中选择强化学习算法

混合动作空间燃气网络RL环境的算法选择建议

我搭建了一个自定义Gymnasium环境,用于燃气网络参数优化,动作空间包含3个连续空间和1个离散空间,观测空间为节点压力结果与元件流速结果,目前不确定该选用何种强化学习算法。环境代码如下:

import numpy as np
import gymnasium as gym
import simtools as st


class GasNetworkEnv(gym.Env):
    def __init__(self, map_, qcorr_bounds, pset_bounds, cs_ctrl_bounds,
                 obs_size, func, func_args):
        super(GasNetworkEnv, self).__init__()
        self.action_space = gym.spaces.Dict({
            'qcorr': gym.spaces.Box(
                low=np.array([qcorr_bounds[0]]),
                high=np.array([qcorr_bounds[1]]),
                dtype=np.float64),
            'pset': gym.spaces.Box(
                low=np.array([pset_bounds[0]]),
                high=np.array([pset_bounds[1]]),
                dtype=np.float64),
            'cs_ctrl': gym.spaces.Box(
                low=np.repeat(cs_ctrl_bounds[0], len(map_)),
                high=np.repeat(cs_ctrl_bounds[1], len(map_)),
                dtype=np.float64),
            'cs_state': gym.spaces.MultiBinary(
                sum([len(map_[k].no) for k in map_]))})
        self.observation_space = gym.spaces.Box(
            low=-1e5, high=1e5, shape=(obs_size,), dtype=np.float64)
        self.func = func
        self.func_args = func_args

    def step(self, action):  
        # 调用目标函数(目标是最小化score,score越高结果越差)
        node_results, element_results, score = self.func(action, self.func_args)
        reward = -score
   
        # 观测值
        observation = np.concatenate((node_results, element_results))

        # 终止条件(当前无终止逻辑)
        done = False

        return observation, reward, done, {}

    def reset(self, **kwargs):
        super().reset(seed=kwargs.get('seed', None))

        initial_observation = np.random.uniform(
            low=self.observation_space.low,
            high=self.observation_space.high,
            size=self.observation_space.shape)

        return initial_observation

算法选择建议

  • 优先选支持混合动作空间的主流算法

    • PPO变种(适配Dict动作空间的版本):PPO是当前稳定性最优的离线策略算法之一,Stable Baselines3、RLlib等框架已原生支持Dict类型的混合动作空间,只需为连续/离散动作分别设计网络分支,非常适合燃气网络这类需要稳定迭代的场景。
    • 扩展版SAC:SAC本身对连续动作空间适配性好,针对混合空间可修改策略网络——离散动作用分类输出头,连续动作用高斯分布头,主流框架有现成实现,适合追求样本效率的场景。
    • TD3(DDPG改进版):如果更侧重连续动作的精细控制,TD3可扩展支持混合空间,但离散动作部分的稳定性略逊于PPO/SAC,需要额外调参优化。
  • 框架适配建议

    • Stable Baselines3:直接利用MultiInputPolicy即可适配你的Dict动作空间,代码改动少,能快速启动训练。
    • RLlib:对复杂多动作空间的支持更完善,内置多种混合动作算法实现,适合后续大规模训练或复杂调参需求。
  • 环境优化注意点

    • 当前环境无终止条件(done恒为False),属于无限 horizon任务,建议添加合理终止逻辑(如节点压力超出安全阈值、训练步数上限),否则部分算法可能收敛困难。
    • 观测空间范围设为[-1e5, 1e5],建议先对观测数据做归一化处理(如除以最大压力/流速值),能大幅提升算法收敛速度。
    • 奖励函数为-score(以最小化score为目标),需确保score的计算逻辑贴合实际优化需求(如降低能耗、维持压力稳定),可根据训练效果调整奖励缩放系数。

内容的提问来源于stack exchange,提问作者oakca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 13:36:12