|
个人主页:研学社的博客
欢迎来到本博客❤️❤️
博主优势: 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。r/>
⛳️座右铭:行百里者,半于九十。 1 概述
各种科学和工程领域的许多实际应用都可以转换为优化问题。然而,相关问题通常是高度非凸、非线性和多模态的。尽管已经开发了多种优化算法,但它们经常无法为此类具有挑战性的问题提供令人满意的结果,这强调了对新的优化方法的需求。元启发式算法(MA)[1]被称为全局优化技术,已成功用于解决各种复杂和真实的优化问题[2],[3]。元启发式方法使用物理学、群体智能和生物学的一些原理[4]。
在过去的几十年中,已经开发和使用了不同的MA。例如,遗传算法(GA)源自达尔文的进化论[5]。差分进化(DE)算法采用与GA中相同的运算符(即突变和交叉),但方法不同[6]。DE 算法使用两个随机选择的向量之间的差异来生成新向量。粒子群优化(PSO)的灵感来自鸟类和鱼类捕捉食物的社会行为[7]。人工蜂群(ABC)算法模拟蜜蜂的信息共享能力和食物觅食行为[8]。引力搜索算法(GSA)使用重力和运动定律[9]。蝙蝠算法(BA)模拟蝙蝠所涉及的回声定位行为[10]。灰狼优化器(GWO)模仿自然界中灰狼的狩猎行为[11]。正弦和余弦算法(SCA)在正弦和余弦函数的基础上使用数学函数[4]。热交换优化(TEO)算法基于牛顿冷却定律[12]的原理。原子搜索优化(ASO)基于原子动力学模拟自然界中原子的运动[13]。
上述方法被归类为基于群体的算法,在优化过程中涉及一组解决方案。这种优化方法的搜索引擎基于如上所述的不同现象。许多研究表明,这些方法已成功应用于各种现实世界的问题[2],[14],[15]。通常,基于群体的优化器共享共同的信息,尽管它们的性质[16]。在这些算法中,搜索引擎实现了两个步骤:探索和开发[17]。勘探涉及在整个搜索区域中探索远离当前位置的新位置,而开发旨在探索接近最佳的位置。仅利用勘探可能会导致精度较低的新位置。相比之下,仅利用剥削就增加了陷入当地最佳职位的机会。许多研究强调了在元启发式算法中平衡探索和开发搜索过程的重要性[15]。因此,在这两个过程之间建立适当的平衡至关重要[18]。
大多数元启发式算法都经过管理,以在探索和开发之间建立适当的权衡。为此,已经进行了一些研究,通过使用适当的控制参数设置或优化算法的混合来提高基本算法的效率[19],[20],[21]。然而,迄今为止,在元启发式方法中在勘探和开发之间建立适当的平衡是一个具有挑战性且尚未解决的问题。另一方面,基于无免费午餐(NFL)规则[22],没有元启发式算法可以解决所有问题,这表明特定算法可以为一组问题提供非常好的结果,但相同的方法对于不同的一组问题可能效率较低。NFL还意味着这一研究领域是高度动态的,这导致了多年来许多新的元启发式优化算法的发展。本研究试图通过提出一种具有基于人群特征的新型元启发式算法来填补研究空白。
因此,本研究的主要目的是开发一种新的基于梯度的元启发式算法,即基于梯度的优化器(GBO)。最流行的基于梯度的搜索方法包括牛顿法[23],准牛顿法[24],莱文伯格马夸特(LM)算法[25]和共轭方向法[26]。这些方法已应用于许多研究,以解决不同类型的优化问题。例如,Salajegheh和Salajegheh将准牛顿方法与PSO算法相结合,以提高基本PSO的性能和可靠性[27]。Ibtissem和Nouredine[28]引入了DE算法和共轭梯度法的混合,以提高基本DE中的局部搜索能力。沙希迪等. [29]开发了一种自适应优化算法,采用共轭梯度作为局部搜索方法。Bandurski和Kwedlo[30]将共轭梯度法与DE算法相结合,改进了基本DE算法的局部搜索。Parwani等人[31]引入了具有局部优化方法的混合DE,其中共轭梯度方法用于局部搜索以提高收敛速度。这些研究证明了基于梯度的方法的重要作用。因此,该文基于牛顿方法提出了基于牛顿方法的带有搜索引擎的GBO算法,并采用一组向量搜索解空间,涉及梯度搜索规则(GSR)和局部转义算子(LEO)两个算子。GBO的性能通过使用28个数学测试函数和6个实际工程优化问题来评估,这些问题已经在以前的研究中进行了研究。
其余各节的组织如下:第2节简要回顾了牛顿方法作为基于梯度的优化方法,第3节解释了GBO的主要结构。实验结果详见第4节,本研究的结论总结于第5节。
通常,优化方法可分为两组:基于梯度(GB)的方法,例如LM算法[25],梯度下降(GD)[32]和牛顿方法[23],以及现代非基于梯度的方法(即元启发式算法(MA)),例如遗传算法(GA)[5],模拟退火(SA) [33]。、水分蒸发优化 (WEO) [34]、基于教学学习的优化 (TLBO) [35]、植物自防御机制 (SDMP) 算法 [36]、亨利气体溶解度优化 (HGSO) [37] 和哈里斯鹰优化 (HHO) [38].基于梯度的方法已被广泛用于解决优化问题。为了使用基于梯度的方法确定最佳解,必须确定梯度等于零的极值点。梯度方法,如共轭方向[26]和牛顿方法就是基于这个概念的。在梯度方法和大多数其他优化方法中,选择一个搜索方向,搜索过程沿着这个方向向最优解移动[29]。探索这些方法中的搜索方向需要确定目标函数的导数以及约束。这种优化的两个主要缺点是:(1)收敛速度非常慢;(2)不能保证达到最优解[27]。
在第二类中,一些初始点(即初始总体)是随机生成的。每个点都有一个搜索方向,该方向由从先前结果中获得的信息确定。通过更新搜索方向来继续优化过程,直到满足收敛准则。这种优化技术(即MA)已被广泛用于优化不同的工程问题。MA为找到全局最优提供了极大的鲁棒性,而基于梯度的方法倾向于收敛到局部最优。然而,非基于梯度的方法需要更高的计算能力,特别是对于高维搜索空间的问题。因此,开发一种优化方法,该方法使用梯度方法跳过不可行点并向可行区域移动,并利用基于人口的优化方法的功能,将是非常值得的。因此,本研究的独特之处之一是将基于梯度的方法的概念与基于人群的方法相结合,以创建一种强大而有效的算法来克服以前方法的缺点。本文提出了基于梯度的优化器(GBO)和k-最近邻(k-NN)组合研究。
2 运行结果
部分代码:
function [sFeat,Sf,Nf,Convergence_curve]=jGBO(feat,label,nP,T)
%% Initialization
fun=@jFitnessFunction;
lb = 0;
ub= 1;
nV = size(feat,2); % Number f Variables
pr = 0.5; % Probability Parameter
lb = ones(1,nV).*lb; % lower boundary
ub = ones(1,nV).*ub; % upper boundary
Cost = zeros(nP,1);
X = initializationGBO(nP,nV,ub,lb); %Initialize the set of random solutions
for i=1:nP
Cost(i) = fun(feat,label,(X(i,:)>0.5)); % Calculate the Value of Objective Function
end
[~,Ind] = sort(Cost);
Best_Cost = Cost(Ind(1)); % Determine the vale of Best Fitness
Best_X = X(Ind(1),:);
Worst_Cost=Cost(Ind(end)); % Determine the vale of Worst Fitness
Worst_X=X(Ind(end),:);
Convergence_curve=inf;
figure(2); clf; axis([1 100 0 0.2]); xlabel('Number of iterations');
ylabel('Fitness Value'); title('Convergence Curve'); grid on;
%% Main Loop
for it=1:T
beta = 0.2+(1.2-0.2)*(1-(it/T)^3)^2; % Eq.(14.2)
alpha = abs(beta.*sin((3*pi/2+sin(3*pi/2*beta)))); % Eq.(14.1)
for i=1:nP
A1 = fix(rand(1,nP)*nP)+1; % Four positions randomly selected from population
r1 = A1(1);r2 = A1(2);
r3 = A1(3);r4 = A1(4);
Xm = (X(r1,:)+X(r2,:)+X(r3,:)+X(r4,:))/4; % Average of Four positions randomly selected from population
ro = alpha.*(2*rand-1);ro1 = alpha.*(2*rand-1);
eps = 5e-3*rand; % Randomization Epsilon
DM = rand.*ro.*(Best_X-X(r1,:));Flag = 1; % Direction of Movement Eq.(18)
GSR=GradientSearchRule(ro1,Best_X,Worst_X,X(i,:),X(r1,:),DM,eps,Xm,Flag);
DM = rand.*ro.*(Best_X-X(r1,:));
X1 = X(i,:) - GSR + DM; % Eq.(25)
DM = rand.*ro.*(X(r1,:)-X(r2,:));Flag = 2;
GSR=GradientSearchRule(ro1,Best_X,Worst_X,X(i,:),X(r1,:),DM,eps,Xm,Flag);
DM = rand.*ro.*(X(r1,:)-X(r2,:));
X2 = Best_X - GSR + DM; % Eq.(26)
Xnew=zeros(1,nV);
for j=1:nV
ro=alpha.*(2*rand-1);
X3=X(i,j)-ro.*(X2(j)-X1(j));
ra=rand;rb=rand;
Xnew(j) = ra.*(rb.*X1(j)+(1-rb).*X2(j))+(1-ra).*X3; % Eq.(27)
end
% Local escaping operator(LEO) % Eq.(28)
if rand<pr
k = fix(rand*nP)+1;
f1 = -1+(1-(-1)).*rand();f2 = -1+(1-(-1)).*rand();
ro = alpha.*(2*rand-1);
Xk = unifrnd(lb,ub,1,nV);%lb+(ub-lb).*rand(1,nV); % Eq.(28.8)
L1=rand<0.5;u1 = L1.*2*rand+(1-L1).*1;u2 = L1.*rand+(1-L1).*1;
u3 = L1.*rand+(1-L1).*1;
L2=rand<0.5;
Xp = (1-L2).*X(k,:)+(L2).*Xk; % Eq.(28.7)
if u1<0.5
Xnew = Xnew + f1.*(u1.*Best_X-u2.*Xp)+f2.*ro.*(u3.*(X2-X1)+u2.*(X(r1,:)-X(r2,:)))/2;
else
Xnew = Best_X + f1.*(u1.*Best_X-u2.*Xp)+f2.*ro.*(u3.*(X2-X1)+u2.*(X(r1,:)-X(r2,:)))/2;
end
end
% Check if solutions go outside the search space and bring them back
Flag4ub=Xnew>ub;
Flag4lb=Xnew<lb;
Xnew=(Xnew.*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
Xnew_Cost = fun(feat,label,(Xnew>0.5));
% Update the Best Position
if Xnew_Cost<Cost(i)
X(i,:)=Xnew;
Cost(i)=Xnew_Cost;
if Cost(i)<Best_Cost
Best_X=X(i,:);
Best_Cost=Cost(i);
end
end
% Update the Worst Position
if Cost(i)>Worst_Cost
Worst_X= X(i,:);
Worst_Cost= Cost(i);
end
end
Convergence_curve(it) = Best_Cost;
pause(1e-20); hold on;
CG=plot(it,Best_Cost,&#39;Color&#39;,&#39;r&#39;,&#39;Marker&#39;,&#39;.&#39;); set(CG,&#39;MarkerSize&#39;,5);
end
Pos=1:nV; Sf=Pos((Best_X > 0.5)==1); Nf=length(Sf); sFeat=feat(:,Sf);
end
% _________________________________________________
% Gradient Search Rule
function GSR=GradientSearchRule(ro1,Best_X,Worst_X,X,Xr1,DM,eps,Xm,Flag)
nV = size(X,2);
Delta = 2.*rand.*abs(Xm-X); % Eq.(16.2)
Step = ((Best_X-Xr1)+Delta)/2; % Eq.(16.1)
DelX = rand(1,nV).*(abs(Step)); % Eq.(16)
GSR = randn.*ro1.*(2*DelX.*X)./(Best_X-Worst_X+eps); % Gradient search rule Eq.(15)
if Flag == 1
Xs = X - GSR + DM; % Eq.(21)
else
Xs = Best_X - GSR + DM;
end
yp = rand.*(0.5*(Xs+X)+rand.*DelX); % Eq.(22.6)
yq = rand.*(0.5*(Xs+X)-rand.*DelX); % Eq.(22.7)
GSR = randn.*ro1.*(2*DelX.*X)./(yp-yq+eps); % Eq.(23)
end
3 参考文献
部分理论来源于网络,如有侵权请联系删除。
[1]Aya Abdulmonem Mostafa, Amr A. Alhossary, Sameh A. Salem, Amr E. Mohamed (2022) GBO-kNN a New Framework for Enhancing the Performance of Ligand-based Virtual Screening for drug discovery
4 Matlab代码实现
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|