一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【优化算法】多目标蜻蜓优化算法(MODA)【含Matlab源码 1350期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、蜻蜓算法简介

1蜻蜓仿生寻优算法
蜻蜓算法寻优计算主要思路通过模拟蜻蜓的捕食行为来实现(图1),该飞行(进化)寻优机制可以表示为蜻蜓群体分离、对齐、聚集、食物吸引与天敌驱散五个步骤。

图1 蜻蜓算法寻优计算主要思路
(1)分离。表示避免蜻蜓个体距离太近降低寻优效率:

式中Ek为蜻蜓k的分离度;D表示当前蜻蜓的位置;Dj代表第j个邻近蜻蜓的位置;J代表群体中第k个蜻蜓的邻近蜻蜓的数量。

(2)对齐。表示某个蜻蜓与其邻近蜻蜓个体速度的相同程度:

式中Uk为蜻蜓k的对齐度;Vj代表第j个邻近蜻蜓的飞行速度;其他符号意义同前。

(3)聚集。表示某个蜻蜓具有朝着其附近较优蜻蜓个体靠近的趋势:

式中Bk为蜻蜓k的聚集度;其他符号意义同前。

(4)食物吸引。食物是指某一次迭代计算中最优个体的位置:

式中Sk为蜻蜓k的食物吸引度;D+代表当前计算中最优蜻蜓的位置。

(5)天敌驱散。目的是使个体尽可能远离最差的蜻蜓个体,提高寻优计算效率:

式中Tk为蜻蜓k的天敌驱散度;D-代表当前计算中最差蜻蜓的位置。
蜻蜓个体k飞行位置更新步长:

蜻蜓飞行位置更新:

式中e、u、b、s、t分别表示分离度、对齐度、聚集度、食物吸引度、天敌驱散度的影响系数;β代表惯性系数;l代表反复迭代计数下标;其他符号意义同前。

2 蜻蜓算法实现
2.1 算法调整
该研究对蜻蜓算法的寻优求解机制进行如下调整。
(1)引入初始种群个体优化机制。对初始种群中随机选择的某个蜻蜓个体,通过初步寻优计算得到一个可行解,优化后得到新个体替换原有蜻蜓个体,可以保证初始种群中至少有一个可行解。
(2)增加局部合理性判定机制。在蜻蜓算法中加入了合理性审查算子,该算子通过遍历单个蜻蜓的计算维度,保留飞行后合理的局部,剔除飞行后发生不合理的局部位置,以提高算法的寻优计算效率。

2.2 计算流程
适应性调整后的蜻蜓算法的计算流程包括12个步骤。
Step1:初始化计算参数,考虑梯级电站短期优化调度模型求解规模设定蜻蜓算法种群个数N=40,迭代计算次数MAXiter=200。

Step3:随机选择一个初始蜻蜓个体,采用POA算法,基于单站优化原则,对选定蜻蜓个体进行寻优计算,确保初始种群中至少有一个蜻蜓个体为可行解。并令迭代次数iter=1,蜻蜓维度r=0。
Step4:判断蜻蜓个体Xk是否存在邻居。如果有邻居,进入Step5,否则进入Step6。
Step5:依据式(6)-(10)进行群体进化计算:分离度Sr、对齐度Ar、聚集度Cr、食物吸引度Fr、天敌驱散度Er。依据式(11)计算蜻蜓个体位置更新步长,进入Step7。
Step6:该蜻蜓没有邻居,采用Xr=e×(ZMAX(i,t)-ZMIN(i,t))进行蜻蜓个体随机飞行,进入Step7。
Step7:根据当前维度位置更新后计算得到新的个体,计算当前维度更新前后蜻蜓个体目标函数值func1,func2。如果判断func2>func1,说明该维度的位置变化对目标函数计算有利,则保留当前维度的位置更新,ΔXkt+1=ΔXkt+1。若func2<func1,说明当前维度位置变化对目标函数不利,则ΔXkt+1=0。
Step8:使蜻蜓个体计算维度加1,即r=r+1。判断是否完成蜻蜓个体全部维度的更新,如果完成全部维度的更新r=rmax,则进入Step9,否则进入Step5循环计算。
Step9:对蜻蜓个体Xk进行位置更新,Xt+1=Xt+ΔXt+1。
Step10:令k=k+1,进入新一个蜻蜓个体的优化计算,如果k>=N,则全部蜻蜓个体位置更新计算结束,进入Step11。若k<N,则进入Stpe4进行循环计算。
Step11:当前迭代次数中,找出最优蜻蜓个体,与食物位置相比较,根据是否优于食物位置目标函数值,更新食物位置,令iter=iter+1。若iter>=MAXiter,则进入Step12,否则进入Step4。
Step12:返回当前循环迭代中食物位置作为最优计算结果,计算结束。

