基于DDPG算法的发电公司竞价策略研究代码功能说明

一、代码整体架构与核心目标

本套代码围绕“基于深度确定性策略梯度(DDPG)算法的发电公司(GenCo)竞价策略”展开,通过多智能体强化学习框架,模拟电力市场中发电公司的竞价行为,最终实现对市场均衡(纳什均衡)及隐性合谋现象的分析。代码整体采用模块化设计,分为算法核心模块、市场出清模块、主运行模块及辅助工具模块,支持3节点和IEEE 30节点两种电力系统场景,可对比DDPG、Q-Learning、VRE(变分Roth-Erev)三种算法在竞价策略优化中的性能。

核心目标包括:

  1. 解决传统博弈论方法依赖完全信息、难以模拟隐性合谋的问题;
  2. 突破传统强化学习(如Q-Learning)在高维连续状态/动作空间中的局限性;
  3. 通过DDPG算法实现发电公司在不完全信息环境下的稳定竞价策略学习,且能定量反映隐性合谋水平。

二、核心模块功能解析

(一)算法核心模块:实现DDPG、Q-Learning、VRE核心逻辑

该模块包含DDPG.pyQLearning.pyVRE.pymodel.py,是发电公司智能体学习竞价策略的核心,其中DDPG算法为重点实现对象。

1. DDPG算法实现(DDPG.py + model.py)

DDPG作为 Actor-Critic 架构的无模型强化学习算法,支持连续状态与动作空间,通过深度神经网络(DNN)近似策略函数与动作价值函数,适配电力市场中发电公司“连续竞价参数调整”的需求。

  • DDPG类核心功能(DDPG.py)

    • 初始化(__init__):定义Actor(策略网络)与Critic(价值网络)的评估网络(eval)和目标网络(target),使用Adam优化器,MSE作为价值函数损失函数;设置经验回放缓冲区(容量默认1000),存储智能体与环境交互的状态(s)、动作(a)、奖励(r)、下一状态(s_)数据。
    • 动作选择(choose_action):接收当前状态(如节点电价、总负荷),通过Actor评估网络输出连续动作(竞价策略参数α),并通过高斯噪声实现探索(初期噪声大,后期衰减至0.02)。
    • 经验学习(learn):采用软更新(τ=0.01)同步目标网络与评估网络参数;从经验回放缓冲区随机采样批量数据(默认批量大小64),计算Actor的策略梯度(最大化价值函数)与Critic的时序差分误差(TD Error),完成网络参数更新。
    • 经验存储(store_transition):将智能体每次交互的(s,a,r,s_)数据存入缓冲区,为批量学习提供数据支撑。
  • 神经网络模型(model.py)
    针对不同节点系统设计两类网络结构(ANet1/CNet1适配30节点系统,ANet2/CNet2适配3节点系统),均采用ReLU激活函数,输出层用Tanh限制动作范围在[-1,1],后续通过缩放映射为实际竞价参数α。

    • Actor网络(ANet1/ANet2):输入状态维度(如3节点系统输入2个节点电价,30节点系统输入6个节点电价),输出1个连续动作(对应竞价参数α的原始值)。
    • Critic网络(CNet1/CNet2):输入状态与动作,输出动作价值(Q值),用于评估Actor策略的优劣,引导策略更新。
2. 对比算法实现(QLearning.py + VRE.py)
  • Q-Learning算法(QLearning.py):传统表格型强化学习算法,需对状态(如平均节点电价)和动作(竞价参数α)进行离散化处理,存在“维度灾难”问题。代码中通过QLearningAgents类实现多智能体协作,QLearningTable类维护Q表,通过ε-贪婪策略选择动作,时序差分更新Q值。
  • VRE算法(VRE.py):基于Roth-Erev学习的改进算法,通过“策略价值”概率分布选择动作,策略价值随历史奖励动态更新,代码中RothErevAgents类实现多智能体协同,RothErev类计算策略概率与价值更新。

(二)市场出清模块:模拟电力市场交易结算

该模块包含three_bus.py(3节点系统)与thirty_bus.py(IEEE 30节点系统),实现独立系统运营商(ISO)的市场出清逻辑,根据发电公司的竞价参数(α)与负荷需求,计算节点电价、发电量及发电公司利润,为智能体提供奖励信号。

1. 核心功能:凸二次规划求解市场出清

