本文主要是介绍粒子群算法(四维rosenbrock函数的优化问题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
🌞欢迎来到智能优化算法的世界
🌈博客主页:卿云阁💌欢迎关注🎉点赞👍收藏⭐️留言📝
🌟本文由卿云阁原创!
🌠本阶段属于筑基阶段之一,希望各位仙友顺利完成突破
📆首发时间:🌹2021年11月07日🌹
✉️希望可以和大家一起完成进阶之路!
🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!
目录
0️⃣基本原理
1️⃣基本流程
2️⃣主要步骤
4️⃣代码部分
0️⃣✨✨✨基本原理✨✨✨
一群鸟在随机搜索食物。在这个区域里只有一块食物。所有的鸟都不知道食物在那里。但是他们知道当前的位置离食物还有多远。那么找到食物的最优策略是什么呢。最简单有效的就是搜寻目前离食物最近的鸟的周围区域。
鸟群在整个搜寻的过程中,通过相互传递各自的信息,让其他的鸟知道自己的位置,通过这样的协作,来判断自己找到的是不是最优解,同时也将最优解的信息传递给整个鸟群,最终,整个鸟群都能聚集在食物源周围,即找到了最优解。
PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitness value),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。
PSO 初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个"极值"来更新自己。第一个就是粒子本身所找到的最优解,这个解叫做个体极值pBest。另一个极值是整个种群目前找到的最优解,这个极值是全局极值gBest。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。
1️⃣✨✨✨基本流程✨✨✨
Step1:初始化每个粒子的速度和位置;Step2:计算每个粒子的适应度值;
Step3:计算每个粒子的个体最优值;
Step4:计算整个群体的全局最优值;
Step5:对粒子的速度和位置进行初始化;
Step6:进行边界条件处理;
Step7:判断是否满足条件;
2️⃣✨✨✨主要步骤✨✨✨
4️⃣✨✨✨代码部分✨✨✨
在数学最优化中,Rosenbrock函数是一个用来测试最优化算法性能的非凸函数,由Howard Harry Rosenbrock在1960年提出。也称为Rosenbrock山谷或Rosenbrock香蕉函数,也简称为香蕉函数。
%%%%%%%%%%%%%%%%%粒子群算法求函数极值%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear all; %清除所有变量 close all; %清图 clc; %清屏 N=100; %群体粒子个数 D=4; %粒子维数 T=200; %最大迭代次数 c1=1.5; %学习因子1 c2=1.5; %学习因子2 w=0.8; %惯性权重 Xmax=30; %位置最大值 Xmin=-30; %位置最小值 Vmax=10; %速度最大值 Vmin=-10; %速度最小值 %%%%%%%%%%%%%%%%初始化种群个体(限定位置和速度)%%%%%%%%%%%%%%%% x=rand(N,D) * (Xmax-Xmin)+Xmin; v=rand(N,D) * (Vmax-Vmin)+Vmin; %%%%%%%%%%%%%%%%%%初始化个体最优位置和最优值%%%%%%%%%%%%%%%%%%% p=x; pbest=ones(N,1); for i=1:Npbest(i)=func1(x(i,:)); end %%%%%%%%%%%%%%%%%%%初始化全局最优位置和最优值%%%%%%%%%%%%%%%%%% g=ones(1,D); gbest=inf; for i=1:Nif(pbest(i)<gbest)g=p(i,:);gbest=pbest(i);end end gb=ones(1,T); %%%%%%%%%%%按照公式依次迭代直到满足精度或者迭代次数%%%%%%%%%%%%% for i=1:Tfor j=1:N%%%%%%%%%%%%%%更新个体最优位置和最优值%%%%%%%%%%%%%%%%%if (func1(x(j,:))<pbest(j))p(j,:)=x(j,:);pbest(j)=func1(x(j,:));end%%%%%%%%%%%%%%%%更新全局最优位置和最优值%%%%%%%%%%%%%%%if(pbest(j)<gbest)g=p(j,:);gbest=pbest(j);end%%%%%%%%%%%%%%%%%跟新位置和速度值%%%%%%%%%%%%%%%%%%%%%v(j,:)=w*v(j,:)+c1*rand*(p(j,:)-x(j,:))...+c2*rand*(g-x(j,:));x(j,:)=x(j,:)+v(j,:);%%%%%%%%%%%%%%%%%%%%边界条件处理%%%%%%%%%%%%%%%%%%%%%%for ii=1:Dif (v(j,ii)>Vmax) | (v(j,ii)< Vmin)v(j,ii)=rand * (Vmax-Vmin)+Vmin;endif (x(j,ii)>Xmax) | (x(j,ii)< Xmin)x(j,ii)=rand * (Xmax-Xmin)+Xmin;endendend%%%%%%%%%%%%%%%%%%%%记录历代全局最优值%%%%%%%%%%%%%%%%%%%%%gb(i)=gbest; end g; %最优个体 gb(end); %最优值 figure plot(gb) xlabel('迭代次数'); ylabel('适应度值'); title('适应度进化曲线') %%%%%%%%%%%%%%%%%%%适应度函数%%%%%%%%%%%%%%%%%%%% function result=func1(x) summ= sum(100*(x(:,2)-x(:,1).^2).^2+(1-x(:,1)).^2); result=summ; end
这篇关于粒子群算法(四维rosenbrock函数的优化问题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!