改进PSO算法!新自组织分层粒子群优化算法,具有变化的时间变化加速系数,附完整代码
毫无疑问,进化算法领域中强大而有效的优化器之一是粒子群优化(PSO)。粒子群优化(PSO)是自组织分层 PSO 与时间变化加速系数(HPSO-TVAC)的结合,由 Ratnaweera 和 co-authors [1] 提出,是一种有效的模型,由 Eberhart 和 Kennedy [2] 在 1995 年引入,受到中央动物群体(如鱼群)的启发,这些动物通过群体行为解决优化问题。HPSO-TVAC 优化技术包含一个粒子群(Np 个粒子作为问题解决方案(Np 由粒子数量定义,粒子在 D 维解空间中定义,Xi=[xi,1,xi,2,...,xi,D]X_i = [x_{i,1}, x_{i,2}, ..., x_{i,D}]Xi=[xi,1,xi,2,...,xi,D])。
每个粒子在每次迭代(第一迭代)中根据其个人最佳位置(目标函数值或适应度函数值)Pi=[pi,1,pi,2,...,pi,D]P_i = [p_{i,1}, p_{i,2}, ..., p_{i,D}]Pi=[pi,1,pi,2,...,pi,D] 和群体中所有粒子的最佳位置 Pg=[pg,1,pg,2,...,pg,D]P_g = [p_{g,1}, p_{g,2}, ..., p_{g,D}]Pg=[pg,1,pg,2,...,pg,D] 调整其位置和速度。在每次迭代的优化过程中,粒子的位置和速度 (Vi,v⃗i)(V_i, \vec{v}_i)(Vi,vi) 由以下方程给出:
vi,jiter+1=c1iter×r1×(pi,j−xi,jiter)+c2iter×r2×(pg,j−xi,jiter)(1) v_{i,j}^{iter+1} = c_1^{\text{iter}} \times r_1 \times (p_{i,j} - x_{i,j}^{iter}) + c_2^{\text{iter}} \times r_2 \times (p_{g,j} - x_{i,j}^{iter}) \tag{1} vi,jiter+1=c1iter×r1×(pi,j−xi,jiter)+c2iter×r2×(pg,j−xi,jiter)(1)
xi,jiter+1=xi,jiter+vi,jiter+1(2) x_{i,j}^{iter+1} = x_{i,j}^{iter} + v_{i,j}^{iter+1} \tag{2} xi,jiter+1=xi,jiter+vi,jiter+1(2)
其中随机系数 r1r_1r1 和 r2r_2r2 是 [0, 1] 范围内的均匀随机变量,c1iterc_1^{\text{iter}}c1iter 和 c2iterc_2^{\text{iter}}c2iter 是加速系数,可以通过以下方程计算:
c1iter=(c1f−c1i)×iteritermax+c1i(3) c_1^{\text{iter}} = (c_1^f - c_1^i) \times \frac{\text{iter}}{\text{iter}_{\text{max}}} + c_1^i \tag{3} c1iter=(c1f−c1i)×itermaxiter+c1i(3)
c2iter=(c2f−c2i)×iteritermax+c2i(4) c_2^{\text{iter}} = (c_2^f - c_2^i) \times \frac{\text{iter}}{\text{iter}_{\text{max}}} + c_2^i \tag{4} c2iter=(c2f−c2i)×itermaxiter+c2i(4)
其中 c1ic_1^ic1i, c1fc_1^fc1f, c2ic_2^ic2i 和 c2fc_2^fc2f 是常数,在本文中 c1iterc_1^{\text{iter}}c1iter 从 c1i=c1f=2.5c_1^i = c_1^f = 2.5c1i=c1f=2.5 变化到 c2iterc_2^{\text{iter}}c2iter 从 c2i=c2f=0.5c_2^i = c_2^f = 0.5c2i=c2f=0.5 和 c2iterc_2^{\text{iter}}c2iter 从 c2i=c2f=2.5c_2^i = c_2^f = 2.5c2i=c2f=2.5。
HPSO-TVAC 算法是许多优化论文中的重要版本之一,与经典 HPSO-TVAC 相比,它在真实世界优化中非常有竞争力。
让我们,我们已经提高了 HSO-TVAC 算法的解决方案质量,同时增加了收敛速度并减少了局部最优的陷阱,而没有增加额外成本。这样,我们可以通过在 HSO-TVAC 算法中进行两个简单且协调的变化来获得解决方案。除了与 HPSO-TVAC 相似的情况外,其他情况的 NHPSO-TVAC 已经被选择为 [1]。在这些条件和 VVV 的范围内,我们考虑了 c1c_1c1 和 c2c_2c2 作为指数,根据 (4) 和 (5),为了能够从局部最优中逃脱并增加搜索空间的多样性,我们选择了 c1iterc_1^{\text{iter}}c1iter 和 c2iterc_2^{\text{iter}}c2iter 作为基本解决方案,并增加了控制参数,简化了算法。换句话说,算法简化了:
c1iter=(cf−ci)×iteritermax+ci(5) c_1^{\text{iter}} = (c_f - c_i) \times \frac{\text{iter}}{\text{iter}_{\text{max}}} + c_i \tag{5} c1iter=(cf−ci)×itermaxiter+ci(5)
c2iter=∣w(e−f/(1−w))(6) c_2^{\text{iter}} = |w(e^{-f/(1-w)}) \tag{6} c2iter=∣w(e−f/(1−w))(6)
这里随机系数 www 是标准正态随机变量,c2iterc_2^{\text{iter}}c2iter 从 c=ci=0.5c = c_i = 0.5c=ci=0.5 到 cmax=cf=0.0c_{\text{max}} = c_f = 0.0cmax=cf=0.0 对于所有模拟变化 citerc^{\text{iter}}citer 从 c=ci=0.5c = c_i = 0.5c=ci=0.5 到 cmax=cf=0.0c_{\text{max}} = c_f = 0.0cmax=cf=0.0。
在最近的研究 [3, 4] 中,建议 PSO 算法中的全局和整体搜索能力比 (2) 更好,以便从局部最优中逃脱并找到最佳值,如第 r 部分所示,piiter−Xiiterp_i^{\text{iter}} - X_i^{\text{iter}}piiter−Xiiter 另一方面,模拟显示,如果不考虑 PSO 结构,则算法的收敛速度降低,这降低了算法的能力。因此,在所提出的算法的第二阶段,(2) 的整体搜索部分被转化为整体模拟搜索,用于个人局部搜索(即 piiter−2×Xiiterp_i^{\text{iter}} - 2 \times X_i^{\text{iter}}piiter−2×Xiiter)。这样除了快速收敛到局部解外,还可以实现可接受的收敛性,提高最终优化质量。新搜索方程如下:
vi,jiter+1=c1iter×r1×(pi,jposition−xi,jiter)+c2iter×r2×((2×pi,jiter)−2×xi,jiter)(7) v_{i,j}^{\text{iter+1}} = c_1^{\text{iter}} \times r_1 \times (p_{i,j}^{\text{position}} - x_{i,j}^{\text{iter}}) + c_2^{\text{iter}} \times r_2 \times ((2 \times p_{i,j}^{\text{iter}}) - 2 \times x_{i,j}^{\text{iter}}) \tag{7} vi,jiter+1=c1iter×r1×(pi,jposition−xi,jiter)+c2iter×r2×((2×pi,jiter)−2×xi,jiter)(7)
xi,jiter+1=xi,jiter+Δxi(8) x_{i,j}^{\text{iter+1}} = x_{i,j}^{\text{iter}} + \Delta x_i \tag{8} xi,jiter+1=xi,jiter+Δxi(8)
其中 Δxi=δmutalter⋅N(0,1)\Delta x_i = \delta_{\text{mut}}^{\text{alter}} \cdot \mathcal{N}(0, 1)Δxi=δmutalter⋅N(0,1)
xi′=xi+Δxi(9) x_i' = x_i + \Delta x_i \tag{9} xi′=xi+Δxi(9)
当 xi′x_i'xi′ 是代理经过变异后的新位置。
通过遵循这些步骤,HSO 算法有效地平衡了全局和局部搜索策略,确保在各种问题领域中实现稳健的优化性能。从表 1 的最后两行可以看出,该算法的时间比其他算法少 NBNBNB(NBNBNB 是该算法比其他算法更差的次数),我们可以得出结论,所提出的 HSO-TVAC 优化技术比经典优化技术更有效且更稳定,HPSO-TVAC 可以被认为是经典 HPSO-TVAC 的改进版本,用于真实世界优化。
% % Based on the paper:
% % M. Ghasemi, J. Aghaei, and M. Hadipour, "New self-organising hierarchical PSO with jumping time-varying acceleration
% % coefficients," Electron. Lett., vol. 53, no. 20, pp. 1360–1362, 2017. DOI: 10.1049/el.2017.2112.clear
clc
disp('HPSO-TVAC');CostFunction=@(x) ObjFun(x);nVar=40; % Number of decision variablesVarMin=-100; % Minimum value of decision variables
VarMax=-VarMin; % Maximum value of decision variablesnPop=40; % Number of algorithm populationci=0.5;
cf=0.0;MaxNFE=100e3; % Maximum Number of Function Evaluations
MaxIt=MaxNFE/nPop;dx=VarMax-VarMin;
vmax(1:nVar)=0.5*dx;velocity=zeros(nPop,nVar);
position=velocity;
cost=zeros(1,nVar);
gbestcost=inf;
pbest=position;
pbestcost=cost;
gcost=zeros(1,MaxIt);
NFES=zeros(1,MaxIt);
NFE=0;
it=0;while NFE<MaxNFEit=it+1;if it==1 % Initializationfor i=1:nPopvelocity(i,1:nVar)=vmax;position(i,:)=rand(1,nVar).*VarMin+(VarMax-VarMin);cost(i)=CostFunction(position(i,:));NFE=NFE+1;pbest(i,:)=position(i,:);pbestcost(i)=cost(i);if pbestcost(i)<gbestcost(it)gbest=pbest(i,:);gbestcost=pbestcost(i);endendelsec_it=((cf-ci)*(it/MaxIt))+ci;for i=1:nPopA=randperm(nPop);A(A==i)=[];a0=A(1);w=randn;c1_it=(abs(w))^((c_it)*(w));c2_it=(abs((1-w)))^((c_it)*(1/(1-w)));%%%%%%%%%%%%%HPSOvelocity(i,:)=(c1_it*(rand(1,nVar)).*((pbest(i,:))-position(i,:)))...+(c2_it*(rand(1,nVar)).*((gbest+pbest(a0,:))-2*position(i,:)));for gg=1:nVarif velocity(i,gg)==0if rand<0.5velocity(i,gg)=rand*vmax(1,gg);elsevelocity(i,gg)=-rand*vmax(1,gg);endendvelocity(i,gg)=sign(velocity(i,gg)).*min(abs(velocity(i,gg)),abs(vmax(1,gg)));end%%%%%%%%%%%%%%%%velocity(i,:)=min(max(velocity(i,:),-vmax),vmax);position(i,:)=position(i,:)+velocity(i,:);position(i,:)=min(max(position(i,:),VarMin),VarMax);cost(i)=CostFunction(position(i,:)); NFE=NFE+1;if cost(i)<pbestcost(i)pbest(i,:)=position(i,:);pbestcost(i)=cost(i);if pbestcost(i)<gbestcostgbest=pbest(i,:);gbestcost=pbestcost(i);endendendendNFES(it)=NFE;gcost(it)=gbestcost;fprintf('Iteration %3.0f, NFE %6.0f, Best Cost %g\n',it,NFE,gbestcost)
endgcost(it+1:end)=[];
NFES(it+1:end)=[];
plot(NFES,gcost,'b','linewidth',2);BestSol.Position=gbest;
BestSol.Cost=gbestcost;
Ghasemi, M., Aghaei, J. and Hadipour, M. (2017), New self-organising hierarchical PSO with jumping time-varying acceleration coefficients. Electron. Lett., 53: 1360-1362. https://doi.org/10.1049/el.2017.2112