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