Jaya算法在电力系统最优潮流计算中的应用(创新点)【Matlab代码实现】

news2024/10/5 17:21:04

目录

1 概述

2 数学模型

2.1 目标函数

2.2 约束条件 

2.3 Jaya 算法

3 仿真结果 

4 Matlab代码实现


1 概述

 最优潮流计算与电力系统的稳定、经济运行密切相关,自20世纪60年代提出最优潮流的概念,大量学者相继提出了各种优化技术来求解电力系统的最优潮流问题。Jaya算法是于2016年提出的一种简单高效的新型优化算法,具有收敛快寻优强的特点。算例在IEEE39节点上实现。

2 数学模型

2.1 目标函数

           

目标函数(Matlab代码实现) 

function [F,Plosses] = ObjectiveFunction(V_o,line_o,Bgen,Theta_o,nbranch,FromNode,ToNode,PQ)
%% 该函数计算目标函数,包含惩罚项因子
for k=1:nbranch
    a(k)=line_o(k,6);
    if a(k)==0 % 在这种情况下,我们正在分析线路
        Zpq(k)=line_o(k,3)+1i*line_o(k,4); % 线路阻抗
        Ypq(k)=Zpq(k)^-1; % 线路导纳
        gpq(k)=real(Ypq(k)); % 线路电导
        %+++++++++++目标函数1,系统网损+++++++++++
        Llpq(k)=gpq(k)*(V_o(FromNode(k))^2 +V_o(ToNode(k))^2 -2*V_o(FromNode(k))*V_o(ToNode(k))*cos(Theta_o(FromNode(k))-Theta_o(ToNode(k))));
    end
end
%% 有功总损耗
Plosses=sum(Llpq);
%% 目标函数
KL=1000; % 惩罚因子
for k=1:length(PQ)
    %% 负载电压偏移(0.95~1.05)
    if V_o(k+length(Bgen))<0.95   %电压偏移小于0.95
        DVL(k)=0.95-V_o(k+length(Bgen));  %惩罚项1
    end
    if V_o(k+length(Bgen))>1.05    %电压偏移大于1.05
        DVL(k)=V_o(k+length(Bgen))-1.05;  %惩罚项2
    end
    if V_o(k+length(Bgen))>=0.95    %电压偏移如果在0.95~1.05之间
        if V_o(k+length(Bgen))<=1.05
            DVL(k)=0;               %电压偏移惩罚项为零
        end
    end
end
DVLoads=sum(DVL.*DVL);
Z=Plosses+KL*DVLoads; %目标函数
F=Z; % 目标函数
end

function [F,Plosses] = ObjectiveFunction(V_o,line_o,Bgen,Theta_o,nbranch,FromNode,ToNode,PQ)
%% 该函数计算目标函数,包含惩罚项因子
for k=1:nbranch
    a(k)=line_o(k,6);
    if a(k)==0 % 在这种情况下,我们正在分析线路
        Zpq(k)=line_o(k,3)+1i*line_o(k,4); % 线路阻抗
        Ypq(k)=Zpq(k)^-1; % 线路导纳
        gpq(k)=real(Ypq(k)); % 线路电导
        %+++++++++++目标函数1,系统网损+++++++++++
        Llpq(k)=gpq(k)*(V_o(FromNode(k))^2 +V_o(ToNode(k))^2 -2*V_o(FromNode(k))*V_o(ToNode(k))*cos(Theta_o(FromNode(k))-Theta_o(ToNode(k))));
    end
end
%% 有功总损耗
Plosses=sum(Llpq);
%% 目标函数
KL=1000; % 惩罚因子
for k=1:length(PQ)
    %% 负载电压偏移(0.95~1.05)
    if V_o(k+length(Bgen))<0.95   %电压偏移小于0.95
        DVL(k)=0.95-V_o(k+length(Bgen));  %惩罚项1
    end
    if V_o(k+length(Bgen))>1.05    %电压偏移大于1.05
        DVL(k)=V_o(k+length(Bgen))-1.05;  %惩罚项2
    end
    if V_o(k+length(Bgen))>=0.95    %电压偏移如果在0.95~1.05之间
        if V_o(k+length(Bgen))<=1.05
            DVL(k)=0;               %电压偏移惩罚项为零
        end
    end
end
DVLoads=sum(DVL.*DVL);
Z=Plosses+KL*DVLoads; %目标函数
F=Z; % 目标函数
end

 

