注:该算法已按照智能优化算法APP标准格式进行整改,可直接集成到APP中,方便大家与自己的算法进行对比。
LangEvin方程演化算法(LangEvin Equation-based Evolutionary algorithm, LEE) 是一种受物理学中随机运动规律启发的智能优化算法。该算法模拟了微观粒子在热涨落环境下呈现的布朗运动行为。这种被称为“分子之舞”的随机运动,不仅遵循严谨的统计物理定律,更蕴含着丰富的动力学信息——它能通过朗之万方程精确描述粒子受随机力驱动的演变过程。研究人员从这种物理随机性中获得灵感,提出了LEE算法,构建了算法的三大核心机制:基于朗之万动力学的全局搜索机制、维持种群多样性的热涨落平衡策略,以及逃离局部最优的势垒跨越机制。这些机制被转化为可计算的数学模型,在求解复杂优化问题时展现出优异的全局探索能力与收敛稳定性。
该成果于2025年12月最新发表于计算机领域2区期刊Neurocomputing,为智能优化设计提供了新思路。
1 算法原理详解
(1)生成初始种群
此步骤旨在创建在指定迭代范围内发展的初始种群。对于规模为 的种群,LEE将随机生成 个位置。种群中的每个个体记为 ( ),代表D维空间中的一个优化问题解。初始位置通常基于以下原理随机生成:
其中 和 分别表示问题第 维的下限与上限, 表示区间 内的一个随机数。
(2)朗之万方程向更新规则的转化
将朗之万方程转化为更新规则需经过三个步骤,具体描述如下:步骤一:朗之万方程各项的映射。如前文所述,朗之万方程描述了粒子在三种力同时作用下的运动:惯性(加速度)、摩擦力以及由分子碰撞引起的随机涨落,如下式所示:
该表达式清晰地表明,粒子的运动轨迹是粒子加速度、摩擦力与随机驱动力相互作用的结果。为将这一物理原理封装为可优化的搜索机制,需将公式分解为各组成项,并将其按算法术语重新阐释如下:
惯性项对应于粒子的加速度。在LEE算法中,惯性调控着候选解基于历史速度与当前作用力的运动响应。需注意的是,由于质量不影响优化过程,此处假定其值为1( ):
其中 表示加速度。
摩擦(阻尼)项描述了作用在粒子上的摩擦力,其大小与粒子速度成正比。在优化意义上,它体现为一种阻尼作用,使候选解集不致过度分散并平衡其运动。该项的数学表达如下:
其中 表示粒子速度, 为摩擦系数。
随机力项反映了周围粒子不可预测的碰撞作用。在LEE中,该力为更新过程引入随机性,使候选解能够跳出局部极小值并更有效地探索搜索空间。随机力通过以下公式定义:
结合上述三项贡献,可借助以下方程对朗之万方程进行简化。
这一新的数学表述将加速度 ( )、阻尼项 ( ) 与随机扰动 ( ) 直接关联到LEE中候选解的移动过程。
步骤二:定义算法等效形式
将方程中的每个要素与优化过程中候选解的运动相关联,具体而言,第 个候选解在迭代 时的加速度定义为:
其中 表示迭代次数。公式通过将朗之万方程中的三种力转化为优化动力学,保持了物理相似性。阻尼项 ( ) 用于稳定运动,惯性项保持动量,而随机力则引入多样性。这些项共同在本文提出的算法中平衡探索与开发。实际上,它们使得算法能够模拟粒子在遍历可能解空间时的物理行为。
随机力表示作用于每个候选解的随机扰动。这相当于粒子在流体介质中受到的随机碰撞。在优化框架下,该力建模为:
其中 与 分别表示当前解和温度。此外, 代表当前迭代中两个随机解的平均值。
缩放因子 用于控制扰动的强度。同时,项 度量了当前候选解相对于两个随机解平均位置的偏离程度。如此设计可使随机力并非任意噪声,而是自适应于种群状态:当偏离均值较大时,可产生更强的随机扰动,有利于充分探索;偏离较小时则降低随机性,促进收敛。因此,随机力既能有效维持种群多样性,又能帮助算法逃离早期局部最优。在公式中, 的计算方式如下:
在公式中,系数 和 随迭代次数动态变化。基于物理学中的退火与阻尼过程,二者均随时间呈指数衰减,其模型如下:
其中 表示最大迭代次数。这种渐进衰减机制对于确保算法在早期迭代中聚焦探索(具有较强的随机性与较弱的阻尼),而在后期迭代中转向开发与收敛(具有较弱的随机性与较强的阻尼)至关重要。
步骤三:更新速度与位置 在计算出加速度后,下一步需更新每个候选解的速度与位置。速度更新由公式)给出:
其中 为惯性权重, 随迭代动态递减。正弦项提供自适应探索所需的振荡,而线性项 与指数衰减项则使其值缓慢下降。这种变化促使算法从初期的广泛探索逐步过渡到后期的精细开发。
更新速度后,每个解的新位置( )计算如下:
此更新直接将解的未来位置与其当前路径相连接。从物理角度而言,这反映了粒子在速度与加速度共同作用下的运动规律;在优化意义上,它意味着潜在解能够持续逃离次优区域并向更优区域趋近。
LEE算法的伪代码流程如下图所示:
LEE算法的完整流程图如下所示:
2 结果展示




