基于串行并行ADMM算法的主从配电网分布式优化控制研究(Matlab代码实现)

简介: 基于串行并行ADMM算法的主从配电网分布式优化控制研究(Matlab代码实现)

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

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

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

⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

    或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

ADMM算法在分布式调度中的应用 复刻ADMM的论文,主要参考 包括并行算法(Jocobi)和串行算法(Gaussian Seidel, GS) 主要参考文献是下面两篇:

image.gif 编辑

image.gif 编辑

主从配电网分布式优化控制是一种将串行与并行ADMM算法相结合的方法,用于解决配电网中的优化问题。在这种方法中,每个节点都有自己的局部优化问题,通过与其他节点进行通信和协作,最终实现整个配电网的全局优化控制。

首先,每个节点根据自身的局部信息和约束条件,通过串行ADMM算法求解局部优化问题。然后,节点之间通过通信交换信息,将局部解传递给其他节点,同时接收其他节点的局部解。通过并行ADMM算法,各节点之间协作,不断更新局部解,直至达到全局最优解。

这种主从配电网分布式优化控制方法能够有效地解决配电网中的优化问题,提高系统的效率和稳定性。通过合理设计通信机制和优化算法,可以实现节点间的高效协作和信息交换,从而实现整个配电网的优化控制。

image.gif 编辑

image.gif 编辑

基于串行并行ADMM算法的主从配电网分布式优化控制研究

一、研究背景与意义

随着分布式电源(Distributed Generation, DG)在配电网中的渗透率不断提高,传统配电网的运行和控制面临诸多新挑战。分布式电源的接入使得配电网从被动单向供电网络转变为功率双向流动的有源网络,导致潮流分布复杂化,可能出现双向潮流,对电压调节、功率平衡控制以及继电保护等技术提出严峻考验。

主动配电网(Active Distribution Network, ADN)通过采用先进的监测、控制和通信技术,实现对分布式电源、储能装置、负荷等多种元素的协调优化控制,以提升配电网的运行效率、可靠性和电能质量。在主动配电网的运行优化过程中,分布式控制方法因其具有良好的灵活性、可扩展性和鲁棒性,逐渐成为研究的热点。

交替方向乘子法(Alternating Direction Method of Multipliers, ADMM)作为一种有效的分布式优化算法,近年来在电力系统领域得到了广泛应用。ADMM算法能够将复杂的大规模优化问题分解为多个小规模的子问题,这些子问题可以在分布式节点上并行求解,从而大大降低了计算复杂度,提高了计算效率。同时,ADMM算法通过引入乘子变量,能够有效地处理优化问题中的约束条件,使得求解结果更加准确和可靠。

二、ADMM算法简介

ADMM算法是一种用于解决具有可分离结构的凸优化问题的分布式算法。它将原始问题分解为多个子问题,每个子问题在各自的节点上独立求解,并通过迭代更新变量和拉格朗日乘子来实现全局优化。ADMM算法具有形式简单、收敛性好、鲁棒性强等优点,且不要求子优化目标函数严格凸和有限。

ADMM算法的基本原理在于将复杂的全局优化问题分解为更易处理的局部优化问题,然后通过协调步骤使它们协同工作以达到全局最优。它通常涉及以下几个关键步骤:

  1. 主问题优化:关注全局变量。
  2. 辅问题优化:关注局部分解变量。
  3. 乘子更新:通过拉格朗日乘子来协调两者的差异。

三、基于串行ADMM算法的配电网优化

在串行ADMM算法中,大问题被分解成多个小问题进行求解。每个节点根据自身的局部信息和约束条件,通过串行ADMM算法求解局部优化问题。然后,节点之间通过通信交换信息,将局部解传递给其他节点,同时接收其他节点的局部解。通过交替更新变量和拉格朗日乘子,最终实现整个配电网的全局优化控制。

串行ADMM算法的特点

  • 通信需求较低:每次迭代中,一个区域更新完变量后,将更新后的信息传递给下一个需要更新的区域。
  • 求解效率受限:由于变量更新的速度受限于配电网规模和变量数量,串行更新可能导致收敛速度较慢。

四、基于并行ADMM算法的配电网优化

