【潮流计算】基于matlab粒子群算法优化电力系统潮流计算【含Matlab源码 2157期】

news/2024/4/26 5:56:54/文章来源:https://blog.csdn.net/TIQCmatlab/article/details/127253401

一、粒子群算法简介

1 标准粒子群优化(PSO)算法
PSO算法根据对环境的适应度将群体中的个体移动到好的区域,将每个个体看作是D维搜索空间中的一个粒子,根据粒子本身的飞行经验和群体中其他同伴的飞行经验调整下一步飞行方向,从而搜索到最好的空间位置解。设第i个粒子的位置表示为一个D维的位置坐标xi=(xi1,xi2,…,xiD),它经过的个体最好位置记为pi=(pi1,pi2,…,piD),也称为 pbest。群体中所有粒子经历过的最好位置的索引号用g表示,即pg,也称为gbest。粒子i的速度用 vi=(vi1,vi2,…,viD)表示,对于粒子i的第d维(1≤d≤D)情况,有如下的坐标、速度迭代变换:
在这里插入图片描述
式中:ω为惯性权重系数;c1和c2为加速度常数,c1和c2代表每个粒子的历史最好位置pbest和群体所有粒子历史最好位置gbest的统计加速项的权重,c1代表粒子i对个体历史最优的认知程度,c2代表粒子i对群体最优领导者的认知程度,适当地调整c1和c2的数值,有利于寻找全局最优解以及局部最优解;pbest是本身所找到的最优解,根据适应度在每次迭代后进行比较;gbest是群体所有粒子历史所找到的最优解,根据适应度在每次迭代后进行比较;rand1()和rand2()代表两个在[0,1]范围里变化的随机数值。

2 电力系统最优潮流(optimal power flow, OPF)
2.1 目标函数

电力系统中的最优一般以发电成本最小为目标,其数学模型如下:
在这里插入图片描述
2.2 等式约束
节点功率平衡方程:
在这里插入图片描述
2.3 不等式约束
在这里插入图片描述
以上模型中,式(13)至式(16)依次为:电源有功功率上下界约束;无功源无功功率上下界约束;节点电压上下界约束;线路传输功率潮流约束。式中:SB为系统所有节点集合;SG为所有发电机集合;SR为所有无功源集合;SL为所有支路集合;PGi,QGi为发电机i的有功、无功功率;PDi,QDi为节点i的有功、无功负荷;Ui,θi为节点i的电压幅值与相角, θij=θi-θj;Gij,Bij为节点导纳矩阵第i行第j列元素的实部与虚部;PL为线路的有功潮流,设线路L两端节点为i,j。

等式非线性功率方程常采用牛顿-拉夫逊法进行迭代求解,牛顿-拉夫逊法将非线性问题经过泰勒展开,并略去二次以上项,化非线性问题为近似线性问题求解。对初值经过多次的修正迭代,最终找到目标解。

2.4 构建罚函数
本文采用罚函数的方法构造适合于PSO算法的优化目标函数,将不等式约束条件化为等式问题:
在这里插入图片描述
式中:右边第一项为燃料耗费;第二项是不等式约束的相关物理量的越限罚函数之和;λX是罚因子。

Xlim定义如下:
在这里插入图片描述
在电力系统中X可以是电压U上下界、机组有功功率P上下界、无功功率Q上下界、线路传输功率Pij上下界等物理量。

3 仿真实验结果
3.1 粒子飞行搜索状态的限制

PSO算法是属于随机搜索算法,因此很难处理等式约束问题。特别是当可行域很小的时候,很难找到最优解。采用一些方法加强求解能力:

a)当粒子不满足等式约束时,粒子继续飞行跳跃,避开不可行解的空间,直到找到可行解为止;

b)当粒子非常接近g而速度又接近于0时,粒子将在很小的空间里飞行,将失去全局搜索能力,需重新初始粒子;

c)粒子速度接近于0时,重新初始粒子;

d)采用足够大的罚函数,将粒子限制在可行空间里。

