【在线优化】【有源程序】基于遗传算法(GA)和粒子群优化(PSO)算法的MPPT控制策略
目录
一、背景
二、源程序及结果
2.1 simulink仿真程序
2.2 GA模块源程序
2.3 PSO模块源程序
三、程序运行结果
3.1 基于GA优化的MPPT
3.2 基于PSO优化的MPPT
一、背景
MPPT策略能够显著提高光伏、风电等发电效率,节省大量成本。该策略的经典算法是:采用遗传算法(GA)和粒子群优化算法(PSO)进行MPPT控制器中调节器占空比的实时寻优。
只有将这两种经典算法吃明白了,才算入了门,可以在后续MPPT策略改进中游刃有余,答辩时也能信手拈来。
GA和PSO策略不多赘述,核心在于此时在线优化,而非离线优化。即以实时局部最优策略进行MPPT控制。建议大家吃透源程序
二、源程序及结果
在线优化有源程序基于遗传算法(GA)和粒子群优化(PSO)算法的MPPT控制策略资源-CSDN文库
2.1 simulink仿真程序

2.2 GA模块源程序
function D = GSA(Vpv,Ipv)
coder.extrinsic('randi')
persistent u;
persistent dcurrent;%store current duty cycle
persistent pbest;%store local best dc for power
persistent force; %store force
persistent acceleration; %store acceleration
persistent mass; % mass
persistent q; % strength of mass
persistent p; % power for each particle
persistent p_current; % power current for each particle
persistent p_min; % power min for each particle
persistent worse; %store best worse of each particle
persistent dc; %store duty cycle ~ position
persistent v; %velocity
persistent counter; %delay iteration
persistent iteration;
persistent gbest;%store global best dc for power
%initializationmax_iter = 3000;
if(isempty(counter))counter = 0;dcurrent = 0.5; gbest = 0.5;pbest = zeros(3,1);worse = zeros(3,1);v = zeros (3,1);force = zeros(3,1);mass = zeros(3,1);q = zeros(3,1);p = zeros(3,1);p_current = zeros(3,1);p_min=zeros(3,1);acceleration=zeros(3,1);u = 0;dc = zeros (3,1); iteration = 1;%initialize position for each particledc(1)=0.69;dc(2)= 0.7;dc(3)=0.8;endif(counter >=1 && counter < 3000)D=dcurrent;counter= counter+1;return;
endif(u>=1 && u<=3)p_current(u) = Vpv*Ipv;if((Vpv*Ipv)>=p(u))p(u) = Vpv*Ipv;pbest(u)=dcurrent;endif(Vpv*Ipv < p_min(u))p_min(u) = Vpv*Ipv;worse(u) = dcurrent;end
end
u=u+1;
if(u==5)u=1;
end
if(u >= 1 && u <= 3)%Avoid over shootingif(iteration < max_iter)D=dc(u);dcurrent=D;counter=1;return;elseD = dcurrent;returnend
elseif(u==4)iteration = iteration +1;[~,i]=max(p);gbest=pbest(i);D=gbest;dcurrent=D;counter=1;%Calculate strength of massfor i = 1:3q(i) = (p_current(i) - worse(i))/(pbest(i)-worse(i));end%Calculate sum of strength of masssum_strength_of_mass = q(1) + q(2) + q(3);%Calculate mass for i = 1:3mass(i) = q(i)/sum_strength_of_mass;end%Calculate forcealpha = 200;G0 = 1;G = G0 * exp(-alpha*iteration/max_iter);%G = 6.67430 * 10^-13; %gravitational constante = 2.2204*10^-16;force(1) = rand()*G*(mass(3)*mass(1)*(dc(3)-dc(1))/(Euclidian_distance(dc(3),dc(1))+e) + mass(2)*mass(1)*(dc(3)-dc(1))/(Euclidian_distance(dc(3),dc(1))+e));force(2) = rand()*G*(mass(3)*mass(2)*(dc(3)-dc(2))/(Euclidian_distance(dc(3),dc(2))+e) + mass(1)*mass(2)*(dc(1)-dc(2))/(Euclidian_distance(dc(1),dc(2))+e));force(3) = rand()*G*(mass(2)*mass(3)*(dc(2)-dc(3))/(Euclidian_distance(dc(2),dc(3))+e) + mass(1)*mass(3)*(dc(1)-dc(3))/(Euclidian_distance(dc(1),dc(3))+e));%Avoid over shootingif(iteration == max_iter)D=dcurrent;return;end%Calculate acceleration for i = 1:3acceleration(i) = force(i)/mass(i);endfor i=1:3v(i)=updatevelocity(v(i),acceleration(i));dc(i)=updateduty(dc(i),v(i));end return;elseD=0.5;
end
endfunction d = Euclidian_distance(d1,d2)d = sqrt(d1^2+d2^2);
endfunction vfinal=updatevelocity(velocity,acceleration)vfinal = rand()*velocity + acceleration;
endfunction dfinal=updateduty(d,velocity)
dup=d+velocity;
if(dup>1)dfinal=1;
elseif(dup<0.1)dfinal=0.1;
elsedfinal=dup;
end
end
2.3 PSO模块源程序
function D = PSO(Vpv, Ipv)coder.extrinsic('randi')persistent localbest globalbest k p dc Pbest Pprev dcurrent u v temp;c1 = 1;c2 = 2;P = Ipv * Vpv;if isempty(globalbest)k = 0;dc = zeros(3,1);dc(1)=randi( [5 330])/1000;dc(2)=randi( [330 660])/1000;dc(3)=randi( [660 995])/1000;p = zeros(3,1);localbest = zeros(3,1);v = zeros(3,1);Pbest = Ipv * Vpv;Pprev = 0;dcurrent = 0.5;globalbest = dcurrent;u=0;temp = 0;endD=dcurrent;if (temp < 0)temp = temp + 1;return;endif (P > Pbest)Pbest = P; endif (k < 3000)k=k+1;return;elsek=0;endif abs(P - Pprev) < 1if abs(P - Pbest) > 15dc(1)=randi( [5 330])/1000;dc(2)=randi( [330 660])/1000;dc(3)=randi( [660 995])/1000;v = zeros(3,1);localbest = zeros(3,1);p = zeros(3,1);u= 0;endendif(u>=1 && u<=3)if(P>p(u))p(u)=P;localbest(u)=dcurrent;endendu=u+1;if (u > 4)u=1;endif (u == 4)[~,idx]=max(p);globalbest=localbest(idx);D = globalbest;dcurrent=D;for j=1:3v(j)=updatevelocity(c1,c2,v(j),localbest(j),dc(j),globalbest);dc(j)=updateduty(dc(j),v(j));endelseD=dc(u);dcurrent=dc(u);Pprev = P;endendfunction vfinal=updatevelocity(c1,c2,velocity,pobest,d,gwbest)% PSO Parametersvfinal = (0.1*velocity)+(c1*rand(1)*(pobest-d))+(c2*rand(1)*(gwbest-d));
endfunction dfinal=updateduty(d,velocity)dup=d+velocity;if(dup>1)dfinal=1;elseif(dup<0)dfinal=abs(dup);elsedfinal=dup;end
end
三、程序运行结果
3.1 基于GA优化的MPPT

