📄 patternmove.asv
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%对每一个粒子以初始步长为a进行模式移动
%%Swarm:粒子
%%a :步长
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function SwarmReturn = PatternMove(Swarm,a,psoOptions)
[rows cols] = size(Swarm);
SwarmT = Swarm;%临时变量的SwarmT
change_flag = 0;
[cao1 cao2] = sort(feval(psoOptions.Obj.f2eval,Swarm));
randx = 1;
for ii = 1:rows %对每一个粒子进行模式移动
i = ii;
change_flag =0;
aa = a;
if (randx > 0.5)
while( aa > 0.01 && change_flag < 1)
aa = a;
change_flag =0;
for j = 1:cols
fResultOld = feval(psoOptions.Obj.f2eval,Swarm(i,:));
SwarmT(i,j) = Swarm(i,j) + aa;%正向移动
fResultNew=feval(psoOptions.Obj.f2eval,SwarmT(i,:));
if(fResultNew < fResultOld)
Swarm(i,j) = SwarmT(i,j) ;
change_flag =1 ;
else
SwarmT(i,j) = Swarm(i,j) - aa;%反向移动
fResultNew= feval(psoOptions.Obj.f2eval,SwarmT(i,:));
if(fResultNew < fResultOld)
Swarm(i,j) = SwarmT(i,j) ;
change_flag =1 ;
else
SwarmT(i,j) = Swarm(i,j);
end
end
end %end for
if change_flag>0
Swarm(i,:) = 2*SwarmT(i,:) - Swarm(i,:) ;
end
aa = aa/2;
end%end while
else
while( aa > 0.01 && change_flag < 1 )
aa = a;
for j = cols:-1:1
fResultOld = feval(psoOptions.Obj.f2eval,Swarm(i,:));
SwarmT(i,j) = Swarm(i,j) + aa;%正向移动
fResultNew=feval(psoOptions.Obj.f2eval,SwarmT(i,:));
if(fResultNew < fResultOld)
Swarm(i,j) = SwarmT(i,j) ;
change_flag =1 ;
else
SwarmT(i,j) = Swarm(i,j) - aa;%反向移动
fResultNew= feval(psoOptions.Obj.f2eval,SwarmT(i,:));
if(fResultNew < fResultOld)
Swarm(i,j) = SwarmT(i,j) ;
change_flag =1 ;
else
SwarmT(i,j) = Swarm(i,j);
end
end
end %end for
aa = aa/2;
end%end while
end
//if change_flag>0
Swarm(i,:) = 2*SwarmT(i,:) - Swarm(i,:) ;
end
end
SwarmReturn = Swarm;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -