基于目标级联分析法的多微网主动配电系统自治优化经济调度算法实践(注释详细,结构完整,适合初学者学习)
GAMS代码:基于目标级联分析法的多微网主动配电系统自治优化经济调度 该代码并非完全复现该文献,而是参照文献 《基于目标级联分析法的多微网主动配电系统自治优化经济调度》 的目标级联分析法(ATC)的算法部分,采用初级的拉格朗日算法,主网与配网部分模型较为简化 代码结构完整,注释详细,可读性较强,可以在此基础上进行修改或者移植 适用于初学者学习ATC模型
一、程序核心定位与设计背景
本GAMS代码旨在实现基于目标级联分析法(ATC)的多微网主动配电系统经济调度优化。代码严格参照《基于目标级联分析法的多微网主动配电系统自治优化经济调度》中ATC算法的核心逻辑,采用初级拉格朗日算法实现分布式优化,同时对主网(配网)与子网(微网)的物理模型进行简化处理。程序的核心意图是通过分散式决策框架,在保障配网与各微网自治性的前提下,实现系统整体运行成本最小化,适用于ATC算法的入门学习与基础模型验证。
二、代码整体结构与流程
1. 代码框架总览
$Ontext ! 文档说明 $Offtext ! 1. 集合定义 sets ... ; ! 2. 参数与初始数据定义 parameters ... ; table ... ; ! 3. 变量定义 variables ... ; positive variables ... ; ! 4. 子问题建模(微网优化模型) equations (微网1) ... ; model subproblem1 /.../; ...(微网2、3同理) ! 5. 主问题建模(配网优化模型) equations (配网) ... ; model masterproblem /.../; ! 6. ATC迭代求解流程 loop(iter$(not converged), solve 3个子问题 → 传递微网交互功率至主问题 solve主问题 → 传递配网交互功率至子问题 收敛判断 → 拉格朗日乘子更新 ); ! 7. 结果输出 display ... ; execute_unload ... ;2. ATC算法执行流程
程序采用"主问题-子问题"双层迭代框架,核心流程如下:
- 初始化拉格朗日乘子与交互功率变量;
- 各微网作为独立子问题,在当前乘子下优化自身运行策略,输出与配网的交互功率需求;
- 配网作为主问题,基于子问题的交互功率需求优化自身运行策略,输出协调后的交互功率;
- 对比主-子问题的交互功率偏差,若满足收敛条件则终止迭代,否则更新拉格朗日乘子并重复步骤2-3。
三、核心模块详细解析
1. 集合与参数定义
(1)核心集合
j:微网编号集合(1,2,3),定义3个独立微网;t:时间区间集合(1-24),对应24小时调度周期;n:配网机组集合(1,2),含2台配网可控机组;h1/h2/h3:各微网机组集合(每微网2台机组);- 电价时段集合:
peak(高峰)、higher(次高峰)、flat(平段)、valley(低谷),用于区分不同时段电价。
(2)关键参数
- 成本系数:配网机组采用二次成本模型
aP² + bP + c(a=0.0004, b=0.25, c=40),微网机组成本系数为d=0.0005, e=0.21, f=30; - 出力约束参数:配网机组最大出力
Pgmax=150,微网机组最大出力Pmtmax1=50(微网1)等; - 交互功率约束:微网与配网的交互功率上限
Pmmax(j)(如微网1为30); - 电价参数:
lambda(t)按时段赋值(高峰1.05、次高峰0.79等); - 迭代参数:收敛精度
0.01,乘子更新步长tau=0.3。
2. 子问题模型(微网优化)
每个微网作为独立子问题,以自身运行成本最小化为目标,模型构成如下:
(1)目标函数(以微网1为例)
subobj1.. cost_m1 =e= sum((h1,t),(d*P_mt1(h1,t)^2 + e*P_mt1(h1,t) + f)) ! 微网机组发电成本 + sum(t,lambda(t)*P_m_m('1',t)) ! 向配网购电成本 + sum(t,w('1',t)*P_m_m('1',t)); ! 拉格朗日协调项- 核心逻辑:微网在优化自身机组出力的同时,通过拉格朗日乘子
w响应配网的协调信号,使自身决策向系统最优方向靠拢。
(2)约束条件
- 机组出力上下限:
Pmt1(h1,t) =l= Pmt_max1(h1); - 交互功率上下限:
Pmm('1',t) =l= Pmmax('1'); - 功率平衡:
sum(h1,Pmt1(h1,t)) + Pm_m('1',t) =e= Pload1('1',t)(机组出力+配网输入=微网负荷)。
3. 主问题模型(配网优化)
配网作为主问题,负责协调各微网交互功率,模型构成如下:
(1)目标函数
masobj.. cost_dn =e= sum((n,t),(a*P_g(n,t)^2 + b*P_g(n,t) + c)) ! 配网机组发电成本 - sum((j,t),lambda(t)*P_d_m(j,t)) ! 向微网售电收益 + sum((j,t),w(j,t)*P_d_m(j,t)); ! 拉格朗日协调项- 核心逻辑:配网在优化自身机组出力的同时,通过拉格朗日乘子
w引导微网调整交互功率,实现系统层面的功率平衡。
(2)约束条件
- 配网机组出力上下限:
Pg(n,t) =l= Pg_max(n); - 交互功率上下限:
Pdm(j,t) =l= Pmmax(j); - 功率平衡:
sum(n,Pg(n,t)) - sum(j,Pd_m(j,t)) =e= Pload('1',t)(配网机组出力-向微网输出=配网负荷)。
4. 迭代求解模块
(1)核心迭代逻辑
loop(iter$(not converged), ! 求解3个微网子问题 solve subproblem1 minimizing cost_m1 using qcp; solve subproblem2 minimizing cost_m2 using qcp; solve subproblem3 minimizing cost_m3 using qcp; ! 传递微网交互功率至主问题 nP_m_m(j,t) = P_m_m.l(j,t); ! 求解配网主问题 solve masterproblem minimizing cost_dn using qcp; ! 传递配网交互功率至子问题 nP_d_m(j,t) = P_d_m.l(j,t); ! 收敛判断:交互功率偏差小于0.01 converged$(smax((j,t),abs(P_d_m.l(j,t)-P_m_m.l(j,t))) < 0.01) = 1; ! 拉格朗日乘子更新 w(j,t) = w(j,t) + tau*(P_d_m.l(j,t)-P_m_m.l(j,t)); );(2)关键机制
- 分布式求解:子问题可独立并行求解,体现各微网的自治性;
- 耦合变量协调:通过
Pmm(微网需求)与Pdm(配网分配)的偏差反馈,动态调整拉格朗日乘子; - 收敛条件:当所有时段、所有微网的交互功率偏差均小于0.01时,认为达到协调最优。
四、结果输出与数据交互
程序通过三类方式输出结果:
display命令:在GAMS输出窗口显示核心变量(如各主体成本、收敛标志);execute_unload:将变量存储为GDX格式文件,便于后续调用;gdxxrw工具:将关键变量(如交互功率、机组出力)导出至Excel文件(wlh.xls),包含24小时时序数据,支持可视化分析。
五、程序特点与局限性
1. 核心特点
- 忠实还原ATC算法框架:严格遵循"主-子问题解耦-协调"的分布式优化逻辑;
- 模型简化但结构完整:剥离复杂约束(如随机性、爬坡约束),聚焦算法流程,适合入门学习;
- 自治性体现:微网与配网仅通过交互功率和拉格朗日乘子传递信息,无集中式决策干预。
2. 局限性
- 物理模型简化:未考虑储能设备、可再生能源随机性等实际因素;
- 算法初级性:采用基础拉格朗日算法,未实现文献中的增强拉格朗日改进;
- 场景固定:微网数量(3个)、机组参数等均为预设,需手动修改以适应其他场景。
六、使用说明
- 环境要求:GAMS 24.0及以上版本(支持QCP求解器),Excel(用于接收导出数据);
- 运行步骤:
- 复制代码至GAMS编辑器,检查集合与参数定义;
- 直接运行(默认参数可求解),或修改负荷、成本系数等参数后运行;
- 在输出窗口查看收敛状态,通过Excel文件分析详细结果; - 结果验证:重点关注
converged是否为1(收敛标志),以及主-子问题交互功率偏差是否满足精度要求。
本程序的核心价值在于提供一个可运行的ATC算法基础框架,通过简化模型帮助初学者理解分布式优化中"自治决策"与"系统协调"的平衡机制,为后续扩展复杂场景奠定基础。
GAMS代码:基于目标级联分析法的多微网主动配电系统自治优化经济调度 该代码并非完全复现该文献,而是参照文献 《基于目标级联分析法的多微网主动配电系统自治优化经济调度》 的目标级联分析法(ATC)的算法部分,采用初级的拉格朗日算法,主网与配网部分模型较为简化 代码结构完整,注释详细,可读性较强,可以在此基础上进行修改或者移植 适用于初学者学习ATC模型