3.2 基于PSO优化的MPPT

四、源程序获取
上述章节已经给出了框图和源码,但一定要喂到嘴里,下载即可:
在线优化有源程序基于遗传算法(GA)和粒子群优化(PSO)算法的MPPT控制策略资源-CSDN文库
相关文章:
【在线优化】【有源程序】基于遗传算法(GA)和粒子群优化(PSO)算法的MPPT控制策略
目录 一、背景 二、源程序及结果 2.1 simulink仿真程序 2.2 GA模块源程序 2.3 PSO模块源程序 三、程序运行结果 3.1 基于GA优化的MPPT 3.2 基于PSO优化的MPPT 一、背景 MPPT策略能够显著提高光伏、风电等发电效率,节省大量成本。该策略的经典算法是…...
使用 Three.js 实现热力渐变效果
大家好!我是 [数擎 AI],一位热爱探索新技术的前端开发者,在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步! 开发领域:前端开发 | A…...
java-异常家族梳理(流程图)
前言: 使用流程图梳理异常,便于理解 梳理: Throwable ├── Error(严重错误,无需捕获) │ ├── OutOfMemoryError │ ├── StackOverflowError │ └── ... ├── Exception(可捕获处理) │ ├── RuntimeException(非检查异常/Unchecked) │ …...
开启蓝耘之旅:DeepSeek R1 模型在智算平台的起步教程
----------------------------------------------------------我的个人主页-------------------- 动动你的手指----------------------------------------点赞👍 收藏❤--------------------------------------------------------------- 引言 在深度学习的广袤领…...
[高等数学]不定积分的概念与性质
一、知识点 (一)原函数与不定积分的概念 定义1(原函数) 如果在区间 I I I 上,可导函数 F ( x ) F(x) F(x) 的导函数为 f ( x ) f(x) f(x),即对任一 x ∈ I x\in I x∈I,都有 F ′ ( x )…...
【算法】【高精度】acwing算法基础 793. 高精度乘法
题目 给定两个非负整数(不含前导 0) A 和 B,请你计算 AB 的值。 输入格式 共两行,第一行包含整数 A,第二行包含整数 B。 输出格式 共一行,包含 AB 的值。 数据范围 1≤A的长度≤100000, 0≤B≤10000 输入样…...
sqlite 查看表结构
在SQLite中,查看表结构通常有以下几种方法: 使用.schema命令 在SQLite的命令行界面中,你可以使用.schema命令加上表名来查看该表的结构。例如,如果你想查看名为your_table_name的表结构,你可以这样做: .s…...
测试中的第一性原理:回归本质的质量思维革命
在软件工程领域,测试活动常被惯性思维和经验主义所主导——测试用例库无限膨胀、自动化脚本维护成本居高不下、测试策略与业务目标渐行渐远。要突破这种困境,第一性原理(First Principles Thinking)提供了独特的解题视角ÿ…...
flink判断两个事件之间有没有超时(不使用CEP)
1.为啥不使用cep呢,cep的超时时间设置不好配置化,无法满足扩展要求 2.超时怎么界定。A事件发生后,过了N时间,还没有收到B事件,算超时。 代码如下: import com.alibaba.fastjson.JSONObject; import lombo…...
二级C语言题解:十进制转其他进制、非素数求和、重复数统计
目录 一、程序填空📝 --- 十进制转其他进制 题目📃 分析🧐 二、程序修改🛠️ --- 非素数求和 题目📃 分析🧐 三、程序设计💻 --- 重复数统计 题目📃 分析🧐 前言…...
打家劫舍3
今天和打家讲一下打家劫舍3 题目: 题目链接:337. 打家劫舍 III - 力扣(LeetCode) 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为root。 除了 root 之外,每栋房子有且只有一个“父“…...
练习题(2025.2.9)
题目背景 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动得热泪盈眶,开起了门…… 题目描述 妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车!妈妈丰富…...
【练习】PAT 乙 1074 宇宙无敌加法器
题目 地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在PAT星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”。每个PAT星人都必须熟记各位数字的进制表,例如“……0527”就表示最…...
网络防御高级02-综合实验
web页面: [FW]interface GigabitEthernet 0/0/0 [FW-GigabitEthernet0/0/0]service-manage all permit 需求一,接口配置: SW2: [Huawei]sysname SW2 1.创建vlan [sw2]vlan 10 [sw2]vlan 20 2.接口配置 [sw2]interface GigabitEther…...
UITableView的复用原理
UITableView复用的基本原理是Cell复用机制,它通过重用已经创建的Cell来减少内存开始并提高性能,避免频繁创建和销毁Cell。 复用的流程 1.队列管理 UITableView维护一个可复用队列(reuse queue),存储离屏的UITableVi…...
SQL条件分支中的大讲究
在SQL中,条件分支用于根据不同的条件执行不同的操作,适用于数据查询、数据更新以及存储过程等场景。合理使用SQL条件分支,可以优化数据操作流程,提高代码的可读性和可维护性。 目录 1. 逻辑判断的基本概念 2. CASE 语句…...
Cherry Studio:一站式多模型AI交互平台深度解析 可配合大模型搭建私有知识库问答系统
Cherry Studio:一站式多模型AI交互平台深度解析 可配合大模型搭建私有知识库问答系统 大模型本地化部署流程可查看文章 3分钟教你搭建属于自己的本地大模型 DeepSeek Cherry Studio地址:https://cherry-ai.com/download Cherry Studio 简介 Cherry S…...
工业相机,镜头的选型及实战
工业相机和镜头的选型是机器视觉系统中的关键步骤,选型不当可能导致成像质量差或系统性能不达标。(用于个人的学习和记录) 一、工业相机选型方法 确定分辨率 分辨率需求:根据被测物体的尺寸和检测精度要求计算所需分辨率。 公式…...
C++模板学习从专家到入门:关键字typename与class
文章目录 共同点typename特性class特性 共同点 在定义类模板或者函数模板时,typename 和 class 关键字都可以用于指定模板参数中的类型。 template <class T> template <typename T>typename特性 C 允许在类内定义类型别名,且其使用方法与…...
BFS算法篇——FloodFill问题的高效解决之道(下)
文章目录 前言一. 图像渲染1.1 题目链接:https://leetcode.cn/problems/flood-fill/description/1.2 题目分析:1.3 思路讲解:1.4 代码实现: 二. 岛屿数量2.1 题目链接:https://leetcode.cn/problems/number-of-islands…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
