1 简介
针对缎蓝园丁鸟优化(SBO)算法求解精度不高和收敛速度慢等问题,提出一种改进的缎蓝园丁鸟优化(ISBO)算法.首先,引入非均匀变异算子,动态地调整每次迭代园丁鸟个体的搜索步长,使算法能快速高效地寻求全局最优值;其次,采用互利因子对算法的社会部分引入更多组合模式,使其不再单一围绕前一个园丁鸟附近搜索,以获取更好的最优解;最后,为了更好地平衡算法的局部与全局搜索能力,引入余弦变化的惯性权重因子来更新园丁鸟的位置公式.使用收敛速度分析,Wilcoxon检验和8个基准函数对5种算法搜索性能进行对比分析,来评估改进缎蓝园丁鸟优化算法的效率.结果表明,改进算法具有更好的全局搜索能力和求解鲁棒性,同时寻优精度和收敛速度也比原来算法有所增强.
2 部分代码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Satin Bowerbird Optimizer(SBO)
%%
clc;
clear;
close all;
tic
%% Problem Definition
Function_name='F1';
[lowerbound,upperbound,numbervar,costfcn]=cost_functions(Function_name);
% VarSize=[1 numbervar];
%% SBO Parameters
[MaxIt,nPop,alpha,pMutation,sigma]=SBO_parameters(lowerbound,upperbound);
%% Initialization
[pop,elite,BestCost]=Initialization(nPop,lowerbound,upperbound,numbervar,MaxIt,costfcn);
%% SBO Main Loop
for it=1:MaxIt
newpop=pop;
%Calculating the Fitness of each bower
F=zeros(nPop,1);
for i=1:nPop
if pop(i).Cost>=0
F(i)=1/(1+pop(i).Cost);
else
F(i)=1+abs(pop(i).Cost);
end
end
%Calculating the probability of each bower
P=F/sum(F);
%changes at any bower
for i=1:nPop
for k=1:numbervar
% Select target bower
j=RouletteWheelSelection(P);
% Calculating Step Size
lambda=alpha/(1+P(j));
newpop(i).Position(k)=pop(i).Position(k) ...
+lambda*(((pop(j).Position(k)+elite(k))/2)-pop(i).Position(k));
% Mutation
if rand<=pMutation
newpop(i).Position(k)=newpop(i).Position(k)+(sigma*randn);
end
end
% Evaluation
newpop(i).Cost=costfcn(newpop(i).Position);
end
pop=[pop
newpop
]; %#ok
% Sort Population
[~, SortOrder]=sort([pop.Cost]);
pop=pop(SortOrder);
pop=pop(1:nPop);
% Update Best Solution Ever Found
BestSol=pop(1);
elite=BestSol.Position;
% Store Best Cost Ever Found
BestCost(it)=BestSol.Cost;
% Show Iteration Information
disp(['SBO:: Iteration-> ' num2str(it) '<----->Best Cost = ' num2str(BestCost(it))]);
end
toc
%% Results
disp(['BestSol=' num2str(elite)]);
disp(['BestCost=' num2str(BestSol.Cost)]);
figure;
semilogy(BestCost,'LineWidth',2);
xlabel('Iteration');
ylabel('Best Cost');
img =gcf; %获取当前画图的句柄
print(img, '-dpng', '-r600', './img.png') %即可得到对应格式和期望dpi的图像
3 仿真结果
4 参考文献
[1]王依柔、张达敏、樊英. 非均匀变异的互利自适应缎蓝园丁鸟优化算法[J]. 计算机工程与科学, 2020, 42(12):9.