【智能优化算法】基于蜉蝣算法求解多目标优化问题附matlab代码

简介: 【智能优化算法】基于蜉蝣算法求解多目标优化问题附matlab代码

 1 内容介绍

本文介绍了一种称为 Mayfly 算法 (MA) 的新方法来解决优化问题。 受蜉蝣飞行行为和交配过程的启发,该算法结合了群体智能和进化算法的主要优点。为了评估所提出算法的性能,使用了 38 个数学基准函数,包括 13 个 CEC2017 测试函数,并将结果与七种最先进的著名元启发式优化方法的结果进行了比较。 MA 的性能也通过多目标优化中的收敛行为以及使用现实世界的离散流水车间调度问题进行评估。 比较结果证明了所提方法在收敛速度和收敛速度方面的优越性。 婚舞和随机飞行的过程增强了算法探索性和利用性之间的平衡,帮助算法摆脱了局部最优。

image.gif编辑

image.gif编辑

image.gif编辑

2 仿真代码

% Project Title: A multiobjective mayfly optimization algorithm (MOMA) in MATLAB

%

% Researchers are allowed to use this code in their research projects.

%

% Please cite as:

% Zervoudakis, K., & Tsafarakis, S. (2020). A mayfly optimization algorithm.

% Computers & Industrial Engineering, 145, 106559.

% https://doi.org/10.1016/j.cie.2020.106559

%%

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=100;         % 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

% Merge

Pareto=[Mayfly;Mayflyf];

% Non-Dominated Sorting

[Pareto, F]=ParetoSorting(Pareto);

% Calculate Crowding Distance

Pareto=CalcCD(Pareto,F);

% Sort Population

Pareto=SortSolutions(Pareto);

Pareto=Pareto(F{1});

% Truncate

if numel(Pareto)>nPareto

   Pareto=Pareto(1:nPareto);

end

%% Mayfly Main Loop