市场出清以“社会福利最大化”为目标,考虑发电成本、负荷需求、网络潮流约束(如线路传输容量限制),通过cvxopt库求解凸二次规划问题,具体步骤如下:

  1. 参数定义:输入发电公司竞价参数α,加载系统固有参数(如发电公司边际成本斜率β、负荷需求曲线斜率fd、机组功率上下限pmax/pmin、线路潮流限制F等);
  2. 目标函数构建:以“负荷效用最大化 - 发电成本最小化”为目标,构建二次规划的目标函数矩阵P与线性项向量q;
  3. 约束条件构建:包含功率平衡约束(发电量=用电量)、线路潮流约束(不超过传输上限)、机组功率约束(不超过pmax/pmin)、负荷需求约束(不超过Dmax),对应构建约束矩阵G与约束向量h;
  4. 求解与结果输出:调用cvxopt.solvers.qp求解,输出各节点电价(nodal_price)、各发电公司发电量(mc_amount)及利润(profit=收入-实际成本),其中利润作为智能体的奖励信号(r)。
2. 场景适配:3节点与30节点系统差异
系统类型 发电公司数量 负荷数量 核心约束 用途
3节点系统 2家 2个 线路1-2潮流限制25MW 基础算法验证、参数敏感性分析
IEEE 30节点系统 6家 20个 线路6-8、12-17、10-17潮流限制 复杂系统验证、多智能体协作测试

(三)主运行模块:场景调度与结果可视化

该模块包含run_DDPG_3-bus.pyrun_DDPG_30-bus.pyrun_Q-Learning_3-bus.pyrun_VRE_3-bus.py,负责初始化智能体、设置仿真参数、调度市场出清流程,并输出竞价策略曲线与统计结果。

1. DDPG算法主运行脚本(以3节点系统为例,run_DDPG_3-bus.py)
  • 初始化设置:定义智能体数量(2家发电公司)、状态维度(2个节点电价)、动作维度(1个竞价参数α)、仿真步数(10000步);加载发电公司真实边际成本截距a_real(15.0、18.0),初始化DDPG智能体(使用ANet2、CNet2网络)。
  • 仿真流程(10000步循环)
    1. 状态获取:读取上一步节点电价作为当前状态s;
    2. 动作生成:智能体输出动作a,叠加高斯噪声(探索阶段噪声衰减,测试阶段噪声为0),并通过公式α=(a+1)*a_real*1.5将动作映射为实际竞价参数(α范围0~3a_real);
    3. 市场出清:调用three_bus.market_clearing,输入α计算节点电价与利润,利润缩放后作为奖励r;
    4. 经验存储:将(s,a,r,s_)存入经验回放缓冲区;
    5. 智能体学习:缓冲区填满(1000步后)至9000步,智能体执行learn方法更新网络参数;
    6. 结果记录:每1000步打印当前α、利润、探索噪声,全程记录竞价参数α的变化曲线。
  • 结果可视化:绘制发电公司竞价参数α随时间的变化曲线,叠加博弈论方法求解的纳什均衡α*(20.29、22.98),保存为DDPG_3_bus.png,直观对比DDPG收敛结果与理论均衡值。
2. 对比算法主运行脚本(run_Q-Learning_3-bus.py + run_VRE_3-bus.py)

逻辑与DDPG主运行脚本类似,但需额外处理“状态/动作离散化”:

  • Q-Learning:将平均节点电价离散化为步长4的区间(如0、4、8…),竞价参数α离散化为步长0.2a_real的区间(如0、0.2a_real、0.4a_real…);
  • VRE:动作空间离散化方式与Q-Learning一致,通过策略价值概率选择动作;
  • 结果输出:同样绘制α变化曲线与纳什均衡对比图,且通过10次重复实验(不同随机种子)统计误差范围与方差,验证算法稳定性。

三、关键参数与超参数配置

代码中参数分为“系统参数”“算法超参数”两类,核心参数配置如下,可根据场景需求调整:

参数类型 参数名称 含义 默认配置(DDPG) 影响说明
系统参数 a_real 发电公司边际成本截距($/MWh) 3节点:[15.0,18.0];30节点:[18.0,20.0,25.0,22.0,22.0,16.0] 决定发电公司基础成本,影响竞价策略下限
系统参数 F 线路潮流限制(MW) 3节点线路1-2:25;30节点:[10,8,10] 约束网络阻塞,影响节点电价分布
算法超参数 T 总仿真步数 10000 足够步数确保智能体收敛
算法超参数 lr_a/lr_c Actor/Critic学习率 0.001 过大会导致训练震荡,过小会收敛缓慢
算法超参数 τ 软更新率 0.01 控制目标网络更新平滑度,避免波动
算法超参数 γ 折扣因子 0(基础场景)、0.5、0.999(合谋场景) γ→1时智能体更关注未来收益,易触发隐性合谋
算法超参数 memory_capacity 经验回放缓冲区容量 1000 存储足够历史经验,保证批量学习的多样性
算法超参数 var 探索噪声标准差 初始1,衰减至0.02 前期保证探索广度,后期保证收敛稳定性

四、实验功能与结果分析支持

代码不仅实现“竞价策略学习”,还内置完整的实验分析功能,可支撑对算法性能、市场特性的多维度研究:

