【优化求解】基于柯西变异和自适应权重优化的蝴蝶算法求解单目标优化问题matlab代码
【优化求解】基于柯西变异和自适应权重优化的蝴蝶算法求解单目标优化问题matlab代码
TT_Matlab
每天分享一点Matlab资料,一起成长进步。需要定制程序添加qq1575304183
1 简介
针对基本蝴蝶优化算法( Butterfly Optimization Algorithm , BOA )存在的收敛精度较低、容易陷入局部最优 解的问题,提出柯西变异和自适应权重优化的蝴蝶算法( Cauchy variation and adaptive Weight Butterfly Optimiza tion Algorithm , CWBOA )。通过在全局位置更新处引入柯西分布函数进行变异,在局部位置更新处引入自适应权 重因子,改进了蝴蝶算法的局部搜索能力;并且引入动态切换概率 p 来权衡全局探索与局部开发过程的比重。改进 的算法通过对多个单峰、多峰和固定测试维度的函数进行求解,结果表明, CWBOA 对大多数测试函数有更好的求 解精度、速度和稳定性。
Sankalap Arora 和 Satvir Singh 两位学者,通过观察 蝴蝶觅食行为而受到启发,提出了一种新的群智能优化 算法 — —蝴蝶优化算法( Butterfly Optimization Algo rithm ) [6] 。该算法的主要思想是模拟蝴蝶的觅食和求偶 行为实现对目标问题的求解。蝴蝶的行为可以描述为 它们向食物源位置的合作运动。蝴蝶接收、感知和分析 空气中的气味以确定食物源或配对伴侣的潜在方向。 BOA 算法模拟此行为在搜索空间中寻找最优解。与现 有的一些元启发式算法相比,基本 BOA 操作简单、调整 的参数少、鲁棒性好,并在工程实践的初步应用中取得 了良好的效果。
基本的蝴蝶优化算法存在着依赖初始种群、收敛精 度低和易陷入局部最优等问题,针对这些问题本文提出 了一种多策略改进的蝴蝶优化算法。利用柯西分布函 数对蝴蝶的全局位置更新进行变异,提升算法的全局搜 索能力,在蝴蝶算法的局部位置更新处引入自适应惯性 权重因子,改进了算法的局部开采能力,并且使用动态 切换概率来平衡局部搜索和全局搜索的比重,提高了寻 优性能。通过 14 个基准测试函数测试,结果表明改进 算法具有更高的收敛精度和鲁棒性。
在自然界之中,蝴蝶可以使用它们的各种感官如: 嗅觉、视觉、味觉、触觉和听觉去寻找食物和求偶,这些 感觉能够帮助它们迁徙、躲避狩猎者以及帮助它们找到 合适的地方产卵。在所有的感觉中最重要的是嗅觉,嗅 觉能够帮助蝴蝶寻找食物(花蜜),即使在很远的地方也 不例外。为了能够找到食物,蝴蝶使用感觉受体用于嗅 觉,这些受体分散在蝴蝶的身体部位,如触角、腿和手掌 等。这些受体实际上是蝴蝶身体表面的神经细胞,被称 为化学感受器。这些化学感受器引导蝴蝶找到最佳的 交配伙伴,以便继续强大的遗传系统。雄性蝴蝶能够通 过信息素来识别雌性,这是雌性蝴蝶发出的气味分泌物 引起特异性反应。 蝴蝶会产生一些强度与其适应性相关的香味,即当 蝴蝶从一个位置移动到另一个位置时,它的适应性会相 应地变化,香味会在远处传播,其他蝴蝶个体能够感知 它,这就是蝴蝶个体如何与其他蝴蝶共享个体信息,形 成一个群体的社会知识网络。当一只蝴蝶能够闻到来 自其他的蝴蝶分泌的香味的时候,它将会朝着香味最浓 的方向移动,该阶段在算法中被称为全局搜索。在另一 种情况下,当蝴蝶不能从周围感知香味时它将随机移 动,这一阶段是局部搜索阶段。 针对上述行为,提出如下假设: ( 1 )所有的蝴蝶都应该散发一些香味,使蝴蝶能够 相互吸引。 ( 2 )每只蝴蝶都会随机移动或向发出最多香味的蝴 蝶移动。 ( 3 )蝴蝶的刺激强度受目标函数的影响或决定。 ( 4 )全局搜索和局部搜索使用切换概率 p 来控制, 受到物理接近度以及风、雨、雷、电等各种其他自然因素, 局部搜索和全局搜索中的切换概率 p 具有重要意义。
2 部分代码
%% 清除环境变量 clear clc %% 参数设置 N = 30 ; % 种群规模 Function_name = ’F23’ ; % 从F1到F23的测试函数的名称(本文中的表1、2、3) Max_iteration = 500 ; % 最大迭代次数 cnt_max = 30 ; % 加载所选基准函数的详细信息 [ lb , ub , dim , fobj ] = Get_Functions_details ( Function_name ); Curve_BOA = zeros ( 1 , Max_iteration ); Curve_WOA = zeros ( 1 , Max_iteration ); Curve_FPA = zeros ( 1 , Max_iteration ); Curve_CWBOA = zeros ( 1 , Max_iteration ); for cnt = 1 : cnt_max % 初始化种群位置 X = initialization ( N , dim , ub , lb ); [ BOA_Best_score ( cnt ), BOA_Best_pos ( cnt , :), BOA_Curve ] = BOA ( X , N , Max_iteration , lb , ub , dim , fobj ); [ WOA_Best_score ( cnt ), WOA_Best_pos ( cnt , :), WOA_Curve ] = WOA ( X , N , Max_iteration , lb , ub , dim , fobj ); [ FPA_Best_score ( cnt ), FPA_Best_pos ( cnt , :), FPA_Curve ] = FPA ( X , N , Max_iteration , lb , ub , dim , fobj ); [ CWBOA_Best_score ( cnt ), CWBOA_Best_pos ( cnt , :), CWBOA_Curve ] = CWBOA ( X , N , Max_iteration , lb , ub , dim , fobj ); Curve_BOA = Curve_BOA + BOA_Curve ; Curve_WOA = Curve_WOA + WOA_Curve ; Curve_FPA = Curve_FPA + FPA_Curve ; Curve_CWBOA = Curve_CWBOA + CWBOA_Curve ; end Curve_BOA = Curve_BOA / cnt_max ; Curve_WOA = Curve_WOA / cnt_max ; Curve_FPA = Curve_FPA / cnt_max ; Curve_CWBOA = Curve_CWBOA / cnt_max ; std_BOA = std ( BOA_Best_score ); std_WOA = std ( WOA_Best_score ); std_FPA = std ( FPA_Best_score ); std_CWBOA = std ( CWBOA_Best_score ); best_BOA = max ( BOA_Best_score ); best_WOA = max ( WOA_Best_score ); best_FPA = max ( FPA_Best_score ); best_CWBOA = max ( CWBOA_Best_score ); worst_BOA = min ( BOA_Best_score ); worst_WOA = min ( WOA_Best_score ); worst_FPA = min ( FPA_Best_score ); worst_CWBOA = min ( CWBOA_Best_score ); mean_BOA = mean ( BOA_Best_score ); mean_WOA = mean ( WOA_Best_score ); mean_FPA = mean ( FPA_Best_score ); mean_CWBOA = mean ( CWBOA_Best_score ); %% 画图 % 1、画出所选基准函数的三维立体图形 % figure; % func_plot(Function_name); % title(Function_name) % xlabel(’x_1’); % ylabel(’x_2’); % zlabel([Function_name,’( x_1 , x_2 )’]) % 2、画出目标函数值变化曲线图 figure ; t = 1 : Max_iteration ; semilogy ( t , Curve_BOA , ’k^-’ , t , Curve_WOA , ’bo-’ , t , Curve_FPA , ’mv-’ , t , Curve_CWBOA , ’rd-’ , ... ’linewidth’ , 1.5 , ’MarkerSize’ , 8 , ’MarkerIndices’ , 1 : 50 : Max_iteration ); title ( Function_name ) xlabel ( ’Iteration’ ); ylabel ( ’Fitness’ ); axis fill grid on box on legend ( ’BOA’ , ’WOA’ , ’FPA’ , ’CWBOA’ ); %% 显示结果 disp ([ ’函数:’ , num2str ( Function_name )]); disp ([ ’BOA:最大值: ’ , num2str ( best_BOA ), ’,最小值:’ , num2str ( worst_BOA ), ’,平均值:’ , num2str ( mean_BOA ), ’,标准差:’ , num2str ( std_BOA )]); disp ([ ’WOA:最大值: ’ , num2str ( best_WOA ), ’,最小值:’ , num2str ( worst_WOA ), ’,平均值:’ , num2str ( mean_WOA ), ’,标准差:’ , num2str ( std_WOA )]); disp ([ ’FPA:最大值: ’ , num2str ( best_FPA ), ’,最小值:’ , num2str ( worst_FPA ), ’,平均值:’ , num2str ( mean_FPA ), ’,标准差:’ , num2str ( std_FPA )]); disp ([ ’CWBOA:最大值: ’ , num2str ( best_CWBOA ), ’,最小值:’ , num2str ( worst_CWBOA ), ’,平均值:’ , num2str ( mean_CWBOA ), ’,标准差:’ , num2str ( std_CWBOA )]);
3 仿真结果
4 参考文献
[1]高文欣等. "柯西变异和自适应权重优化的蝴蝶算法." 计算机工程与应用 56.15(2020):8.
微信扫一扫赞赏作者 赞赏
发送给作者
人赞赏
长按二维码向我转账
受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。
-
Origin(Pro):学习版的窗口限制【数据绘图】 2020-08-07
-
如何卸载Aspen Plus并再重新安装,这篇文章告诉你! 2020-05-29
-
AutoCAD 保存时出现错误:“此图形中的一个或多个对象无法保存为指定格式”怎么办? 2020-08-03
-
OriginPro:学习版申请及过期激活方法【数据绘图】 2020-08-06
-
CAD视口的边框线看不到也选不中是怎么回事,怎么解决? 2020-06-04
-
教程 | Origin从DSC计算焓和比热容 2020-08-31
-
如何评价拟合效果-Origin(Pro)数据拟合系列教程【数据绘图】 2020-08-06
-
Aspen Plus安装过程中RMS License证书安装失败的解决方法,亲测有效! 2021-10-15
-
CAD外部参照无法绑定怎么办? 2020-06-03
-
CAD中如何将布局连带视口中的内容复制到另一张图中? 2020-07-03