1 简介
针对蝴蝶优化算法(BOA)容易陷入局部最优和收敛性差等问题,提出一种多策略改进的蝴蝶优化算法(MSBOA).首先引入余弦相似度位置调整策略,通过旋转变化算子和伸缩变换算子进行位置更新,从而有效地保持BOA的种群多样性;其次引入动态切换概率,来平衡BOA局部阶段和全局阶段的转换;最后增加混合惯性权重策略,以提高BOA的收敛速度.使用16个基准测试函数,Wilcoxon检验以及部分CEC2014函数来验证MSBOA的有效性和鲁棒性.仿真实验结果表明,与BOA和其他改进策略BOA及其他群智能算法相比,MSBOA在收敛精度和收敛速度上有明显的提升.
2 部分代码
function [fmin, best_pos, Curve] = BOA(X, N, Max_iter, lb, ub, dim, fobj)
%% BOA参数
p = 0.8; % 开关概率
power_exponent = 0.1;
sensory_modality = 0.01;
for i = 1:N
fitness(i) = fobj(X(i, :));
end
% 最优解
[fmin, I] = min(fitness);
best_pos = X(I, :);
S = X;
%% 迭代
for t = 1:Max_iter
for i = 1:N
% 计算与目标函数相关的每只蝴蝶的香味
Fnew = fobj(S(i, :));
FP = (sensory_modality*(Fnew^power_exponent));
% 全局或局部搜索
if rand < p
dis = rand * rand * best_pos - X(i, :); % Eq. (2) in paper
S(i, :) = X(i, :)+dis*FP;
else
% 在附近随机找蝴蝶
epsilon = rand;
JK = randperm(N);
dis = epsilon*epsilon*X(JK(1), :)-X(JK(2), :);
S(i, :) = X(i, :)+dis*FP; % Eq. (3) in paper
end
% 边界处理
S(i, :) = simplebounds(S(i, :), lb, ub);
% 新的个体适应度值
Fnew = fobj(S(i, :)); % Fnew represents new fitness values
% If fitness improves (better Xutions found), update then
if Fnew <= fitness(i)
X(i, :) = S(i, :);
fitness(i) = Fnew;
end
% 更新当前全局最优解
if Fnew <= fmin
best_pos = S(i, :);
fmin = Fnew;
end
end
Curve(t) = fmin;
% 更新感觉因子
sensory_modality = sensory_modality_NEW(sensory_modality, Max_iter);
disp(['BOA: At iteration ', num2str(t), ' ,the best fitness is ', num2str(Curve(t))]);
end
%% 边界限制函数
function s = simplebounds(s, Lb, Ub)
s = max(s, Lb);
s = min(s, Ub);
end
function y=sensory_modality_NEW(x, Ngen)
y = x+(0.025/(x*Ngen));
end
end
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
3 仿真结果
4 参考文献
[1]陈俊, 何庆. 基于余弦相似度的改进蝴蝶优化算法[J]. 计算机应用, 2021, 41(9):10.