局部遮荫光伏matlab,一种基于随机蛙跳全局搜索算法的局部阴影光伏阵列MPPT控制的制作方法...

本发明涉及一种局部阴影光伏阵列多峰MPPT控制方法,特别涉及一种基于随机蛙跳全局搜索算法的局部阴影光伏列阵多峰MPPT控制。

背景技术:

伴随太阳能发电的普及,光伏阵列的运行环境变的越来越复杂,局部遮荫导致光伏阵列输出特性曲线出现了多个极值点,影响了光伏阵列的输出效率,甚至出现热斑现象而损坏光伏电池。为了使光伏系统工作在最大功率点,提高系统效率,需采用有效的多峰最大功率点跟踪算法。

传统的最大功率点跟踪算法(如固定电压法、扰动观察法及增量电导法等)能较好地寻找均匀光照条件下最大功率点。但是在局部阴影光照条件下,光伏阵列的功率电压曲线出现多个峰值点,常规的最大功率点跟踪算法由于陷入局部极值点,不能准确跟踪到最大功率点。随着智能控制方法的兴起,以粒子群算法等为代表的智能控制方法已成为现代控制理论的典型代表,被用于局部阴影下光伏列阵多峰MPPT控制问题,但这些算法的随机参数多,收敛速度较慢,处理不好时可能陷入局部极值,最大功率点处会出现振荡。

技术实现要素:

本发明的目的:针对局部阴影下光伏列阵MPPT现有控制技术的问题,提出一种调节参数少、搜索速度快、寻优能力强且稳定的基于随机蛙跳全局搜索算法的局部阴影光伏阵列多峰MPPT控制方法。

本发明的目的通过以下技术方案实现的:

一种基于随机蛙跳全局搜索算法的局部阴影光伏列阵多峰MPPT控制,包括如下的步骤:

步骤101:实时采集光伏列阵的环境温度T和光照强度S;

步骤102:根据当前各个光伏列阵的环境温度T和光照强度S,采用随机蛙跳全局搜索算法迭代搜索出光伏列阵的总最大功率点;

步骤103:将随机蛙跳全局搜索算法迭代搜索出光伏列阵的总最大功率与光伏列阵实际输出的功率作差,其偏差值通过模糊PI控制算法得到PWM占空比控制量,用于产生PWM波;

步骤104:利用PWM模块产生的PWM波来控制Boost电路,使光伏列阵稳定工作在最大功率点上。

所述步骤102中采用随机蛙跳全局搜索算法迭代搜索出光伏列阵的总最大功率点的方法为:

全局搜索步骤

步骤2010:输入各个光伏列阵的环境温度T和光照强度S等数据,设置算法蛙群(控制变量I)的总数量H;

步骤2020:对SFLA算法进行初始化,随机产生初始蛙群个体的初始位置E和初始速度V;

步骤2030:对群体中的蛙个体,根据光伏列阵的功率计算适应函数得出各个种群蛙个体对应的功率P(适应值);

步骤2040:根据功率P(适应值)的大小进行降序排列,选出种群中的最优个体Pgbest(最大功率),并且将蛙群分成族群,把H个蛙分配到m个族群中去,每个族群包括n个蛙个体,例如当m=3时,第1,2,3只青蛙会被依次分配到第1,2,3个族群中,第4,5,6也会被依次分配到第1,2,3个族群中,依此类推;

步骤2050:局部搜索过程,即:根据随机蛙跳算法的算法公式,在每一个族群中进行进化;

步骤2051:计数器初始化。设族群的序号Im=0,用它来标记进化到了哪个族群并与族群总数m进行比较。设族群内部蛙个体独立进化次数的序号In=0,用它与局部族群内部蛙个体进化次数Is比较以判断独立进化是否结束。同时,寻找当前族群Y^Im中最佳蛙个体位置和最差蛙个体位置,分别记为Ebest和Ebad;

步骤2052:设Im=Im+1,进行下一个族群;

步骤2053:设In=In+1,进行下一次独立进化;

步骤2054:利用更新策略更新当前族群中最差青蛙的位置,更新策略为:根据蛙群随机蛙个体与最优蛙个体距离,判断其受力情况,计算蛙个体的引力加速度、斥力加速度和扰动加速度;