为了进一步提高求解效率,可以采用并行ADMM算法。在并行ADMM算法中,问题被划分成多个部分,每个部分在独立的处理器上并行计算。通过并行计算,可以显著提高算法的计算速度。同时,对并行ADMM算法进行改进,可以提高算法的收敛速度和精度。

并行ADMM算法的特点

  • 求解效率高:多个子问题可以同时进行计算,大大提高了求解效率。
  • 通信需求增加:需要在同一时刻将多个区域的更新信息进行交互和汇总。
  • 适用于变量间耦合性不强的情况:在这种情况下,各个子问题能够相对独立地进行优化,从而充分发挥并行计算的优势。

五、主从配电网分布式优化控制模型构建

主从配电网结构分析

主从配电网结构包含一个主配电网以及多个从配电网。主配电网通常具有较高的电压等级,负责将电力从输电网络分配到各个从配电网。从配电网则电压等级相对较低,直接面向用户和分布式电源。各个从配电网之间以及从配电网与主配电网之间通过联络线相连。这种结构使得配电网的运行变得复杂,不同区域的负荷特性、分布式电源接入情况等都存在差异,需要一种有效的分布式优化控制方法来协调各部分的运行。

分布式优化控制模型

在构建主从配电网分布式优化控制模型时,需要考虑以下因素:

  1. 目标函数:通常包括降低网损、改善电压质量、提高系统稳定性等。
  2. 约束条件:包括功率平衡约束、电压约束、线路容量约束等。
  3. 变量定义:包括节点电压、线路功率、分布式电源出力等。

六、基于串行并行ADMM算法的分布式求解方法

信息交互机制

在串行ADMM算法中,信息交互相对简单。每次迭代中,一个区域更新完变量后,将更新后的信息传递给下一个需要更新的区域。在每次迭代开始前,各区域需要将上一次迭代的相关信息(如边界节点的变量值、拉格朗日乘子等)发送给其他相关区域。然后,各区域根据接收到的所有相关区域的信息,同时进行变量的更新。在更新完成后,各区域再将本次迭代更新后的信息发送给其他区域,以便下一次迭代使用。

在并行ADMM算法中,各区域在每次迭代开始时,需要将上一次迭代的相关信息发送给其他所有相关区域。然后,各区域根据接收到的所有信息,同时进行变量的更新。更新完成后,各区域再将本次迭代更新后的信息发送给其他所有相关区域,以便下一次迭代使用。这种信息交互机制确保了各区域在优化过程中能够充分考虑其他区域的影响,从而实现全局最优。

求解步骤

  1. 初始化:设置初始变量值、拉格朗日乘子、惩罚参数等。
  2. 迭代求解
  • 串行ADMM算法:按照预定的顺序依次更新各区域的变量值,并更新拉格朗日乘子。
  • 并行ADMM算法:各区域同时更新各自的变量值,并更新拉格朗日乘子。
  1. 收敛判断:判断是否满足收敛条件(如目标函数值变化小于阈值、变量值变化小于阈值等)。若满足收敛条件,则停止迭代;否则,继续迭代求解。

七、仿真验证与结果分析

仿真平台与工具

采用MATLAB结合CPLEX/gurobi平台进行仿真分析。MATLAB提供了强大的矩阵运算和编程功能,方便实现算法的流程和逻辑。CPLEX/gurobi是高效的数学规划求解器,能够快速准确地求解配电网优化模型中的子问题。

仿真模型构建

构建一个包含多个分布式电源和负荷的主从配电网模型。主配电网电压等级为110kV,从配电网电压等级为10kV。配电网拓扑结构采用IEEE标准节点系统进行简化和扩展,以模拟实际配电网的复杂结构。分布式电源包括光伏电站和风力发电场,其输出功率根据实际的光照和风速数据进行模拟。负荷采用典型的居民、商业和工业负荷曲线进行建模。

仿真结果分析

