基于深度强化学习(DRL)技术,构建了微网间点对点(P2P)能源交易的智能决策框架
本系统通过模块化设计,实现了微网P2P能源交易的仿真与智能决策。微网环境模块精准模拟了能源生产、负荷消耗和交易规则,为强化学习提供了高保真的交互场景;三种强化学习算法覆盖了不同复杂度和应用场景,支持性能对比与选择;工具支撑模块则简化了训练流程、实验管理和结果分析。系统可用于研究强化学习在能源交易中的应用效果,为微网运营商提供决策支持,也可作为学术研究的基础框架,支持进一步的算法优化和场景扩展。通过
基于深度强化学习的微网P2P能源交易系统代码功能说明
一、系统概述
本系统基于深度强化学习(DRL)技术,构建了微网间点对点(P2P)能源交易的智能决策框架。核心目标是通过强化学习算法(DDPG、PPO、VPG)优化微网间的能源买卖策略,实现能源资源的高效配置、交易成本最小化及微网运营效益最大化。
系统整体架构分为三大核心模块:
- 微网环境模块:模拟多微网的能源生产、负荷消耗、电池储能及P2P交易规则;
- 强化学习算法模块:实现三种经典DRL算法,为微网交易决策提供智能代理;
- 工具支撑模块:提供日志记录、并行计算、模型保存与测试等辅助功能。
系统技术栈以Python为核心,基于PyTorch实现神经网络计算,结合OpenAI Gym规范设计环境接口,支持GPU加速训练,具备良好的可扩展性和可复现性。
二、核心模块详细功能说明
(一)微网环境模块(environment.py)
该模块是整个系统的仿真核心,严格遵循OpenAI Gym接口规范,模拟了3个微网(Hamza_Elsheikh、Um_Bader、Tannah)的能源生产、负荷需求、电池储能及P2P交易过程,为强化学习代理提供交互场景。
1. 核心数据结构与参数
-
基础常量定义:
- 负荷参数:定义学校、住宅、清真寺等5类负荷的最大能耗(如
SCHOOL_MAX_LOAD=6.012); - 微网参数:每个微网的负荷构成(如Um_Bader含70户住宅、1所学校等)、电池参数(最大容量、放电系数等);
- 交易参数:微网间距离矩阵(影响输电损耗)、公共电网电价(
NETWORK_PRICE=19美分)。
- 负荷参数:定义学校、住宅、清真寺等5类负荷的最大能耗(如
-
核心类设计:
Load类:管理单一类型负荷的能耗计算,基于时间序列数据(usage_trends.csv)获取不同时段的能耗占比,计算单负荷及总负荷能耗;Battery类:实现电池的充放电逻辑,支持剩余容量管理、充电溢出处理、放电不足处理;Generation类:整合太阳能(Data/Solar/)和风能(Data/wind/)数据,计算特定时间的微网总发电量;Microgrid类:组合负荷、电池、发电模块,提供微网状态查询(总负荷、总发电量、电池剩余容量)、交易需求计算(to_trade方法)及能源供给逻辑(supply方法);MicrogridEnv类: Gym环境主类,封装3个微网的交互逻辑,定义状态空间、动作空间及奖励机制。
2. 关键功能实现
-
状态空间(Observation Space):
- 维度:4维连续空间,包含当前微网电池剩余容量、总负荷、总发电量、上一时刻电价;
- 范围:
[0.0, 1.0]×[0.0, HAMZA_ELSHEIKH_MAX_LOAD]×[0.0, 最大发电量]×[0.0, NETWORK_PRICE]。
-
动作空间(Action Space):
- 维度:4维连续空间,各维度含义如下:
- 动作类型(0-1:从目标微网购买;1-2:向目标微网出售;≥2:不交易);
- 目标微网索引(0-1:Um_Bader;1-2:Tannah);
- 交易能源量(0-当前微网电池最大容量);
- 交易价格(微网单位成本-NETWORK_PRICE)。
- 维度:4维连续空间,各维度含义如下:
-
奖励机制(Reward Function):
- 正向奖励:交易价格低于公共电网电价(购买场景)、高于自身单位成本(出售场景)时,按价差比例给予奖励;成功实现能源供需平衡时给予高额奖励(
+100); - 惩罚机制:交易行为与自身供需状态冲突(如自身盈余却购买)、交易价格不合理、交易能源量超出实际需求/供给时,给予不同程度惩罚(
-1至-10); - 输电损耗:根据微网间距离计算输电损耗,损耗计入交易成本,间接影响奖励值。
- 正向奖励:交易价格低于公共电网电价(购买场景)、高于自身单位成本(出售场景)时,按价差比例给予奖励;成功实现能源供需平衡时给予高额奖励(
-
核心方法:
reset():重置环境状态,包括电池容量、交易记录、时间步,随机初始化起始时间;step(action):执行动作并返回新状态、奖励、终止标志,核心逻辑包括交易有效性校验、电池充放电更新、负荷供给处理;_travel_loss():基于距离和输电功率计算输电损耗,采用电阻损耗公式:loss = (amount² × base_res×distance) / voltage²。
(二)强化学习算法模块
该模块实现了三种主流强化学习算法,均基于Actor-Critic架构,针对微网P2P交易的连续动作空间设计,核心差异在于策略更新方式和价值函数优化逻辑。
1. 算法核心抽象(core_*.py)
每个算法对应独立的核心文件(core_DDPG.py、core_PPO.py、core_VPG.py),封装了神经网络结构、损失函数计算等底层逻辑:
-
通用工具函数:
combined_shape():拼接数组形状,用于构建经验回放缓冲区或网络输入维度;mlp():快速构建多层感知机(MLP),支持自定义隐藏层尺寸、激活函数;count_vars():统计网络参数数量,用于模型复杂度分析。
-
神经网络结构:
- Actor网络:输入状态向量,输出动作(连续值),DDPG中采用Tanh激活函数限制动作范围,PPO/VPG支持高斯分布(连续动作)和类别分布(离散动作);
- Critic网络:DDPG中输入“状态+动作”,输出Q值(动作价值);PPO/VPG中输入状态,输出V值(状态价值);
- 网络默认配置:DDPG隐藏层为2层256神经元,PPO/VPG为2层64神经元,激活函数均为ReLU(DDPG输出层为Tanh)。
2. DDPG算法实现(ddpg.py + main_DDPG.py)
-
算法特性:深度确定性策略梯度(DDPG),适用于连续动作空间,采用离线学习(Off-Policy)方式,通过经验回放和目标网络提升训练稳定性。
-
核心组件:
ReplayBuffer类:FIFO缓冲区,存储状态、动作、奖励、下一状态、终止标志等经验数据,支持批量采样(默认批次大小100);- 目标网络(
ac_targ):通过Polyak平均更新(polyak=0.995),减缓目标Q值的更新速度,避免训练震荡; - 探索策略:训练时在动作中添加高斯噪声(
act_noise=0.1),测试时采用确定性策略。
-
训练流程:
- 初始化:创建环境、Actor-Critic网络、目标网络、经验缓冲区、优化器(Adam);
- 探索阶段:前10000步随机采样动作,填充经验缓冲区;
- 交互阶段:根据当前策略生成动作(含噪声),与环境交互并存储经验;
- 更新阶段:每50步交互后,进行50次梯度下降更新:
- Q网络更新:最小化Q值与Bellman备份值的MSE损失;
- 策略网络更新:最大化Q值(通过梯度上升),更新后冻结Q网络;
- 目标网络更新:采用Polyak平均融合主网络参数;
- 测试阶段:每个epoch结束后,用无噪声策略测试10个episode,记录测试回报。
-
关键参数:
- 学习率:策略网络(
pi_lr=1e-3)、Q网络(q_lr=1e-3); - 折扣因子(
gamma=0.99):权衡即时奖励与未来奖励; - 经验缓冲区大小(
replay_size=1e6):存储足够多的历史经验。
- 学习率:策略网络(
3. PPO算法实现(main_PPO.py)
-
算法特性:近端策略优化(PPO),采用在线学习(On-Policy)方式,通过剪辑损失(Clip Loss)限制策略更新幅度,兼顾稳定性和样本效率。
-
核心组件:
PPOBuffer类:存储轨迹数据(状态、动作、奖励、价值、对数概率),支持GAE-Lambda优势估计(lam=0.97)和回报计算;- 并行计算支持:基于MPI实现多进程并行训练,提高数据收集效率。
-
训练流程:
- 初始化:创建环境、Actor-Critic网络、缓冲区、优化器(Adam);
- 轨迹收集:每个epoch收集4000步交互数据,存储至缓冲区;
- 优势估计:采用GAE-Lambda计算动作优势值,并标准化优势函数;
- 策略更新:
- 策略网络更新:最小化剪辑损失(
clip_ratio=0.2),若KL散度超过阈值(target_kl=0.01)则提前停止更新; - 价值网络更新:最小化V值与回报的MSE损失,迭代80次;
- 策略网络更新:最小化剪辑损失(
- 日志记录:记录策略损失、价值损失、KL散度、熵值等指标。
-
关键参数:
- 学习率:策略网络(
pi_lr=3e-4)、价值网络(vf_lr=1e-3); - 训练迭代次数:策略网络80次,价值网络80次;
- 本地步数(
local_steps_per_epoch):根据CPU核心数分配,支持并行数据收集。
- 学习率:策略网络(
4. VPG算法实现(main_vpg.py)
-
算法特性:香草策略梯度(VPG),基础的Policy Gradient算法,通过蒙特卡洛回报估计优化策略,结构简单,适合作为基准对比算法。
-
核心组件:
VPGBuffer类:与PPO缓冲区类似,支持GAE-Lambda优势估计,用于存储轨迹数据和计算回报;- 策略更新:单次梯度上升更新策略,价值网络迭代80次更新。
-
与PPO的差异:
- 策略更新方式:VPG无剪辑损失,直接通过策略梯度更新;PPO通过剪辑损失限制更新幅度;
- 样本效率:VPG样本利用率低(单次使用后丢弃),PPO可多次复用样本;
- 稳定性:PPO通过剪辑机制降低训练方差,稳定性优于VPG。
(三)工具支撑模块(utils目录)
该模块提供日志记录、并行计算、模型保存、结果可视化等辅助功能,为强化学习训练提供全流程支持。
1. 日志记录(logx.py)
Logger类:记录训练过程中的关键指标(回报、损失、网络参数数量等),保存至progress.txt文件;EpochLogger类:继承自Logger,支持按epoch统计平均回报、最大/最小回报等聚合指标;- 配置保存:自动保存实验参数(
config.json),便于复现实验结果; - 模型保存:支持PyTorch模型序列化(
pyt_save/目录),定期保存策略和价值网络。
2. 并行计算(mpi_tools.py + mpi_pytorch.py)
- 基于MPI(Message Passing Interface)实现多进程并行训练,支持CPU核心数自动适配;
mpi_fork():创建多进程环境,分配训练任务;mpi_avg_grads():平均多进程的梯度信息,确保参数更新一致性;sync_params():同步多进程间的网络参数,保证初始状态一致。
3. 模型测试与可视化(test_policy.py + plot.py)
test_policy.py:加载训练好的模型,测试其在环境中的表现,输出平均回报、 episode长度等指标;plot.py:读取日志文件,可视化训练曲线(如回报随epoch变化),支持多实验结果对比。
4. 实验配置(run_utils.py + user_config.py)
setup_logger_kwargs():生成日志保存路径,支持按实验名称和种子区分结果;ExperimentGrid类:支持网格搜索实验,批量运行不同超参数组合的实验;user_config.py:定义默认配置(如默认后端、数据保存目录、实验延迟时间)。
三、系统运行流程
(一)单算法训练流程(以DDPG为例)
- 环境初始化:运行
main_DDPG.py,解析命令行参数(隐藏层尺寸、训练epoch数、随机种子等); - 网络构建:基于
core_DDPG.py创建Actor-Critic网络和目标网络,初始化优化器; - 经验收集:前10000步随机探索,填充经验缓冲区;
- 迭代训练:
- 每个epoch收集4000步交互数据;
- 每50步进行50次网络更新;
- 测试阶段评估无噪声策略性能;
- 结果保存:定期保存模型参数和训练日志,训练结束后输出可视化结果。
(二)多算法对比流程
- 分别运行
main_DDPG.py、main_PPO.py、main_vpg.py,使用相同的环境参数(如微网配置、交易规则); - 通过
plot.py加载各算法的日志文件,对比回报曲线、训练时间、交易成本等指标; - 分析不同算法在微网P2P交易场景下的性能差异(如DDPG在连续动作空间的优势、PPO的样本效率等)。
四、关键配置与可调参数
(一)环境配置
| 参数名称 | 配置位置 | 说明 | 默认值 |
|---|---|---|---|
| 微网负荷参数 | environment.py |
各微网的负荷构成(住宅、学校数量等) | Hamza_Elsheikh:50户住宅等 |
| 电池参数 | environment.py |
最大容量、放电系数、初始容量 | Um_Bader:500、0.02、300 |
| 公共电网电价 | environment.py |
交易价格参考基准 | 19美分 |
| 输电损耗参数 | environment.py |
电阻、电压 | 1.1Ω、33000V |
(二)算法配置
| 算法 | 关键参数 | 配置位置 | 默认值 |
|---|---|---|---|
| DDPG | 隐藏层尺寸 | main_DDPG.py |
2层256神经元 |
| 学习率 | main_DDPG.py |
pi_lr=1e-3,q_lr=1e-3 | |
| 经验缓冲区大小 | main_DDPG.py |
1e6 | |
| PPO | 隐藏层尺寸 | main_PPO.py |
2层64神经元 |
| 剪辑系数 | main_PPO.py |
0.2 | |
| 并行CPU数 | main_PPO.py |
4 | |
| VPG | 隐藏层尺寸 | main_vpg.py |
2层64神经元 |
| 学习率 | main_vpg.py |
pi_lr=3e-4,vf_lr=1e-3 | |
| GAE-Lambda | main_vpg.py |
0.97 |
五、系统扩展与定制化建议
-
环境扩展:
- 新增微网节点:在
MicrogridEnv中添加新的Microgrid实例,更新距离矩阵和交易规则; - 扩展能源类型:在
Generation类中添加光伏、风电之外的能源(如柴油发电机),修改发电量计算逻辑; - 动态电价:在
step方法中引入时间相关的电价函数,模拟实时电价波动。
- 新增微网节点:在
-
算法扩展:
- 新增算法:参考现有核心文件结构,实现TD3、SAC等更先进的连续控制算法;
- 网络结构优化:在
core_*.py中修改mlp函数,引入卷积层(处理时序数据)或注意力机制; - 超参数搜索:使用
ExperimentGrid类批量测试不同学习率、隐藏层尺寸、折扣因子的组合。
-
功能扩展:
- 实时监控:在
logx.py中添加TensorBoard支持,实时可视化训练曲线; - 交易机制优化:引入拍卖机制、信用评估等模块,修改
step方法中的交易有效性校验逻辑; - 能耗预测集成:在
Generation或Load类中添加机器学习预测模型,提升发电量和负荷的预测精度。
- 实时监控:在
六、总结
本系统通过模块化设计,实现了微网P2P能源交易的仿真与智能决策。微网环境模块精准模拟了能源生产、负荷消耗和交易规则,为强化学习提供了高保真的交互场景;三种强化学习算法覆盖了不同复杂度和应用场景,支持性能对比与选择;工具支撑模块则简化了训练流程、实验管理和结果分析。
系统可用于研究强化学习在能源交易中的应用效果,为微网运营商提供决策支持,也可作为学术研究的基础框架,支持进一步的算法优化和场景扩展。通过调整环境参数和算法超参数,可适配不同地区、不同规模的微网P2P交易需求,具备较强的实用性和灵活性。
更多推荐
所有评论(0)