【优化求解】基于混合正弦余弦和变异选择改进蝗虫优化算法实现目标最优求解matlab代码

​1 简介

针对蝗虫优化算法(GOA)全局寻优能力不足,易陷入局部最优,寻优精度较低等问题,提出融合正弦余弦和变异选择的蝗虫优化算法(SC-MGOA).首先,在位置更新处根据转换概率选择不同的位置更新方式来增加种群的多样性,同时弥补GOA算法全局搜索能力不足的缺陷;其次,为更好的协调算法的全局探索和局部开发,对引入的正弦余弦机制进行改进;最后,在一定概率下针对最优解进行变异,并利用贪婪法则择优保留,使算法能够跳出局部最优,提高算法的收敛精度.选取10个测试函数进行3组测试,结果表明了不同改进策略的有效性,还证明了SC-MGOA算法相对于其他比较算法在寻优精度,寻优速度和鲁棒性等方面的优越性.

2 部分代码

%% 清除环境变量

clear 

clc

%% 参数设置

N = 30;             % 种群规模

Function_name = 'F3';         % 从F1到F23的测试函数的名称(本文中的表1、2、3)

Max_iteration = 500;           % 最大迭代次数

cnt_max = 30;

% 加载所选基准函数的详细信息

[lb, ub, dim, fobj] = Get_Functions_details(Function_name);

Curve_SSA = zeros(1, Max_iteration);

Curve_ALO = zeros(1, Max_iteration);

Curve_SCA = zeros(1, Max_iteration);

Curve_SC_MGOA = zeros(1, Max_iteration);

for cnt = 1:cnt_max

    % 初始化种群位置

    X = initialization(N, dim, ub, lb);

       

    [SSA_Best_score(cnt), SSA_Best_pos(cnt, :), SSA_Curve] = SSA(X, N, Max_iteration, lb, ub, dim, fobj);

    [ALO_Best_score(cnt), ALO_Best_pos(cnt, :), ALO_Curve] = ALO(N, Max_iteration, lb, ub, dim, fobj);

    [SCA_Best_score(cnt), SCA_Best_pos(cnt, :), SCA_Curve] = SCA(X, N, Max_iteration, lb, ub, dim, fobj);

    [SC_MGOA_Best_score(cnt), SC_MGOA_Best_pos(cnt, :), SC_MGOA_Curve] = SC_MGOA(N, Max_iteration, lb, ub, dim, fobj);

   

    Curve_SSA = Curve_SSA+SSA_Curve;

    Curve_ALO = Curve_ALO+ALO_Curve;

    Curve_SCA = Curve_SCA+SCA_Curve;

    Curve_SC_MGOA = Curve_SC_MGOA+SC_MGOA_Curve;

end

Curve_SSA = Curve_SSA/cnt_max;

Curve_ALO = Curve_ALO/cnt_max;

Curve_SCA = Curve_SCA/cnt_max;

Curve_SC_MGOA = Curve_SC_MGOA/cnt_max;

std_SSA = std(SSA_Best_score);

std_ALO = std(ALO_Best_score);

std_SCA = std(SCA_Best_score);

std_SC_MGOA = std(SC_MGOA_Best_score);

best_SSA = max(SSA_Best_score);

best_ALO = max(ALO_Best_score);

best_SCA = max(SCA_Best_score);

best_SC_MGOA = max(SC_MGOA_Best_score);

worst_SSA = min(SSA_Best_score);

worst_ALO = min(ALO_Best_score);

worst_SCA = min(SCA_Best_score);

worst_SC_MGOA = min(SC_MGOA_Best_score);

mean_SSA = mean(SSA_Best_score);

mean_ALO = mean(ALO_Best_score);

mean_SCA = mean(SCA_Best_score);

mean_SC_MGOA = mean(SC_MGOA_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_SSA, 'gs-', t, Curve_ALO, 'm^-', t, Curve_SCA, 'bo-', t, Curve_SC_MGOA, '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('SSA', 'ALO', 'SCA', 'SC-MGOA');

%% 显示结果

disp(['函数:', num2str(Function_name)]);

disp(['SSA:最大值: ', num2str(best_SSA), ',最小值:', num2str(worst_SSA), ',平均值:', num2str(mean_SSA), ',标准差:', num2str(std_SSA)]);

disp(['ALO:最大值: ', num2str(best_ALO), ',最小值:', num2str(worst_ALO), ',平均值:', num2str(mean_ALO), ',标准差:', num2str(std_ALO)]);

disp(['SCA:最大值: ', num2str(best_SCA), ',最小值:', num2str(worst_SCA), ',平均值:', num2str(mean_SCA), ',标准差:', num2str(std_SCA)]);

disp(['SC_MGOA:最大值: ', num2str(best_SC_MGOA), ',最小值:', num2str(worst_SC_MGOA), ',平均值:', num2str(mean_SC_MGOA), ',标准差:', num2str(std_SC_MGOA)]);

3 仿真结果

4 参考文献

[1]林杰, and 何庆. "融合正弦余弦和变异选择的蝗虫优化算法." 小型微型计算机系统 42.4(2021):8.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值