基于DDPG算法的发电公司竞价策略,通过多智能体强化学习框架,模拟电力市场中发电公司的竞价行为,最终实现对市场均衡(纳什均衡)及隐性合谋现象
本套代码围绕“基于深度确定性策略梯度(DDPG)算法的发电公司(GenCo)竞价策略”展开,通过多智能体强化学习框架,模拟电力市场中发电公司的竞价行为,最终实现对市场均衡(纳什均衡)及隐性合谋现象的分析。代码整体采用模块化设计,分为算法核心模块、市场出清模块、主运行模块及辅助工具模块,支持3节点和IEEE 30节点两种电力系统场景,可对比DDPG、Q-Learning、VRE(变分Roth-Ere
基于DDPG算法的发电公司竞价策略研究代码功能说明
一、代码整体架构与核心目标
本套代码围绕“基于深度确定性策略梯度(DDPG)算法的发电公司(GenCo)竞价策略”展开,通过多智能体强化学习框架,模拟电力市场中发电公司的竞价行为,最终实现对市场均衡(纳什均衡)及隐性合谋现象的分析。代码整体采用模块化设计,分为算法核心模块、市场出清模块、主运行模块及辅助工具模块,支持3节点和IEEE 30节点两种电力系统场景,可对比DDPG、Q-Learning、VRE(变分Roth-Erev)三种算法在竞价策略优化中的性能。
核心目标包括:
- 解决传统博弈论方法依赖完全信息、难以模拟隐性合谋的问题;
- 突破传统强化学习(如Q-Learning)在高维连续状态/动作空间中的局限性;
- 通过DDPG算法实现发电公司在不完全信息环境下的稳定竞价策略学习,且能定量反映隐性合谋水平。
二、核心模块功能解析
(一)算法核心模块:实现DDPG、Q-Learning、VRE核心逻辑
该模块包含DDPG.py、QLearning.py、VRE.py及model.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库求解凸二次规划问题,具体步骤如下:
- 参数定义:输入发电公司竞价参数α,加载系统固有参数(如发电公司边际成本斜率β、负荷需求曲线斜率fd、机组功率上下限pmax/pmin、线路潮流限制F等);
- 目标函数构建:以“负荷效用最大化 - 发电成本最小化”为目标,构建二次规划的目标函数矩阵P与线性项向量q;
- 约束条件构建:包含功率平衡约束(发电量=用电量)、线路潮流约束(不超过传输上限)、机组功率约束(不超过pmax/pmin)、负荷需求约束(不超过Dmax),对应构建约束矩阵G与约束向量h;
- 求解与结果输出:调用
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.py、run_DDPG_30-bus.py、run_Q-Learning_3-bus.py、run_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步循环)
- 状态获取:读取上一步节点电价作为当前状态s;
- 动作生成:智能体输出动作a,叠加高斯噪声(探索阶段噪声衰减,测试阶段噪声为0),并通过公式
α=(a+1)*a_real*1.5将动作映射为实际竞价参数(α范围0~3a_real); - 市场出清:调用
three_bus.market_clearing,输入α计算节点电价与利润,利润缩放后作为奖励r; - 经验存储:将(s,a,r,s_)存入经验回放缓冲区;
- 智能体学习:缓冲区填满(1000步后)至9000步,智能体执行
learn方法更新网络参数; - 结果记录:每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),为市场监管提供依据。
(三)复杂场景适应性实验
- 时变负荷场景:加载PJM电力市场的小时级负荷数据(
D_max随时间变化),验证DDPG在动态负荷下的收敛能力,结果显示γ=0/0.5时仍能跟踪各时刻的纳什均衡α*; - 网络阻塞场景:调整线路潮流限制F(如3节点线路1-2的F从10MW增至200MW),发现F越大(阻塞越轻),发电公司竞价参数α越低,市场竞争性越强;
- 多发电公司场景:将30节点系统6家发电公司拆分为12/18/24家(小公司成本不变,功率上下限按比例缩小),结果显示发电公司数量越多,α越低,市场竞争性越强,且DDPG仍能稳定收敛。
五、代码运行与环境依赖
(一)环境配置
- 编程语言:Python 3.7
- 核心库:
- 深度学习:PyTorch 1.0.1(实现DDPG神经网络);
- 数值计算:NumPy(矩阵运算、参数存储);
- 优化求解:cvxopt(市场出清二次规划求解);
- 可视化:Matplotlib(绘制竞价参数曲线);
- 数据处理:Pandas(Q-Learning的Q表存储)。
(二)运行步骤
- 安装依赖库:
pip install torch==1.0.1 numpy cvxopt matplotlib pandas; - 运行对应场景脚本:
- 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:
- 查看结果:脚本运行完成后,在当前目录生成算法对应的竞价参数曲线图片(如
DDPG_3_bus.png),控制台输出每1000步的α、利润、探索噪声数据。
六、代码创新点与应用价值
(一)核心创新点
- 连续空间适配:DDPG通过深度神经网络突破传统RL的离散空间限制,无需对“节点电价”“竞价参数”进行离散化,更贴合电力市场连续决策的实际需求;
- 不完全信息模拟:相比博弈论方法(依赖完全信息),DDPG智能体仅通过自身交互经验学习,可模拟电力市场中发电公司“未知竞争对手成本”的不完全信息场景;
- 隐性合谋定量分析:通过调整折扣因子γ,可定量控制隐性合谋水平,且能输出合谋临界值,为市场力监管提供量化工具。
(二)应用价值
- 发电公司决策支持:可为发电公司提供动态竞价策略,在不同负荷、网络阻塞场景下实现利润最大化;
- 市场设计与监管:可对比不同市场规则(如节点电价机制、线路扩容方案)下的市场竞争性,识别隐性合谋风险;
- 算法基准测试:提供DDPG与传统RL(Q-Learning、VRE)的对比框架,为后续电力市场强化学习算法优化提供基准。
七、后续扩展方向
基于现有代码架构,可从以下方向进一步扩展功能:
- 多市场协同:增加日前市场、实时市场模块,实现发电公司跨市场联合竞价;
- 负荷预测集成:在状态变量中加入负荷预测值,提升竞价策略的前瞻性;
- 多智能体协作优化:引入 MADDPG(多智能体DDPG)算法,考虑发电公司间的协作与竞争动态;
- 风险管控:在奖励函数中加入风险惩罚项(如利润波动),实现“收益-风险”平衡的竞价策略。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)