function [duty,iterations] = TSOMPPT(vpv,ipv) persistent p u dc dbest counter iteration iter_max num; if isempty(num) num=10; end if isempty(p) p=zeros(1,num); dbest=0; counter=0; u=1; iteration=0; iter_max=15; end if isempty(dc) dc=linspace(0,0.7,num); end iterations=iteration; if iterations<=iter_max if(counter>=1 && counter<=100) duty=dc(u); counter=counter+1; return; end if(u>=1 && u<=num) p(u)=vpv*ipv; end u=u+1; if(u<num+1) duty=dc(u); counter=1; return; end u=1; counter=1; iteration=iteration+1; [m,i]=max(p); dbest=dc(i); dc1=EPOUpdateDuty(dbest,dc,iteration,iter_max,num); dc=dc1; duty=dc(u); return; else duty=dbest; return; end end function D=EPOUpdateDuty(dbest,d,iter,iter_max,num) D=zeros(1,num); dup=zeros(1,num); persistent s; if isempty(s) s=0.5; end res=0.01; if iter>iter_max iter=iter_max; end eta=(res/s)^(iter/iter_max); s=s*eta for i=1:num deltaD=s*(2*rand()-1); if d(i)==dbest dup(i)=dbest; else dup(i)=dbest+deltaD; end if dup(i)>1 dup(i)=1; end if dup(i)<0 dup(i)=0; end end D=dup; end 把这个代码改写成基于粒子群优化算法

时间: 2023-12-07 11:02:31 浏览: 29
function [duty,iterations] = PSOMPPT(vpv,ipv) persistent p u dc dbest counter iteration iter_max num; if isempty(num) num=10; end if isempty(p) p=zeros(1,num); dbest=0; counter=0; u=1; iteration=0; iter_max=15; end if isempty(dc) dc=linspace(0,0.7,num); end iterations=iteration; if iterations<=iter_max if(counter>=1 && counter<=100) duty=dc(u); counter=counter+1; return; end if(u>=1 && u<=num) p(u)=vpv*ipv; end u=u+1; if(u<num+1) duty=dc(u); counter=1; return; end u=1; counter=1; iteration=iteration+1; [m,i]=max(p); dbest=dc(i); dc1=EPOUpdateDutyPSO(dbest,dc,iteration,iter_max,num); dc=dc1; duty=dc(u); return; else duty=dbest; return; end end function D=EPOUpdateDutyPSO(dbest,d,iter,iter_max,num) D=zeros(1,num); persistent w c1 c2 v pbest gbest; if isempty(w) w=0.72; end if isempty(c1) c1=1.49; end if isempty(c2) c2=1.49; end if isempty(v) v=zeros(num,1); end if isempty(pbest) pbest=d; end if isempty(gbest) gbest=dbest; end res=0.01; if iter>iter_max iter=iter_max; end eta=(res/w)^(iter/iter_max); w=w*eta for i=1:num v(i)=w*v(i)+c1*rand()*(pbest(i)-d(i))+c2*rand()*(gbest-d(i)); d(i)=d(i)+v(i); if d(i)>1 d(i)=1; end if d(i)<0 d(i)=0; end end p=vpv*ipv; [m,i]=max(p); if p(i)>pbest(i) pbest(i)=d(i); end if p(i)>gbest gbest=d(i); end D=pbest; end

相关推荐

