%------初始格式化--------------------------------------------------
clear all;
clc;
%------绘制目标函数-----%
x = 1:0.01:2
y = sin(10*pi*x)./x
figure
plot(x,y,'b-')
hold on
%------参数初始化--------%
c1 =1.49445; %学习因子1
c2 =1.49445; %学习因子2
maxgen =50; %最大迭代次数
sizepop =10; %种群规模,为10个粒子
Vmax =0.5 %速度最大值
Vmin =0.5 %速度最小值
popmax =2 %根据x范围定义到-2
popmin =1 %根据x范围定义到1
%-----产生初始粒子和速度
for i=1:sizepop
%---随机产生一个种群
pop(i,:) = (rands(1)+1)/2+1
V(i,:) = 0.5*rands(1)
%---计算适应度----%
fitness(i) =fun(pop(i,:))
end
%----个体极值和群体极值-----%
[bestfitness bestindes] =max(fitness)
zbest =pop(bestindes,:) %全局最佳
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
%----输出结果并绘制图----%
[fitnesszbest zbest]
plot(zbest,fitnesszbest,'r*')
figure
plot(yy)
title('最优个体适应度','fontsize',12)
xlabel('进化迭代','fontsize',12)
ylabel('适应度','fontsize',12)
%------算法结束---DreamSun GL & HF-----------------------------------
%----定义fun函数----%
function y = fun(x)
y = sin(10*pi*x)./x
end
其结果如下所示: