运行结果。
function [xm,fv] = zhidaoPSO(fitness,N,c1,c2,w,M,D)
%[xm,fv] = zhidaoPSO(@fitness,40,2,2,08,1000,2)
%
% 求解无约束优化问题
% fitness 待优化目标函数
% N 粒子数目,
% cX 学习因子
% W 惯性权重
% M 最大迭代次数
% D 自由变量的个数
% xm 目标函数取最小值时的自由变量
% fv 目标函数的最小值
% Detailed explanation goes here
tic;
format long;
%------step1初始化种群的个体------------
x = zeros(N,D);
v = zeros(N,D);
for i=1:N
for j=1:D
x(i,j)=100rand - 50; %随机初始化位置
v(i,j)=100rand - 50; %随机初始化速度
end
end
%------step2先计算各个粒子的适应度,并初始化Pi和PgPg为全局最优-------------
p = zeros(N,1);
%y = zeros(N,D);
for i=1:N
p(i)=fitness(x(i,:));
%y(i,:)=x(i,:);
end
y = x;
pg = x(N,:); %Pg为全局最优
for i=1:(N-1)
if fitness(x(i,:))<fitness(pg)
pg=x(i,:);
end
end
%------step3进入主要循环,按照公式依次迭代------------
%Pbest = zeros(M,1);
for t=1:M
for i=1:N
v(i,:)=wv(i,:)+c1rand(y(i,:)-x(i,:))+c2rand(pg-x(i,:));
for k=1:D
if v(i,k) > 10 %10=vmax
v(i,k) = 10;
end
end
x(i,:)=x(i,:)+v(i,:);
for k=1:D
if x(i,k) > 50 %50=xmax
x(i,k) = 31;
end
end
if fitness(x(i,:))<p(i)
p(i)=fitness(x(i,:));
y(i,:)=x(i,:);
end
if p(i)<fitness(pg)
pg=y(i,:);
end
end
%Pbest(t)=fitness(pg);
end
xm = pg';
fv = fitness(pg);
toc;
同学,这种问题自己好好看看程序,不要上来问吧。
提示下,ParSwarm(k,2ParticleSize+1)=AdaptFunc(ParSwarm(k,1:ParticleSize)); 中给定的矩阵的行或列的编号有问题,代码应该没问题,逐步运行下,看看变量吧。
以上就是关于最优化 粒子群法全部的内容,包括:最优化 粒子群法、PSO粒子群算法问题,运行之后出现Subscript indices must either be real positive integers or logicals、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)