2.2 约束条件 

              

2.3 Jaya 算法

Jaya 算法是 Rao 等提出的一种元启发式算法,它基于持续改进的原理,将个体不断向优秀个体靠拢,同时不断远离差的个体,进而不断提高解的质量。传统 Jaya 算法主要基于迭代公式,每次通过该方程迭代进化获取新的解,因此 Jaya 算法不像其他进化算法需要许多的参数,它只需要针对特定问题调整迭代过程的参数,减少了因为调整过多参数而带来的测试上的麻烦。与其它元启发式算法相比,Jaya 算法更容易理解和实现。该算法的迭代公式如下所示:

 

 Jaya优化算法流程图如下:

            在这里插入图片描述

目标函数: 

%% 基于Jaya算法的电力系统最优潮流

%% 有功损耗最小化
clear all;
close all;
clc

%% ++++++++++++++++电力系统数据库+++++++++++++++
% 下面的文件包含了母线、线路矩阵等电力系统拓扑信息
data_39;
% 线路类型和发电机
bus_o=bus; line_o=line;
slack=find(bus(:,10)==1); % 松弛节点/平衡节点
PV=find(bus(:,10)==2);   % PV节点
Bgen=vertcat(slack,PV);     %平衡节点和松弛节点【C = vertcat(A,B) 将 B 垂直串联到 A 的末尾。】
PQ=find(bus(:,10)==3);   % PQ节点/负荷节点

%% +++++++++++++++ 优化算法的参数 ++++++++++++++++
pop =  210;                                % 种群规模
n_itera = 35;                             % 优化算法迭代次数
Vmin=0.95;                                % 发电机电压的最小值
Vmax=1.05;                                % 发电机电压的最大值
mini_tap = 0.95;                          % TAP的最小值
maxi_tap = 1.05;                          % TAP的最大值
Smin=-0.5;                                % 视在功率最小值
Smax=0.5;                                 % 视在功率最大值
pos_Shunt = find( bus(:,11) ~= 0);        % 母线矩阵中分流点的位置
pos_tap = find( line(:,6) ~= 0);          % TAPs在行矩阵中的位置
tap_o = line(pos_tap,6);                  % TAPs初始值
Shunt_o = bus(pos_Shunt,9);               %分流器的初始值
n_tap = length(pos_tap);                  % TAPs的数量
n_Shunt = length(pos_Shunt);              % 分流器的数量
n_nodos = length(bus(:,1));               % 电力系统的节点数量

%% ++++++++++++++++ 第一:运行基本情况下的潮流 ++++++++++++++++
% 存储基本情况的电压和相角
[V_o,Theta_o,~] = PowerFlowClassical(bus_o,line_o);
%% +++++++++++++++++++计算有功功率损耗++++++++++++++++++++++
nbranch=length(line_o(:,1));
FromNode=line_o(:,1);
ToNode=line_o(:,2);
for k=1:nbranch
    a(k)=line_o(k,6);
    if a(k)==0 % 在这种情况下,我们正在分析线路
        Zpq(k)=line_o(k,3)+1i*line_o(k,4); % 线路的阻抗
        Ypq(k)=Zpq(k)^-1; % 线路导纳
        gpq(k)=real(Ypq(k)); % 线路电导
        % 对应线路有功损耗
        Llpq(k)=gpq(k)*(V_o(FromNode(k))^2 +V_o(ToNode(k))^2 -2*V_o(FromNode(k))*V_o(ToNode(k))*cos(Theta_o(FromNode(k))-Theta_o(ToNode(k))));
    end
end
% 有功总损耗
Plosses=sum(Llpq);
%% +++++++++++++++++++++++++++ 最优潮流 ++++++++++++++++++++++++++
% 启动种群
for k=1:n_tap % 启动TAP种群
    x_tap(:,k) = mini_tap +(maxi_tap - mini_tap)*(0.1*floor((10*rand(pop,1))));
end 
for k=1:n_Shunt % 启动分流种群
     x_shunt(:,k) = Smin +(Smax - Smin)*(0.1*floor((10*rand(pop,1))));
end
for k=1:length(Bgen) % 从发电机启动电压的种群
    x_vg(:,k) = Vmin +(Vmax - Vmin)*(0.1*floor((10*rand(pop,1))));
