程序如下:
clc;
clear all;
%%%%%%%%%%%%%%%%%初始化参数%%%%%%%%%%%%%%%%%%%%%
c1=1.49445;
c2=1.49445;
sizepop=200; %种群数
maxgen=200; %迭代次数
%粒子更新速度
vmax=1;
vmin=-1;
%种群
n=6; %粒子维数
% X=zeros(N,n); %初始化粒子位置
% V=zeros(N,n); %初始化粒子速度
popmin=[ 10 10 10 10 10 10 10]; %机组下限
popmax=[ 60 60 150 120 150 60]; %机组上限
for i=1:sizepop
%随机产生一个种群
pop(i,:)=rands(1,n);%初始种群
v(i,:)=rands(1,n); %初始化速度
%计算适应度
fitness(i)=fun(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,:)+c1*rand*(gbest(j,:)-pop(j,:))+c2*rand*(zbest-pop(j,:));
v(j,find(pop(j,:)>vmax))=vmax;
v(j,find(pop(j,:)
%种群更新
pop(j,:)=pop(j,:)+v(j,:);
pop(j,find(pop(j,:)>popmax))=popmax;
pop(j,find(pop(j,:)
%自适应变异
if rand>0.8
k=ceil(n*rand);
pop(j,k)=rand;
end
%个体最优更新
if fitness(j)
gbest(j,:)=pop(j,:)
fitnessgbest(j)=fitness(j);
end
%群体最优更新
if fitness(j)
zbest=pop(j,:);
fitnesszbest=fitness(j);
end
yy(i)=fitnesszbest;
end
end
zbest;
适应值函数为:
function y=fun(P)
n=6;
y=0;
vv=0;
%%%%%%%%%%%%%%%%%燃料成本系数%%%%%%%%%%%%%%%%%%%%%%%%%%%
a=[2 2.4 0.8 1.2 0.8 2.0 ];
b=[2.0 1.5 1.8 1.0 1.8 1.5 ];
c=[10 10 20 10 20 10];
for i=1:n
y=y+a(i)+b(i)*P(i)+c(i)*P(i)^2;
vv=vv+P(i);
end
显示错误如下:
??? Subscripted assignment dimension mismatch.
Error in ==> pso at 41
pop(j,find(pop(j,:)>popmax))=popmax;
??? Input argument "P" is undefined.
Error in ==> fun at 11
y=y+a(i)+b(i)*P(i)+c(i)*P(i)^2;
怎么回事?