天天看點

多目标蜉蝣優化算法(Matlab代碼實作)

💥1 概述

    蜉蝣算法 (MA)由Konstantinos Zervoudakis于2020年提出的新方法來解決優化問題。受蜉蝣飛行行為和交配過程的啟發,該算法結合了群體智能和進化算法的主要優點。為了評估所提出算法的性能,使用了 38 個數學基準函數,包括 13 個 CEC2017 測試函數,并将結果與七種最先進的著名元啟發式優化方法的結果進行了比較。MA 的性能還通過多目标優化中的收斂行為以及使用現實世界的離散流水工廠中的房間排程問題進行評估。比較結果證明了所提方法在收斂速度和收斂速度方面的優越性。婚禮舞蹈和随機飛行的過程增強了算法探索和利用屬性之間的平衡,并幫助其擺脫局部最優。

📚2 運作結果

多目标蜉蝣優化算法(Matlab代碼實作)
多目标蜉蝣優化算法(Matlab代碼實作)

部分代碼:

clc; clear; close all;
 %% Problem Definition
 % Objective Functions
 ANSWER=listdlg('PromptString','Choose Objective Function','SelectionMode','single', 'ListString', {'1. ZDT', '2. ZDT2', '3. ZDT3'});
 if eq(ANSWER,1); ObjectiveFunction=@(x) ZDT(x); funcname='ZDT';
 elseif eq(ANSWER,2); ObjectiveFunction=@(x) ZDT2(x); funcname='ZDT2';
 elseif eq(ANSWER,3); ObjectiveFunction=@(x) ZDT3(x); funcname='ZDT3';
 else; disp('Terminated'); return
 end
 ProblemSize=[1 10];       % Decision Variables Size
 LowerBound=0;             % Decision Variables Lower Bound
 UpperBound=1;             % Decision Variables Upper Bound
 %% Mayfly Parameters
 methname='Mayfly Algorithm';
 MaxIt=1000;         % Maximum Number of Iterations
 nPop=20; nPopf=20;          % Population Size (males and females)
 nPareto=50;       % Repository Size
 g=0.8;                % Inertia Weight
 gdamp=1;            % Inertia Weight Damping Ratio
 a1=1.0;             % Personal Learning Coefficient
 a2=1.5;  a3=1.5;           % Global Learning Coefficient
 beta=2;             % Distance sight Coefficient
 dance=0.77;          % Mutation Coefficient
 dance_damp=0.99;    % Mutation Coefficient Damping Ratio
 fl=0.77;                       % Random flight
 fl_damp=0.99;
 % Mating Parameters
 nCrossover=20;  % Number of Parnets (Offsprings)
 nMutation=round(0.5*nPop);        % Number of Mutants
 mu=0.02;                                % Mutation Rate
 % Velocity Limits
 VelMax=1*(UpperBound-LowerBound)*5; VelMin=-VelMax;
 %% Initialization
 %run initial
 empty_mayfly.Position=[];
 empty_mayfly.Velocity=[];
 empty_mayfly.Cost=[];
 empty_mayfly.Best.Position=[];
 empty_mayfly.Best.Cost=[];
 empty_mayfly.Rank=[];
 empty_mayfly.DominationSet=[];
 empty_mayfly.DominatedCount=[];
 empty_mayfly.CrowdingDistance=[];
 Mayfly=repmat(empty_mayfly,nPop,1);
 Mayflyf=repmat(empty_mayfly,nPopf,1);
 for i=1:nPop
     % Initialize Male Position
     Mayfly(i).Position=unifrnd(LowerBound,UpperBound,ProblemSize);
     % Initialize Velocity
     Mayfly(i).Velocity=zeros(ProblemSize);
     % Evaluation
     Mayfly(i).Cost=ObjectiveFunction(Mayfly(i).Position);
     % Update Personal Best
     Mayfly(i).Best.Position=Mayfly(i).Position;
     Mayfly(i).Best.Cost=Mayfly(i).Cost;
     % Initialize female Position
     if i<=nPopf
         Mayflyf(i).Position=unifrnd(LowerBound,UpperBound,ProblemSize);
         Mayflyf(i).Velocity=zeros(ProblemSize);
         Mayflyf(i).Cost=ObjectiveFunction(Mayflyf(i).Position);
         Mayflyf(i).Best.Position=Mayflyf(i).Position;
         Mayflyf(i).Best.Cost=Mayflyf(i).Cost;
     end
 end      

🎉3 參考文獻

​​🌈​​4 Matlab代碼實作

繼續閱讀