end
%% JAYA 算法
for k=1:n_itera
    % 使用TAP的新值,分流和发电机电压重新计算电压和节点导纳
    %修改线路和母线矩阵
    for p=1:pop
        for q=1:n_tap
            r=pos_tap(q);
            line(r,6)=x_tap(p,q); % 根据新的TAP值对线矩阵进行修正
        end; clear r
        for qa=1:n_Shunt
            r=pos_Shunt(qa);
             bus(r,9)=x_shunt(p,qa); % 根据新的分流值修改母线矩阵
        end; clear r
        for qb=1:length(Bgen)
            r=Bgen(qb);
            bus(r,2)=x_vg(p,qb); %根据新的VG值修改总线矩阵
        end
        % 随着新的线路和母线矩阵运行潮流
        [V_n,Theta_n,~] = PowerFlowClassical(bus,line);
        % 目标函数
        [F,~] = ObjectiveFunction(V_n,line_o,Bgen,Theta_n,nbranch,FromNode,ToNode,PQ);
        Ofun=F; Obfun(k,p)=F;
    end

 

%% 基于Jaya算法的电力系统最优潮流

%% 有功损耗最小化
clear all;
close all;
clc

%% ++++++++++++++++电力系统数据库+++++++++++++++
% 下面的文件包含了母线、线路矩阵等电力系统拓扑信息
data_39;
% 线路类型和发电机
bus_o=bus; line_o=line;
slack=find(bus(:,10)==1); % 松弛节点/平衡节点
PV=find(bus(:,10)==2);   % PV节点
Bgen=vertcat(slack,PV);     %平衡节点和松弛节点【C = vertcat(A,B) 将 B 垂直串联到 A 的末尾。】
PQ=find(bus(:,10)==3);   % PQ节点/负荷节点

%% +++++++++++++++ 优化算法的参数 ++++++++++++++++
pop =  210;                                % 种群规模
n_itera = 35;                             % 优化算法迭代次数
Vmin=0.95;                                % 发电机电压的最小值
Vmax=1.05;                                % 发电机电压的最大值
mini_tap = 0.95;                          % TAP的最小值
maxi_tap = 1.05;                          % TAP的最大值
Smin=-0.5;                                % 视在功率最小值
Smax=0.5;                                 % 视在功率最大值
pos_Shunt = find( bus(:,11) ~= 0);        % 母线矩阵中分流点的位置
pos_tap = find( line(:,6) ~= 0);          % TAPs在行矩阵中的位置
tap_o = line(pos_tap,6);                  % TAPs初始值
Shunt_o = bus(pos_Shunt,9);               %分流器的初始值
n_tap = length(pos_tap);                  % TAPs的数量
n_Shunt = length(pos_Shunt);              % 分流器的数量
n_nodos = length(bus(:,1));               % 电力系统的节点数量

%% ++++++++++++++++ 第一:运行基本情况下的潮流 ++++++++++++++++
% 存储基本情况的电压和相角
[V_o,Theta_o,~] = PowerFlowClassical(bus_o,line_o);
%% +++++++++++++++++++计算有功功率损耗++++++++++++++++++++++
nbranch=length(line_o(:,1));
FromNode=line_o(:,1);
ToNode=line_o(:,2);
for k=1:nbranch
    a(k)=line_o(k,6);
    if a(k)==0 % 在这种情况下,我们正在分析线路
        Zpq(k)=line_o(k,3)+1i*line_o(k,4); % 线路的阻抗
        Ypq(k)=Zpq(k)^-1; % 线路导纳
        gpq(k)=real(Ypq(k)); % 线路电导
        % 对应线路有功损耗
        Llpq(k)=gpq(k)*(V_o(FromNode(k))^2 +V_o(ToNode(k))^2 -2*V_o(FromNode(k))*V_o(ToNode(k))*cos(Theta_o(FromNode(k))-Theta_o(ToNode(k))));
    end
end


% 有功总损耗
Plosses=sum(Llpq);
%% +++++++++++++++++++++++++++ 最优潮流 ++++++++++++++++++++++++++
% 启动种群
for k=1:n_tap % 启动TAP种群
    x_tap(:,k) = mini_tap +(maxi_tap - mini_tap)*(0.1*floor((10*rand(pop,1))));
end 
for k=1:n_Shunt % 启动分流种群
     x_shunt(:,k) = Smin +(Smax - Smin)*(0.1*floor((10*rand(pop,1))));