3.2 算法流程
a)初始设定微粒的随机速度和位置;

b)计算每个微粒的适应值;

c)对每个微粒,将其适应值与所经历过的最好位置P 的适应值进行比较,若较好,则将其作为该微粒的当前最好位置;

d)对每个微粒,将其当前最好适应值与全局所经历过的最好位置的适应值进行比较,若较好,则将其作为当前的全局最好位置;

e)通过位置、速度迭代方程式(1)、式(2)迭代;

f)若未达到结束条件,则返回步骤b。

为了考察改进粒子群算法与标准粒子群算法的性能,我们利用MATLAB6对粒子群算法以及改进粒子群算法进行了模拟比较。
在这里插入图片描述
图1 PSO算法程序流程图

二、部分源代码

clc
clear
close all
%% NR load flow analysis
nbus = 30;
busdata = busdatas(nbus);
linedata = linedatas(nbus);
resultWithoutDG = nrloadflow(nbus,busdata,linedata);
dim = 10;
Pmin=3; %minimum power of solar DG unit
if nbus==30
Pmax=30; %maximum power of solar DG unit in MW
else
Pmax=100;
end
%% potential bus selection
R=linedata(:,3);
sourcbus=linedata(:,1);
destintnbus=linedata(:,2);
% del=180/pi*del;
for ii=1:size(linedata,1)
alpha(ii)=(R(ii)/(abs(resultWithoutDG.V(sourcbus(ii)))…
*abs(resultWithoutDG.V(sourcbus(ii)))))…
*cos(resultWithoutDG.del(sourcbus(ii))…
-resultWithoutDG.del(destintnbus(ii)));
beta(ii)=(R(ii)/(abs(resultWithoutDG.V(sourcbus(ii)))…
*abs(resultWithoutDG.V(sourcbus(ii)))))…
*sin(resultWithoutDG.del(sourcbus(ii))…
-resultWithoutDG.del(destintnbus(ii)));
SV(ii)=alpha(ii).*resultWithoutDG.Pi(destintnbus(ii))…
-beta(ii).*resultWithoutDG.Qi(destintnbus(ii));
end

[sv,ind]=sort(SV,‘descend’);
po=destintnbus(ind);
[poo,ia,ic]=unique(po);
temp=po(sort(ia));
loadBusLocation = temp(1:dim);
%% GA optimisation
fitness= @(x) objf(x,loadBusLocation,resultWithoutDG,nbus);
options = gaoptimset(‘MutationFcn’,@mutationadaptfeasible,‘PopulationSize’,20);
options = gaoptimset(options,‘PlotFcns’,{@gaplotbestf}, …
‘Display’,‘iter’,‘Generations’,80);
[GAx,fval] = ga(fitness,dim,[],[],[],[],Pmin.*ones(1,dim)…
,Pmax.*ones(1,dim),[],options);
finalGAresults= resultcalc(GAx,loadBusLocation,resultWithoutDG,nbus);
%% PSO optimisation
[PSOx,objval]=PSO(loadBusLocation,resultWithoutDG,nbus,dim,Pmax,Pmin);
finalPSOresults= resultcalc(PSOx’,loadBusLocation,resultWithoutDG,nbus);
FIG1 = figure(‘Name’, ‘PSO Optimization’,‘NumberTitle’,‘off’);
figure(FIG1)
plot(1./objval)
grid on;
ylabel(‘VL (pu)’);
xlabel(‘time (sec)’);
title(‘PSO optimisation’)
%% Result plotting
% volatge magnitude plot
FIG2 = figure(‘Name’, ‘BUS VOLTAGE’,‘NumberTitle’,‘off’);
figure(FIG2)
bar([finalPSOresults.V,finalGAresults.V,resultWithoutDG.V],‘group’)
xlim([0 nbus+1])
ylim([0.95,1.1])
grid on;
legend(‘PSO optimised’,‘GA optimised’,‘Without DG’)
xlabel(‘Bus number’)
ylabel(‘Volatge Magnitude in p.u.’)
title(‘Bus Voltage’)
% power loss comparison
FIG3 = figure(‘Name’, ‘Total Active Power loss’,‘NumberTitle’,‘off’);
figure(FIG3)
bar([sum(finalPSOresults.Lpij);sum(finalGAresults.Lpij);sum(resultWithoutDG.Lpij)])
grid on;
title(‘Total Active Power loss in MW’)
ylabel(‘Active Power loss(MW)’)
set(gca,‘Xtick’,0)
text(0.8,-0.2,‘PSO tuned’)
text(1.8,-0.2,‘GA tuned’)
text(2.8,-0.2,‘Without Optimisation’)
% printresult

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
1.林小朗,王磊.改进粒子群优化算法的电力系统最优潮流计算[J].广东电力. 2007,(03).

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是 IoT App SDK?

