详解综合学习粒子群算法——CLPSO(附该文作者给出的matlab代码)

最近团队出了两篇基于CLPSO[1]的改进算法,这里根据自己的理解分析一下这个综合学习的算法,并将文章作者给出的源代码分享出来供大家学习:https://download.csdn.net/download/Bernard_S/12612817 (免费下载,本身就是从作者的主页搬的哈哈)。首先综合评价一下CLPSO,正如作者本人所言,该算法在单峰问题上结果非常好,但是处理单峰问题结果较差,我复写做的实验证明也确实如此,但是还是被该算法在多峰问题上的表现惊艳到了。所以目前大部分文章对其的改进都集中在提升开采能力以加强其在单峰问题上竞争力,接下来我就通过对CLPSO的详解来分析一下该算法在勘探与开采方面的表现以及简述一些已发表的论文对其的改进。(公式截图均来自参考文献)
简述粒子群算法
总所周知,粒子群算法赋予种群中每个粒子两个关键成分:速度与位置。并且迭代过程中通过这两个成分的变化来实现进化。具体方式如下:
在这里插入图片描述
即每个粒子在进化中实际上由两个分量控制着方向,即本身的历史最优解与全局的历史最优解,实际上这两个分量也同时操控着粒子群算法的勘探与开采能力,自身最优拉动粒子在全局范围内勘探最优区域,而全局最优则拉动粒子向已有的最优区域移动以实现最优解的开采!
CLPSO的改进
以上简述实际上是为了方便这里分析CLPSO的改进是如何影响粒子群算法在勘探与开采之间的平衡,从而实现现在这种结果。实际上该算法改进十分简洁有效,接下来进行具体分析其综合学习策略。
其核心其实就是下面这一公式,该公式也仅仅是对经典的粒子群算法中速度更新项进行改进,将自身历史最优项换为新的综合学习因子同时将全局最优项删去。
在这里插入图片描述
所以接下来我们重点分析一下他的综合学习因子。首先看看他如何产生:

for k=1:psar=randperm(D);ai(k,ar(1:m(k)))=1;fi1=ceil(ps*rand(1,D));fi2=ceil(ps*rand(1,D));fi=(pbestval(fi1)<pbestval(fi2))'.*fi1+(pbestval(fi1)>=pbestval(fi2))'.*fi2;bi=ceil(rand(1,D)-1+Pc(k));if bi==zeros(1,D),rc=randperm(D);bi(rc(1))=1;endf_pbest(k,:)=bi.*fi+(1-bi).*f_pbest(k,:);
end

简单描述就是:对每一个粒子,在整个种群中随机选取两个粒子,比较两个粒子适应度并取较优的一个作为待选,然后依据文章定义的交叉概率Pc来按维度将待选粒子与该粒子的历史最有进行交叉,以生成综合学习因子,即公式中的Pbest.fri。同时在迭代过程中记录粒子没有变化的迭代停滞次数(注意源代码中并未将变化的粒子停滞次数归零),当某个粒子的停滞次数大于阈值,则重新为其生成综合学习因子。
其Pc的定义如下

t=0:1/(ps-1):1;t=5.*t;
Pc=0.0+(0.5-0.0).*(exp(t)-exp(t(1)))./(exp(t(ps))-exp(t(1)));

也很容易理解,即对整个种群的每个粒子定义线性递增的Pc(Pc=[0,0.5])且Pc不随迭代变化。
实际上整个算法所有的改进如上,十分的简单易懂却很有效,这里说说本人对其改进的理解:
首先为什么要去掉全局最优项?
实际上好多对CLPSO的改进会刻意将全局最优项加上以增强其开采能力,我认为其中HCLPSO[2]算是效果较好的变体,它主要就是将多种群拓扑引入,本身保留一个CL群然后生成一个新的带全局项的CL群,其实和众多该类改进一样,破坏了CLPSO本身的拓扑,所以实验证明在处理多峰问题时HCLPSO劣于CLPSO。说说我理解的为什么去掉全局最优项:首先,综合学习因子本身会选取随机两个粒子里面较好的一个,也就是说,全局最优在每次迭代中有不小的概率会被种群中的一个或多个粒子选择为学习目标。其次,全局最优项会大幅抵消综合学习因子的勘探能力(下文所述的振荡问题),因为本身综合学习因子是粒子自身最优与随机学习目标依概率的组合。
为什么综合学习因子会在多模态问题上起作用
原文中其实是有解释的,即粒子群算法本身进化中存在的振荡问题!从经典粒子群算法速度的进化公式来描述一下,我们可以看出,除了惯性项W*V,后面两项实际上控制了粒子整个进化过程的方向,也决定了粒子在搜索中对勘探与开采的侧重。那么当(Pbest-x)与(Gbest-x)这两项在多个维度中出去相互对立或者整体一致的方向时,其中的某一项必然失去作用甚至起到反作用,即力学中两个力同向,或完全反向。陷入多代这种进化的粒子必然会失去其搜索能力,不仅浪费计算次数,而且极易陷入早熟收敛。这就是为什么CLPSO在自身历史最优中混合入随机选取的目标,之后去掉全局最优,实际上就是避免了这一现象,事实证明效果显著!
最后将源代码贴上供大家学习,具体实验代码上文以附。

