📄 cpsoh1.txt
字号:
function [PBEST,x] = cpsoh1(N)
global Swarm;
global B;
psoOptions = get_Options;
Obj = get_Obj(N);
f2eval = 'LJcluster';
[Swarm, PBEST] =initiate(psoOptions,Obj);%初始化的作用是产生一个最优的背景向量b(j,z)
for iter = 1 : psoOptions.Vars.Iterations
for j = 1 : psoOptions.population
for i = 1 : psoOptions.Vars.PopSize%粒子群有 10个
fval1 = feval(f2eval, b(j,Swarm(j).individual(i).number));%feval 执行由串指定的函数
fval2 = feval(f2eval, b(j,Swarm(j).individual(i).best));
fval3 = feval(f2eval, b(j,Swarm(j).P));
if(fval1 < fval2)
Swarm(j).individual(i).best = Swarm(j).individual(i).number;
end
if(fval2 < fval3)
Swarm(j).P = Swarm(j).individual(i).best;
end
for d=1:Obj.Dim
Swarm(j).individual(i).dim(d).speed = psoOptions.SParams.Chi*Swarm(j).individual(i).dim(d).speed + ...
psoOptions.SParams.c1 * rand * ( Swarm(j).individual(i).dim(d).best - Swarm(j).individual(i).dim(d).number ) + ...
psoOptions.SParams.c2 * rand * ( Swarm(j).P(d) - Swarm(j).individual(i).dim(d).number ) ;
Swarm(j).individual(i).dim(d).speed = min(psoOptions.SParams.Vmax, Swarm(j).individual(i).dim(d).speed);
Swarm(j).individual(i).dim(d).speed = max( - psoOptions.SParams.Vmax, Swarm(j).individual(i).dim(d).speed);
Swarm(j).individual(i).dim(d).number = Swarm(j).individual(i).dim(d).number + Swarm(j).individual(i).dim(d).speed;
Swarm(j).individual(i).dim(d).number = min(Obj.ub(d), Swarm(j).individual(i).dim(d).number);
Swarm(j).individual(i).dim(d).number = max(Obj.lb(d), Swarm(j).individual(i).dim(d).number);
end
Swarm(j).individual(i).number=[Swarm(j).individual(i).dim.number];
Swarm(j).individual(i).best=[Swarm(j).individual(i).dim.best];
% PBEST(j,d) = feval(f2eval,[Swarm(j).Dim(d).P(d)]);%M个N维的向量组成的值
% x(j,d)=[Swarm(j).Dim(d).P(d)];
end
% B=[Swarm.Dim.P];
x=B;
PBEST=feval('LJcluster', B);
end
end
clc
%PBEST(j,d) = feval(f2eval,[Swarm(j).Dim(d).P(d)]);%M个N维的向量组成的值
% x(j,d)=[Swarm(j).Dim(d).P(d)];
% for iter = 1 : psoOptions.Vars.Iterations
% for j = 1 : psoOptions.population
% for i = 1 : psoOptions.Vars.PopSize%粒子群有 10个
% for d = 1 : Obj.Dim
% fval1 = feval(f2eval, b(j,[Swarm(j).individual(i).dim(d).number)]);%feval 执行由串指定的函数
% fval2 = feval(f2eval, b(j,[Swarm(j).individual(i).dim(d).best)]);
% fval3 = feval(f2eval, b(j,Swarm(j).Dim(d).P));
% if(fval1 < fval2)
% Swarm(j).individual(i).dim(d).best = Swarm(j).individual(i).dim(d).number;
% end
%
% if(fval2 < fval3)
% Swarm(j).Dim(d).P(d) = Swarm(j).individual(i).dim(d).best;
% end
% Swarm(j).individual(i).dim(d).speed = psoOptions.SParams.Chi * ( Swarm(j).individual(i).dim(d).speed + ...
% psoOptions.SParams.c1 * rand * ( Swarm(j).individual(i).dim(d).best - Swarm(j).individual(i).dim(d).number ) + ...
% psoOptions.SParams.c2 * rand * ( Swarm(j).Dim(d).P(d) - Swarm(j).individual(i).dim(d).number ) );
% Swarm(j).individual(i).dim(d).speed = min(psoOptions.SParams.Vmax, Swarm(j).individual(i).dim(d).speed);
% Swarm(j).individual(i).dim(d).speed = max( - psoOptions.SParams.Vmax, Swarm(j).individual(i).dim(d).speed);
% Swarm(j).individual(i).dim(d).number = Swarm(j).individual(i).dim(d).number + Swarm(j).individual(i).dim(d).speed;
% Swarm(j).individual(i).dim(d).number = min(Obj.ub(d), Swarm(j).individual(i).dim(d).number);
% Swarm(j).individual(i).dim(d).number = max(Obj.lb(d), Swarm(j).individual(i).dim(d).number);
% end
% PBEST(j,d) = feval(f2eval,[Swarm(j).Dim(d).P(d)]);%M个N维的向量组成的值
% x(j,d)=[Swarm(j).Dim(d).P(d)];
% end
%if( abs(PBEST-LJmin(N)) < psoOptions.Vars.ErrGoal )
% total = total + 1;
% sum = sum + iter * psoOptions.Vars.PopSize * Obj.Dim;
% break;
% elseif( (opt-PBEST) > psoOptions.Vars.GoalInprove )
% fprintf(1,'\n%d %g\n',iter,PBEST);
% opt = PBEST;
% for i = 1 : 2 * psoOptions.Vars.PopSize
% j = round(rand*(Obj.Dim-1)+1);
% ENDX(j,psoOptions.Vars.PopSize);
%end
%else
% fprintf(1,'%d ',iter);
% [x,fval] = simplex(f2eval,[Swarm.P]);
% if(fval <= PBEST)
% for j = 1 : Obj.Dim
% Swarm(j).P = x(j);
% end
% PBEST = fval;
% end
% for i = 1 : 4 * psoOptions.Vars.PopSize
% j = round(rand*(Obj.Dim-1)+1);
% ENDX(j,psoOptions.Vars.PopSize);
% end
% end
%end
% fprintf(fid,'\n%d\t%g\n',iter,PBEST);
% fVal(runs,:) = PBEST;
% History(runs,:) = iter;
%end
%fprintf(1,'Total number is %d\nSum is %d\nAverage is %.1f\n',total,sum,sum/total);
%fclose(fid);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -