目录
1 主要内容
程序主要对蝴蝶算法(BOA)进行改进,参考文献《基于改进蝴蝶优化算法的冗余机器人逆运动学求解》,有如下改进策略:
- 改进1:采用反向学习策略构建精英种群,提高种群质量
- 改进2:在全局搜索阶段,引入柯西变异,增强算法跳出局部最优的能力
- 改进3:引入随机惯性权重改变前一位置对当前位置更新的影响,确保能跳出局部最优
1.1 改进详细模型
改进惯性权重方法比较常见,不同的非线性函数能够得到不同的优化方法,程序中采用sin函数构造惯性权重的进化曲线,当然大家在编程过程中也可以采用其他非线性函数,如Sigmoid函数(见下图),甚至可以用分段方式提高算法的创新性。
2 部分代码
function [fmin,best_pos,Convergence_curve]=IBOA(n,N_iter,Lb,Ub,dim,fobj) p=0.8; % probabibility switch,开关概率 power_exponent=0.1; % 幂指数 sensory_modality=0.01; % 感觉因子 %Initialize the positions of search agents % Sol=initialization(n,dim,Ub,Lb); % ★★改进1:反向学习种群初始化★★ Sol_forward=initialization_for(n,dim,Ub,Lb); Sol_backward=initialization_back(Sol_forward,n,dim,Ub,Lb); Sol_all=[Sol_forward;Sol_backward]; for i = 1:2*n Sol_all_fitness(i)=fobj(Sol_all(i,:)); end [~,sorted_indexes]=sort(Sol_all_fitness); for i = 1:n Sol(i,:)=Sol_all(sorted_indexes(i),:); end for i=1:n Fitness(i)=fobj(Sol(i,:)); end % Find the current best_pos [fmin,I]=min(Fitness); best_pos=Sol(I,:); S=Sol; % Start the iterations -- Butterfly Optimization Algorithm for t=1:N_iter for i=1:n% Loop over all butterflies/solutions %Calculate fragrance of each butterfly which is correlated with objective function,计算与目标函数相关的每只蝴蝶的香味 Fnew=fobj(S(i,:)); FP=(sensory_modality*(Fnew^power_exponent)); % 每只蝴蝶的香味 %Global or local search if rand
2:全局搜索阶段引入柯西变异★★ ori_value = rand(1,dim);
3 程序结果
混合策略改进蝴蝶算法提供了23种测试函数,可以通过main程序修改测试函数,程序Get_Functions_detailsPRO有具体每个测试函数的公式,下面得到F2和F5两种测试函数下的原始算法和改进算法收敛性对比。
测试函数F2:
测试函数F5: