粒子群算法的matlab程序代码
·
粒子群算法的matlab代码
帮助理解粒子群算法的寻优算法
该算法是寻找函数的最大值
代码如下:
%% 清空环境
clc
clear
%% 参数初始化
%粒子群算法中的两个参数
c1 = 1.49445; %自我学习因子
c2 = 1.49445; %社会学习因子
maxgen=300; %进化次数
sizepop=20; %种群规模
Vmax=0.5; %速度的最大值
Vmin=-0.5; %速度的最小值
popmax=2; %边界最大值
popmin=-2; %边界最下值
for k=1:100
%% 产生初始粒子和速度
k
for i=1:sizepop
%随机产生一个种群
pop(i,:)=2*rands(1,2); %初始种群
V(i,:)=0.5*rands(1,2); %初始化速度
%计算适应度
fitness(i)=fun(pop(i,:)); %染色体的适应度
end
%% 个体极值和群体极值
[bestfitness bestindex]=max(fitness);
zbest=pop(bestindex,:); %全局最佳
gbest=pop; %个体最佳
fitnessgbest=fitness; %个体最佳适应度值
fitnesszbest=bestfitness; %全局最佳适应度值
%% 迭代寻优
for i=1:maxgen
for j=1:sizepop
%速度更新
V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
V(j,find(V(j,:)>Vmax))=Vmax;
V(j,find(V(j,:)<Vmin))=Vmin;
%种群更新
pop(j,:)=pop(j,:)+V(j,:);
pop(j,find(pop(j,:)>popmax))=popmax;
pop(j,find(pop(j,:)<popmin))=popmin;
%适应度值
fitness(j)=fun(pop(j,:));
end
for j=1:sizepop
%个体最优更新
if fitness(j) > fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j);
end
%群体最优更新
if fitness(j) > fitnesszbest
zbest = pop(j,:);
fitnesszbest = fitness(j);
end
end
yy(i)=fitnesszbest;
end
s(k,:)=yy;
end
%% 结果分析
for m=1:300
s(101,m)=sum( s(:,m) )/100;
end
plot(s(101,:),'k')
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);
其中要寻找最优值的函数放在另一个.m文件当中,可以随时更改函数,以实现寻找不同函数的最优值的目的,函数文件的程序为:
function y = fun(x)
%函数用于计算粒子适应度值
%x input 输入粒子
%y output 粒子适应度值
y=sin( sqrt(x(1).^2+x(2).^2) )./sqrt(x(1).^2+x(2).^2)+exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)-2.71289;
这里的函数可以任意修改。该函数的文件名最好为上面程序中要调用的的函数fun.m。这样一个简单的粒子群算法就搭建好啦。
若有不正确的地方,希望给予指正。
要想了解更多的算法以及源代码,欢迎点进我的主页
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)