end
for k=1:length(Bgen) % 从发电机启动电压的种群
    x_vg(:,k) = Vmin +(Vmax - Vmin)*(0.1*floor((10*rand(pop,1))));
end
%% JAYA 算法
for k=1:n_itera
    % 使用TAP的新值,分流和发电机电压重新计算电压和节点导纳
    %修改线路和母线矩阵
    for p=1:pop
        for q=1:n_tap
            r=pos_tap(q);
            line(r,6)=x_tap(p,q); % 根据新的TAP值对线矩阵进行修正
        end; clear r
        for qa=1:n_Shunt
            r=pos_Shunt(qa);
             bus(r,9)=x_shunt(p,qa); % 根据新的分流值修改母线矩阵
        end; clear r
        for qb=1:length(Bgen)
            r=Bgen(qb);
            bus(r,2)=x_vg(p,qb); %根据新的VG值修改总线矩阵
        end
        % 随着新的线路和母线矩阵运行潮流
        [V_n,Theta_n,~] = PowerFlowClassical(bus,line);
        % 目标函数
        [F,~] = ObjectiveFunction(V_n,line_o,Bgen,Theta_n,nbranch,FromNode,ToNode,PQ);
        Ofun=F; Obfun(k,p)=F;
    end

 完整代码:Jaya算法在电力系统最优潮流计算中的应用(创新点)

3 仿真结果 

                      

                     

                       

                  

4 Matlab代码实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28549.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Google Earth Engine(GEE)—— 多光谱指数整合中推导出湿地覆盖类型 (WCT)

湿地覆盖被定义为归因于植被、浑浊度、含水土壤和水量等潜在生物物理条件的湿地空间均匀区域。在这里,我们提出了一种新方法来导出湿地覆盖类型 (WCT),该方法结合了三个常用的多光谱指数 NDVI、MNDWI 和 NDTI,位于印度各地不同地貌和气候环境的三个大型拉姆萨尔湿地。这些湿…

【CNN】SENet——将注意力机制引入通道维度

前言 SENet&#xff0c;胡杰&#xff08;Momenta&#xff09;在2017.9提出&#xff0c;通过显式地建模卷积特征通道之间的相互依赖性来提高网络的表示能力&#xff0c;即&#xff0c;通道维度上的注意力机制。SE块以微小的计算成本为现有的最先进的深层架构产生了显著的性能改…

高等数学(第七版)同济大学 习题10-2(中5题) 个人解答

高等数学&#xff08;第七版&#xff09;同济大学 习题10-2&#xff08;中5题&#xff09; 函数作图软件&#xff1a;Mathematica 11.画出积分区域&#xff0c;把积分∬Df(x,y)dxdy表示为极坐标形式的二次积分&#xff0c;其中积分区域D是:\begin{aligned}&11. \ 画出积分…

算法图解学习2 大O表示

random recording 随心记录 What seems to us as bitter trials are often blessings in disguise. 看起来对我们痛苦的试炼&#xff0c;常常是伪装起来的好运。 大O表示法是一种特殊的表示法&#xff0c;指出了算法的速度有多快。 背景引入 Bob要为NASA编写一个查找算法&…

MobaXterm连接报错Network error: Connection timed out

今天打开MobaXterm远程连接我VMware虚拟机的时候出现以下界面&#xff0c;问题详情如下&#xff1a;Network error: Connection timed out Session stopped - Press <return> to exit tab - Press R to restart session - Press S to save terminal output t…

RabbitMQ介绍

介绍 RabbitMQ是 一个由erlang语言编写的、开源的&#xff0c;基于AMQP协议实现的消息队列&#xff0c;具有MQ应用解耦、流量削峰、异步的特点 官网地址 https://www.rabbitmq.com/ 功能特点 支持顺序消息&#xff0c;保证消息送达消费端的前后顺序 支持消息补偿&#xff0…

计算机是什么

文章目录计算机是什么计算机类别计算机优缺点计算机应用实例计算机是什么 计算机&#xff08;英文“computer”&#xff09;一词源自拉丁文中的“computare”&#xff0c;本意为计算。 发展至今&#xff0c;计算机专门代指“可编程”的电子设备。所谓“可编程”&#xff0c;…

图像超分辨率模型:Real-ESRGAN | 论文阅读+实战记录

前言 最近需要一个超分的模型&#xff0c;经过调研准备用 Real-ESRGAN。特此记录论文阅读和实战过程。 论文阅读 论文地址&#xff1a;Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data Github&#xff1a;https://github.com/xinntao/Re…