步骤2055:根据算法的速度更新公式更新种群蛙个体的速度,并根据算法的位置更新公式更新种群蛙个体的位置,如果蛙个体速度越过边界,则把边界值赋值给当前蛙个体速度,同理,如果蛙个体位置越过边界,则把边界值赋值给当前蛙个体位置;

步骤2056:如果步骤2055改进了最差蛙的位置,就用新产生的位置取代最差蛙的位置,否则就采用全局最好解Pgbest代替式中最差解Pbad,更新最差蛙的位置;

步骤2057:如果步骤2056还是没有改进最差蛙的位置,则随机产生一个处于湿地中任何位置的蛙来替代最差蛙,并重新计算其适应值;

步骤2058:更新Im族群的最优适应值Pbest与最差适应值Pbad;

步骤2059:如果In<Is,则跳到步骤2053,否则进行步骤2059,并让In=0;

步骤2060:如果Im<m,则跳到步骤2052,否则跳出局部搜索,进行步骤2060,回到全局搜索;

步骤2060:将各个种群进行混合,在每个族群多经过一轮进化过程以后,将各个族群中的蛙再次进行重新排列和族群划分,并再次记录全局最优解Pg;

步骤2070:检验计算停止条件,如果满足了算法收敛迭代条件,则停止算法的执行过程,否则跳转到步骤2040;

步骤2080:输出最优解,算法结束。

所述的步骤103中采用模糊PI控制算法得到PWM只能占空比控制量的步骤为:

步骤301:求解模糊控制输入量:根据公式e=Pgbest-Ppv和Δe=ek-e(k-1)计算获得偏差量e和偏差量增益Δe,定义模糊控制输出量:PI调节的参数变化量ΔKp和Δki:其中,Pgbest为随机蛙跳全局搜索算法得到的光伏阵列最大功率值;Ppv为光伏阵列实际输出功率;ek为第k时刻的偏差量;e(k-1)为第k-1时刻的偏差量;

步骤302:选取模糊控制隶属度函数并建立模糊规则,根据公式K*p=Kp+ΔKp和K*i=Ki+ΔKi得到模糊整定后PI调节的参数值K*p和K*i,其中,Kp和Ki为当前PI调节的参数值;

步骤303:将随机蛙跳全局搜索算法局部进化搜索出光伏列阵的总最大功率与光伏列阵实际输出的功率作差,其偏差值通过模糊PI控制算法得到PWM占空比控制量,将得到的偏差值与载波信号进行调制,输出PWM脉冲波(占空比信号),对后续的升压斩波(Boost)电路进行控制;

工作原理:本发明所用的基于随机蛙跳全局搜索算法的MPPT控制方法,在算法中,以光伏阵列的输出电流I作为算法的粒子,把光伏阵列局部阴影下输出功率的数学模型作为适应度函数,通过对光伏阵列中各组件的光照强度和环境温度的获取,算法能实时高效的迭代搜索出光伏列阵的总最大功率,配合模糊PI对Boost电路的控制,能使光伏阵列稳定运行在最大功率点出。本发明的算法概念简单,调节参数少,跟踪速度快且准确,电压输出和电流输出比较稳定,稳态振荡

几乎可忽略,能有效提高光伏系统的发电效率。

附图说明

图1:为本发明的原理图;

图2:为本发明的系统电路仿真模型;

图3:为本发明的算法流程图;

图4:为本发明的应用案例仿真结果与现有方法的仿真结果对比;

具体实施方式

为了简明本发明的特征和优点,下面结合附图,对本发明进行详细说明。

如图1所示,本发明基于随机蛙跳全局搜索算法实现局部阴影下光伏阵多峰MPPT控制。此时,光伏阵列的输出呈现多峰的U-P特性曲线,本发明以随机蛙跳全局搜索算法作为MPPT控制模块,光伏阵列的光照强度和环境温度信息传入SFLA-MPPT模块,得到优化的最大点功率,与光伏阵列实时测量功率比较得到偏差值,通过模糊PI结合PWM模块和Boost电路,实现光伏阵列的实时最大功率点跟踪。本实施例根据本发明的方法及工作原理在MATLAB 环境下搭建仿真模型。图2为本发明的系统电路仿真模型。

如图3所示,本发明操作步骤如下:

