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

本文涉及的产品
视频直播,500GB 1个月
简介: 【ADMM、碳排放】基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究【IEEE6节点、IEEE30节点、IEEE118节点】(Matlab代码实现)

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


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


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


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


目录


💥1 概述


📚2 运行结果


🎉3 参考文献


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


💥1 概述

文献来源:


f1d07409d05142498d5a5b1db54cc657.png


摘要:


该文提出一种分布式交变方向乘数法(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

1dcc0d69961c4e82b81fbea05f4695fa.pngc63e49a9970d4aa8a7298ea8118b6831.pngdf0171c716e14b0ab177eb8fd2c41c7c.pnga9b83ec5c8c347fd8d15a73a8e37f839.png


部分代码:

%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代码、数据、文章讲解


相关文章
|
29天前
|
算法
基于GA遗传优化的TSP问题最优路线规划matlab仿真
本项目使用遗传算法(GA)解决旅行商问题(TSP),目标是在访问一系列城市后返回起点的最短路径。TSP属于NP-难问题,启发式方法尤其GA在此类问题上表现出色。项目在MATLAB 2022a中实现,通过编码、初始化种群、适应度评估、选择、交叉与变异等步骤,最终展示适应度收敛曲线及最优路径。
|
1月前
|
算法 BI Serverless
基于鱼群算法的散热片形状优化matlab仿真
本研究利用浴盆曲线模拟空隙外形,并通过鱼群算法(FSA)优化浴盆曲线参数,以获得最佳孔隙度值及对应的R值。FSA通过模拟鱼群的聚群、避障和觅食行为,实现高效全局搜索。具体步骤包括初始化鱼群、计算适应度值、更新位置及判断终止条件。最终确定散热片的最佳形状参数。仿真结果显示该方法能显著提高优化效率。相关代码使用MATLAB 2022a实现。
|
1月前
|
算法
基于GA遗传优化的离散交通网络双层规划模型设计matlab仿真
该程序基于GA遗传优化设计了离散交通网络的双层规划模型,以路段收费情况的优化为核心,并通过一氧化碳排放量评估环境影响。在MATLAB2022a版本中进行了验证,显示了系统总出行时间和区域排放最小化的过程。上层模型采用多目标优化策略,下层则确保总阻抗最小,实现整体最优解。
|
15天前
|
算法
基于ACO蚁群优化的UAV最优巡检路线规划算法matlab仿真
该程序基于蚁群优化算法(ACO)为无人机(UAV)规划最优巡检路线,将无人机视作“蚂蚁”,巡检点作为“食物源”,目标是最小化总距离、能耗或时间。使用MATLAB 2022a版本实现,通过迭代更新信息素浓度来优化路径。算法包括初始化信息素矩阵、蚂蚁移动与信息素更新,并在满足终止条件前不断迭代,最终输出最短路径及其长度。
|
18天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了一种结合粒子群优化(PSO)与分组卷积神经网络(GroupCNN)的时间序列预测算法。该算法通过PSO寻找最优网络结构和超参数,提高预测准确性与效率。软件基于MATLAB 2022a,提供完整代码及详细中文注释,并附带操作步骤视频。分组卷积有效降低了计算成本,而PSO则智能调整网络参数。此方法特别适用于金融市场预测和天气预报等场景。
|
24天前
|
机器学习/深度学习 算法 数据挖掘
基于GWO灰狼优化的CNN-LSTM的时间序列回归预测matlab仿真
本项目展示了一种结合灰狼优化(GWO)与深度学习模型(CNN和LSTM)的时间序列预测方法。GWO算法高效优化模型超参数,提升预测精度。CNN提取局部特征,LSTM处理长序列依赖,共同实现准确的未来数值预测。项目包括MATLAB 2022a环境下运行的完整代码及视频教程,代码内含详细中文注释,便于理解和操作。
|
2月前
|
数据采集 算法
基于PSO粒子群算法的三角形采集堆轨道优化matlab仿真
该程序利用PSO算法优化5个4*20矩阵中的模块采集轨迹,确保采集的物品数量及元素含量符合要求。在MATLAB2022a上运行,通过迭代寻优,选择最佳模块组合并优化轨道,使采集效率、路径长度及时间等综合指标最优。具体算法实现了粒子状态更新、需求量差值评估及轨迹优化等功能,最终输出最优轨迹及其相关性能指标。
|
2月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
73 2
基于Redis的高可用分布式锁——RedLock
|
2月前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
|
3月前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
下一篇
无影云桌面