评估:效果相当不错,可以学习一下它的原理,作为你改进算法的基石。
3、MATLAB核心代码
% LangEvin方程演化算法(LangEvin Equation-based Evolutionary algorithm, LEE)
%% Define Parameters and Objective Function
upr = 0.3;
LB=lb; % Lower Bound of Variables
UB=ub; % Upper Bound of Variables
inT = 1; % Initial Temperature
%% Initialization
X = LB+(UB-LB).*rand(nP, Dim); % Random initial positions Eq.(3)
Z = rand(nP, Dim); % Random initial positions
V = zeros(nP, Dim); % Initial velocities
Cost = zeros(nP, 1); % Fitness
CostNew = zeros(nP, 1); % Fitness
T = inT;
% Create Initial Population
for i=1:nP
Cost(i) = fobj(X(i,:));
end
[Best_Cost,ind] = min(Cost);
Best_X = X(ind,:);
%% Main loop
for iter = 1:MaxIt
Lambda = exp(-(iter/MaxIt)^(2)); % Eq.(12)
beta = sin(((pi/2)*iter + pi*(iter/MaxIt)))*(1-iter/MaxIt) .* exp(-2*(iter/MaxIt)); % Eq.(14-2)
[~,ind]=sort(Cost);
a0=1:nP;
[a1, a2] = Gna1a2(nP,a0); % Generate Random Indices
b = randn(nP,1).*beta; % Eq.(14-1)
pr0 = upr+0.1.*rand(nP,1);
pr1 = pr0+0.1.*sinh(randn(nP,1)); % Eq.(18-6)
pr2 = pr0+0.1.*sinh(randn(nP,1)); % Eq.(21)
F = 0.5+0.1*sinh(randn(nP,1)); % Eq.(17)
Xpb = (X(ind(randi(4,1,nP)),:));
for i=1:nP
% Update particles' velocities and positions based on Langevin equation
Xavg = (X(a1(i),:)+X(a2(i),:))/2; % Eq.(11)
randomForce = sqrt(2 * T * Lambda) * randn.*(X(i,:)-Xavg); % Eq.(10)
V(i,:) = V(i,:) - Lambda * V(i,:) + randomForce; % Eq.(14)
U = Xavg + F(i).*(Xpb(i,:)-X(i,:))+ b(i).*V(i,:); % Eq.(16)
Stp1 = Best_X - Xavg; % Eq.(18-2)
Stp2 = X(i,:) - Xavg; % Eq.(18-3)
UL = rand*(UB-LB);
Stp = Stp1+(Stp2-Stp1)/UL; % Eq.(18-1)
r=rand;
L=rand(1,Dim)<pr1(i);Sigma=(randn*(r)+(1-rand)^2);
Z(i,:) = L.*U + (1-L).*(X(i,:) + Stp.*Sigma); % Eq.(18)
if rand<pr2(i)
rdn1 = randn; rdn2 = randn;
if rand<(1-iter/MaxIt)
Z(i,:) = X(i,:) + F(i).*(rdn1).*(Best_X-X(a1(i),:))*Lambda;% Eq.(19)
else
Z(i,:) = Best_X + (F(i).*rdn1.*(b(i).*Xpb(i,:)-X(i,:))*Lambda+F(i).*(rdn2).*(b(i).*Best_X-X(i,:))*Lambda); % Eq.(20)
end
end
% Boundary handling
Flag4ub=Z(i,:)>UB;
Flag4lb=Z(i,:)<LB;
Z(i,:)=(Z(i,:).*(~(Flag4ub+Flag4lb)))+UB.*Flag4ub+LB.*Flag4lb;
CostNew(i) = fobj(Z(i,:));
if CostNew(i)<Cost(i)
X(i,:) = Z(i,:);
Cost(i) = CostNew(i);
if Cost(i)<Best_Cost
Best_X = X(i,:);
Best_Cost = Cost(i);
end
end
end
T = inT * exp(-(iter/MaxIt));
Convergence_curve(iter) = Best_Cost;
disp(['it: ' num2str(iter) ' , BestCost: ' num2str(Best_Cost)])
end
参考文献
[1]Chen H, Ahmadianfar I, Heidari A A, et al. LEE: A Physics-Inspired Optimizer based on LangEvin Equation[J]. Neurocomputing, 2025: 132288.完整代码获取
后台回复关键词:
TGDM870
获取更多代码:

3074

被折叠的 条评论
为什么被折叠?



