基于动态惯性权值策略的飞蛾火焰优化算法求解单目标问题附matlab代码

该文介绍了使用Matlab实现的基于动态惯性权值策略的飞蛾火焰优化算法,用于解决单目标问题。算法包括初始化飞蛾位置、迭代过程、捕焰和弃焰行为,以及边界处理和适应度值计算。在每次迭代中,算法会更新全局最优解并显示最佳适应度值。最后,文中提到了参考文献和提供了相关资源链接。
摘要由CSDN通过智能技术生成

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法 神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机

1 内容介绍

【智能优化算法-飞蛾火焰优化算法】基于动态惯性权值策略的飞蛾火焰优化算法求解单目标问题附matlab代码

2 部分代码

function [Best_flame_score, Best_flame_pos, Convergence_curve] = MFO(Moth_pos, N, Max_iteration, lb, ub, dim, fobj)

% % 初始化飞蛾位置

% Moth_pos = initialization(N, dim, ub, lb);

Convergence_curve = zeros(1, Max_iteration);

Iteration = 1;

%% 迭代

while Iteration < Max_iteration+1

    

    %% 弃焰行为

    % Eq. (3.14) in the paper--火焰自适应数量

    Flame_no = round(N-Iteration*((N-1)/Max_iteration));

    

    for i = 1:N

        % 边界处理

        Flag4ub = Moth_pos(i, :) > ub;

        Flag4lb = Moth_pos(i, :) < lb;

        Moth_pos(i, :) = (Moth_pos(i, :).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;

        % 计算适应度值

        Moth_fitness(i) = fobj(Moth_pos(i, :));

    end

    

    if Iteration == 1

        % 排序

        [fitness_sorted, I] = sort(Moth_fitness);

        sorted_population = Moth_pos(I, :);

        % 更新火焰

        best_flames = sorted_population;

        best_flame_fitness = fitness_sorted;

    else

        % 排序

        double_population = [previous_population; best_flames];

        double_fitness = [previous_fitness best_flame_fitness];

        

        [double_fitness_sorted,I] = sort(double_fitness);

        double_sorted_population = double_population(I, :);

        

        fitness_sorted = double_fitness_sorted(1:N);

        sorted_population = double_sorted_population(1:N, :);

        

        % 更新火焰

        best_flames = sorted_population;

        best_flame_fitness = fitness_sorted;

    end

    

    % 更新全局最优解

    Best_flame_score = fitness_sorted(1);

    Best_flame_pos = sorted_population(1,:);

    

    previous_population = Moth_pos;

    previous_fitness = Moth_fitness;

    

    %% 捕焰行为

    % a从-1到-2线性递减,以计算公式(3.12)中的t

    a = -1+Iteration*((-1)/Max_iteration);

    

    for i = 1:N

        

        for j = 1:dim

            if i <= Flame_no        % 更新飞蛾相对于相应火焰的位置

                % D in Eq. (3.13)

                distance_to_flame = abs(sorted_population(i,j)-Moth_pos(i,j));

                b = 1;

                t = (a-1)*rand+1;

                % Eq. (3.12)

                Moth_pos(i, j) = distance_to_flame*exp(b.*t).*cos(t.*2*pi)+sorted_population(i, j);

            else                           % 更新飞蛾相对于相应火焰的位置

                % Eq. (3.13)

                distance_to_flame = abs(sorted_population(i, j)-Moth_pos(i, j));

                b = 1;

                t = (a-1)*rand+1;

                % Eq. (3.12)

                Moth_pos(i, j) = distance_to_flame*exp(b.*t).*cos(t.*2*pi)+sorted_population(Flame_no, j);

            end

        end

    end

    

    Convergence_curve(Iteration) = Best_flame_score;

    

    % 显示迭代信息

    display(['MFO:At iteration ', num2str(Iteration), ' the best fitness is ', num2str(Best_flame_score)]);

   

    Iteration = Iteration+1;

end

3 运行结果

4 参考文献

[1]刘倩, 毛耀. 基于高斯变异的改进型飞蛾火焰优化算法[J]. 电脑编程技巧与维护, 2020(11):2.

❤️ 关注我领取海量matlab电子书和数学建模资料

❤️部分理论引用网络文献,若有侵权联系博主删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值