[1] J.J. Liang, A.K. Qin, P.N. Suganthan, S. Baskar, Comprehensive learning particle swarm optimizer for global optimization of multimodal functions, IEEE Trans. Evol. Comput. 10 (3) (2006) 281–295.

function [gbest,gbestval,fitcount]= CLPSO_new_func(fhd,Max_Gen,Max_FES,Particle_Number,Dimension,VRmin,VRmax,varargin)
%[gbest,gbestval,fitcount]= CLPSO_new_func('f8',3500,200000,30,30,-5.12,5.12)
rand('state',sum(100*clock));
me=Max_Gen;
ps=Particle_Number;
D=Dimension;
cc=[1 1];   %acceleration constants
t=0:1/(ps-1):1;t=5.*t;
Pc=0.0+(0.5-0.0).*(exp(t)-exp(t(1)))./(exp(t(ps))-exp(t(1)));
% Pc=0.5.*ones(1,ps);
m=0.*ones(ps,1);
iwt=0.9-(1:me)*(0.7/me);
% iwt=0.729-(1:me)*(0.0/me);
cc=[1.49445 1.49445];
if length(VRmin)==1VRmin=repmat(VRmin,1,D);VRmax=repmat(VRmax,1,D);
end
mv=0.2*(VRmax-VRmin);
VRmin=repmat(VRmin,ps,1);
VRmax=repmat(VRmax,ps,1);
Vmin=repmat(-mv,ps,1);
Vmax=-Vmin;
pos=VRmin+(VRmax-VRmin).*rand(ps,D);for i=1:ps;e(i,1)=feval(fhd,pos(i,:),varargin{:});
endfitcount=ps;
vel=Vmin+2.*Vmax.*rand(ps,D);%initialize the velocity of the particles
pbest=pos;
pbestval=e; %initialize the pbest and the pbest's fitness value
[gbestval,gbestid]=min(pbestval);
gbest=pbest(gbestid,:);%initialize the gbest and the gbest's fitness value
gbestrep=repmat(gbest,ps,1);stay_num=zeros(ps,1);ai=zeros(ps,D);
f_pbest=1:ps;f_pbest=repmat(f_pbest',1,D);
for k=1:psar=randperm(D);ai(k,ar(1:m(k)))=1;      %%%大家仔细看这里,看似作者希望加上全局最优项,实际上m并未更新,全局最优也一直没有使用fi1=ceil(ps*rand(1,D));fi2=ceil(ps*rand(1,D));fi=(pbestval(fi1)<pbestval(fi2))'.*fi1+(pbestval(fi1)>=pbestval(fi2))'.*fi2;bi=ceil(rand(1,D)-1+Pc(k));if bi==zeros(1,D),rc=randperm(D);bi(rc(1))=1;endf_pbest(k,:)=bi.*fi+(1-bi).*f_pbest(k,:);
endstop_num=0;
i=1;while i<=me&fitcount<=Max_FESi=i+1;for k=1:psif stay_num(k)>=5%     if round(i/10)==i/10%|stay_num(k)>=5stay_num(k)=0;ai(k,:)=zeros(1,D);f_pbest(k,:)=k.*ones(1,D);ar=randperm(D);ai(k,ar(1:m(k)))=1;fi1=ceil(ps*rand(1,D));fi2=ceil(ps*rand(1,D));fi=(pbestval(fi1)<pbestval(fi2))'.*fi1+(pbestval(fi1)>=pbestval(fi2))'.*fi2;bi=ceil(rand(1,D)-1+Pc(k));if bi==zeros(1,D),rc=randperm(D);bi(rc(1))=1;endf_pbest(k,:)=bi.*fi+(1-bi).*f_pbest(k,:);endfor dimcnt=1:Dpbest_f(k,dimcnt)=pbest(f_pbest(k,dimcnt),dimcnt);endaa(k,:)=cc(1).*(1-ai(k,:)).*rand(1,D).*(pbest_f(k,:)-pos(k,:))+cc(2).*ai(k,:).*rand(1,D).*(gbestrep(k,:)-pos(k,:));%~~~~~~~~~~~~~~~~~~~~~~vel(k,:)=iwt(i).*vel(k,:)+aa(k,:);vel(k,:)=(vel(k,:)>mv).*mv+(vel(k,:)<=mv).*vel(k,:);vel(k,:)=(vel(k,:)<(-mv)).*(-mv)+(vel(k,:)>=(-mv)).*vel(k,:);pos(k,:)=pos(k,:)+vel(k,:);if (sum(pos(k,:)>VRmax(k,:))+sum(pos(k,:)<VRmin(k,:)))==0;e(k,1)=feval(fhd,pos(k,:),varargin{:});fitcount=fitcount+1;tmp=(pbestval(k)<=e(k));if tmp==1stay_num(k)=stay_num(k)+1;endtemp=repmat(tmp,1,D);pbest(k,:)=temp.*pbest(k,:)+(1-temp).*pos(k,:);pbestval(k)=tmp.*pbestval(k)+(1-tmp).*e(k);%update the pbestif pbestval(k)<gbestvalgbest=pbest(k,:);gbestval=pbestval(k);gbestrep=repmat(gbest,ps,1);%update the gbestendendend% if round(i/100)==i/100%     plot(pos(:,D-1),pos(:,D),'b*');hold on;%     for k=1:floor(D/2)%         plot(gbest(:,2*k-1),gbest(:,2*k),'r*');%     end%     hold off%     title(['PSO: ',num2str(i),' generations, Gbestval=',num2str(gbestval)]);%     axis([VRmin(1,D-1),VRmax(1,D-1),VRmin(1,D),VRmax(1,D)])%     drawnow% endif fitcount>=Max_FESbreak;endif (i==me)&(fitcount<Max_FES)i=i-1;end
end
gbestval

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

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

相关文章

进化算法之粒子群算法和Matlab实现(多维)

&#xff08;粒子群算法进阶讲解传送门&#xff1a;(https://blog.csdn.net/DBLLLLLLLL/article/details/103036067) &#xff09; 前面一篇文章介绍了遗传算法&#xff0c;这里再介绍一种进化算法&#xff0c;称为粒子群算法。同遗传算法类似&#xff0c;粒子群算法也是仿照了…

粒子群算法及通过惯性权重和学习因子对其进行改进—MATLAB实现

本文的代码将放在最后&#xff0c;需要的小伙伴们可以免费获取哦&#xff01;&#xff01;&#xff01; 不要忘记点赞加关注奥&#x1f60b;&#x1f60b; 文章目录 粒子群算法一、理论基础1、介绍2、核心公式3、图形直观解释 二、问题描述三、解题思路四、MATLAB实现1、参数设…

可查看其他用户聊天记录,ChatGPT 爆出大BUG

ChatGPT一经推出&#xff0c;迅速出圈&#xff0c;用户赞誉如云&#xff0c;“绝对改变世界”、“第四次工业革命的“火药桶”、“苍天啊&#xff0c;它咋啥都会&#xff0c;我失业了”&#xff0c;一时间 ChatGPT 成为完美的代言词。 然而近日&#xff0c;ChatGPT 遇到了大麻烦…

ChatGPT 和 Midjourney 将改变我们的生活,日常工作流程将完全改变并与这些新型工具集成

上周末我花了很多时间先玩 Open AI ChatGPT,然后玩 Midjourney。起初我笑了,然后我开始完全被各种可能性所困扰,然后我终于意识到了它的潜力,并开始将其用于更有成效的工作。 注意:我本可以用它来制作一个引人入胜的点击诱饵标题,但我没有. 这是我问 Open AI 聊天的第一…

博弈的意思_博弈是什么意思(博弈最通俗的解释)

国学智慧《鬼谷子》:在封闭和开合的状态中,达到自己想要的目的。 鬼谷子是一本智谋之书,里面主要讲述的就是在和别人博弈的时候,以什么样的心态和姿态,来达到自己想要的目的。也是为人处世,处世权谋之中,不可不读的一本书。鬼谷子这本书中的捭阖术,其中的道理也要灵活多…

你是伪民主式父母吗?

经常给青少年做咨询&#xff0c;发现一个有趣的现象&#xff0c;就是关于他们家庭的养育方式&#xff0c;孩子和父母的表述是不一样的&#xff0c;父母说他们是民主式的家长&#xff0c;给孩子尽量多的自由&#xff0c;不去过多管制&#xff1b;而孩子说自己的父母是特别专制和…

聪明人是怎么说话办事的?曾国藩这幅书法对联,两句话讲解透彻!

晚清名臣曾国藩的经典对联&#xff1a; “大处着眼&#xff0c;小处着手&#xff1b;群居守口&#xff0c;独居守心”&#xff01; 曾国藩是第一等的聪明人&#xff0c;能在复杂的官场中生存&#xff0c;还能赢得会做人的美誉&#xff0c;关键在于他做到了两件事&#xff0c;一…

嵌入式为什么没有软件架构师?

点击上方“小麦大叔”&#xff0c;选择“置顶/星标公众号” 福利干货&#xff0c;第一时间送达 我从事嵌入式软件开发有6、7个年头&#xff0c;bsp&#xff0c;驱动&#xff0c;应用软件&#xff0c;android hall&#xff0c;framework等都有涉猎。平时除了关注嵌入式行业的发展…

总结一下进程是什么

1、我们常说的进程是什么&#xff1f; 进程&#xff08;Process&#xff09;是计算机中的程序关于某数据集合上的运行活动&#xff0c;是系统进行资源分配和调度的基本单位&#xff0c;是操作系统结构的基础。 进程是程序的基本执的实体 2、进程状态 就绪状态 进程已获得除处…

Vue 方法中this指向 引起的祸端

可忽略 最近在写 vue 项目&#xff0c; 使用 总监封装 好的框架&#xff0c;遇到一个问题&#xff1a; vue 实例 methods 中的 方法在传递后&#xff0c;通过 函数名&#xff08;&#xff09; 方式调用后&#xff0c; 其内部 this 竟然没有指向 window。当时就不服了&#xff…

PHP语言25周年,PHP是世界上最好的语言

1995年6月8日&#xff0c;PHP 1.0版本正式问世&#xff0c;目前已经更迭到7.4版本&#xff0c;PHP 8.0 Alpha1版本也有望于今年6月中旬发布。25周年之际&#xff0c;杜蕾斯官方微博发文庆祝&#xff1a;“#PHP语言25周年#不管PHP是不是世界上最好的语言&#xff0c;反正—— pr…

“5G 太耗电,关掉它!”

作者 | Carol 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 随着5G的普及&#xff0c;如今已经有很多手机用户已经体验到了5G的便捷了。无论国内外&#xff0c;从各大运营商及手机厂商向5G的投入中可见&#xff0c;5G的普及只不过是时间问题罢了。 但就在大家都…

Android App 耗电量统计

前言 在Android统计App耗电量比较麻烦&#xff0c;直至Android 4.4&#xff0c;它仍没公开“电量统计”API或文档……额&#xff0c;是的&#xff0c;仅没有公开&#xff0c;并不是没有。平时在手机“设置- 电量”看到的数据 就是系统调用内部API的统计结果。 基础概念 1. 手机…

泰安柒柒:一篇文章带你了解爆火的ChatGPT

OpenAI发布聊天机器人模型ChatGPT&#xff0c;迅速出圈全网。它以对话方式进行交互。以更贴近人的对话方式与使用者互动&#xff0c;可以回答问题、承认错误、挑战不正确的前提、拒绝不适当的请求。 那么&#xff0c;ChatGPT为什么会爆火呢&#xff1f; 1 ChatGPT是什么&#…

ControlNet-有条件图文生成论文阅读

文章目录 摘要算法&#xff1a;ControlNetControlNet in Image Diffusion ModelTrainingImproved Training 实验Canny edgesHough linesHuman scribblesHED boundary mapOpenpifpaf poseOpenposeADE20K segmentation mapCOCO-Stuff segmentation mapDIODE normal mapDepth-to-I…

如何解决“德语/文”等外文字符显示乱码问题

目录 1“德文/语字符”等外文显示乱码原因 2 如何解决“德文/语字符”等外文显示乱码 2.1 使用支持多个“编码”切换的工具打开该文本 2.2 使用变音字符的标准ASCII字符 2.3 将计算机系统切换至西欧编码 3 结尾 1“德文/语字符”等外文显示乱码原因 以德文/语为例&#…

Domino NotesV11开放下载啦!

大家好&#xff0c;才是真的好。此刻我正在北京的Domino NotesV11培训现场写Domino Notes V11&#xff0c;人数众多&#xff0c;群情激扬。上周五&#xff0c;Domino Notes V11已经开放下载&#xff0c;不知道朋友们下到了没有&#xff1f;要是下到了&#xff0c;告诉大家一个好…

Window内置ubuntu安装与图形界面显示

文章目录 一、Window安装ubuntu1.打开控制面板2.WSL升级1&#xff09;启用适用于 Linux 的 Windows 子系统2&#xff09;检查运行 WSL 2 的要求3&#xff09; 启用虚拟机功能4&#xff09; 下载 Linux 内核更新包5&#xff09;将 WSL 2 设置为默认版本 3.安装ubuntu 二、图形界…

计算机需不需要考英语口语,哪些专业需要英语口语考试

哪些专业需要英语口语考试&#xff1f;下面小编为大家整理了相关内容&#xff0c;以供参考&#xff0c;一起来看看吧&#xff01; 哪些专业需要英语口语考试 需要英语口语的都是英语专业或外贸&#xff0c;外交类专业。按照各院校要求&#xff0c;报考外语类专业或报考涉外专业…