for it=1:MaxIt

   for i=1:nPop

       leader=Pareto(randi(size(Pareto,2)));

       % Update Females

       if i<=nPopf

           if Dominates(Mayfly(i),Mayflyf(i))

               rmf=norm(Mayfly(i).Position-Mayflyf(i).Position);

               Mayflyf(i).Velocity = g*Mayflyf(i).Velocity ...

                   +a3*exp(-beta*rmf^2).*(Mayfly(i).Position-Mayflyf(i).Position);

           else

               e=unifrnd(-1,+1,ProblemSize);

               Mayflyf(i).Velocity = g*Mayflyf(i).Velocity+fl*(e);

           end

           % Apply Velocity Limits

           Mayflyf(i).Velocity = max(Mayflyf(i).Velocity,VelMin);

           Mayflyf(i).Velocity = min(Mayflyf(i).Velocity,VelMax);

           % Update Position

           Mayflyf(i).Position = Mayflyf(i).Position + Mayflyf(i).Velocity;

           % Velocity Mirror Effect

           IsOutside=(Mayflyf(i).Position<LowerBound | Mayflyf(i).Position>UpperBound);

           Mayflyf(i).Velocity(IsOutside)=-Mayflyf(i).Velocity(IsOutside);

           % Apply Position Limits

           Mayflyf(i).Position = max(Mayflyf(i).Position,LowerBound);

           Mayflyf(i).Position = min(Mayflyf(i).Position,UpperBound);

           % Evaluation

           Mayflyf(i).Cost=ObjectiveFunction(Mayflyf(i).Position);

           Mayflyf(i).Best.Position=Mayflyf(i).Position;

           Mayflyf(i).Best.Cost=Mayflyf(i).Cost;

       end

       % Update Males

       % Update Velocity

       if Dominates(leader,Mayfly(i))

           rpbest=norm(Mayfly(i).Best.Position-Mayfly(i).Position);

           rgbest=norm(leader.Position-Mayfly(i).Position);

           Mayfly(i).Velocity = g*Mayfly(i).Velocity ...

               +a1*exp(-beta*rpbest^2).*(Mayfly(i).Best.Position-Mayfly(i).Position) ...

               +a2*exp(-beta*rgbest^2).*(leader.Position-Mayfly(i).Position);

       else

           e=unifrnd(-1,+1,ProblemSize);

           Mayfly(i).Velocity = g*Mayfly(i).Velocity+dance*(e);

       end

       % Apply Velocity Limits

       Mayfly(i).Velocity = max(Mayfly(i).Velocity,VelMin);

       Mayfly(i).Velocity = min(Mayfly(i).Velocity,VelMax);

       % Update Position

       Mayfly(i).Position = Mayfly(i).Position + Mayfly(i).Velocity;

       % Velocity Mirror Effect

       IsOutside=(Mayfly(i).Position<LowerBound | Mayfly(i).Position>UpperBound);

       Mayfly(i).Velocity(IsOutside)=-Mayfly(i).Velocity(IsOutside);

       % Apply Position Limits

       Mayfly(i).Position = max(Mayfly(i).Position,LowerBound);

       Mayfly(i).Position = min(Mayfly(i).Position,UpperBound);

       % Evaluation

       Mayfly(i).Cost=ObjectiveFunction(Mayfly(i).Position);

       % Update Personal Best

       if Dominates(Mayfly(i),Mayfly(i).Best)

           Mayfly(i).Best.Position=Mayfly(i).Position;

           Mayfly(i).Best.Cost=Mayfly(i).Cost;

       elseif Dominates(Mayfly(i).Best,Mayfly(i))

           % Do Nothing

       else

           if rand<0.5

               Mayfly(i).Best.Position=Mayfly(i).Position;

               Mayfly(i).Best.Cost=Mayfly(i).Cost;

           end

       end

   end

   % MATE

   popc=repmat(empty_mayfly,nCrossover/2,2);

   for k=1:nCrossover/2

       % Select Parents

       i1=randi(numel(Pareto));

       i2=randi(numel(Pareto));

       %p1=Mayfly(i1).Best;

       %p2=Mayflyf(i2).Best;

       % Apply Crossover

       [popc(k,1).Position, popc(k,2).Position]=Crossover(Pareto(i1).Position,Pareto(i2).Position);

       % Evaluation

       popc(k,1).Position = max(popc(k,1).Position, LowerBound);

       popc(k,1).Position = min(popc(k,1).Position, UpperBound);

       popc(k,1).Cost=ObjectiveFunction(popc(k,1).Position);

       % Evaluation

       popc(k,2).Position = max(popc(k,2).Position, LowerBound);

       popc(k,2).Position = min(popc(k,2).Position, UpperBound);

       popc(k,2).Cost=ObjectiveFunction(popc(k,2).Position);

       popc(k,1).Best.Position = popc(k,1).Position;

       popc(k,1).Best.Cost = popc(k,1).Cost;

       popc(k,1).Velocity= zeros(ProblemSize);

       popc(k,2).Best.Position = popc(k,2).Position;

       popc(k,2).Best.Cost = popc(k,2).Cost;

       popc(k,2).Velocity= zeros(ProblemSize);

   end

   % break

   popc=popc(:);

   % Mutation

   popm=repmat(empty_mayfly,nMutation,1);

   for k=1:nMutation

       i=randi(numel(Pareto));

       popm(k)=Pareto(i);

       popm(k).Position=Mutate(popm(k).Position,mu,LowerBound,UpperBound);

       % Evaluation

       popm(k).Position = max(popm(k).Position, LowerBound);

       popm(k).Position = min(popm(k).Position, UpperBound);

       popm(k).Cost=ObjectiveFunction(popm(k).Position);

   end

   % Create Merged Population

   popc=[popc

       popm]; %#ok

   split=round((nCrossover/2+nMutation)/2);

   males=popc(1:split);

   Mayfly=[Mayfly

       males]; %#ok

   males=popc(split+1:nCrossover/2+nMutation);

   Mayflyf=[Mayflyf

       males]; %#ok

   % SHORT

   % Non-Dominated Sorting

   [Mayfly, F]=ParetoSorting(Mayfly);

   Mayfly=CalcCD(Mayfly,F);

   [Mayfly, F]=SortSolutions(Mayfly);

   [Mayflyf, F]=ParetoSorting(Mayflyf);

   Mayflyf=CalcCD(Mayflyf,F);

   [Mayflyf, F]=SortSolutions(Mayflyf);

   Mayfly=Mayfly(1:nPop);

   Mayflyf=Mayflyf(1:nPopf);

   Pareto=[Pareto

       Mayfly

       Mayflyf]; %#ok

   all=Pareto;

   % Non-Dominated Sorting

   [Pareto, F]=ParetoSorting(Pareto);

   % Calculate Crowding Distance

   Pareto=CalcCD(Pareto,F);

   % Sort Population

   [Pareto, F]=SortSolutions(Pareto);

   % Store F1

   Pareto=Pareto(F{1});

   % Truncate

   if numel(Pareto)>nPareto

       Pareto=Pareto(1:nPareto);

   end

   % Show Iteration Information

   disp(['Iteration ' num2str(it) ': Number of Solution in repository = ' num2str(numel(Pareto))]);

   % Plot F1 Costs

   figure(1);

   PlotCosts(all,Pareto);

   %pause(0.01);

   g=g*gdamp;

   dance = dance*dance_damp;

   fl = fl*fl_damp;

end

%% Results

3 运行结果

image.gif编辑

4 参考文献

[1] Zervoudakis K ,  Tsafarakis S . A mayfly optimization algorithm[J]. Computers & Industrial Engineering, 2020, 145:106559.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

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

相关文章
|
30天前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到&quot;hand.txt&quot;文件。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
1月前
|
算法
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
23 2
|
1月前
|
算法
【MATLAB】语音信号识别与处理:卷积滑动平均滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:卷积滑动平均滤波算法去噪及谱相减算法呈现频谱
33 0
|
1月前
|
算法
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
39 1
|
3天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
1天前
|
机器学习/深度学习 算法 数据挖掘
基于PSO优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真
该文档介绍了使用MATLAB2022A中PSO优化算法提升时间序列预测模型性能的过程。PSO优化前后对比显示了优化效果。算法基于CNN、LSTM和Attention机制构建CNN-LSTM-Attention模型,利用PSO调整模型超参数。代码示例展示了PSO的迭代优化过程及训练、预测和误差分析环节。最终,模型的预测结果以图形形式展示,并保存了相关数据。
|
7天前
|
文字识别 算法 计算机视觉
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
14 0
|
8天前
|
机器学习/深度学习 算法 网络架构
matlab使用贝叶斯优化的深度学习
matlab使用贝叶斯优化的深度学习
15 0
|
10天前
|
机器学习/深度学习 算法
【MATLAB】GA_ELM神经网络时序预测算法
【MATLAB】GA_ELM神经网络时序预测算法
282 9

热门文章

最新文章