通过仿真实验,验证串行并行ADMM算法在配电网优化中的有效性和优越性。仿真结果表明:

  1. 并行ADMM算法在降低网损方面优于串行ADMM算法:并行ADMM算法能够充分利用分布式节点的本地信息,通过高效的信息交互机制,实现全局最优的配电网运行状态,从而降低网损。
  2. 并行ADMM算法在改善电压质量方面优于串行ADMM算法:并行ADMM算法能够更好地协调各区域的电压调节,使得电压波动更小,电压质量更高。
  3. 并行ADMM算法在提高收敛速度方面优于串行ADMM算法:并行ADMM算法通过并行计算,大大提高了算法的计算速度,使得收敛速度更快。

八、结论与展望

研究结论

本文深入研究了基于串行并行ADMM算法的主从配电网分布式优化控制方法。通过详细阐述ADMM算法的原理,包括串行和并行两种模式的特点,构建了主从配电网分布式优化控制模型,提出了基于串行并行ADMM算法的分布式求解方法,并进行了仿真分析。仿真结果表明,并行ADMM算法在降低网损、改善电压质量和提高收敛速度方面优于串行ADMM算法。

研究展望

尽管并行ADMM算法在配电网优化中表现出色,但仍存在一些需要进一步研究和改进的问题:

  1. 通信开销较大:并行ADMM算法需要频繁地进行信息交互,导致通信开销较大。未来可以研究如何降低通信开销,提高通信效率。
  2. 对通信网络的可靠性要求较高:并行ADMM算法的性能受通信网络可靠性的影响较大。未来可以研究如何提高算法对通信网络故障的鲁棒性。
  3. 算法参数设置和迭代策略的优化:未来可以进一步优化算法的参数设置和迭代策略,以提高算法的性能和稳定性。

📚2 运行结果

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

部分代码:

%%ADMM主程序

%%串行计算

clear

clc

%%%区域a,节点33,1-7,18-25

%%耦合为Xa=[U(6),U(7),P(7),Q(7),U(5),U(25),P(25),Q(25)]

Line_a=[1,2,3,4,5,6,7,18,19,20,21,22,23,24,25];

Node_a=[33,1,2,3,4,5,6,18,19,20,21,22,23,24,25];

%%%区域b,节点6-17

%%耦合为Xb=[U(6),U(7),P(7),Q(7)]

Line_b=[7,8,9,10,11,12,13,14,15,16,17];

Node_b=[6,7,8,9,10,11,12,13,14,15,16,17];

%%%区域c,节点5,25-32

%%耦合为Xb=[U(5),U(25),P(25),Q(25)]

Line_c=[25,26,27,28,29,30,31,32];

Node_c=[5,25,26,27,28,29,30,31,32];

%%%%首轮求解

Ploss_data=zeros(32,1);

Volta_data=zeros(33,1);

Qg_data=zeros(33,1);

xigma=0;gama=0;lagrant_a=[0;0;0;0;0;0;0;0];lagrant_b=[0;0;0;0];lagrant_c=[0;0;0;0];

Xa_last=[0;0;0;0;0;0;0;0];Xb_last=[0;0;0;0];Xc_last=[0;0;0;0];

Xa_dual=[0;0;0;0;0;0;0;0];Xb_dual=[0;0;0;0];Xc_dual=[0;0;0;0];

[Xa,Ploss,Volta,Qg]=program_a(lagrant_a,xigma,gama,Xa_last,Xa_dual);

Ploss_data(Line_a)=Ploss(Line_a);Volta_data(Node_a)=Volta(Node_a);Qg_data(Node_a)=Qg(Node_a);

[Xb,Ploss,Volta,Qg]=program_b(lagrant_b,xigma,gama,Xb_last,Xb_dual);

Ploss_data(Line_b)=Ploss(Line_b);Volta_data(Node_b)=Volta(Node_b);Qg_data(Node_b)=Qg(Node_b);

[Xc,Ploss,Volta,Qg]=program_c(lagrant_c,xigma,gama,Xc_last,Xc_dual);

Ploss_data(Line_c)=Ploss(Line_c);Volta_data(Node_c)=Volta(Node_c);Qg_data(Node_c)=Qg(Node_c);

Xa_last=[Xb;Xc];Xb_last=Xa(1:4);Xc_last=Xa(5:8);

Xa_dual=Xa;Xb_dual=Xb;Xc_dual=Xc;

xita=0.5;%阻尼系数

