2025年受自适应差分进化-无人机路径规划的统一元启发式框架-附Matlab完整代码
1.简介
与通常从单一生物或集体行为中汲取灵感的传统元启发式算法不同,本文从整体自然角度引入了一种新颖的元启发式方法。借鉴生物进化、种群内集体行为和生态系统自我调节机制的原理,所提出的算法被称为自然启发自适应差分进化(NIADE)。通过整合多种策略和全局优化概念,NIADE有效地解决了以众多相互作用变量为特征的复杂问题,从而克服了现有算法固有的限制,这些限制主要依赖于单一策略或局部优化方法。这种集成为解决复杂的优化挑战提供了创新途径。
该算法的性能使用CEC2017和CEC2022的基准函数进行评估,并与七种主要算法进行比较。通过Wilcoxon秩和检验和Friedman检验统计的统计分析证实了NIADE的优越性。此外,NIADE在解决多约束现实世界工程问题方面的有效性通过CEC2020现实世界约束问题集得到验证。此外,通过建模和实际实验证明了其在无人机(UAV)路径规划中的适用性,在该领域提出了一个有希望的新解决方案。最后,本文讨论了NIADE算法的潜在改进和未来研究方向。
2. 提出的NiADE算法
本节阐述NiADE算法的数学模型,分析其探索与开发机制,并提供伪代码及计算复杂度分析。
2.1.1 种群初始化
NiADE算法通过随机生成候选解初始化种群,每个解代表个体。如公式(1)所示,单个解的结构为:
X=[x1,x2,⋯ ,xD](1)
X = [x_1, x_2, \cdots, x_D] \tag{1}
X=[x1,x2,⋯,xD](1)
其中DDD为解空间维度。对于NNN个个体求解DDD维问题,解空间表示为公式(2):
XS=[x1,1x1,2…x1,D−1x1,Dx2,1x2,2…x2,D−1x2,D⋮⋮…⋮⋮xN−1,1xN−1,2…xN−1,D−1xN−1,DxN,1xN,2…xN,D−1xN,D](2)
X_S = \left[\begin{array}{ccccc}
x_{1,1} & x_{1,2} & \ldots & x_{1,D-1} & x_{1,D} \\
x_{2,1} & x_{2,2} & \ldots & x_{2,D-1} & x_{2,D} \\
\vdots & \vdots & \ldots & \vdots & \vdots \\
x_{N-1,1} & x_{N-1,2} & \ldots & x_{N-1,D-1} & x_{N-1,D} \\
x_{N,1} & x_{N,2} & \ldots & x_{N,D-1} & x_{N,D}
\end{array}\right] \tag{2}
XS=x1,1x2,1⋮xN−1,1xN,1x1,2x2,2⋮xN−1,2xN,2……………x1,D−1x2,D−1⋮xN−1,D−1xN,D−1x1,Dx2,D⋮xN−1,DxN,D(2)
XSX_SXS为解空间矩阵,xN,Dx_{N,D}xN,D表示第NNN个个体在第DDD维的解。每个解按公式(3)生成:
xi=lb+rand(0,1)×(ub−lb),i=1,2,…,N(3)
x_i = lb + \text{rand}(0,1) \times (ub - lb), \quad i=1,2,\ldots,N \tag{3}
xi=lb+rand(0,1)×(ub−lb),i=1,2,…,N(3)
其中lblblb和ububub分别为解空间下界和上界,rand(0,1)\text{rand}(0,1)rand(0,1)为[0,1]区间的随机数。
2.1.2 差分进化策略
差分进化通过变异和交叉操作更新个体,NiADE采用该策略增强种群多样性和全局搜索能力。
(1)变异
为每个个体随机选择三个不同个体,生成变异向量ViV_iVi:
Vi=Xr1+F×(Xr2−Xr3)(4)
V_i = X_{r1} + F \times (X_{r2} - X_{r3}) \tag{4}
Vi=Xr1+F×(Xr2−Xr3)(4)
其中FFF为缩放因子,Xr1,Xr2,Xr3X_{r1}, X_{r2}, X_{r3}Xr1,Xr2,Xr3为随机选择的个体。
(2)交叉
变异向量ViV_iVi与当前个体XiX_iXi交叉生成试验向量UiU_iUi:
Ui[j]={Vi[j],if rand(0,1)≤CR or j=jrandXi[j],otherwise(5)
U_i[j] = \begin{cases}
V_i[j], & \text{if } \text{rand}(0,1) \leq CR \text{ or } j=j_{\text{rand}} \\
X_i[j], & \text{otherwise}
\end{cases} \tag{5}
Ui[j]={Vi[j],Xi[j],if rand(0,1)≤CR or j=jrandotherwise(5)
CRCRCR为交叉概率,jrandj_{\text{rand}}jrand为随机维度以确保至少一个维度来自变异向量。
2.1.3 黄金比例策略
该策略利用黄金比例ggg的数学特性更新惯性权重WWW,平衡探索与开发能力。位置更新公式为:
Xnew,j=W×Ui+(1−W)×Xi(6)
X_{\text{new},j} = W \times U_i + (1-W) \times X_i \tag{6}
Xnew,j=W×Ui+(1−W)×Xi(6)
其中W=(0.5×rand/2)∼gW = (0.5 \times \text{rand}/2) \sim gW=(0.5×rand/2)∼g,ggg为黄金比例值(未完全显示)。
2.1.4多样性保持策略
多样性保持策略的主要目标是通过维持搜索空间的全局多样性,防止算法过早收敛至局部最优。具体实现方式为每10次迭代重新初始化10%的种群个体。这种周期性重启机制通过引入随机搜索成分,既保持了多样性又拓展了全局搜索范围。整体上,该策略通过持续维护种群多样性和适应性,降低陷入局部最优的风险,提升算法处理复杂多峰优化问题的性能。
2.1.5 精英保留策略
精英策略通过在迭代过程中保留历史最优解,增强算法的稳定性和适应性。其核心原理如公式(7)所示,从当前种群筛选适应度最高的个体单独存储,并在每代迭代结束时将其重新注入种群,确保优质解不被淘汰:
Positions[end−EliteCount+1:end]=ElitePositions(7) \text{Positions}[\text{end} - \text{EliteCount} + 1 : \text{end}] = \text{ElitePositions} \tag{7} Positions[end−EliteCount+1:end]=ElitePositions(7)
其中ElitePositions\text{ElitePositions}ElitePositions为当代最优解集合,EliteCount\text{EliteCount}EliteCount为精英解数量,end\text{end}end表示当前种群末尾序号。该策略显著提升了算法收敛的可靠性。
2.1.6 局部搜索策略
对当前最优个体执行局部搜索以提升解的质量,如公式(8)所示通过自适应扰动实现精细探索:
Xnew,d=Xd′+(rand×2−1)×0.1×(ubd−lbd)(8) X_{\text{new},d} = X_d' + (\text{rand} \times 2 - 1) \times 0.1 \times (ub_d - lb_d) \tag{8} Xnew,d=Xd′+(rand×2−1)×0.1×(ubd−lbd)(8)
其中:
- Xnew,dX_{\text{new},d}Xnew,d:第ddd维局部搜索生成的新解坐标
- Xd′X_d'Xd′:当前全局最优解在第ddd维的坐标
- rand\text{rand}rand:[0,1]均匀分布的随机数,(rand×2−1)(rand \times 2 - 1)(rand×2−1)将扰动扩展至[-1,1]区间
- 0.10.10.1:扰动比例因子(可调),限制扰动范围为搜索空间长度的10%
- ubdub_dubd/lbdlb_dlbd:第ddd维上下界,定义扰动绝对幅度
2.2.7突变因子F
根据表9和图1(a)中的敏感性分析结果,突变因子F显著影响NIADE算法的性能。该算法在F=0.4时实现了最佳性能,排名第一。它还与分别排名第二和第三的F=0.3和F=0.2竞争,表明在该范围内有效优化。然而,当F超过0.4时,平均排名逐渐恶化,表明性能下降。这一趋势归因于突变向量Vi的幅度增加,导致每次迭代的位置变化更大。因此,全局搜索变得过于稀疏,导致探索不足。
相反,当F=0.1时,算法的排名与F=0.2相比急剧下降,反映了较差的性能。较小的F值产生较弱的突变效应和不充分的位置调整,从而降低全局搜索效率并增加过早收敛到局部最优的风险。因此,选择合适的F值至关重要。不合适的值会显着损害算法有效性。在这项研究中,F=0.4被确定为最优,提供了有利于有效探索解空间的平衡权衡。
2.2.8交叉概率CR
引入交叉概率CR以增强解的多样性并降低算法陷入局部最优的风险。该参数的灵敏度分析结果如表10所示,相应的平均排名结果如图1(b)所示。实验结果表明,当CR=0.9时,NIADE算法表现最好,排名第一。这表明较高的CR值有助于更多样化的解空间,这反过来又降低了过早收敛的可能性并维持了算法的搜索有效性。此外,图1(b)表明,其他CR值之间的性能变化相对较小,表明算法对该参数不高度敏感。这种稳定性增强了算法对广泛问题的适用性,降低了由于参数波动导致性能下降的风险。总之,选择合适的CR参数。值对于保持算法的稳定性和鲁棒性很重要。精心选择的CR促进了解的多样性并加强了整体性能。基于这些发现,本研究采用CR=0.9来确保最佳算法行为图2,图3,图4,图5。
function [best_score, best_pos, Convergence_curve] = NIADE(N, Max_iter, lb, ub, dim, fobj)
% NIADE: Differential Evolution + 少量局部搜索 + 精英保留
% 适用于最小化问题;若要最大化,可传入 @(x)-f(x)% ---- 边界向量化(支持标量或向量) ----if numel(lb) == 1, lb = repmat(lb, 1, dim); else, lb = lb(:)'; endif numel(ub) == 1, ub = repmat(ub, 1, dim); else, ub = ub(:)'; end% ---- 参数 ----F = 0.4; % 变异因子CR = 0.9; % 交叉概率golden_ratio = (1 + sqrt(5)) / 2;% ---- 初始化 ----Positions = initialization(N, dim, lb, ub); % 种群Fit = inf(1, N); % 适应度(最小化)X_NEW = Positions;Fit_NEW = Fit;best_pos = zeros(1, dim);best_score = inf;Convergence_curve = zeros(1, Max_iter);% ---- 主循环 ----iter = 1;while iter <= Max_iter% 1) 评估与全局最优更新for i = 1:NFit_NEW(i) = fobj(X_NEW(i, :));if Fit_NEW(i) < Fit(i)Fit(i) = Fit_NEW(i);Positions(i,:)= X_NEW(i, :);endif Fit(i) < best_scorebest_score = Fit(i);best_pos = Positions(i, :);endend% 2) DE 生成下一代for i = 1:N% 任选三个不同个体idx = randperm(N, 3);while any(idx == i)idx = randperm(N, 3);endX1 = Positions(idx(1), :);X2 = Positions(idx(2), :);X3 = Positions(idx(3), :);% 变异V = X1 + F * (X2 - X3);V = boundConstraint(V, Positions(i, :), lb, ub);% 交叉(binomial)j_rand = randi(dim);U = Positions(i, :);for j = 1:dimif rand <= CR || j == j_randU(j) = V(j);endend% 引入 golden-ratio 惯性权重w = (0.5 + rand / 2) * golden_ratio;X_NEW(i, :) = w * U + (1 - w) * Positions(i, :);% 范围约束X_NEW(i, :) = boundConstraint(X_NEW(i, :), Positions(i, :), lb, ub);end% 3) 多样性维护:每 10 代重启 10%if mod(iter, 10) == 0num_to_restart = ceil(N * 0.1);restart_idx = randperm(N, num_to_restart);Positions(restart_idx, :) = initialization(num_to_restart, dim, lb, ub);Fit(restart_idx) = inf;end% 4) 精英保留(1 个)elite_count = 1;[~, sort_idx] = sort(Fit);elite_positions = Positions(sort_idx(1:elite_count), :);elite_fitness = Fit(sort_idx(1:elite_count));Positions(end-elite_count+1:end, :) = elite_positions;Fit(end-elite_count+1:end) = elite_fitness;% 5) 最优解的坐标邻域局部搜索(逐维扰动)for d = 1:dimlocal_pos = best_pos;perturb = 0.1 * (ub(d) - lb(d)); % 10% 扰动local_pos(d) = local_pos(d) + (2*rand - 1)*perturb;local_pos = boundConstraint(local_pos, best_pos, lb, ub);local_fit = fobj(local_pos);if local_fit < best_scorebest_score = local_fit;best_pos = local_pos;endend% 记录收敛曲线Convergence_curve(iter) = best_score;% 控制台日志fprintf('NIADE: t=%d best=%.6g\n', iter, best_score);iter = iter + 1;end
end% ----------------- 工具函数 -----------------function newPos = boundConstraint(newPos, oldPos, lb, ub)
% 将越界维度回退到 oldPos 的对应分量
% 支持行向量或矩阵输入(每行一个个体)rows = size(newPos, 1);xl = repmat(lb, rows, 1);xu = repmat(ub, rows, 1);if isvector(oldPos)oldRep = repmat(oldPos, rows, 1);elseoldRep = oldPos;endlowMask = newPos < xl;highMask = newPos > xu;newPos(lowMask) = oldRep(lowMask);newPos(highMask) = oldRep(highMask);
endfunction Positions = initialization(SearchAgents_no, dim, lb, ub)
% 在 [lb, ub] 区间均匀随机初始化if numel(lb) == 1, lb = repmat(lb, 1, dim); endif numel(ub) == 1, ub = repmat(ub, 1, dim); enddelta = repmat(ub - lb, SearchAgents_no, 1);LBmat = repmat(lb, SearchAgents_no, 1);Positions = rand(SearchAgents_no, dim) .* delta + LBmat;
end
Fan S, Wang R, Song Y, Crosbee D, Su K. Nature-Inspired Adaptive Differential Evolution: A Unified Meta-Heuristic Framework for Complex Engineering Optimisation and UAV Path Planning[J]. Results in Engineering, 2025, 106530. https://doi.org/10.1016/j.rineng.2025.106530