步骤1:随机蛙跳全局搜索算法初始化,设定蛙群数目H=50,设定光伏电流I为可控量,位置可控范围为minE=0.1,maxE=5.3。

步骤2:初始化蛙群的初始位置E与初始速度V。

步骤3:根据适应度(功率)函数,求得各个蛙个体的适应值(功率),进行降序排列,选出种群中的最优个体Pg(最大功率),并且将蛙群分成族群,把H个蛙分配到m个族群中去,每个族群包括n个蛙个体记录最优个体,定义全局变量族群m=10,族群内蛙个体n=5。

步骤2:定义Im=0,In=0。

步骤4:进入下一个族群,Im=Im+1。

步骤5:族群中进入下一个独立进化,In=In+1。

步骤6:定义各个族群内部独立进化次数Is=15,并同时判定族群内部青蛙之间关系的同时,也要寻找当前族群Y^Im中最佳个体位置和最差个体位置,分别记为Ebest和Ebad;。随机蛙跳全局寻优以蛙间存在的以下规律为基础:当时,蛙体所受合力(关系不好不坏)为0,该位置为平衡位置。当时,此时蛙体间关系为排斥,因为蛙体间关系排斥比其之间的吸引变化快。当时, 此时蛙体间关系为引力,同样因为其排斥比吸引变化快。针对蛙间的引斥力规则,提出了其受引力、斥力及不受力时所需满足的条件;对于合力为0的蛙,通过模拟分子热运动,使得蛙体能跳出局部解。

当时,即蛙体受引力。族群中其他个体向最优个体方向运动,其引力计算公式:

其中:G为引力常量,Mi、MBest分别为蛙个体Xi和最优蛙个体XBest的质量,Fi表示蛙个体Xi所受的引力。根据牛顿定理,由上式可知蛙个体Xi的引力加速度ai的计算公式:

当时,此时蛙合力表现为斥力。族群个体向最优蛙个体方向运动,斥力计算公式为式:

此时,斥力加速度 ai计算公式为:

当时,此时蛙所受合力为零,处于平衡位置。蛙个体的随机扰动加速度为,其中:aij为为个体Xi在j维的加速度,分别为解空间第j维的上界、下界。A为振动幅度,本文取A=(1-0.9*t/G),其中t为当前迭代次数,G 为总迭代次数;N(0,1)为服从正态分布的随机数。

族群中蛙个体Xi的速度更新公式:

蛙个体的Xi位置更新公式:

步骤7:进行判断族群内部最差蛙个体位置是否得到更新,没有则赋予最优个体的位置,有则进行判断In与Is的关系,In>Is时跳出独立进化,进行下一个族群的蛙个体的位置更新,否则继续返回步骤5进行位置更新。

步骤8:进行下一个族群的内部蛙个体位置的更新。判断Im与m之间的关系,如果Im>m,则跳出循坏。否则进行步骤4。

步骤9:进行适应值的计算,并进行降序排列同时判断迭代次数是否大于K=5,大于,则输出最优解Pgbest,否则,继续步骤3。

步骤10:。求解模糊控制输入量:根据公式e=Pgbest-Ppv和Δe=ek-e(k-1)计算获得偏差量e和偏差量增益Δe,定义模糊控制输出量:PI调节的参数变化量ΔKp和Δki:其中,Pgbest为随机蛙跳全局搜索算法得到的光伏阵列最大功率值;Ppv为光伏阵列实际输出功率;ek为第k时刻的偏差量;e(k-1)为第k-1时刻的偏差量;

步骤11:选取模糊控制隶属度函数并建立模糊规则,根据公式K*p=Kp+ΔKp和K*i=Ki+ΔKi得到模糊整定后PI调节的参数值K*p和K*i,其中,Kp和Ki为当前PI调节的参数值;

步骤12:将随机蛙跳全局搜索算法局部进化搜索出光伏列阵的总最大功率与光伏列阵实际输出的功率作差,其偏差值通过模糊PI控制算法得到PWM占空比控制量,将得到的偏差值与载波信号进行调制,输出PWM脉冲波(占空比信号),对后续的升压斩波(Boost)电路进行控制。

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

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

相关文章

