• 【Matlab】-- 飞蛾扑火优化算法


    在这里插入图片描述
    文章目录

    01 飞蛾扑火算法介绍

    飞蛾扑火算法(Moth-Flame Optimization,MFO)是一种基于自然界飞蛾行为的群体智能优化算法。该算法由 Seyedali Mirjalili 于 2015 年提出,灵感来自于飞蛾在夜间导航时会被光源吸引的行为。飞蛾扑火算法通过模拟飞蛾绕着火焰(光源)螺旋飞行的轨迹,寻找最优解。

    02 飞蛾扑火算法伪代码

    初始化飞蛾群体的位置
    计算飞蛾群体的适应度值
    初始化火焰的位置和适应度值
    
    while (未达到最大迭代次数)
        根据当前火焰更新飞蛾的位置
        计算飞蛾的新适应度值
        更新火焰的位置和适应度值
        记录当前迭代的最优适应度值
        迭代计数器加1
    end while
    

    03 基于Matlab的部分飞蛾扑火MFO算法

    %% 定义算法参数
    N=50;%种群规模
    Max_iteration=50;%最大迭代代数
    lb=-0.5;%下限
    ub=0.5;%上限
    
    %初始化飞蛾的位置
    Moth_pos=initialization(N,dim,ub,lb);
    
    Convergence_curve=zeros(1,Max_iteration);
    
    Iteration=1;
    tic;
    
    while Iteration<Max_iteration+1
    
        % 公式
        Flame_no=round(N-Iteration*((N-1)/Max_iteration));
    
        for i=1:size(Moth_pos,1)
    
            %检查飞蛾是否不在搜索空间
            Flag4ub=Moth_pos(i,:)>ub;
            Flag4lb=Moth_pos(i,:)<lb;
            Moth_pos(i,:)=(Moth_pos(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;  
    
            % 计算适应度函数
            X=Moth_pos(i,:);
            Moth_fitness(1,i)=Objfun1(X,P_train,T_train,hiddennum,P_test,T_test); 
           % Moth_fitness(1,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线性递减
        a=-1+Iteration*((-1)/Max_iteration);
    
       未完...
    
    end
    
    

    代码解释:

    1. 初始化

      • 初始化飞蛾的位置和适应度。
      • 初始化收敛曲线和迭代计数器。
    2. 主循环

      • 每次迭代更新火焰的数量。
      • 检查并修正飞蛾的位置,确保在搜索空间内。
      • 计算每个飞蛾的适应度值。
      • 对飞蛾进行排序,更新火焰。
      • 更新最佳火焰的位置和适应度值。
      • 更新a值,使其线性递减。
      • 根据螺旋飞行路径更新飞蛾的位置。
      • 存储当前迭代的最佳适应度值,并绘制收敛曲线。
    3. 收敛判断

      • 迭代达到最大次数后,输出最优解。

    通过这些步骤,飞蛾扑火算法能够有效地搜索全局最优解,并且在多种优化问题中表现良好。

    04 参考文献

    Seyedali Mirjalili, Moth-flame optimization algorithm: A novel nature-inspired heuristic paradigm, Knowledge-Based Systems,
    Volume 89, 2015.

  • 相关阅读:
    图解Dijkstra算法+代码实现
    40.【C++最全文件操作,少一个你打我】
    基于腾讯云的OTA远程升级
    SpringBoot
    什么?WPF 不支持 SVG ?
    Optuna:带仪表盘的可视化的超参数优化
    E5071C是德科技网络分析仪
    【iMessage苹果家庭群发推】 l NotificationUID:通知ID,可以通过此ID获取详情
    掌握SKILL语言:数字IC设计师必备的技能之一
    Kubernetes PV与PVC 持久卷应用
  • 原文地址:https://blog.csdn.net/wangshuqian1314/article/details/140054242