1 内容介绍

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

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 运行结果

4 参考文献

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

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

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

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

  1. 基于深度学习的YOLO目标检测研究-附Matlab代码

    目录 ✳️ 一.引言 ✳️ 二.YOLO的基本思想 ✳️ 三.实验验证 ✳️ 四.参考文献 ✳️ 五.Matlab代码获取 ✳️ 一.引言 目标检测是计算机视觉中的一个研究热点,在很多领域都有应用需求 ...

  2. 【配电网】基于遗传算法实现三相单目标配电网重构附matlab代码

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

  3. 【蚁狮算法】基于具有自适应边界与最优引导的莱维飞行蚁狮优化算法(ABLALO)求解单目标优化问题matlab代码

    1 简介 针对蚁狮算法存在探索与开发能力不平衡的缺点,提出了具有自适应边界与最优引导的莱维飞行改进算法.首先蚁狮调整边界范围,蚂蚁做莱维飞行,以此平衡探索与开发能力;其次较差蚁狮做高斯变异,并通过自适 ...

  4. 【配电网优化】基于粒子群算法实现GARVER-6节点配电网络直流潮流计算附matlab代码

    1 内容介绍 一种基于粒子群算法的交直流混联配电网潮流最优化控制算法,属配电调控领域.根据配电网结构图确定区域间配电网互联的线路并编号;设定以线路分类的二维矩阵,关联线路编号与线路上的功率流动值;应用 ...

  5. 【雷达成像】基于CS算法实现合成孔径星载观测雷达数据成像附matlab代码

    1 简介 SAR成像处理最初用光学处理,后来采用数字处理.与光学处理相比,数字处理更精确.更灵活,在距离徙动校正.运动补偿.几何校正和坐标转换等方面有明显的优势. SAR成像处理主要有两个问题,一是距 ...

  6. 【路径规划】基于遗传算法求解灾情巡视路径问题附matlab代码

    1 内容介绍 灾情巡视属于旅行商问题,具有广泛的应用价值.假定有若干巡视组,分工协作对所辖区域内的各灾民聚集地进行巡视,需要对各巡视组的巡视任务,巡视路线进行合理的分配和设计.在现实生活中,各被巡视地 ...

  7. 【回归预测-FNN预测】基于粒子群优化前馈网络实现对婚姻和离婚数据回归预测附matlab代码

    ​1 内容介绍 (婚姻和离婚数据)) Marriage and Divorce Dataset | Kaggle 数据集信息: 此数据包含 31 列 (100x31).前 30 列是特征(输入),即年 ...

  8. 【图像检测】基于 AlexNet 和 SVM 实现异常螺母检测附matlab代码

    1 内容介绍 考虑到异常检测问题中正负样本严重失衡,难以满足卷积神经网络训练对样本的要求,提出了基于AlexNet模型的异常检测模型.在数据预处理阶段,通过隔帧采样的方式生成3组训练数据,并利用预训练 ...

  9. 【通信】基于 ADMM 的大规模 MIMO 无穷范数检测附matlab代码

    1 内容介绍 在本文中,我们为大规模多用户 (MU) 多输入多输出 (MIMO) 无线系统提出了一种新颖的数据检测算法和相应的 VLSI 设计.我们的算法使用基于交替方向乘法器 (ADMM) 的无限范 ...

  10. 【图像分割】基于计算机视觉实现胸部CT肺质提取附matlab代码

    1 内容介绍 在现代医学领域中,医学影像处理技术随着计算机科学和影像技术的进步,已经成为医学领域重要的一个分支.室外光照度不均.CT自身空间分辨率和层厚参数.人体组织器官蠕动等诸多外界因素造成了医学X ...

最新文章

  1. 如何使用 Java 生成二维码?
  2. file input 点击没反应_Java实现文件点击没反应
  3. 详解ISA2006三种客户端
  4. Android Studio开发第四篇版本管理Git(下)
  5. spfa(STL写法)简单讲解+最短路(spfa)例题 acm寒假集训日记22/1/7
  6. linux【文件操作】命令详解
  7. 【Virtualbox虚拟机Ubuntu系统安装VBoxGuestAdditions.iso增强包解决办法】
  8. 微信小程序:动画效果集合
  9. IOS9 SDK下载、设备安装IOS9系统
  10. 将计算机网口虚拟串口软件,虚拟串口及其在串口转以太网中的应用
  11. 格雷码和二进制的转换及典型例题(4bits格雷码计数器)
  12. 网络战武器——震网(Stuxnet)病毒
  13. 实用,开源,生成朋友圈转发点赞截图小工具一枚
  14. 交换机和路由器有什么区别
  15. DevTools 无法加载来源映射无法加载 httplocalhost8082axios.min.map 的解决方法
  16. 上课为什么要认真听见?
  17. 《利用Python进行数据分析: Python for Data Analysis 》学习随笔
  18. 安卓手机的adb命令
  19. 舰c2018换html5,[ 转] HTML/HTML5 download属性及其兼容性的探讨
  20. decibel,dBm,dBi,dBd

热门文章

  1. Catia V5-6R2016安装教程 win10系统
  2. 【教学】手写汉字识别_单个汉字鼠标手写识别
  3. 再送出10套机械键盘
  4. spring之SpEL表达式
  5. 人工智能革命(下):永生还是毁灭
  6. 编写java汽车销售的类_Java经典编程300例之实例062 简单的汽车销售商场(多态)...
  7. 2021年焊工(初级)新版试题及焊工(初级)在线考试
  8. android服务常驻后台,[问答] Android应用中,如何保证服务常驻内存?
  9. QQ玩一玩(轻游戏)入门到放弃?
  10. 博世自动驾驶的“改革开放”