php 数组大于1,位置 1 的索引超出数组范围(不能超过 1)。
%清空运行环境clcclear%速度更新参数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*rand
%清空运行环境
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,:));
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)