打靶法matlab求边值问题代码,数学实验“微分方程组边值问题数值算法(打靶法,有限差分法)”实验报告(内含matlab程序)...

实验二十七实验报告一、实验名称&#xff1a;微分方程组边值问题数值算法(打靶法&#xff0c;有限差分法)。二、实验目的&#xff1a;进一步熟悉微分方程组边值问题数值算法(打靶法&#xff0c;有限差分法)。三、实验要求&#xff1a;运用Matlab/C/C/Java/Maple/Mathematica 等…

php symfony 安装,Symfony4中文文档: 安装和设置Symfony框架

安装和设置Symfony框架要创建新的Symfony应用程序, 首先确保使用的是PHP7.1 或更高版本并且已经安装Componser. 如果未安装, 请首先在系统上全局安装Componser. 如果你想使用虚拟机(VM), 请查看Homestead通过运行以下命令来创建新项目:$ composer create-project symfony/websi…

matlab变参传函,什么是传递函数的增益

公告&#xff1a; 为响应国家净网行动&#xff0c;部分内容已经删除&#xff0c;感谢读者理解。话题&#xff1a;什么是传递函数的增益?它是干什么的?怎么求?回答&#xff1a;我认为楼上的是错误的G(S)Y(s)/R(s) K(as1)(bs1)(ms1)/((ns1)(ps1).(qs1) )这样的K才是控制论里面…

matlab单元数组和结构,Matlab使用单元数组和结构数组

Matlab使用字符串数组、单元数组(cell array)和结构数组 (struct array)要在MALTAB中实现比较复杂的编程&#xff0c;就不能不用单元数组(cell array)和结构数组(structarray)。而且在Matlab中实现struct比C中更为方便。MATLAB字符串数组的创建与运算字符串数组主要用于可视化编…

matlab sar 斑马图,星载合成孔径雷达(SAR)斑马图仿真与研究

收稿日期:2002 - 04 - 22   第 20 卷  第 5 期 计  算  机  仿  真 2003 年 5 月    文章编号:1006 - 9348(2003)05 - 0123 - 04 星载合成孔径雷达( SAR)斑马图仿真与研究 朱力1 ,于立2 (1. 南京理工大学 ,江苏南京 210094 ;2. 南京电子技术研究所 ,江苏 南京 210013)…

matlab等高线二维加数字,matlab绘制二维等高线

