摘要(Abstract)
牛顿-拉夫逊优化算法(Newton-Raphson-Based Optimizer, NRBO)是一种新型优化>群体智能优化算法,受牛顿-拉夫逊方法求解非线性方程的启发。NRBO 结合牛顿-拉夫逊搜索规则(Newton-Raphson Search Rule, NRSR)和陷阱规避算子(Trap Avoidance Operator, TAO),能够在全局搜索和局部开发之间取得良好的平衡,提高算法的收敛速度和优化能力。NRBO 通过随机扰动和梯度信息调整搜索方向,从而提升寻优效率,并有效避免局部最优陷阱。实验表明,NRBO 在求解连续优化问题时表现出较高的搜索精度和收敛稳定性。
算法介绍
NRBO 采用牛顿-拉夫逊方法的迭代思想,在传统优化算法的基础上进行改进,主要特点如下:
- 牛顿-拉夫逊搜索规则(NRSR):
- 该规则用于计算个体更新方向,通过牛顿-拉夫逊方法的数值迭代公式调整搜索步长,使个体能够向最优解逼近。
- 动态参数 delta:
- 随着迭代次数增加,delta 逐渐减小,从而增强算法的稳定性,防止过早收敛。
- 陷阱规避算子(Trap Avoidance Operator, TAO):
- 通过随机扰动调整个体位置,增加搜索的多样性,防止个体陷入局部最优。
- 自适应搜索策略:
- 结合不同的搜索模式(全局探索、局部开发),在不同阶段使用不同策略,提高寻优效率。
详细代码
下面是 NRBO 算法的完整 MATLAB 代码:
% -----------------------------------------------------------------------------------------
% Newton-Raphson-Based Optimizer (NRBO) 牛顿-拉夫逊优化算法
%
% 参考论文:
% Newton-Raphson-Based Optimizer: A New Population-Based Metaheuristic Algorithm for Continuous Optimization Problems
% Engineering Applications of Artificial Intelligence, 2024
% DOI: https://doi.org/10.1016/j.engappai.2023.107532
%
% 作者:Dr. Sowmya R, Dr. M. Premkumar, Dr. Pradeep Jangir
% -----------------------------------------------------------------------------------------function [Best_Score, Best_Pos, CG_curve] = NRBO(N, MaxIt, LB, UB, dim, fobj)% 参数说明:% N - 种群个体数(粒子数量)% MaxIt - 最大迭代次数% LB - 搜索空间的下界% UB - 搜索空间的上界% dim - 变量维度% fobj - 目标函数(适应度函数)% 陷阱规避算子(TAO)的触发概率DF = 0.6;% 设定搜索边界LB = ones(1, dim) * LB; UB = ones(1, dim) * UB;% 初始化种群Position = initialization(N, dim, UB, LB);Fitness = zeros(N, 1); % 记录个体的适应度值% 计算初始种群的适应度值for i = 1:NFitness(i) = fobj(Position(i,:)); end% 记录当前最优和最劣个体[~, Ind] = sort(Fitness); Best_Score = Fitness(Ind(1));Best_Pos = Position(Ind(1),:);Worst_Cost = Fitness(Ind(end));Worst_Pos = Position(Ind(end),:);% 初始化收敛曲线CG_curve = zeros(1, MaxIt);% ----------------- 主要优化循环 -----------------for it = 1:MaxIt% 计算动态参数 delta,随着迭代次数增加而减小delta = (1 - ((2 * it) / MaxIt)) .^ 5;% 遍历种群中的每个个体for i = 1:N % 随机选择两个不同的个体索引P1 = randperm(N, 2); a1 = P1(1); a2 = P1(2);% 计算步长 rhorho = rand * (Best_Pos - Position(i,:)) + rand * (Position(a1,:) - Position(a2,:));% 计算牛顿-拉夫逊搜索规则(NRSR)Flag = 1; NRSR = SearchRule(Best_Pos, Worst_Pos, Position(i,:), rho, Flag); X1 = Position(i,:) - NRSR + rho; X2 = Best_Pos - NRSR + rho; % 更新个体位置Xupdate = zeros(1, dim);for j = 1:dim X3 = Position(i,j) - delta * (X2(j) - X1(j)); a1 = rand; a2 = rand;Xupdate(j) = a1 * (a1 * X1(j) + (1 - a2) * X2(j)) + (1 - a2) * X3; end% 陷阱规避算子(TAO)防止个体陷入局部最优if rand < DFtheta1 = -1 + 2 * rand(); theta2 = -0.5 + rand(); beta = rand < 0.5;u1 = beta * 3 * rand + (1 - beta); u2 = beta * rand + (1 - beta); if u1 < 0.5X_TAO = Xupdate + theta1 * (u1 * Best_Pos - u2 * Position(i,:)) + theta2 * delta * (u1 * mean(Position) - u2 * Position(i,:));elseX_TAO = Best_Pos + theta1 * (u1 * Best_Pos - u2 * Position(i,:)) + theta2 * delta * (u1 * mean(Position) - u2 * Position(i,:)); endXnew = X_TAO;elseXnew = Xupdate;end% 边界检查,防止越界Xnew = min(max(Xnew, LB), UB);% 计算新个体的适应度值Xnew_Cost = fobj(Xnew);% 更新最优个体if Xnew_Cost < Fitness(i)Position(i,:) = Xnew;Fitness(i) = Xnew_Cost;if Fitness(i) < Best_ScoreBest_Pos = Position(i,:);Best_Score = Fitness(i);endend% 更新最劣个体if Fitness(i) > Worst_CostWorst_Pos = Position(i,:);Worst_Cost = Fitness(i);endend% 记录当前迭代的最优适应度值CG_curve(it) = Best_Score;% 显示当前迭代信息disp(['Iteration ' num2str(it) ': Best Fitness = ' num2str(CG_curve(it))]);end
end