%清空运行环境
clc
clear
%速度更新参数
c1=1.49445;
c2=1.49445;
maxgen=300; %迭代次数
sizepop=30; %种群规模
%个体和速度最大值和最小值
pop1max=12.78;
pop1min=7.22;
pop2max=26.67;
pop2min=12.78;
Vmax=0.5;
Vmin=-0.5;
%种群初始化
for i=1:sizepop
%随机产生一个种群
pop(i,:)=[(7.22+5.56* rand(1,1)) (12.78+13.89* rand(1,1))]; % 初始化粒子
V(i,:)=0.5* rands(1,2); % 初始化速度
%计算粒子适应度值
fitness(i)=jizhu(pop(i,:));
end
% 根据初始粒子适应度寻找个体极值和群体极值
[bestfitness,bestindex]=min(fitness);
zbest=pop(bestindex,:); %群体极值位置
gbest=pop; %个体极值位置
fitnessgbest=fitness; %个体极值适应度值
fitnesszbest=bestfitness; %群体极值适应度值
%迭代寻优
for i=1:maxgen
%粒子位置和速度更新
for j=1:sizepop
%速度更新
V(j,:)=V(j,:)+c1rand(gbest(j,:)-pop(j,:))+c2rand(zbest-pop(j,:));
V(j,find(V(j,:)>Vmax))=Vmax;
V(j,find(V(j,:)<Vmin))=Vmin;
%粒子更新
pop(j,:)= pop(j,:)+0.5* V(j,:);
if pop(j,1)>pop1max
pop(j,1)=pop1max;
elseif pop(j,1)<pop1min
pop(j,1)=pop1min;
end
if pop(j,2)>pop2max
pop(j,2)=pop2max;
elseif pop(j,2)<pop2min
pop(j,2)=pop2min;
end
%新粒子适应度值
fitness(j)=jizhu(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数组中
result(i)=fitnesszbest;
end
%画出每代最优个体适应度值
plot(result);
title('最优个体适应度值','fontsize',12);
xlabel('进化代数', 'fontsize',12);
ylabel('适应度值', 'fontsize',12);