【智能优化算法】基于蜉蝣算法求解多目标优化问题附matlab代码
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代码相关推荐
- 基于深度学习的YOLO目标检测研究-附Matlab代码
目录 ✳️ 一.引言 ✳️ 二.YOLO的基本思想 ✳️ 三.实验验证 ✳️ 四.参考文献 ✳️ 五.Matlab代码获取 ✳️ 一.引言 目标检测是计算机视觉中的一个研究热点,在很多领域都有应用需求 ...
- 【配电网】基于遗传算法实现三相单目标配电网重构附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- 【蚁狮算法】基于具有自适应边界与最优引导的莱维飞行蚁狮优化算法(ABLALO)求解单目标优化问题matlab代码
1 简介 针对蚁狮算法存在探索与开发能力不平衡的缺点,提出了具有自适应边界与最优引导的莱维飞行改进算法.首先蚁狮调整边界范围,蚂蚁做莱维飞行,以此平衡探索与开发能力;其次较差蚁狮做高斯变异,并通过自适 ...
- 【配电网优化】基于粒子群算法实现GARVER-6节点配电网络直流潮流计算附matlab代码
1 内容介绍 一种基于粒子群算法的交直流混联配电网潮流最优化控制算法,属配电调控领域.根据配电网结构图确定区域间配电网互联的线路并编号;设定以线路分类的二维矩阵,关联线路编号与线路上的功率流动值;应用 ...
- 【雷达成像】基于CS算法实现合成孔径星载观测雷达数据成像附matlab代码
1 简介 SAR成像处理最初用光学处理,后来采用数字处理.与光学处理相比,数字处理更精确.更灵活,在距离徙动校正.运动补偿.几何校正和坐标转换等方面有明显的优势. SAR成像处理主要有两个问题,一是距 ...
- 【路径规划】基于遗传算法求解灾情巡视路径问题附matlab代码
1 内容介绍 灾情巡视属于旅行商问题,具有广泛的应用价值.假定有若干巡视组,分工协作对所辖区域内的各灾民聚集地进行巡视,需要对各巡视组的巡视任务,巡视路线进行合理的分配和设计.在现实生活中,各被巡视地 ...
- 【回归预测-FNN预测】基于粒子群优化前馈网络实现对婚姻和离婚数据回归预测附matlab代码
1 内容介绍 (婚姻和离婚数据)) Marriage and Divorce Dataset | Kaggle 数据集信息: 此数据包含 31 列 (100x31).前 30 列是特征(输入),即年 ...
- 【图像检测】基于 AlexNet 和 SVM 实现异常螺母检测附matlab代码
1 内容介绍 考虑到异常检测问题中正负样本严重失衡,难以满足卷积神经网络训练对样本的要求,提出了基于AlexNet模型的异常检测模型.在数据预处理阶段,通过隔帧采样的方式生成3组训练数据,并利用预训练 ...
- 【通信】基于 ADMM 的大规模 MIMO 无穷范数检测附matlab代码
1 内容介绍 在本文中,我们为大规模多用户 (MU) 多输入多输出 (MIMO) 无线系统提出了一种新颖的数据检测算法和相应的 VLSI 设计.我们的算法使用基于交替方向乘法器 (ADMM) 的无限范 ...
- 【图像分割】基于计算机视觉实现胸部CT肺质提取附matlab代码
1 内容介绍 在现代医学领域中,医学影像处理技术随着计算机科学和影像技术的进步,已经成为医学领域重要的一个分支.室外光照度不均.CT自身空间分辨率和层厚参数.人体组织器官蠕动等诸多外界因素造成了医学X ...
最新文章
- 如何使用 Java 生成二维码?
- file input 点击没反应_Java实现文件点击没反应
- 详解ISA2006三种客户端
- Android Studio开发第四篇版本管理Git(下)
- spfa(STL写法)简单讲解+最短路(spfa)例题 acm寒假集训日记22/1/7
- linux【文件操作】命令详解
- 【Virtualbox虚拟机Ubuntu系统安装VBoxGuestAdditions.iso增强包解决办法】
- 微信小程序:动画效果集合
- IOS9 SDK下载、设备安装IOS9系统
- 将计算机网口虚拟串口软件,虚拟串口及其在串口转以太网中的应用
- 格雷码和二进制的转换及典型例题(4bits格雷码计数器)
- 网络战武器——震网(Stuxnet)病毒
- 实用,开源,生成朋友圈转发点赞截图小工具一枚
- 交换机和路由器有什么区别
- DevTools 无法加载来源映射无法加载 httplocalhost8082axios.min.map 的解决方法
- 上课为什么要认真听见?
- 《利用Python进行数据分析: Python for Data Analysis 》学习随笔
- 安卓手机的adb命令
- 舰c2018换html5,[ 转] HTML/HTML5 download属性及其兼容性的探讨
- decibel,dBm,dBi,dBd
热门文章
- Catia V5-6R2016安装教程 win10系统
- 【教学】手写汉字识别_单个汉字鼠标手写识别
- 再送出10套机械键盘
- spring之SpEL表达式
- 人工智能革命(下):永生还是毁灭
- 编写java汽车销售的类_Java经典编程300例之实例062 简单的汽车销售商场(多态)...
- 2021年焊工(初级)新版试题及焊工(初级)在线考试
- android服务常驻后台,[问答] Android应用中,如何保证服务常驻内存?
- QQ玩一玩(轻游戏)入门到放弃?
- 博世自动驾驶的“改革开放”