【ADMM、碳排放】基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究【IEEE6节点、IEEE30节点、IEEE118节点】(Matlab代码实现)

 👨‍🎓个人主页:研学社的博客    

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码、数据、文章讲解


💥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问题方面的高效率,这些因子可以表述为凸可分函数。同时,通过减少双乘数的数量和采用新的乘法器更新策略,展示了收敛性能的提高。

原文摘要: 

 

Abstract:

This article presents a distributed alternating direction method of multipliers (ADMMs) approach for solving the direct current dynamic optimal power flow with carbon emission trading (dc-DOPF-CET) problem. Generally, the ADMM-based distributed approaches disclose boundary buses and branches information among adjacent subsystems. As opposed to these methods, the proposed method (dc-ADMM-P) adopts a novel strategy which uses consensus ADMM to solve the dual of dc-DOPF-CET while only discloses boundary branches information among adjacent subsystems. Moreover, the convergence performance of dc-ADMM-P is improved by reducing the number of dual multipliers and employing an improved update step of the multiplier. DC-ADMM-P is tested on cases ranging from 6 to 1062 buses, with comparison with other distributed/decentralized methods. The simulation results verify the high efficiency of dc-ADMM-P in solving the dc-DOPF problem with complex (nonlinear) factors which can be formulated as convex separable functions. Meanwhile, it also shows the improvement of convergence performance by reducing the number of dual multipliers and employing a new update strategy for the multiplier.

 

ADMM非常适合分布式凸优化,特别是对于OPF [22],[23]等大规模问题。这种方法是在1970年代开发的,起源于1950年代[24]。它可以被视为尝试将双重分解和增强拉格朗日方法的优点混合在一起,以实现约束优化。有趣的是,在没有调谐的情况下,ADMM可以在某些问题上与最知名的方法竞争。在[13]中,ADMM的一般形式被引入,并从两块ADMM扩展到N块ADMM。此外,本文还重点介绍了两种基于ADMM的分布式并行优化算法:共识ADMM(C-ADMM)和雅可比近端ADMM(JP-ADMM)。C-ADMM和JP-ADMM在DC-OPF中的数值结果表明,ADMM作为电网分布式并行算法是有效的。[7]中提出了一种没有中央控制器的完全分布式基于共识的ADMM,用于具有需求响应(DR)的dc-OPF。该方法采用一种新的通信策略,通过全局共识变量进行协调,即相邻子系统边界总线上的相位角。在[14]中,提出了基于ADMM结合顺序凸近似的D-OPF。集中式OPF被分解为对应于每个总线的子问题,其中子问题的解决方案与总线之间的光通信协议进行协调。在 [15] 中,基于 ADMM 的算法已应用于 OPF。

📚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 2020, doi: 10.1109/TII.2019.2937513.

🌈4 Matlab代码、数据、文章讲解

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值