首页 > 化工知识 > 【优化求解】基于柯西变异和自适应权重优化的蝴蝶算法求解单目标优化问题matlab代码

【优化求解】基于柯西变异和自适应权重优化的蝴蝶算法求解单目标优化问题matlab代码

时间:2021-12-04 来源: 浏览:

【优化求解】基于柯西变异和自适应权重优化的蝴蝶算法求解单目标优化问题matlab代码

原创 天天Matlab 天天Matlab
天天Matlab

TT_Matlab

每天分享一点Matlab资料,一起成长进步。需要定制程序添加qq1575304183

收录于话题 #智能优化算法及应用 212个 内容

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.

天天Matlab

赞赏二维码 微信扫一扫赞赏作者 赞赏

已喜欢, 对作者说句悄悄话
最多40字,当前共

  人赞赏

1 / 3

长按二维码向我转账

赞赏二维码

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