三、部分源代码

%___________________________________________________________________%
%  Multi-Objective Dragonfly Algorithm (MODA) source codes demo     %
%                           version 1.0                             %
%                                                                   %%
%___________________________________________________________________%clc;
clear;
close all;% Change these details with respect to your problem%%%%%%%%%%%%%%
ObjectiveFunction=@ZDT1;
dim=5;
lb=0;
ub=1;
obj_no=2;if size(ub,2)==1ub=ones(1,dim)*ub;lb=ones(1,dim)*lb;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Initial parameters of the MODA algorithm
max_iter=100;
N=100;
ArchiveMaxSize=100;Archive_X=zeros(100,dim);
Archive_F=ones(100,obj_no)*inf;Archive_member_no=0;r=(ub-lb)/2;
V_max=(ub(1)-lb(1))/10;Food_fitness=inf*ones(1,obj_no);
Food_pos=zeros(dim,1);Enemy_fitness=-inf*ones(1,obj_no);
Enemy_pos=zeros(dim,1);X=initialization(N,dim,ub,lb);
fitness=zeros(N,2);DeltaX=initialization(N,dim,ub,lb);
iter=0;position_history=zeros(N,max_iter,dim);for iter=1:max_iterr=(ub-lb)/4+((ub-lb)*(iter/max_iter)*2);w=0.9-iter*((0.9-0.2)/max_iter);my_c=0.1-iter*((0.1-0)/(max_iter/2));if my_c<0my_c=0;endif iter<(3*max_iter/4)s=my_c;             % Seperation weighta=my_c;             % Alignment weightc=my_c;             % Cohesion weightf=2*rand;           % Food attraction weighte=my_c;             % Enemy distraction weightelses=my_c/iter;        % Seperation weighta=my_c/iter;        % Alignment weightc=my_c/iter;        % Cohesion weightf=2*rand;           % Food attraction weighte=my_c/iter;        % Enemy distraction weightendfor i=1:N %Calculate all the objective values firstParticles_F(i,:)=ObjectiveFunction(X(:,i)');if dominates(Particles_F(i,:),Food_fitness)Food_fitness=Particles_F(i,:);Food_pos=X(:,i);endif dominates(Enemy_fitness,Particles_F(i,:))if all(X(:,i)<ub') && all( X(:,i)>lb')Enemy_fitness=Particles_F(i,:);Enemy_pos=X(:,i);endendend[Archive_X, Archive_F, Archive_member_no]=UpdateArchive(Archive_X, Archive_F, X, Particles_F, Archive_member_no);if Archive_member_no>ArchiveMaxSizeArchive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);[Archive_X, Archive_F, Archive_mem_ranks, Archive_member_no]=HandleFullArchive(Archive_X, Archive_F, Archive_member_no, Archive_mem_ranks, ArchiveMaxSize);elseArchive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);endArchive_mem_ranks=RankingProcess(Archive_F, ArchiveMaxSize, obj_no);% Chose the archive member in the least population area as foods% to improve coverageindex=RouletteWheelSelection(1./Archive_mem_ranks);if index==-1index=1;endFood_fitness=Archive_F(index,:);Food_pos=Archive_X(index,:)';% Chose the archive member in the most population area as enemies% to improve coverageindex=RouletteWheelSelection(Archive_mem_ranks);if index==-1index=1;endEnemy_fitness=Archive_F(index,:);Enemy_pos=Archive_X(index,:)';for i=1:Nindex=0;neighbours_no=0;clear Neighbours_Vclear Neighbours_X% Find the neighbouring solutionsfor j=1:NDist=distance(X(:,i),X(:,j));if (all(Dist<=r) && all(Dist~=0))index=index+1;neighbours_no=neighbours_no+1;Neighbours_V(:,index)=DeltaX(:,j);Neighbours_X(:,index)=X(:,j);endend% Seperation%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Eq. (3.1)S=zeros(dim,1);if neighbours_no>1for k=1:neighbours_noS=S+(Neighbours_X(:,k)-X(:,i));endS=-S;elseS=zeros(dim,1);end% Alignment%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Eq. (3.2)if neighbours_no>1A=(sum(Neighbours_V')')/neighbours_no;elseA=DeltaX(:,i);end

