一、获取代码方式

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

获取代码方式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:返回当前循环迭代中食物位置作为最优计算结果,计算结束。

三、部分源代码

%__________________________________________
% fobj = @YourCostFunction
% dim = 待优化参数个数
% Max_iteration =最大迭代次数
% SearchAgents_no = 蜻蜓数量
% lb=[lb1,lb2,...,lbn] 参数取值下限
% ub=[ub1,ub2,...,ubn] 参数取值上限% To run DA: [Best_score,Best_pos,cg_curve]=DA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj)
%__________________________________________clear all
clcSearchAgents_no=40; % 蜻蜓数量Function_name='F1'; % Name of the test function that can be from F1 to F23 (Table 1,2,3 in the paper)Max_iteration=500; % 最大迭代次数% Load details of the selected benchmark function
[lb,ub,dim,fobj]=Get_Functions_details(Function_name);%函数相关参数初始化[Best_score,Best_pos,cg_curve]=DA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);figure('Position',[400 400 560 190])%Draw search space
subplot(1,2,1);
func_plot(Function_name);
title('Test function')
xlabel('x_1');
ylabel('x_2');
zlabel([Function_name,'( x_1 , x_2 )'])
grid off%Draw objective space
subplot(1,2,2);
semilogy(cg_curve,'Color','r')
title('Convergence curve')
xlabel('Iteration');
ylabel('Best score obtained so far');axis tight
grid off
box on
legend('DA')display(['The best solution obtained by DA is : ', num2str(Best_pos')]);
display(['The best optimal value of the objective funciton found by DA is : ', num2str(Best_score)]);% dim = 待优化参数个数
% Max_iteration =最大迭代次数
% SearchAgents_no = 蜻蜓数量
% lb=[lb1,lb2,...,lbn] 参数取值下限
% ub=[ub1,ub2,...,ubn] 参数取值上限
% To run DA: [Best_score,Best_pos,cg_curve]=DA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj)
%__________________________________________function [Best_score,Best_pos,cg_curve]=DA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj) %function [输出变量] = 函数名称(输入变量)display('DA is optimizing your problem');
cg_curve=zeros(1,Max_iteration); %返回一个1 x Max_iteration的零矩阵if size(ub,2)==1     %size(ub,2)返回矩阵ub的列数,这个条件表示ub是一个数,即待优化参数个数为1ub=ones(1,dim)*ub; %ones(1,dim)产生1xdim的全1矩阵lb=ones(1,dim)*lb;
end%初始化蜻蜓邻里半径
r=(ub-lb)/10; %  1*10 20
Delta_max=(ub-lb)/10; % 1*10 20Food_fitness=inf;%正无穷
Food_pos=zeros(dim,1);%10*1  0Enemy_fitness=-inf;%负无穷
Enemy_pos=zeros(dim,1);%10*1  0X=initialization(SearchAgents_no,dim,ub,lb);%10*40 [-100,100] 随机数
Fitness=zeros(1,SearchAgents_no); %1*40 0DeltaX=initialization(SearchAgents_no,dim,ub,lb);%10*40 [-100,100]for iter=1:Max_iterationr=(ub-lb)/4+((ub-lb)*(iter/Max_iteration)*2);%迭代次数越大。半径越大初始1*10 50.8w=0.9-iter*((0.9-0.4)/Max_iteration);%不断减小1*1  0.899my_c=0.1-iter*((0.1-0)/(Max_iteration/2));% 不断减小 1*1 0.0996if my_c<0my_c=0;ends=2*rand*my_c; % 分离度 0.0013a=2*rand*my_c; %  对齐度 0.1884c=2*rand*my_c; %内聚度 0.1791f=2*rand;      % 食物吸引力 0.8826e=my_c;        %敌排斥力 0.0996%%%%%%%%%%%%%%%%%%%%%%%%%%%%%找到食物和天敌for i=1:SearchAgents_no %首先计算所有目标值Fitness(1,i)=fobj(X(:,i)'); %X(:,i)'是取矩阵X的所有行的第i列并共轭转置if Fitness(1,i)<Food_fitness %寻找每次迭代的最小值Food_fitness=Fitness(1,i);%1.2728*10^4Food_pos=X(:,i);endif Fitness(1,i)>Enemy_fitness %寻找每次迭代的最大值if all(X(:,i)<ub') && all( X(:,i)>lb')Enemy_fitness=Fitness(1,i);%5.6813*10^4Enemy_pos=X(:,i);endendend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%找到每只蜻蜓的邻居for i=1:SearchAgents_noindex=0;neighbours_no=0;clear Neighbours_DeltaXclear Neighbours_X%找到相邻邻居for j=1:SearchAgents_noDist2Enemy=distance(X(:,i),X(:,j));%计算欧氏距离if (all(Dist2Enemy<=r) && all(Dist2Enemy~=0))index=index+1;%邻居序号neighbours_no=neighbours_no+1;%邻居数量Neighbours_DeltaX(:,index)=DeltaX(:,j);Neighbours_X(:,index)=X(:,j);endend% 分离 - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 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% 对齐%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Eq. (3.2)if neighbours_no>1A=(sum(Neighbours_DeltaX')')/neighbours_no;elseA=DeltaX(:,i);end% 内聚%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Eq. (3.3)if neighbours_no>1C_temp=(sum(Neighbours_X')')/neighbours_no;elseC_temp=X(:,i);endC=C_temp-X(:,i);% 靠近食物%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Eq. (3.4)Dist2Food=distance(X(:,i),Food_pos(:,1));if all(Dist2Food<=r)F=Food_pos-X(:,i);elseF=0;end% 远离天敌%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Eq. (3.5)Dist2Enemy=distance(X(:,i),Enemy_pos(:,1));if all(Dist2Enemy<=r)Enemy=Enemy_pos+X(:,i);elseEnemy=zeros(dim,1);endfor tt=1:dimif X(tt,i)>ub(tt)%大于上限X(tt,i)=lb(tt);DeltaX(tt,i)=rand;endif X(tt,i)<lb(tt)X(tt,i)=ub(tt);DeltaX(tt,i)=rand;endend       

四、运行结果

五、matlab版本及参考文献

1 matlab版本
2014a

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

【优化算法】蜻蜓算法(DA)【含Matlab源码 1306期】相关推荐

  1. 【SVM分类】基于matlab哈里斯鹰算法优化支持向量机SVM分类【含Matlab源码 2243期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[SVM分类]基于matlab哈里斯鹰算法优化支持向量机SVM分类[含Matlab源码 2243期] 获取代码方式2: 付费专栏Matla ...

  2. 【MVO TSP】基于matlab灰狼算法求解旅行商问题【含Matlab源码 1327期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab灰狼算法求解旅行商问题[含Matlab源码 1327期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  3. 【图像重建】基于matlab布雷格曼迭代算法集合ART算法CT图像重建【含Matlab源码 1905期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像重建]基于matlab布雷格曼迭代算法集合ART算法CT图像重建[含Matlab源码 1905期] 获取代码方式2: 通过订阅紫极神光 ...

  4. 【AFSA TSP】基于matlab人工鱼群算法求解旅行商问题【含Matlab源码 422期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab人工鱼群算法求解旅行商问题[含Matlab源码 422期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  5. 【BA TSP】基于matlab蜜蜂算法求解旅行商问题【含matlab源码 1248期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab蜜蜂算法求解旅行商问题[含matlab源码 1248期] 获取代码方式2: 付费专栏Matlab路径规划(初级版 ...

  6. 【IA TSP】基于matlab免疫算法求解旅行商问题【含Matlab源码 195期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[旅行商问题]基于matlab免疫算法求解旅行商问题[含Matlab源码 195期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  7. 【ELM分类】基于matlab遗传算法优化ELM神经网络数据分类【含Matlab源码 2138期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[ELM分类]基于matlab遗传算法优化ELM神经网络数据分类[含Matlab源码 2138期] 点击上面蓝色字体,直接付费下载,即可. ...

  8. 【LSSVM分类】基于matlab遗传算法优化LSSVM烟叶识别【含Matlab源码 1944期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[ELM分类]基于matlab鲸鱼算法优化核极限学习机数据分类[含Matlab源码 2012期] 获取代码方式2: 付费专栏Matlab智 ...

  9. 【潮流计算】基于matlab粒子群算法优化电力系统潮流计算【含Matlab源码 2157期】

    ⛄一.粒子群算法简介 1 标准粒子群优化(PSO)算法 PSO算法根据对环境的适应度将群体中的个体移动到好的区域,将每个个体看作是D维搜索空间中的一个粒子,根据粒子本身的飞行经验和群体中其他同伴的飞行 ...

  10. 【图像修复】基于matlab GUI FMM+Criminisi算法彩色图像修复【含Matlab源码 1507期】

    一.FMM+Criminisi算法简介 1 FMM算法 FMM算法是由Telea在2004年提出的,主要思想是先处理待修复区域边缘的像素,然后逐步向内推进,直到所有空洞点修复完毕.设Λ为待修复区域, ...

最新文章

  1. is NULL , is NOT NULL 有时索引失效 || in 走索引, not in 索引失效 ||单列索引和复合索引 || 查看索引使用情况
  2. Python第三方库的安装及路径查看总结
  3. C#.Net 常用函数和方法集
  4. 网课老师凭什么年薪200万?
  5. destoon php os,destoon运行流程二次开发必看
  6. python中质数的表达方式_python求质数的3种方法
  7. gps高斯utm_高斯投影与UTM投影
  8. 汽车销售管理系统源码
  9. java分布式-一致性
  10. S7–1500遇上工业无线AP:一个立体仓库无线网络故障诊断分析案例
  11. 发力1小时到家服务,山姆与京东到家共建前置仓获10倍坪效、60%月复购率...
  12. Creator动态获取,数据文,JSON并使用,枚举Enum,cc.sys.localStorage获取音效的判断 ,冒泡排序做排行榜 ,动态获取提示(cc.loader.loadRes),制作签到
  13. JSD-2204-API-JavaIO-Day02
  14. 微分的定义和介绍习题
  15. 赛效:WPS中绘制的表格如何添加边框?
  16. 唠唠MySQL的join
  17. 错别字分析——自建错词库
  18. 查询任何一门课程成绩在70分以上的姓名、课程名称和分数
  19. 视频教程-Cesium入门-JavaScript
  20. PFR0.S08.00.F00比例流量控制插装阀

热门文章

  1. spring-第九篇之高级依赖关系配置
  2. ---Ubuntu 下安装oracle Java
  3. Jeecg-Boot前后端分离版
  4. BZOJ3122 [Sdoi2013]随机数生成器 【BSGS】
  5. 关联规则挖掘算法之Apriori算法
  6. 利用QrCode.Net生成二维码 asp.net mvc c#
  7. 最长回文子串(Longest Palindromic Substring)-DP问题
  8. MVC4 Model ValueProvider
  9. 一个校园互联网实验室的纳新试题(我的服务端开发笔试题)
  10. 计算机共享打印机后重启才能够打印的解决方法