第5章 MATLAB绘图 5.1 二维数据曲线图 5.2 其他二维图形 5.3 隐函数绘图 5.4 三维图形 5.5 图形修饰处理 5.6 图像处理与动画制作 5.1 二维数据曲线图 5......绘图 一.实验目的掌握 matlab 二维图形和三维图形的绘制方法,并会对图形进行处理,掌握符号函数(显 函数、隐函数和参数…

php订阅与推送,PHP用户关键词订阅推送文章功能

具体要求&#xff1a;PHP用户关键词订阅推送文章功能采用语言原生PHP5.6数据库mysql需求会员才能设置关键词推送比如用户设置了关键词比如‘电脑采购’和设置了匹配标题&#xff0c;如果有文章标题包含这个关键词&#xff0c;那就推送文章{文章id}比如用户设置了关键词比如‘电…

php的array_walk,PHP array_walk() 函数详解

定义array_walk - 对数组的每个元素应用自定义函数描述array_walk ( array &$array , callable $callback [, mixed $userdata NULL ] ) : bool回调函数的参数&#xff0c;第一个是元素值&#xff0c;第二个是元素键名&#xff0c;第三个是可选的 $userdata。如果只想改变…

Java定义变量x初始值为3,JAVA 第一章

第一章1.注释&#xff1a;一个好的开发习惯&#xff0c;应该是多编写注释&#xff0c;这样程序的可读性增强。单行注释// 单行注释 &#xff0c;只注释当前行多行注释/*多行注释多行注释*/javadoc 注释/**javadoc 注释javadoc 注释javadoc 注释*/注意&#xff1a;这种注释是比较…

matlab二元方程组,用matlab解一个二元方程组,会的进,得到解再回答

共回答了20个问题采纳率&#xff1a;75%clear,clcformat longf(x)[tan(4*3.14*20000*0.03)2*3.14*20000/x(1)*tan(x(1)*x(2));sqrt(4*3.14^2*20000^2*7840/2.1e11-log(2)*log(2)/x(2)^2)-x(1)];[s,v]fsolve(f,[24;0.1])Equation solved.fsolve completed because the vector of…

matlab生成组合字典序法,组合数学 排列生成算法 字典序

字典序排序生成数字使用1~MAXfunction dfs(n) {if (n MAX) {// console.log(a)ALL.push(Array.from(a))used.delete(a.pop())return}for (let i 1; i < MAX; i) {if (!used.has(i)) {a.push(i)used.add(i)dfs(n 1)}}used.delete(a.pop())}递增进位制由于n个排列有n&#…

血型算法php,血型排行榜!(真的很准)

一最容易动怒的人是&#xff1a;1.O 型&#xff1a;急性子&#xff0c;一点小事就能惹火他&#xff0c;性格中有好斗的一面&#xff0c;会以 " 我想发泄一下 " 为理由大发雷霆。2.B 型&#xff1a;看上去脾气很好&#xff0c;其实性情很直接&#xff0c;被愤怒冲昏头…

php div行内块元素,行内元素与块级元素的区别详细介绍

首先&#xff0c;CSS规范规定&#xff0c;每个元素都有display属性&#xff0c;确定该元素的类型&#xff0c;每个元素都有默认的display值&#xff0c;分别为块级(block)、行内(inline)。块级元素&#xff1a;(以下列举比较常用的块级元素&#xff0c;详情可在w3cschool查询)定…

每个java小应用程序都得继承,JAVA复习题3

23.容器JFrame及JPanel默认的布局管理器分别是()A、FlowLayout和GridLayoutB、BorderLayout和FlowLayoutC、FlowLayout和FlowLayoutD、CardLayout和BorderLayout24.在开发一个JAVA GUI程序时&#xff0c;通常都要对按键事件作出响应和处理&#xff0c;一般需要在程序的开头写上…

php文件上传漏洞防御,第十二课 php文件上传漏洞和代码防御

挖掘上传漏洞常见上传函数$_FILES move_uploaded_file等函数搜索关键字$_FILES move_uploaded_file如何防止上传漏洞自定义文件扩展名和路径POST /dvwa/vulnerabilities/upload/ HTTP/1.1Host: 127.0.0.1Connection: keep-aliveUser-Agent: Mozilla/5.0 (Windows; U; Windows…

anaconda下安装python,Windows下Anaconda的安装和简单使用方法

Anaconda is a completely free Python distribution (including for commercial use and redistribution). It includes over 195 of the most popular Python packagesfor science, math, engineering, data analysis.1、安装anaconda之前什么都不需要安装&#xff0c;直接在…

oracle免费云攻略,使用免费的Oracle云服务-创建云主机

上一篇我们讲了如何注册并使用Oracle的免费云服务&#xff0c;这篇我们讲如何创建免费的云主机。进入到控制台后&#xff0c;从左上角的菜单栏进入到Instances的管理界面&#xff1a;然后点击&#xff0c;则会进入创建云主机的界面。创建云主机真的非常简单&#xff0c;甚至你都…

aix查看oracle数据库端口号,通过netstat+rmsock查找AIX端口对应进程

rmsock除去不包含文件描述符的套接字。它接受 socket、tcpcb、inpcb、ripcb 或 rawcb 地址并将其转换成套接字地址。然后检查每个进程所有打开的文件以查找套接字的匹配。如果没找到匹配&#xff0c;对该套接字执行异常终止操作&#xff0c;而不考虑套接字 linger 选项的存在。…

maven中的oracle,maven中安装SQL SERVER 和 Oracle JDBC驱动

都什么年代了&#xff0c;居然MS SQL 和 Oracle的jdbc驱动还不支持maven&#xff0c;只能自己弄一下了。SQL SERVER2、install jar文件到maven&#xff1a;mvn install:install-file -Dfilesqljdbc4.jar -Dpackagingjar -DgroupIdcom.microsoft.sqlserver -DartifactIdsqljdbc4…

oracle groupq by,oracle group by 性能优化

慕田峪9158850(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效)&#xff1a;ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名&#xff0c;FROM子句中写在最后的表(基础表 driving table)将被最先处理&#xff0c;在FROM子句中包含多个表的情况下,你必须选择记录…