基于深度强化学习的微网P2P能源交易系统代码功能说明

一、系统概述

本系统基于深度强化学习(DRL)技术,构建了微网间点对点(P2P)能源交易的智能决策框架。核心目标是通过强化学习算法(DDPG、PPO、VPG)优化微网间的能源买卖策略,实现能源资源的高效配置、交易成本最小化及微网运营效益最大化。

系统整体架构分为三大核心模块:

  1. 微网环境模块:模拟多微网的能源生产、负荷消耗、电池储能及P2P交易规则;
  2. 强化学习算法模块:实现三种经典DRL算法,为微网交易决策提供智能代理;
  3. 工具支撑模块:提供日志记录、并行计算、模型保存与测试等辅助功能。

系统技术栈以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美分)。
  • 核心类设计

    • 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)。
  • 奖励机制(Reward Function)

    • 正向奖励:交易价格低于公共电网电价(购买场景)、高于自身单位成本(出售场景)时,按价差比例给予奖励;成功实现能源供需平衡时给予高额奖励(+100);
    • 惩罚机制:交易行为与自身供需状态冲突(如自身盈余却购买)、交易价格不合理、交易能源量超出实际需求/供给时,给予不同程度惩罚(-1-10);
    • 输电损耗:根据微网间距离计算输电损耗,损耗计入交易成本,间接影响奖励值。
  • 核心方法

    • reset():重置环境状态,包括电池容量、交易记录、时间步,随机初始化起始时间;
    • step(action):执行动作并返回新状态、奖励、终止标志,核心逻辑包括交易有效性校验、电池充放电更新、负荷供给处理;
    • _travel_loss():基于距离和输电功率计算输电损耗,采用电阻损耗公式:loss = (amount² × base_res×distance) / voltage²

(二)强化学习算法模块

该模块实现了三种主流强化学习算法,均基于Actor-Critic架构,针对微网P2P交易的连续动作空间设计,核心差异在于策略更新方式和价值函数优化逻辑。

1. 算法核心抽象(core_*.py)

每个算法对应独立的核心文件(core_DDPG.pycore_PPO.pycore_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),测试时采用确定性策略。
  • 训练流程

    1. 初始化:创建环境、Actor-Critic网络、目标网络、经验缓冲区、优化器(Adam);
    2. 探索阶段:前10000步随机采样动作,填充经验缓冲区;
    3. 交互阶段:根据当前策略生成动作(含噪声),与环境交互并存储经验;
    4. 更新阶段:每50步交互后,进行50次梯度下降更新:
      • Q网络更新:最小化Q值与Bellman备份值的MSE损失;
      • 策略网络更新:最大化Q值(通过梯度上升),更新后冻结Q网络;
      • 目标网络更新:采用Polyak平均融合主网络参数;
    5. 测试阶段:每个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实现多进程并行训练,提高数据收集效率。
  • 训练流程

    1. 初始化:创建环境、Actor-Critic网络、缓冲区、优化器(Adam);
    2. 轨迹收集:每个epoch收集4000步交互数据,存储至缓冲区;
    3. 优势估计:采用GAE-Lambda计算动作优势值,并标准化优势函数;
    4. 策略更新:
      • 策略网络更新:最小化剪辑损失(clip_ratio=0.2),若KL散度超过阈值(target_kl=0.01)则提前停止更新;
      • 价值网络更新:最小化V值与回报的MSE损失,迭代80次;
    5. 日志记录:记录策略损失、价值损失、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为例)

  1. 环境初始化:运行main_DDPG.py,解析命令行参数(隐藏层尺寸、训练epoch数、随机种子等);
  2. 网络构建:基于core_DDPG.py创建Actor-Critic网络和目标网络,初始化优化器;
  3. 经验收集:前10000步随机探索,填充经验缓冲区;
  4. 迭代训练:
    • 每个epoch收集4000步交互数据;
    • 每50步进行50次网络更新;
    • 测试阶段评估无噪声策略性能;
  5. 结果保存:定期保存模型参数和训练日志,训练结束后输出可视化结果。

(二)多算法对比流程

  1. 分别运行main_DDPG.pymain_PPO.pymain_vpg.py,使用相同的环境参数(如微网配置、交易规则);
  2. 通过plot.py加载各算法的日志文件,对比回报曲线、训练时间、交易成本等指标;
  3. 分析不同算法在微网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

五、系统扩展与定制化建议

  1. 环境扩展

    • 新增微网节点:在MicrogridEnv中添加新的Microgrid实例,更新距离矩阵和交易规则;
    • 扩展能源类型:在Generation类中添加光伏、风电之外的能源(如柴油发电机),修改发电量计算逻辑;
    • 动态电价:在step方法中引入时间相关的电价函数,模拟实时电价波动。
  2. 算法扩展

    • 新增算法:参考现有核心文件结构,实现TD3、SAC等更先进的连续控制算法;
    • 网络结构优化:在core_*.py中修改mlp函数,引入卷积层(处理时序数据)或注意力机制;
    • 超参数搜索:使用ExperimentGrid类批量测试不同学习率、隐藏层尺寸、折扣因子的组合。
  3. 功能扩展

    • 实时监控:在logx.py中添加TensorBoard支持,实时可视化训练曲线;
    • 交易机制优化:引入拍卖机制、信用评估等模块,修改step方法中的交易有效性校验逻辑;
    • 能耗预测集成:在GenerationLoad类中添加机器学习预测模型,提升发电量和负荷的预测精度。

六、总结

本系统通过模块化设计,实现了微网P2P能源交易的仿真与智能决策。微网环境模块精准模拟了能源生产、负荷消耗和交易规则,为强化学习提供了高保真的交互场景;三种强化学习算法覆盖了不同复杂度和应用场景,支持性能对比与选择;工具支撑模块则简化了训练流程、实验管理和结果分析。

系统可用于研究强化学习在能源交易中的应用效果,为微网运营商提供决策支持,也可作为学术研究的基础框架,支持进一步的算法优化和场景扩展。通过调整环境参数和算法超参数,可适配不同地区、不同规模的微网P2P交易需求,具备较强的实用性和灵活性。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