%清空运行环境
clc
clear
%速度更新参数
c1 = 1.49445;
c2 = 1.49445;
maxgen = 300; %最大迭代次数
sizepop = 20; %种群规模数
%个体和速度最大最小值,即为位置速度边界
popmax = 2;
popmin = -2;
Vmax = 0.5;
Vmin = -0.5;
%种群初始化
for i = 1:sizepop
%产生随机种群
pop(i,:)=2*rands(1,2); %初始化粒子,随机生成1行2列的数组
V(i,:)=0.5*rands(1,2); %初始化速度
%计算粒子适应度值
fitness(i)= fun(pop(i,:));
end
%寻找最初极值
[bestfitness bestindex] = min(fitness);%记录极值及其序号
zbest = pop(bestindex,:);%群体极值位置
gbest = pop; %个体极值位置
w=0.8;%惯性权重
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,:)
%位置更新判断
pop(j,:) = pop(j,:)+0.5*V(j,:);
pop(j,find(pop(j,:)
pop(j,find(pop(j,:)>popmax)) = popmax;
%适应度更新
fitness(j) = fun(pop(j,:));
end
%个体极值和群体极值更新
for j = 1:sizepop
%个体极值更新
if fitness(j) > fitnessgbest(j)
gbest=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);
%适应度函数
function y = fun(x)
%x 为粒子的位置
%y 为粒子的适应度值
y=(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;
end
报错:位置 1 的索引超出数组范围(不能超过 1)。
出错 jobshop (line 204)
V(j,:)=V(j,:)+c1*rand*(gbest(j,:)-pop(j,:))+c2*rand*(zbest-pop(j,:));