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