目录 为什么要开发 IoT App? IoT App SDK 的优势 IoT App SDK 分类 智能生活 App SDK 商用照明 App SDK 智慧社区 App SDK 智慧居住 App SDK 行业 App SDK 其他概念 IoT 设备 通信过程 IoT 云平台 智能面板 名词解释 涂鸦 IoT App SDK 是专为物联网移…

沉睡者IT:你理解的元宇宙是怎样呢?

这半年来关于元宇宙的话题成为了一场舆论的热点,很多即使是从事与其毫无相关职业的人,也多少有些耳闻。 ​ 编辑 但是对于元宇宙,它是什么,为什么需要元宇宙,怎样才能建立元宇宙以及大家对元宇宙的看法,…

Hack The Box靶机——Ambassador

文章目录前言一、Web部分二、提权部分前言 难度:中等,Hack The Box网站在线靶机。本文涉及知识点有:Grafana系统任意文件读取,CURL下载文件,SSL本地端口转发,Consul命令执行。 靶机地址:1…

【windows kernel源码分析】对初学者友好的底层理解,让你对计算机内核不再迷茫

文章目录🍃概念梳理windows kernel引导加载程序完成后的RAM内容🍑实现过程--还是看原文吧 🌸参考原文链接对市面上的文章再做一次整合。给渴望得到内核知识的人提供一些帮助。 🍃博主昵称:一拳必胜客 博主主页面链接&a…

各种平均值:算术平均值,几何平均值,调和平均值等

平均值概述 平均数反映了一组数据的一般水平,最常见的平均数是算术平均数,除了算数平均数外,还有几何平均数,调和平均数,加权平均数等。 算术平均值(Arithmetic Mean) 公式解读:表…

list全部功能模拟实现

目录&#xff1a; list的深度剖析及模拟实现 list底层是双向循环链表 ------而实现list最重要的就是迭代器类的实现 下面我们会重点学习迭代器 list整体接口函数罗列 //模拟实现list底层---全部功能 namespace std {//结点类模拟实现template<class T>struct list_node…

java数据结构-------栈和队列

文章目录1、栈(Stack)1、什么是栈2、栈中常使用的方法3、栈的应用场景1、逆序打印链表2、有效的括号2、队列(Queue)1、什么是队列2、队列的使用3、循环队列目标&#xff1a;1、 栈的概念及使用&#xff0c;2、 队列的概念及使用&#xff0c;3.、相关OJ题1、栈(Stack) 1、什么是…

FISCO BCOS(十五)——— Windows下的go环境配置及beego环境配置并解决bee run报错问题

1、下载地址 https://golang.google.cn/dl/2、双击打开下载的文件&#xff0c;一路按照默认点击下一步&#xff0c;&#xff08;安装位置可选&#xff0c;默认安装在c盘&#xff09; 3、go环境配置&#xff08;很重要的&#xff09; 在系统变量名中新建变量名&#xff1a;GOP…

Java如何生成花里胡哨的二维码

