基于Matlab怎么实现野狗优化算法(matlab,开发技术)

时间:2024-05-04 00:35:48 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

1.概述

基于Matlab怎么实现野狗优化算法

野狗优化算法(Dingo Optimization Algorithm, DOA)模仿澳大利亚野狗的社交行为。DOA算法的灵感来源于野狗的狩猎策略,即迫害攻击、分组策略和食腐行为。为了提高该方法的整体效率和性能,在DOA中制定了三种与四条规则相关联的搜索策略,这些策略和规则在搜索空间的强化(开发)和多样化(探索)之间提供了一种精确的平衡。

该算法的优点:寻优能力强,收敛速度快等特点。

2.捕食过程的数学模型

基于Matlab怎么实现野狗优化算法

2.1种群初始化

野狗种群在搜索边界内随机初始化:

基于Matlab怎么实现野狗优化算法

其中,lbi和ubi分别表示个体的上下边界,randi是[0,1]之间的随机数。

2.2 群体攻击过程

基于Matlab怎么实现野狗优化算法

捕食者通常使用高度智能的狩猎技术,野狗通常单独捕食小猎物,如兔子,但当捕食大猎物,如袋鼠时,它们会成群结队。野狗能找到猎物的位置并将其包围,其行为如上所示:

其中,t代表当前的迭代次数,基于Matlab怎么实现野狗优化算法是野狗新位置; na是在[2,SizePop/2]的逆序中生成的随机整数,其中SizePop是野狗种群的规模; 基于Matlab怎么实现野狗优化算法是将攻击的野狗的子集,其中基于Matlab怎么实现野狗优化算法是随机生成的野狗种群;基于Matlab怎么实现野狗优化算法是当前野狗的位置基于Matlab怎么实现野狗优化算法是上一次迭代中发现的最佳野狗;β1是在[-2.2]内均匀生成的随机数,它是一个比例因子,可改变野狗轨迹的大小。

2.3 迫害攻击过程

野狗通常捕猎小猎物,直到单独捕获为止。行为模拟为:

基于Matlab怎么实现野狗优化算法

其中,基于Matlab怎么实现野狗优化算法是野狗新位置,基于Matlab怎么实现野狗优化算法是上一次迭代中发现的最佳野狗,β2的值与式2.2中的值相同,β2是在[-1,1]区间内均匀生成的随机数,r1是在从1到最大搜索代理(野狗)大小的区间内生成的随机数,基于Matlab怎么实现野狗优化算法是随机选择的第r1个野狗,其中i≠r1。

2.4 野狗的存活率

在DOA中,野狗的存活率值由下式给出:

基于Matlab怎么实现野狗优化算法

其中,fitnessmax和fitnessmin分别是当前一代中最差和最佳的适应度值,而fitness(i)是第i个野狗的当前适应度值。式(5)中的生存向量包含[0,1]区间内的归一化适应度。

3.Matlab代码实现

3.1 代码

%====欢迎关注公众号:电力系统与算法之美====functionDOA()%%====参数设置====popsize=20;%种群规模Iteration=1000;%迭代次数lb=-10;%各维度的下限ub=10;%各维度的上限dim=2;%优化变量的个数P=0.5;%HuntingorScavengerrate.Q=0.7;%Groupattackorpersecution?beta1=-2+4*rand();%-2<beta<2beta2=-1+2*rand();%-1<beta2<1naIni=2;%minimumnumberofdingoesthatwillattacknaEnd=popsize/naIni;%maximumnumberofdingoesthatwillattackna=round(naIni+(naEnd-naIni)*rand());%numberofdingoesthatwillattack%%====初始化种群位置=====Positions=lb+(ub-lb).*rand(popsize,dim);fori=1:size(Positions,1)Fitness(i)=sum(Positions(i,:).^2);%getfitnessend[best_score,minIdx]=min(Fitness);%theminfitnessvaluevMinandthepositionminIdxbest_x=Positions(minIdx,:);%thebestvector[worst_score,~]=max(Fitness);%themaxfitnessvaluevMaxandthepositionmaxIdxcurve=zeros(1,Iteration);%%Section2.2.4Dingoes'survivalratesfori=1:size(Fitness,2)survival(i)=(worst_score-Fitness(i))/(worst_score-best_score);end%%=====开始循环===========fort=1:Iterationforr=1:popsizeifrand()<P%Huntingsumatory=0;c=1;vAttack=[];while(c<=na)idx=round(1+(popsize-1)*rand());band=0;fori=1:size(vAttack,2)ifidx==vAttack(i)band=1;break;endendif~bandvAttack(c)=idx;c=c+1;endendforj=1:size(vAttack,2)sumatory=sumatory+Positions(vAttack(j),:)-Positions(r,:);endsumatory=sumatory/na;ifrand()<Q%groupattackv(r,:)=beta1*sumatory-best_x;%Strategy1:Eq.2else%Persecutionr1=round(1+(popsize-1)*rand());%v(r,:)=best_x+beta1*(exp(beta2))*((Positions(r1,:)-Positions(r,:)));%endelse%Scavengerr1=round(1+(popsize-1)*rand());ifrand()<0.5val=0;elseval=1;endv(r,:)=(exp(beta2)*Positions(r1,:)-((-1)^val)*Positions(r,:))/2;%endifsurvival(r)<=0.3%Section2.2.4,Algorithm3-Survivalprocedureband=1;whilebandr1=round(1+(popsize-1)*rand());r2=round(1+(popsize-1)*rand());ifr1~=r2band=0;endendifrand()<0.5val=0;elseval=1;endv(r,:)=best_x+(Positions(r1,:)-((-1)^val)*Positions(r2,:))/2;%Section2.2.4,Strategy4:Eq.6end%Returnbackthesearchagentsthatgobeyondtheboundariesofthesearchspace.Flag4ub=v(r,:)>ub;Flag4lb=v(r,:)<lb;v(r,:)=(v(r,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;%EvaluatenewsolutionsFnew=sum(v(r,:).^2);%UpdateifthesolutionimprovesifFnew<=Fitness(r)Positions(r,:)=v(r,:);Fitness(r)=Fnew;endifFnew<=best_scorebest_x=v(r,:);best_score=Fnew;endendcurve(t)=best_score;[worst_score,~]=max(Fitness);fori=1:size(Fitness,2)survival(i)=(worst_score-Fitness(i))/(worst_score-best_score);endend%======结束优化===============%%进化曲线figuresemilogy(curve,'Color','r','LineWidth',2)gridontitle('收敛曲线')xlabel('迭代次数');ylabel('最佳适应度');axistightlegend('DOA')display(['最优解:',num2str(best_x)]);display(['最小值:',num2str(best_score)]);end

3.2 结果

基于Matlab怎么实现野狗优化算法

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:基于Matlab怎么实现野狗优化算法的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Springboot怎么连接远程服务器上的数据库下一篇:

8 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18