👨🎓个人主页
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
💥1 概述
编辑
摘要:
该文提出一种分布式交变方向乘数法(ADMMs)方法,用于解决含碳排放交易的直流动态最优潮流(dc-DOPF-CET)问题。通常,基于ADMM的分布式方法在相邻子系统之间公开边界总线和分支信息。与这些方法相反,所提出的方法(dc-ADMM-P)采用了一种新的策略,即使用共识ADMM求解dc-DOPF-CET的对偶,同时仅公开相邻子系统之间的边界分支信息。此外,通过减少双乘法器的数量并采用改进的乘法器更新步骤,提高了dc-ADMM-P的收敛性能。DC-ADMM-P 在 6 到 1062 条总线的案例中进行了测试,并与其他分布式/分布式方法进行了比较。仿真结果验证了dc-ADMM-P在解决具有复(非线性)因子的dc-DOPF问题方面的高效率,这些因子可以表述为凸可分函数。同时,通过减少双乘数的数量和采用新的乘法器更新策略,展示了收敛性能的提高。
基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究
一、分布式ADMM算法的核心原理与优势
ADMM(交替方向乘子法)是一种分布式优化框架,通过分解原问题为多个子问题并行求解,适用于电力系统的大规模优化场景。其核心步骤包括:
- 变量分解与交替更新:将原问题分解为局部变量(如各区域发电计划)和全局变量(如碳排放约束),通过交替更新变量实现协调优化。
- 对偶变量调整:引入拉格朗日乘子(对偶变量)处理约束条件(如功率平衡、碳排放配额),通过乘子更新实现全局收敛。
- 分布式实现:各节点仅需本地数据和部分全局信息,无需集中式控制,保护隐私并降低通信开销。
优势:
- 可扩展性:适用于多区域、多主体的电力系统(如微网群、交直流混合电网)。
- 鲁棒性:对噪声和计算误差具有容忍度,适合动态调度场景。
- 效率:通过并行计算加速大规模问题求解,减少单点计算瓶颈。
二、碳排放交易机制与电力系统调度的融合
- 碳排放核算与责任划分
- 源-网-荷全环节追踪:基于碳流理论动态计算节点碳排放因子,明确发电侧、输配侧、用户侧的碳排放责任。
- 动态碳排放因子:结合实时潮流和发电类型(火电、风电等),动态调整碳排放成本权重。
- 碳交易机制设计
- 配额分配:根据发电量或历史排放水平分配免费配额,超额部分需购买。
- 阶梯碳价模型:将碳排放量与配额差值划分为区间,碳价随超额量递增,激励低碳调度。
- 市场联动:通过“电-碳”协同机制,将碳价与电价动态绑定,引导清洁能源消纳。
三、电力系统优化调度的多目标建模
目标函数:
- 经济性:最小化发电成本(燃料成本、机组启停)+ 碳排放交易成本。
编辑 - 环保性:减少系统总碳排放量,满足配额约束。
- 可靠性:保证功率平衡、电压稳定及备用容量。
核心约束:
- 碳排放约束:各区域碳排放量 ≤ 配额 ± 交易量。
- 设备运行限制:火电机组爬坡速率、储能充放电周期、可再生能源出力波动。
- 网络约束:线路潮流安全、节点电压范围。
四、ADMM与碳交易结合的调度框架
- 问题分解:
- 将电力系统划分为多个子区域(如微网、配电网),每个区域独立优化本地发电计划及碳排放量。
- 全局协调变量包括碳排放配额分配、跨区域功率交换等。
- 迭代流程:
- 编辑
- 步骤2(全局协调) :更新碳排放配额交易量及对偶变量,确保跨区域约束(如总碳排放上限)。
- 终止条件:原始残差(发电计划差异)与对偶残差(碳排放约束偏差)均小于阈值。
案例:
- 多微网协同调度:通过ADMM实现微网间电能共享,碳排放成本降低12%-15%。
- 配电网优化:在IEEE 118节点系统中,结合阶梯碳价模型,ADMM算法收敛速度较传统方法提升30%。
五、碳排放交易对经济调度的影响机制
- 成本驱动:碳价升高迫使高排放机组减少出力,转向低碳机组或储能。
- 实证结果:碳价从50元/吨增至200元/吨时,火电碳排放强度下降8%-15%。
- 技术激励:促进可再生能源消纳与储能调峰,优化系统潮流分布。
- 储能作用:在峰谷时段充放电替代火电尖峰出力,降低碳交易成本约20%。
- 市场响应:碳配额交易与电力市场联动,形成动态电价信号,引导用户侧需求响应。
六、未来研究方向
- 算法改进:
- 加速ADMM:引入随机变量更新顺序(RAC-ADMM)或梯度加速,提升收敛速度。
- 多时间尺度耦合:结合日内滚动调度(15分钟级)与中长期碳配额交易。
- 机制创新:
- 区块链技术:实现碳配额的去中心化交易与溯源。
- 动态责任因子:基于实时碳流追踪优化配额分配。
- 跨领域协同:
- 电-气-热多能流联合优化,扩展ADMM应用场景。
七、结论
分布式ADMM算法与碳排放交易机制的结合,为电力系统低碳调度提供了高效解决方案:
- 技术层面:通过分布式优化降低计算复杂度,适应大规模系统。
- 经济层面:碳交易内化环境成本,推动能源结构转型。
- 政策层面:为“双碳”目标下的电力市场设计提供理论支撑。
未来需进一步探索算法鲁棒性、市场机制灵活性及多主体博弈行为,以实现电力系统的安全、经济与环保协同优化。
📚2 运行结果
2.1 数据来源:
% FileName = 'SCUC_dat/SCUC6.txt'; %Corresponding to the 6-bus System;对应文中6bus例子 % FileName = 'SCUC_dat/SCUC30.txt'; %Corresponding to the 30-bus System;对应文中30bus例子 % FileName = 'SCUC_dat/SCUC6-2.txt'; %Corresponding to the 6-bus System in literature [7];对应文献[7]中的6-bus system % FileName = 'SCUC_dat/SCUC1062-2.txt'; %Corresponding to the 1062-bus System;对应文中1062-bus例子 % FileName = 'SCUC_dat/RTS48.txt'; %Corresponding to the RTS-48 bus system.The test system can obtain from [44];对应文中RTS0-48 bus例子 FileName = 'SCUC_dat/DDOPF118.txt'; %Corresponding to the 118-bus system in literature [7];对应文献[7]中的118-bus system
% FileName = 'SCUC_dat/SCUC6.txt'; %Corresponding to the 6-bus System;对应文中6bus例子
% FileName = 'SCUC_dat/SCUC30.txt'; %Corresponding to the 30-bus System;对应文中30bus例子
% FileName = 'SCUC_dat/SCUC6-2.txt'; %Corresponding to the 6-bus System in literature [7];对应文献[7]中的6-bus system
% FileName = 'SCUC_dat/SCUC1062-2.txt'; %Corresponding to the 1062-bus System;对应文中1062-bus例子
% FileName = 'SCUC_dat/RTS48.txt'; %Corresponding to the RTS-48 bus system.The test system can obtain from [44];对应文中RTS0-48 bus例子
FileName = 'SCUC_dat/DDOPF118.txt'; %Corresponding to the 118-bus system in literature [7];对应文献[7]中的118-bus system
编辑
编辑
编辑
编辑
部分代码:
%Read datas FileIndex = strfind(FileName,'/'); if isequal(FileName(FileIndex+1:FileIndex+5),'DDOPF') %Corresponding to the 'SCUC_dat/DDOPF.......txt' files;DDOPF数据不考虑CET,但考虑DR;;不存在一个节点上有多个机组的情况 isRTS = 'no'; %默认值,default value is 'no' includeDR = 'yes'; %默认值,default value is 'yes' includeCet = 'no'; %默认值,default value is 'no' parameter.includeDR = includeDR; parameter.includeCet = includeCet; parameter.isRTS = isRTS; SCUC_data = ReadDataDCDOPF(FileName,parameter); elseif isequal(FileName(FileIndex+1:FileIndex+3),'RTS') %%Corresponding to the 'SCUC_dat/RTS.......txt' files;RTS数据不考虑CET和DR;存在一个节点上有多个机组的情况 isRTS = 'yes'; %是否使用RTS数据,'yes'为使用RTS数据,'no'为不适用RTS数据。,default value is 'yes' includeDR = 'no'; %默认值,default value is 'no' includeCet = 'no'; %默认值,default value is 'no' parameter.isRTS = isRTS; parameter.includeDR = includeDR; parameter.includeCet = includeCet; SCUC_data = ReadDataDCDOPF(FileName,parameter); elseif isequal(FileName(FileIndex+1:FileIndex+4),'SCUC')%SCUC数据 %%Corresponding to the 'SCUC_dat/SCUC.......txt' files;本文SCUC数据,不考虑DR;不存在一个节点上有多个机组的情况 isRTS = 'no'; %默认值,default value is 'no' includeDR = 'no'; %默认值,default value is 'no' parameter.includeDR = includeDR; parameter.includeCet = includeCet; SCUC_data = ReadDataSCUC(FileName,parameter); end T = SCUC_data.totalLoad.T; % The number of time periods. 时段数T G = SCUC_data.units.N; % The total number of units.发电机数 N = SCUC_data.baseparameters.busN; % The total number of buses.节点总数 %The partition in test system; 下面的代码生成{1,...,N}的一个划分 PI best_partition = 1; % Default value is 1;=1 直接按照最好的划分方式划分 =0,则按照给定n来划分 [PI, allNode,PINumber] = partitionNode(SCUC_data.baseparameters.busN,N,best_partition,partionMethod); n = size(PI,1); %The number of partition set; 划分的子集个数 %Calculate the network admittance matrix;获取潮流节点导纳矩阵B Y = SCUC_nodeY(SCUC_data, type_of_pf); B = -Y.B; %Corresponding to the section III-C. Identifying "real" coupling constraints. 识别耦合节点 和耦合支路,片区改进 [partitionData] = partitionDataPI(SCUC_data, PI ,PINumber,useImprovedPratition,includeDR,isRTS); %Corresponding to (17). 形成系数矩阵A A_ii 潮流方程中可分离的那部分 A_wan是DC潮流中所有的耦合约束 A_wan_0是A_wan 中对应排放变量x0的系数矩阵 [A_wan_0, A_wan_i, A_ii, b_A_ii, b_A_wan_i] = formMatrixA(SCUC_data, partitionData,n ,B,includeDR,isRTS); %Corresponding to (18) in final manuscript. 下面形成系数矩阵M [M_wan_0, M_wan_i, M_ii, b_M_ii, b_M_wan_i] = formMatrixM(SCUC_data, partitionData,n ,B,includeDR,isRTS); %Corresponding to (19). 下面形成排放二次约束 QC4Emission = formQC4Emission(SCUC_data, partitionData,n,includeCet,includeDR,isRTS); %Solving test system with Cplex;集中式让Cplex求,Cplex计算结果作为参照值,参数意义见函数yanZheng内的说明 [ eb,es,xx,st,dr,hr,fval,pf,pf_t,fd_t,output ] = yanZheng( A_wan_i, A_ii, b_A_ii, b_A_wan_i, M_wan_i, M_ii, b_M_ii, b_M_wan_i, partitionData, SCUC_data ,B,includeCet,includeDR,isRTS,QC4Emission); p_index = find(~ismember(xx(:,1),0)==1); %RP用到了 disp(output.cplexstatusstring);
%Read datas
FileIndex = strfind(FileName,'/');
if isequal(FileName(FileIndex+1:FileIndex+5),'DDOPF')
%Corresponding to the 'SCUC_dat/DDOPF.......txt' files;DDOPF数据不考虑CET,但考虑DR;;不存在一个节点上有多个机组的情况
isRTS = 'no'; %默认值,default value is 'no'
includeDR = 'yes'; %默认值,default value is 'yes'
includeCet = 'no'; %默认值,default value is 'no'
parameter.includeDR = includeDR;
parameter.includeCet = includeCet;
parameter.isRTS = isRTS;
SCUC_data = ReadDataDCDOPF(FileName,parameter);
elseif isequal(FileName(FileIndex+1:FileIndex+3),'RTS')
%%Corresponding to the 'SCUC_dat/RTS.......txt' files;RTS数据不考虑CET和DR;存在一个节点上有多个机组的情况
isRTS = 'yes'; %是否使用RTS数据,'yes'为使用RTS数据,'no'为不适用RTS数据。,default value is 'yes'
includeDR = 'no'; %默认值,default value is 'no'
includeCet = 'no'; %默认值,default value is 'no'
parameter.isRTS = isRTS;
parameter.includeDR = includeDR;
parameter.includeCet = includeCet;
SCUC_data = ReadDataDCDOPF(FileName,parameter);
elseif isequal(FileName(FileIndex+1:FileIndex+4),'SCUC')%SCUC数据
%%Corresponding to the 'SCUC_dat/SCUC.......txt' files;本文SCUC数据,不考虑DR;不存在一个节点上有多个机组的情况
isRTS = 'no'; %默认值,default value is 'no'
includeDR = 'no'; %默认值,default value is 'no'
parameter.includeDR = includeDR;
parameter.includeCet = includeCet;
SCUC_data = ReadDataSCUC(FileName,parameter);
end
T = SCUC_data.totalLoad.T; % The number of time periods. 时段数T
G = SCUC_data.units.N; % The total number of units.发电机数
N = SCUC_data.baseparameters.busN; % The total number of buses.节点总数
%The partition in test system; 下面的代码生成{1,...,N}的一个划分 PI
best_partition = 1; % Default value is 1;=1 直接按照最好的划分方式划分 =0,则按照给定n来划分
[PI, allNode,PINumber] = partitionNode(SCUC_data.baseparameters.busN,N,best_partition,partionMethod);
n = size(PI,1); %The number of partition set; 划分的子集个数
%Calculate the network admittance matrix;获取潮流节点导纳矩阵B
Y = SCUC_nodeY(SCUC_data, type_of_pf);
B = -Y.B;
%Corresponding to the section III-C. Identifying "real" coupling constraints. 识别耦合节点 和耦合支路,片区改进
[partitionData] = partitionDataPI(SCUC_data, PI ,PINumber,useImprovedPratition,includeDR,isRTS);
%Corresponding to (17). 形成系数矩阵A A_ii 潮流方程中可分离的那部分 A_wan是DC潮流中所有的耦合约束 A_wan_0是A_wan 中对应排放变量x0的系数矩阵
[A_wan_0, A_wan_i, A_ii, b_A_ii, b_A_wan_i] = formMatrixA(SCUC_data, partitionData,n ,B,includeDR,isRTS);
%Corresponding to (18) in final manuscript. 下面形成系数矩阵M
[M_wan_0, M_wan_i, M_ii, b_M_ii, b_M_wan_i] = formMatrixM(SCUC_data, partitionData,n ,B,includeDR,isRTS);
%Corresponding to (19). 下面形成排放二次约束
QC4Emission = formQC4Emission(SCUC_data, partitionData,n,includeCet,includeDR,isRTS);
%Solving test system with Cplex;集中式让Cplex求,Cplex计算结果作为参照值,参数意义见函数yanZheng内的说明
[ eb,es,xx,st,dr,hr,fval,pf,pf_t,fd_t,output ] = yanZheng( A_wan_i, A_ii, b_A_ii, b_A_wan_i, M_wan_i, M_ii, b_M_ii, b_M_wan_i, partitionData, SCUC_data ,B,includeCet,includeDR,isRTS,QC4Emission);
p_index = find(~ismember(xx(:,1),0)==1); %RP用到了
disp(output.cplexstatusstring)
🎉3 参考文献
部分理论来源于网络,如有侵权请联系删除。
[1]L. Yang, J. Luo, Y. Xu, Z. Zhang and Z. Dong, "A Distributed Dual Consensus ADMM Based on Partition for DC-DOPF With Carbon Emission Trading," in IEEE Transactions on Industrial Informatics, vol. 16, no. 3, pp. 1858-1872, March