目录一、序言二、找资料1、寻觅文档2、寻觅代码三、代码示例1、简单的二维码2、带颜色的二维码3、带logo的二维码四、工具类封装一、序言 之前在做头马演讲俱乐部哼哈官可视化汇报报告时&#xff0c;为了方便大家移动端查看可视化报告&#xff0c;而不是通过点击链接这种生硬的…

Android 面试java知识小结

1.-1的二进制是多少&#xff0c;怎么算出来的&#xff1f; 1111 1111 在计算机里是以补码的形式存在的&#xff0c;那为什么要使用补码呢&#xff1f; 计算机中的有符号数有三种表示方法&#xff0c;即原码、反码和补码。三种表示方法均有符号位和数值位两部分&#xff0c;符号…

如何使用界面控件DevExpress WinForms自带的UI模板?其实很简单

DevExpress WinForm拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜任…

科研工具总结

科研工具总结 1、论文检索网站2、自己收集数据集----并构建数据集2.1数据集来演方式:3种3、怎么进行一个算法的调研?泛读论文:精读论文:1、论文检索网站 Connected papers:一个基于知识图谱的论文检索网站 特点:圆圈的半径越大表示论文越经典,引用数量比较多; 论文的新…

python与人工智能:KNN近邻法识别手写数字

机器学习分类&#xff1f; 1 特征&#xff08;feature&#xff09; 数据是区分事物和事物的关键。 举例&#xff1a;不同类型的书&#xff0c;我们用书的内容来对它进行分类 2 标签&#xff08;label&#xff09; 数据的标签&#xff0c;显示的分类结果。 举例&#xff1a;书属…

每日面试题2道、算法两道

目录 一、 面试题 i、i的自增问题 写一个Singleton实例 二、数组 算法 寻找数组的中心索引 搜索插入位置 一、 面试题 i、i的自增问题 /*** packageName: com.sofwin.mianshi* user: wentao* date: 2022/10/10 14:31* email 1660420659qq.com* description: i、i的 面…

(附源码)计算机毕业设计SSM志愿者活动管理平台

项目运行 环境配置&#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…

pytorch:本地使用tensorboard可视化

摘要&#xff1a; tensorboard是tensorflow用来可视化训练和测试过程的模块&#xff0c;而pytorch并没有可视化模块&#xff0c;但是pytoch1.2.0版本以上开始支持tensorboard。 目录一、 安装tensorboard二、 使用tensorboard1、首先导入模块&#xff1a;2、初始化&#xff1a;…

深度神经网络怎么用

深度学习 对硬件的要求 之前热衷于学习理论知识&#xff0c;目前想跑代码了发现不知道从何下手&#xff0c;自己电脑上搭建的平台基本就是个摆设&#xff0c;因为跑不起来呀。今天我们就来看看想做深度学习应该怎么下手。 首先了解下基础知识&#xff1a;1、深度学习用cpu训练…

2.Jenkins项目创建

Jenkins项目创建1.新建项目 2.创建一个freestyle的项目 3.填写描述信息 4.可以选择丢弃旧的构建 每次构建都会产生一个任务&#xff0c;这个任务想保留多少天&#xff0c;可以设置保留构建的天数 保留最大的个数&#xff1a;例如设置为10个&#xff0c;当任务达到了10个之…

Spring Rest Docs使用

今天给大家分享一个能通过代码自动生成文档技术&#xff0c;Spring Rest Doc过在单元测试中额外添加 API 信息描述&#xff0c;从而自动生成对应的文档片段。 下面通过一个简单的例子演示下如何快速上手的。在Spring Boot项目中添加maven 依赖 <dependency><groupId&g…

Android 使用Jenkins 自动化多渠道打包并且分发到蒲公英、下发到钉钉通知【即拿即用】

前言 一、tomcat 安装启动 二、jenkins war 包下载并安装 三、jenkins 配置教程 四、jenkins items 工程配置 五、android gradle 脚本编码 六、分发到蒲公英脚本编码以及七、通知钉钉逻辑编码 前言 Android 在每个版本测试阶段&#xff0c;通常会因为修复BUG 去验证&#x…