[附源码]java毕业设计学生宿舍设备报修

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【教学类-16-01】20221122《世界杯七巧板A4-随机参考图》(大班)

效果展示&#xff1a; 单页效果 多页效果 背景需求&#xff1a; 2022年11月20日 2022年卡塔尔世界杯足球赛在卡塔尔首都多哈举行。借此契机&#xff0c;我设计一份七巧板让幼儿拼”踢足球“的造型。 图片准备&#xff1a; 从网上拉了18张各种”踢球七巧板造型图“ 新建一个…

几种常用关系型数据库架构和实现原理

【摘要】本文介绍几种常用(闭源、开源)关系型数据库的架构和实现原理,包括Oracle、MySQL、PostgreSQL、GaussDB T,涉及产品最新参数指标等请以各官网为准。 一、 Oracle (一) Oracle 架构 Oracle Server包括数据库(Database)和实例(Instance)两大部分,两者相互独立…

SSO单点登录流程详解

概念 单点登录&#xff08;Single Sign On&#xff09;&#xff0c;简称为 SSO&#xff0c;是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的应用系统。 背景 企业发展初期&#xff0c;系统设计不…

关于pbootcms中被挂马以后的处理

最近一段时间很多使用pbootcms建设的网站都遭遇到了首页挂马的问题,表现形式便是首页页面增加了很多?id123,?/?id37087875.csv,?id26993492.shtml等等形态.当我们查看后台系统日志中的蜘蛛访问或者首页上多了这些链接的时候,基本上就是被挂马了,这个时候我们需要及时作出处…

Go:微服务架构下的单元测试(基于 Ginkgo、gomock 、Gomega)

文章目录简介一、Ginkgo包的引入和简单介绍二、Dockertest 使用三、编写单元测试1. 编写 data 层的测试代码四、引入 gomock 包&#xff0c;mock 对象模拟依赖项1. 编写生成 mock 文件方法2. 编写 biz 层的测试方法3. 验证单元测试小结简介 本文主要使用 Ginkgo[2] 、gomock[3…

Vue之watch监听

计算属性不能用异步代码&#xff1b;有返回值的函数&#xff0c;用异步代码也不行&#xff1b;没有返回值的函数&#xff0c;可以用异步代码&#xff1b;watch监听也可以放异步代码&#xff1b;data、methods、computed、watch的区别&#xff1a; data&#xff1a;状态&#xf…

试题 算法提高 网格贪吃蛇(离散化 + DP)

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述   那个曾经风靡全球的贪吃蛇游戏又回来啦&#xff01;这次贪吃蛇在m行n列的网格上沿格线爬行&#xff0c;从左下角坐标为(0,0)的格…

miui14即将闪亮登场 小米首批机型搭配名单 旧版系列机型可能无望更新

小米系列机型年底大动作。新版机型发布和miui14系统将会在一些机型中更新&#xff0c;而最新的miui14版本以简便 精简 轻巧为目的。希望miui14版本能为米粉带来意想不到的期待。以往较多米粉都反馈系统越更新越臃肿。系统资源占用太多。 小米 MIUI 14 的版本号以及适配支持机型…

柯桥俄语培训机构哪家好,能说出“как”的多少种用法呢?

学了这么久俄语的你&#xff0c;能说出“как”的多少种用法呢&#xff1f; 一起来看看这份“как”最强使用攻略吧~ 01 作为疑问副词在句中做状语&#xff0c;"如何""怎么样""多么" 例&#xff1a; Как твои дела&#xff1f; …

H3C 防火墙混合实验

H3C 防火墙混合实验一、项目拓扑二、项目需求三、配置步骤1. 配置IP地址2. FW默认路由&#xff0c;FW指向internet3. 绑定防火墙安全域端口4. 配置防火墙安全策略5. OSPF6. NAT7. PC 默认路由&#xff0c;PC 指向 R1链接: 拓扑下载 一、项目拓扑 二、项目需求 根据题目要求配…

6种常见三维曲面的Three.js实现

这篇文章详细介绍了三次曲线、贝塞尔曲线和 B 样条曲线和曲面背后的数学原理&#xff0c;并提供了使用 Three.js 库实现的代码。 1、简介 你可以在这里访问上图应用程序。此应用程序名为 CurSur&#xff0c;是 Curves and Surfaces 的简称。原始代码可以在这里获取。 在几何设…