✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
针对标准阿基米德优化算法(AOA)在求解优化问题时存在全局探索能力弱,收敛速度慢和求解精度低等问题,提出一种多策略阿基米德优化算法(MSAOA).首先,利用变区间初始化策略,使得初始种群尽可能地靠近全局最优解,从而提高初始解的质量;其次,提出黄金莱维引导机制,以提高算法在迭代后期的种群多样性;最后,在维持种群多样性的前提下,引入自适应波长算子,以达到提高算法搜索效率的目的.将所提算法与均衡器算法(EO),正余弦算法(SCA)以及灰狼优化算法(GWO)在20个基准测试函数上进行比较实验.实验结果表明,所提算法具有更高的寻优精度和收敛速度。
⛄ 部分代码
function [bestMin, bestS, bestArchive] = BA(X, N, Tmax, lb, ub, dim, fobj);%% BA参数设置t = 1;F = 0.5;CR = 0.15;A = 0.25.*ones(N,1); % 响度 (不变或者减小)r = zeros(N, 1); % 脉冲频度(不变或增加))R0 = 0.5;alpha = 0.95; % 脉冲音强衰减系数gamma = 0.05; % 脉冲频度增加系数Qmin = 0; % 最小频率Qmax = 1; % 最大频率% 种群初始化V = zeros(N, dim); % 速度Q = zeros(N, 1); % 频率for i = 1:N fitness(i) = fobj(X(i, :));end[bestMin, bestID] = min(fitness);bestS = X(bestID, :);bestArchive = zeros(1, Tmax);%% 迭代寻优while t <= Tmax for i = 1:N Q(i) = Qmin+(Qmax-Qmin)*rand(); V(i, :) = V(i, :)+(X(i, :)-bestS)*Q(i); Stemp = X(i, :)+V(i, :); % 脉冲率 if rand > r(i) Stemp = bestS-1+2*rand(1, dim); end % 边界处理 Stemp = max(Stemp, lb); Stemp = min(Stemp, ub); % 计算适应度值 fitTemp = fobj(Stemp); if (fitTemp<fitness(i))&&(rand()<A(i)) X(i, :) = Stemp; fitness(i) = fitTemp; A(i) = alpha*A(i); r(i) = R0*(1-exp(-gamma*t)); end if fitTemp < bestMin bestMin = fitTemp; bestS = Stemp; end end [bestMin, bestID] = min(fitness); bestS = X(bestID, :); bestArchive(t) = bestMin; % 显示迭代信息 display(['BA:At iteration ', num2str(t), ' the best fitness is ', num2str(bestArchive(t))]); t = t +1;end
⛄ 运行结果
⛄ 参考文献
[1]陈俊何庆李守玉.基于黄金莱维引导机制的阿基米德优化算法[J].计算机应用, 2022, 42(9):2807-2815.