(一)算法性能对比实验

通过10次重复实验(不同随机种子),统计三种算法的“竞价参数相对误差范围”与“方差”,验证DDPG的优越性:

  • 误差计算:以博弈论求解的纳什均衡α为基准,计算|α_learned - α|/α* ×100%;
  • 结果示例(3节点系统):
    • DDPG:GenCo1误差-1.58%1.56%,方差0.2121;GenCo2误差-1.11%3.09%,方差0.2846;
    • Q-Learning:GenCo1误差3.49%18.27%,方差1.0124;GenCo2误差1.81%25.31%,方差2.1550;
    • 结论:DDPG误差范围比Q-Learning低81%~84%,方差更小,收敛更稳定。

(二)隐性合谋分析实验

通过调整折扣因子γ,定量分析发电公司隐性合谋水平:

  • γ=0:智能体仅关注当前收益,DDPG收敛至纳什均衡α*,无合谋;
  • γ=0.999:智能体关注未来长期收益,会协同提高竞价参数α(如3节点系统α1从20.29升至22+,α2从22.98升至24+),形成隐性合谋;
  • 结果输出:绘制不同γ下α的收敛曲线(图5(b)),标注触发合谋的临界γ(3节点系统γ≈0.95,30节点系统γ≈0.8),为市场监管提供依据。

(三)复杂场景适应性实验

  1. 时变负荷场景:加载PJM电力市场的小时级负荷数据(D_max随时间变化),验证DDPG在动态负荷下的收敛能力,结果显示γ=0/0.5时仍能跟踪各时刻的纳什均衡α*;
  2. 网络阻塞场景:调整线路潮流限制F(如3节点线路1-2的F从10MW增至200MW),发现F越大(阻塞越轻),发电公司竞价参数α越低,市场竞争性越强;
  3. 多发电公司场景:将30节点系统6家发电公司拆分为12/18/24家(小公司成本不变,功率上下限按比例缩小),结果显示发电公司数量越多,α越低,市场竞争性越强,且DDPG仍能稳定收敛。

五、代码运行与环境依赖

(一)环境配置

  • 编程语言:Python 3.7
  • 核心库:
    • 深度学习:PyTorch 1.0.1(实现DDPG神经网络);
    • 数值计算:NumPy(矩阵运算、参数存储);
    • 优化求解:cvxopt(市场出清二次规划求解);
    • 可视化:Matplotlib(绘制竞价参数曲线);
    • 数据处理:Pandas(Q-Learning的Q表存储)。

(二)运行步骤

  1. 安装依赖库:pip install torch==1.0.1 numpy cvxopt matplotlib pandas
  2. 运行对应场景脚本:
    • 3节点DDPG:python run_DDPG_3-bus.py
    • 30节点DDPG:python run_DDPG_30-bus.py
    • 3节点Q-Learning:python run_Q-Learning_3-bus.py
    • 3节点VRE:python run_VRE_3-bus.py
  3. 查看结果:脚本运行完成后,在当前目录生成算法对应的竞价参数曲线图片(如DDPG_3_bus.png),控制台输出每1000步的α、利润、探索噪声数据。

六、代码创新点与应用价值

(一)核心创新点

  1. 连续空间适配:DDPG通过深度神经网络突破传统RL的离散空间限制,无需对“节点电价”“竞价参数”进行离散化,更贴合电力市场连续决策的实际需求;
  2. 不完全信息模拟:相比博弈论方法(依赖完全信息),DDPG智能体仅通过自身交互经验学习,可模拟电力市场中发电公司“未知竞争对手成本”的不完全信息场景;
  3. 隐性合谋定量分析:通过调整折扣因子γ,可定量控制隐性合谋水平,且能输出合谋临界值,为市场力监管提供量化工具。

(二)应用价值

  1. 发电公司决策支持:可为发电公司提供动态竞价策略,在不同负荷、网络阻塞场景下实现利润最大化;
  2. 市场设计与监管:可对比不同市场规则(如节点电价机制、线路扩容方案)下的市场竞争性,识别隐性合谋风险;
  3. 算法基准测试:提供DDPG与传统RL(Q-Learning、VRE)的对比框架,为后续电力市场强化学习算法优化提供基准。

七、后续扩展方向

基于现有代码架构,可从以下方向进一步扩展功能:

  1. 多市场协同:增加日前市场、实时市场模块,实现发电公司跨市场联合竞价;
  2. 负荷预测集成:在状态变量中加入负荷预测值,提升竞价策略的前瞻性;
  3. 多智能体协作优化:引入 MADDPG(多智能体DDPG)算法,考虑发电公司间的协作与竞争动态;
  4. 风险管控:在奖励函数中加入风险惩罚项(如利润波动),实现“收益-风险”平衡的竞价策略。
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