四、运行结果

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

【优化算法】多目标蜻蜓优化算法(MODA)【含Matlab源码 1350期】相关推荐

  1. 【优化布局】基于matlab免疫算法求解充电站最优布局【含Matlab源码 2539期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[生产调度]基于matlab免疫算法求解生产调度零等待问题[含Matlab源码 1178期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  2. 【微电网优化】基于matlab粒子群算法求解综合能源系统优化问题【含Matlab源码 1969期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[微电网优化]基于matlab粒子群算法求解综合能源系统优化问题[含Matlab源码 1969期] 点击上面蓝色字体,直接付费下载,即可. ...

  3. 【数字信号去噪】基于matlab粒子群算法优化VMD分解分量选择数字信号降噪【含Matlab源码 1979期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数字信号去噪]基于matlab粒子群算法优化VMD分解分量选择数字信号降噪[含Matlab源码 1979期] 点击上面蓝色字体,直接付费 ...

  4. 【优化布局】免疫算法求解充电站最优布局【含Matlab源码 2539期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[生产调度]基于matlab免疫算法求解生产调度零等待问题[含Matlab源码 1178期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  5. 【雷达通信】基于matlab NCP算法SAR回波生成和成像【含Matlab源码 1185期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[雷达通信]基于matlab NCP算法SAR回波生成和成像[含Matlab源码 1185期] 点击上面蓝色字体,直接付费下载,即可. 获 ...

  6. 【配送路径规划】蚁群算法求解配送路径最短问题【含Matlab源码 2222期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  7. 【配送路径规划】基于matlab蚁群算法求解配送路径最短问题【含Matlab源码 2222期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  8. 【PSO三维路径规划】基于matlab粒子群算法融合鸡群算法多无人机三维路径规划【含Matlab源码 1792期】

    一.无人机简介 无人机的航迹规划是指在综合考虑无人机飞行油耗.威胁.飞行区域以及自身物理条件限制等因素的前提下, 为飞行器在飞行区域内规划出从初始点到目标点最优或者满意的飞行航迹, 其本质是一个多约束 ...

  9. 【栅格地图路径规划】基于matlab D星和D星_Lite算法机器人栅格地图路径规划【含Matlab源码 2530期】

    ⛄一.简介 "D*算法"的名称源自 Dynamic A Star,最初由Anthony Stentz于"Optimal and Efficient Path Planni ...

  10. 【PSO三维路径规划】基于matlab粒子群算法无人机山地三维路径规划【含Matlab源码 1405期】

    ⛄一.无人机简介 0 引言 随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化.完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水 ...

最新文章

  1. Unicode编码Linux下的转换
  2. php url传递参数_python+Requests接口自动化测试之传递 URL 参数
  3. 【终极完美高效】C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针_函数指针数组
  4. 突破select的FD_SETSIZE限制
  5. python学习1:注释\变量类型\转换函数\转义字符\运算符
  6. 应用层DNS:域名系统(DNS:Domain Name Systems)
  7. python处理json数据(复杂的json转化成嵌套字典并处理)
  8. 2021-08-09 idea -- Mysql 增删改查
  9. MFC CImageList 详解
  10. python 计算均值 方差 标准差
  11. 关于曼哈顿距离的最小生成树 POJ3241
  12. 如何在手机上预览本地h5页面
  13. 继承CAcUiStringEdit,改变编辑框的字体颜色,以及背景的颜色
  14. interFoam求解器分析
  15. 二、浏览器广告屏蔽插件_Adblock Plus
  16. EPIC解决下载不稳定,蓝色块挡住绿色条
  17. 路由器中的MAC地址
  18. http上传文件到ftp服务器,HTTP协议与FTP协议上传文件的优缺点
  19. imx8mm启动图标更改
  20. 基于ssm框架—微信小程序开发的会议管理系统

热门文章

  1. wkhtmltox html快速转成image或pdf
  2. 第八章 文件资源共享
  3. python 爬取历史天气
  4. MyBatis:Pagehelper分页
  5. 赋值运算符、逻辑运算符、表达式
  6. ps aux 中的状态说明
  7. C 杂谈之 Apache的模块开发 (一)
  8. error LNK2019: 无法解析的外部符号 _WinMain@16
  9. .NET编译工具(每日构建或自动化编译)
  10. Ubuntu下查看cuda版本的两种方法