Sinergym:连接 EnergyPlus 与强化学习的建筑控制试验场|第36期实用工具

Sinergym:连接 EnergyPlus 与强化学习的建筑控制试验场

西班牙格拉纳达大学 UGR-SAIL 团队开源的 Sinergym 把 EnergyPlus 的 Python API 封装成标准的 Gymnasium(原 OpenAI Gym)环境,让 Stable Baselines3 等主流强化学习库可以直接在建筑能耗模型上按时间步交互训练。该项目采用 MIT 开源许可证,创建于 2021 年 1 月,截至 2026 年 10 月下旬采集时有 238 Stars,仓库在 2026 年 7 月合入了 v3.12.2 的多阶段 Docker 构建更新(PR #534),至 9 月中旬保持持续维护。

架构与预置环境

Sinergym 把一次全年或数月的建筑动态模拟转化为马尔可夫决策过程(MDP)。在每一个模拟时间步(逐时或亚小时级)里,环境从 EnergyPlus 读取室内温湿度、室外气象和当前功率作为观测(Observation),强化学习智能体给出供暖或制冷设定温度、送风流量作为动作(Action)写回模型,再由自定义奖励函数计算当前步的回报(Reward)。

整套框架自上而下分为三层。顶层通过 Gymnasium API 对接强化学习算法或规则控制器(RBC),中间层调用 EnergyPlus Python API 处理运行时回调与数据交换,底层由 EnergyPlus 引擎加载 epJSON 建筑模型与 EPW 气象文件执行物理计算。研究者不需要自己编写底层 Socket 通信或 BCVTB 协同仿真配置,可以直接在 Python 中定义观测空间、动作空间和奖励函数。

仓库内置了多类典型建筑与气候区组合,涵盖五分区商业建筑(5ZoneAutoDXVAV)、数据中心、小型数据中心、仓库、中型办公楼、带光伏与电池储能的零售商店,以及一栋包含 19 个热区、总面积 46,320 m² 并配有电网储能的大体量办公楼。每类建筑都配好了默认的传感器变量与执行器列表,也支持按文档指引接入自定义的 epJSON 模型。

Sinergym 官方仓库的智能体、Gymnasium 接口与 EnergyPlus 模拟器交互架构

奖励函数设计

建筑控制需要同时兼顾能耗与热舒适。Sinergym 默认的线性奖励函数将这两项写成带权重的负向惩罚(累计回报越接近 0 代表控制效果越好):

r=−ωλPP−(1−ω)λTΔT

其中 P 是当前 HVAC 功耗,ΔT 是各热区室温偏离冬夏舒适区间上下限的绝对温差,ω 是能耗权重,λP 与 λT 是平衡千瓦级功率与摄氏度温差量纲的缩放常数。官方文档提醒,换用体量不同的建筑模型时需要重新标定 λP 和 λT,以免能耗惩罚数值过大而掩盖舒适度惩罚。

针对不同的实验需求,仓库还提供了几种现成的奖励函数。ExpReward 对超出舒适区间的温差取指数放大,加大对极端过热或过冷的惩罚;HourlyLinearReward 与 EnergyCostLinearReward 按分时时段或实时电价动态调整权重,可用于需求响应与移峰填谷研究;NormalizedLinearReward 利用运行过程中的滑动极值自动归一化能耗与不适项,省去手动标定缩放常数的步骤;MultiZoneReward 则允许为不同功能分区单独设定舒适温度区间。

数据预处理与实验记录

算法训练通常需要归一化的输入特征和实验日志,而 EnergyPlus 原生输出的是带物理量纲的原始数值。Sinergym 利用 Gymnasium 的 Wrapper(包装器)机制提供了常用中间件,例如用 NormalizeObservation 和 NormalizeAction 做动态归一化,用 DatetimeWrapper 把时间戳编码为周期性的正余弦特征,用 PreviousObservationsWrapper 叠加上一步历史状态,或者挂载 CSVLogger 与 WandBLogger 将每一回合的逐时温度、设定点和奖励同步到 Weights & Biases 云端面板。

叠加多层 Wrapper 时,包装器的嵌套顺序需要与数据流向一致。例如 DatetimeWrapper 会向观测向量插入新的时间维度,因此需要包裹在 NormalizeObservation 的内层(先增加维度、再做归一化),顺序颠倒会触发维度不匹配报错。

Sinergym 官方文档中的运行流程图

使用 Docker 进行部署

根据公开仓库文档与构建配置,Sinergym 底层依赖特定版本的 EnergyPlus C/Python 接口与 Ubuntu 系统库,官方推荐使用 Docker 容器进行部署,避免宿主机环境冲突。

仓库根目录的 Dockerfile 采用三阶段构建。builder 阶段自动拉取并安装对应版本的 EnergyPlus、Poetry 与虚拟环境依赖;dev 阶段包含代码检查、单元测试与文档工具,可配合 VS Code Dev Containers 开发;runtime 阶段精简掉编译工具,只保留运行实验所需的环境与通过 --build-arg SINERGYM_EXTRAS="drl" 选装的强化学习库。

如果计划在宿主机上手动安装,需要注意 INSTALL.md 中的一处版本差异。文档顶部的版本兼容表将 Sinergym 3.11.0 对应到 EnergyPlus 25.1.0,而下方的手动安装章节仍写着兼容 EnergyPlus 24.1.0,且原生安装仅支持 Ubuntu 系统。在 Windows 工作站上运行实验或复现基准算法时,直接拉取官方固定版本的 Docker 镜像(启动容器时通过 -e WANDB_API_KEY 传入日志密钥)更为稳妥。

来源:ugr-sail/sinergym GitHub 仓库;Sinergym 官方文档;INSTALL.md 部署说明;MIT 许可证;代表论文:Campoy-Nieves 等,Sinergym – A virtual testbed for building energy optimization with Reinforcement Learning,Energy and Buildings, 327: 115075, 2025(DOI: 10.1016/j.enbuild.2024.115075)。