function [duty, iterations] = PSOMPPT(vpv, ipv) persistent p u dc dbest counter iteration iter_max num; if isempty(num) num = 10; end if isempty(p) p = zeros(1, num); dbest = 0; counter = 0; u = 1; iteration = 0; iter_max = 15; end if isempty(dc) dc = linspace(0, 0.7, num); end iterations = iteration; if iterations <= iter_max if (counter >= 1 && counter <= 100) duty = dc(u); counter = counter + 1; return; end if (u >= 1 && u <= num) p(u) = vpv * ipv; end u = u + 1; if (u < num + 1) duty = dc(u); counter = 1; return; end u = 1; counter = 1; iteration = iteration + 1; w = 0.729; c1 = 1.494; c2 = 1.494; dim = num; swarm_size = 50; max_iter = 100; min_bound = zeros(1, dim); max_bound = ones(1, dim); x = repmat(min_bound, swarm_size, 1) + rand(swarm_size, dim) .* (repmat(max_bound, swarm_size, 1) - repmat(min_bound, swarm_size, 1)); v = rand(swarm_size, dim); pbest = x; for i = 1:swarm_size if p(i) > pbest(i) pbest(i) = p(i); end end [gbestval, gbestid] = max(pbest); gbest = repmat(min_bound, 1, dim) + rand(1, dim) .* (repmat(max_bound, 1, dim) - repmat(min_bound, 1, dim)); for iter = 1:max_iter for i = 1:swarm_size v(i, :) = w * v(i, :) + c1 * rand(1, dim) .* (pbest(i, :) - x(i, :)) + c2 * rand(1, dim) .* (gbest - x(i, :)); x(i, :) = x(i, :) + v(i, :); for j = 1:dim if x(i, j) > max_bound(j) x(i, j) = max_bound(j); elseif x(i, j) < min_bound(j) x(i, j) = min_bound(j); end end p(i) = vpv * ipv * x(i, u); if p(i) > pbest(i) pbest(i, :) = x(i, :); end end [cur_bestval, cur_bestid] = max(pbest); if cur_bestval > gbestval gbestval = cur_bestval; gbest = pbest(cur_bestid, :); end end dbest = gbest(u); dc1 = EPOUpdateDuty(dbest, dc, iteration, iter_max, num); dc = dc1; duty = dc(u); return; else duty = dbest; return; endendfunction D = EPOUpdateDuty(dbest, d, iter, iter_max, num) D = zeros(1, num); dup = zeros(1, num); persistent s; if isempty(s) s = 0.5; end res = 0.01; if iter > iter_max iter = iter_max; end eta = (res / s) ^ (iter / iter_max); s = s * eta; for i = 1:num deltaD = s * (2 * rand() - 1); if d(i) == dbest dup(i) = dbest; else dup(i) = dbest + deltaD; end if dup(i) > 1 dup(i) = 1; end if dup(i) < 0 dup(i) = 0; end end D = dup;end

最新推荐

recommend-type

Java开发案例-springboot-66-自定义starter-源代码+文档.rar

Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar
recommend-type

单家独院式别墅图纸D027-三层-12.80&10.50米-施工图.dwg

单家独院式别墅图纸D027-三层-12.80&10.50米-施工图.dwg
recommend-type

啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦

啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦
recommend-type

课程大作业基于Vue+PHP开发的简单问卷系统源码+使用说明.zip

【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 课程大作业基于Vue+PHP开发的简单问卷系统源码+使用说明.zip Project setup ``` npm install ``` ### Compiles and hot-reloads for development ``` npm run serve ``` ### Compiles and minifies for production ``` npm run build ``` ### Lints and fixes files ``` npm run lint ``` ### Customize configuration See [Configuration Reference](https://cli.vuejs.org/config/).
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

HSV转为RGB的计算公式

HSV (Hue, Saturation, Value) 和 RGB (Red, Green, Blue) 是两种表示颜色的方式。下面是将 HSV 转换为 RGB 的计算公式: 1. 将 HSV 中的 S 和 V 值除以 100,得到范围在 0~1 之间的值。 2. 计算色相 H 在 RGB 中的值。如果 H 的范围在 0~60 或者 300~360 之间,则 R = V,G = (H/60)×V,B = 0。如果 H 的范围在 60~120 之间,则 R = ((120-H)/60)×V,G = V,B = 0。如果 H 的范围在 120~180 之间,则 R = 0,G = V,B =
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依