蜻蜓优化算法(Matlab完整代码实现)
https://img-blog.csdnimg.cn/img_convert/3bcb3a4c40b09f00317647820a7ef228.gifhttps://img-blog.csdnimg.cn/d939938b2ab8445780238baebc4d3179.png
目录
1 蜻蜓算法概述
2 蜻蜓算法数学模型
2.1 分离
2.2 对齐
2.3 聚集
2.4 食物吸引
2.5 天敌驱散
2.6 程序中的表述
3 完整matlab代码实现
3.1 展现
3.2 Matlab代码
4 十四种智能优化算法(Python代码实现)
https://img-blog.csdnimg.cn/bd2f4a25c03440698a32b3092558a677.gif
此算法在电力系统中也有很多应用
https://img-blog.csdnimg.cn/9130f6ab64cd479494a586269c871228.png
1 蜻蜓算法概述
自然充满了执行不同任务的社会行为。尽管所有个体和集体行为的最终目标是生存,但生物在群体、畜群、学校、殖民地和羊群中合作和互动有几个原因:狩猎、防御、导航和觅食。例如,狼群拥有组织最完善的狩猎社交互动之一。狼倾向于遵循社会领导以不同的步骤捕猎猎物:追逐猎物、盘旋猎物、骚扰猎物和攻击猎物 。集体防御的一个例子是海洋中的鱼群。数以千计的鱼类形成了一个鱼群,并通过相互警告来避开捕食者,使得捕食者的捕食变得非常困难。
蜻蜓算法(DA)。 DA算法的主要灵感来源于自然界蜻蜓静态和动态的成群行为。优化、探索和开发的两个基本阶段是通过对蜻蜓在导航、寻找食物和在动态或统计上成群时避开敌人的社会互动进行建模来设计的。接下来文章还考虑了 DA 的二进制和多目标版本的方法,分别称为二进制 DA (BDA) 和多目标 (MODA)。所提出的算法由几个数学测试函数和一个定性和定量的真实案例研究进行了基准测试。该算法能够改善给定问题的初始随机种群,收敛到全局最优,并提供非常有竞争力的结果。 MODA 的结果还表明,该算法倾向于为多目标问题找到具有高度均匀分布的帕累托最优解的非常精确的近似值。潜艇螺旋桨设计问题得到的一组设计证明了MOD的优点。
2 蜻蜓算法数学模型
蜻蜓算法寻优计算主要思路通过模拟蜻蜓的捕食行为来实现(图1),该飞行(进化)寻优机制可以表示为蜻蜓群体分离、对齐、聚集、食物吸引与天敌驱散五个步骤。
2.1 分离
表示避免蜻蜓个体距离太近降低寻优效率:
https://img-blog.csdnimg.cn/f000ce4c203b42d9afda899bf530b853.png
式中Ek为蜻蜓k的分离度;D表示当前蜻蜓的位置;Dj代表第j个邻近蜻蜓的位置;J代表群体中第k个蜻蜓的邻近蜻蜓的数量。
2.2 对齐
表示某个蜻蜓与其邻近蜻蜓个体速度的相同程度:
https://img-blog.csdnimg.cn/f54e20ba89da46c3bd7f998b92f6cb63.png
式中Uk为蜻蜓k的对齐度;Vj代表第j个邻近蜻蜓的飞行速度;其他符号意义同前。
2.3 聚集
表示某个蜻蜓具有朝着其附近较优蜻蜓个体靠近的趋势:
https://img-blog.csdnimg.cn/9d89c962299a430586c3527e901e2e7a.png
式中Bk为蜻蜓k的聚集度;其他符号意义同前。
2.4 食物吸引
食物是指某一次迭代计算中最优个体的位置:
https://img-blog.csdnimg.cn/1179e922da5e4254a59737805aee3308.png
式中Sk为蜻蜓k的食物吸引度;D+代表当前计算中最优蜻蜓的位置。
2.5 天敌驱散
目的是使个体尽可能远离最差的蜻蜓个体,提高寻优计算效率:
https://img-blog.csdnimg.cn/88a6d96bc1ba4a5f901ff9f0af7a44b3.png
式中Tk为蜻蜓k的天敌驱散度;D-代表当前计算中最差蜻蜓的位置。
蜻蜓个体k飞行位置更新步长:
https://img-blog.csdnimg.cn/e262855c5183440baf8edb1bbd424f2a.png
蜻蜓飞行位置更新:
https://img-blog.csdnimg.cn/8b44dddd968d42bca54f8a4e785b0803.png
式中e、u、b、s、t分别表示分离度、对齐度、聚集度、食物吸引度、天敌驱散度的影响系数;β代表惯性系数;l代表反复迭代计数下标;其他符号意义同前。
2.6 程序中的表述
%====================蜻蜓优化算法的五个步骤===========================function =DA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj)cg_curve=zeros(1,Max_iteration);if size(ub,2)==1 ub=ones(1,dim)*ub; lb=ones(1,dim)*lb;end%% 蜻蜓邻域的初始半径r=(ub-lb)/10;Delta_max=(ub-lb)/10;Food_fitness=inf;Food_pos=zeros(dim,1);Enemy_fitness=-inf;Enemy_pos=zeros(dim,1);X=initialization(SearchAgents_no,dim,ub,lb);Fitness=zeros(1,SearchAgents_no);DeltaX=initialization(SearchAgents_no,dim,ub,lb);for iter=1:Max_iteration r=(ub-lb)/4+((ub-lb)*(iter/Max_iteration)*2); w=0.9-iter*((0.9-0.4)/Max_iteration); my_c=0.1-iter*((0.1-0)/(Max_iteration/2)); if my_c1 A=(sum(Neighbours_DeltaX')')/neighbours_no; else A=DeltaX(:,i); end %% 聚集 if neighbours_no>1 C_temp=(sum(Neighbours_X')')/neighbours_no; else C_temp=X(:,i); end C=C_temp-X(:,i); %% 食物吸引 Dist2Food=distance(X(:,i),Food_pos(:,1)); if all(Dist2Food1 for j=1:dim DeltaX(j,i)=w*DeltaX(j,i)+rand*A(j,1)+rand*C(j,1)+rand*S(j,1); if DeltaX(j,i)>Delta_max(j) DeltaX(j,i)=Delta_max(j); end if DeltaX(j,i)Delta_max(j) DeltaX(j,i)=Delta_max(j); end if DeltaX(j,i)ub'; Flag4lb=X(:,i)1 C_temp=(sum(Neighbours_X')')/neighbours_no; else C_temp=X(:,i); end C=C_temp-X(:,i); %% 食物吸引 Dist2Food=distance(X(:,i),Food_pos(:,1)); if all(Dist2Food1 for j=1:dim DeltaX(j,i)=w*DeltaX(j,i)+rand*A(j,1)+rand*C(j,1)+rand*S(j,1); if DeltaX(j,i)>Delta_max(j) DeltaX(j,i)=Delta_max(j); end if DeltaX(j,i)Delta_max(j) DeltaX(j,i)=Delta_max(j); end if DeltaX(j,i)ub'; Flag4lb=X(:,i)a)+k.*((-x-a).^m).*(x
页:
[1]