lagrant_a=lagrant_a+xita*xigma*(Xa-[Xb;Xc]);lagrant_b=lagrant_b+xita*xigma*(Xa(1:4)-Xb);lagrant_c=lagrant_c+xita*xigma*(Xa(5:8)-Xc);

figure(1)%目标函数

plot(1,sum(Ploss_data),'m*')

xlabel('迭代次数')

ylabel('总损耗')

hold on

figure(2)%对偶误差

plot(1,norm(Xa-Xa_last,2)^2,'c*-');

xlabel('迭代次数')

ylabel('误差')

hold on

%%%%迭代

for k=1:100

   xigma=3e-3;gama=4e-3;

   [Xa,Ploss,Volta,Qg]=program_a(lagrant_a,xigma,gama,Xa_last,Xa_dual);

   Ploss_data(Line_a)=Ploss(Line_a);Volta_data(Node_a)=Volta(Node_a);Qg_data(Node_a)=Qg(Node_a);

   [Xb,Ploss,Volta,Qg]=program_b(lagrant_b,xigma,gama,Xb_last,Xb_dual);

   Ploss_data(Line_b)=Ploss(Line_b);Volta_data(Node_b)=Volta(Node_b);Qg_data(Node_b)=Qg(Node_b);

   [Xc,Ploss,Volta,Qg]=program_c(lagrant_c,xigma,gama,Xc_last,Xc_dual);

   Ploss_data(Line_c)=Ploss(Line_c);Volta_data(Node_c)=Volta(Node_c);Qg_data(Node_c)=Qg(Node_c);

   Xa_last=[Xb;Xc];Xb_last=Xa(1:4);Xc_last=Xa(5:8);

   Xa_dual=Xa;Xb_dual=Xb;Xc_dual=Xc;

   xita=0.5;%阻尼系数

   lagrant_a=lagrant_a+xita*xigma*(Xa-[Xb;Xc]);lagrant_b=lagrant_b+xita*xigma*(Xa(1:4)-Xb);lagrant_c=lagrant_c+xita*xigma*(Xa(5:8)-Xc);

   lagrant_a=lagrant_a+xigma*(Xa-Xa_last);lagrant_b=lagrant_a(1:4);lagrant_c=lagrant_a(5:8);

   figure(1)

   plot(k+1,sum(Ploss_data),'r*');

   figure(2)

   plot(k+1,norm(Xa-Xa_last,2)^2,'b*-');

end

Ploss_total=sum(Ploss_data)

gap=norm(Xa-Xa_last,2)^2

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1] 梁俊文, 林舜江, 刘明波. 主动配电网分布式无功优化控制方法[J]. 电网技术, 2018(1).

[2] 瞿小斌, 文云峰, 叶希, et al. 基于串行和并行ADMM算法

相关文章
|
21天前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
|
21天前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
107 8
|
21天前
|
机器学习/深度学习 编解码 算法
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
|
3月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
280 2
|
3月前
|
存储 缓存 NoSQL
【📕分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
本文解析 Redisson 如何通过 Redis 实现分布式信号量(RSemaphore)与倒数闩(RCountDownLatch),利用 Lua 脚本与原子操作保障分布式环境下的同步控制,帮助开发者更好地理解其原理与应用。
210 6
|
4月前
|
存储 缓存 NoSQL
Redis核心数据结构与分布式锁实现详解
Redis 是高性能键值数据库,支持多种数据结构,如字符串、列表、集合、哈希、有序集合等,广泛用于缓存、消息队列和实时数据处理。本文详解其核心数据结构及分布式锁实现,帮助开发者提升系统性能与并发控制能力。
|
8月前
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
786 0
分布式爬虫框架Scrapy-Redis实战指南
|
2月前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
168 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
2月前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
4月前
|
NoSQL Redis
Lua脚本协助Redis分布式锁实现命令的原子性
利用Lua脚本确保Redis操作的原子性是分布式锁安全性的关键所在,可以大幅减少由于网络分区、客户端故障等导致的锁无法正确释放的情况,从而在分布式系统中保证数据操作的安全性和一致性。在将这些概念应用于生产环境前,建议深入理解Redis事务与Lua脚本的工作原理以及分布式锁的可能问题和解决方案。
185 8

热门文章

最新文章