基于Matlab怎么实现鲸鱼优化算法
发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,这篇文章主要介绍"基于Matlab怎么实现鲸鱼优化算法",在日常操作中,相信很多人在基于Matlab怎么实现鲸鱼优化算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"基
千家信息网最后更新 2025年02月22日基于Matlab怎么实现鲸鱼优化算法
这篇文章主要介绍"基于Matlab怎么实现鲸鱼优化算法",在日常操作中,相信很多人在基于Matlab怎么实现鲸鱼优化算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"基于Matlab怎么实现鲸鱼优化算法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1.鲸鱼优化算法建模
鲸鱼优化算法(WOA)是澳大利亚学者Mirjaili等于2016年提出的群体智能优化算法,根据座头鲸的捕猎行为实现优化搜索的目的。其中,每个鲸鱼可以看作一个粒子,每个粒子作为不同的决策变量。WOA的实现过程主要包括包围猎物、螺旋狩猎和随机搜索3个阶段,其数学模型如下:
1.1 包围猎物
1.2 螺旋狩猎
1.3 搜索猎物
1.4 算法流程图
2.Matlab代码实现
2.1 结果
2.2 代码
clear all clc SearchAgents_no=30;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; % Maximum numbef of iterationsMax_iteration=500;% Load details of the selected benchmark function[lb,ub,dim,fobj]=Get_Functions_details(Function_name); [Best_score,Best_pos,WOABAT_cg_curve]=WOABAT(SearchAgents_no,Max_iteration,lb,ub,dim,fobj); figure('Position',[269 240 660 290]) %Draw search space subplot(1,2,1); func_plot(Function_name); title('Parameter space') xlabel('x_1'); ylabel('x_2'); zlabel([Function_name,'( x_1 , x_2 )']) %Draw objective space subplot(1,2,2); semilogy(WOABAT_cg_curve,'Color','r') title('Objective space') xlabel('Iteration'); ylabel('Best score obtained so far'); axis tight grid on box on legend('WOABAT')%display(['The best solution obtained by WOABAT is : ', num2str(Best_pos)]); display(['The best optimal value of the objective funciton found by WOA is : ', num2str(Best_score)]); %display( num2str(Best_score));
% The Whale Optimization Algorithmfunction [Leader_score,Leader_pos,Convergence_curve]=WOABAT(SearchAgents_no,Max_iter,lb,ub,dim,fobj) % initialize position vector and score for the leaderLeader_pos=zeros(1,dim);Leader_score=inf; %change this to -inf for maximization problems %Initialize the positions of search agentsPositions=initialization(SearchAgents_no,dim,ub,lb); Convergence_curve=zeros(1,Max_iter); %bat algorithm additionQmin=0; % Frequency minimumQmax=2; % Frequency maximumQ=zeros(SearchAgents_no,1); % Frequencyv=zeros(SearchAgents_no,dim); % Velocitiesr=0.5;A1=0.5;t=0;% Loop counter% summ=0;% Main loopwhile tub; Flag4lb=Positions(i,:) for maximization problem Leader_score=fitness; % Update alpha Leader_pos=Positions(i,:); end end a=2-t*((2)/Max_iter); % a decreases linearly fron 2 to 0 in Eq. (2.3) % a2 linearly dicreases from -1 to -2 to calculate t in Eq. (3.12) a2=-1+t*((-1)/Max_iter); % Update the Position of search agents for i=1:size(Positions,1) r1=rand(); % r1 is a random number in [0,1] r2=rand(); % r2 is a random number in [0,1] A=2*a*r1-a; C=2*r2; b=1; l=(a2-1)*rand+1; p = rand(); for j=1:size(Positions,2) if p<0.5 if abs(A)>=1 rand_leader_index = floor(SearchAgents_no*rand()+1); X_rand = Positions(rand_leader_index, :); Q(i)=Qmin+(Qmin-Qmax)*rand; v(i,:)=v(i,j)+(X_rand(j)-Leader_pos(j))*Q(i); z(i,:)= Positions(i,:)+ v(i,:); %%%% problem if rand>r % The factor 0.001 limits the step sizes of random walks z (i,:)=Leader_pos(j)+0.001*randn(1,dim); end % Evaluate new solutions Fnew=fobj(z(i,:)); % Update if the solution improves, or not too loud if (Fnew<=fitness) && (rand
r % The factor 0.001 limits the step sizes of random walks z (i,:)=Leader_pos(j)+0.001*randn(1,dim); end % Evaluate new solutions Fnew=fobj(z(i,:)); % Update if the solution improves, or not too loud if (Fnew<=fitness) && (rand =0.5 distance2Leader=abs(Leader_pos(j)-Positions(i,j)); % Eq. (2.5) Positions(i,j)=distance2Leader*exp(b.*l).*cos(l.*2*pi)+Leader_pos(j); end end end t=t+1; Convergence_curve(t)=Leader_score; [t Leader_score] end
% This function draw the benchmark functionsfunction func_plot(func_name) [lb,ub,dim,fobj]=Get_Functions_details(func_name); switch func_name case 'F1' x=-100:2:100; y=x; %[-100,100] case 'F2' x=-100:2:100; y=x; %[-10,10] case 'F3' x=-100:2:100; y=x; %[-100,100] case 'F4' x=-100:2:100; y=x; %[-100,100] case 'F5' x=-200:2:200; y=x; %[-5,5] case 'F6' x=-100:2:100; y=x; %[-100,100] case 'F7' x=-1:0.03:1; y=x %[-1,1] case 'F8' x=-500:10:500;y=x; %[-500,500] case 'F9' x=-5:0.1:5; y=x; %[-5,5] case 'F10' x=-20:0.5:20; y=x;%[-500,500] case 'F11' x=-500:10:500; y=x;%[-0.5,0.5] case 'F12' x=-10:0.1:10; y=x;%[-pi,pi] case 'F13' x=-5:0.08:5; y=x;%[-3,1] case 'F14' x=-100:2:100; y=x;%[-100,100] case 'F15' x=-5:0.1:5; y=x;%[-5,5] case 'F16' x=-1:0.01:1; y=x;%[-5,5] case 'F17' x=-5:0.1:5; y=x;%[-5,5] case 'F18' x=-5:0.06:5; y=x;%[-5,5] case 'F19' x=-5:0.1:5; y=x;%[-5,5] case 'F20' x=-5:0.1:5; y=x;%[-5,5] case 'F21' x=-5:0.1:5; y=x;%[-5,5] case 'F22' x=-5:0.1:5; y=x;%[-5,5] case 'F23' x=-5:0.1:5; y=x;%[-5,5] end L=length(x);f=[]; for i=1:L for j=1:L if strcmp(func_name,'F15')==0 && strcmp(func_name,'F19')==0 && strcmp(func_name,'F20')==0 && strcmp(func_name,'F21')==0 && strcmp(func_name,'F22')==0 && strcmp(func_name,'F23')==0 f(i,j)=fobj([x(i),y(j)]); end if strcmp(func_name,'F15')==1 f(i,j)=fobj([x(i),y(j),0,0]); end if strcmp(func_name,'F19')==1 f(i,j)=fobj([x(i),y(j),0]); end if strcmp(func_name,'F20')==1 f(i,j)=fobj([x(i),y(j),0,0,0,0]); end if strcmp(func_name,'F21')==1 || strcmp(func_name,'F22')==1 ||strcmp(func_name,'F23')==1 f(i,j)=fobj([x(i),y(j),0,0]); end endend surfc(x,y,f,'LineStyle','none'); end
function [lb,ub,dim,fobj] = Get_Functions_details(F) switch F case 'F1' fobj = @F1; lb=-100; ub=100;% dim=30; dim=30; case 'F2' fobj = @F2; lb=-10; ub=10; dim=30; case 'F3' fobj = @F3; lb=-100; ub=100; dim=30; case 'F4' fobj = @F4; lb=-100; ub=100; dim=30; case 'F5' fobj = @F5; lb=-30; ub=30; dim=30; case 'F6' fobj = @F6; lb=-100; ub=100; dim=30; case 'F7' fobj = @F7; lb=-1.28; ub=1.28; dim=30; case 'F8' fobj = @F8; lb=-500; ub=500; dim=30; case 'F9' fobj = @F9; lb=-5.12; ub=5.12; dim=30; case 'F10' fobj = @F10; lb=-32; ub=32; dim=30; case 'F11' fobj = @F11; lb=-600; ub=600; dim=30; case 'F12' fobj = @F12; lb=-50; ub=50; dim=30; case 'F13' fobj = @F13; lb=-50; ub=50; dim=30; case 'F14' fobj = @F14; lb=-65.536; ub=65.536; dim=2; case 'F15' fobj = @F15; lb=-5; ub=5; dim=4; case 'F16' fobj = @F16; lb=-5; ub=5; dim=2; case 'F17' fobj = @F17; lb=[-5,0]; ub=[10,15]; dim=2; case 'F18' fobj = @F18; lb=-2; ub=2; dim=2; case 'F19' fobj = @F19; lb=0; ub=1; dim=3; case 'F20' fobj = @F20; lb=0; ub=1; dim=6; case 'F21' fobj = @F21; lb=0; ub=10; dim=4; case 'F22' fobj = @F22; lb=0; ub=10; dim=4; case 'F23' fobj = @F23; lb=0; ub=10; dim=4; end end % F1 function o = F1(x)o=sum(x.^2);end % F2 function o = F2(x)o=sum(abs(x))+prod(abs(x));end % F3 function o = F3(x)dim=size(x,2);o=0;for i=1:dim o=o+sum(x(1:i))^2;endend % F4 function o = F4(x)o=max(abs(x));end % F5 function o = F5(x)dim=size(x,2);o=sum(100*(x(2:dim)-(x(1:dim-1).^2)).^2+(x(1:dim-1)-1).^2);end % F6 function o = F6(x)o=sum(abs((x+.5)).^2);end % F7 function o = F7(x)dim=size(x,2);o=sum([1:dim].*(x.^4))+rand;end % F8 function o = F8(x)o=sum(-x.*sin(sqrt(abs(x))));end % F9 function o = F9(x)dim=size(x,2);o=sum(x.^2-10*cos(2*pi.*x))+10*dim;end % F10 function o = F10(x)dim=size(x,2);o=-20*exp(-.2*sqrt(sum(x.^2)/dim))-exp(sum(cos(2*pi.*x))/dim)+20+exp(1);end % F11 function o = F11(x)dim=size(x,2);o=sum(x.^2)/4000-prod(cos(x./sqrt([1:dim])))+1;end % F12 function o = F12(x)dim=size(x,2);o=(pi/dim)*(10*((sin(pi*(1+(x(1)+1)/4)))^2)+sum((((x(1:dim-1)+1)./4).^2).*...(1+10.*((sin(pi.*(1+(x(2:dim)+1)./4)))).^2))+((x(dim)+1)/4)^2)+sum(Ufun(x,10,100,4));end % F13 function o = F13(x)dim=size(x,2);o=.1*((sin(3*pi*x(1)))^2+sum((x(1:dim-1)-1).^2.*(1+(sin(3.*pi.*x(2:dim))).^2))+...((x(dim)-1)^2)*(1+(sin(2*pi*x(dim)))^2))+sum(Ufun(x,5,100,4));end % F14 function o = F14(x)aS=[-32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32 -32 -16 0 16 32;,...-32 -32 -32 -32 -32 -16 -16 -16 -16 -16 0 0 0 0 0 16 16 16 16 16 32 32 32 32 32]; for j=1:25 bS(j)=sum((x'-aS(:,j)).^6);endo=(1/500+sum(1./([1:25]+bS))).^(-1);end% F15function o = F15(x)aK=[.1957 .1947 .1735 .16 .0844 .0627 .0456 .0342 .0323 .0235 .0246];bK=[.25 .5 1 2 4 6 8 10 12 14 16];bK=1./bK;o=sum((aK-((x(1).*(bK.^2+x(2).*bK))./(bK.^2+x(3).*bK+x(4)))).^2);end% F16function o = F16(x)o=4*(x(1)^2)-2.1*(x(1)^4)+(x(1)^6)/3+x(1)*x(2)-4*(x(2)^2)+4*(x(2)^4);end% F17function o = F17(x)o=(x(2)-(x(1)^2)*5.1/(4*(pi^2))+5/pi*x(1)-6)^2+10*(1-1/(8*pi))*cos(x(1))+10;end% F18function o = F18(x)o=(1+(x(1)+x(2)+1)^2*(19-14*x(1)+3*(x(1)^2)-14*x(2)+6*x(1)*x(2)+3*x(2)^2))*... (30+(2*x(1)-3*x(2))^2*(18-32*x(1)+12*(x(1)^2)+48*x(2)-36*x(1)*x(2)+27*(x(2)^2)));end% F19function o = F19(x)aH=[3 10 30;.1 10 35;3 10 30;.1 10 35];cH=[1 1.2 3 3.2];pH=[.3689 .117 .2673;.4699 .4387 .747;.1091 .8732 .5547;.03815 .5743 .8828];o=0;for i=1:4 o=o-cH(i)*exp(-(sum(aH(i,:).*((x-pH(i,:)).^2))));endend% F20function o = F20(x)aH=[10 3 17 3.5 1.7 8;.05 10 17 .1 8 14;3 3.5 1.7 10 17 8;17 8 .05 10 .1 14];cH=[1 1.2 3 3.2];pH=[.1312 .1696 .5569 .0124 .8283 .5886;.2329 .4135 .8307 .3736 .1004 .9991;....2348 .1415 .3522 .2883 .3047 .6650;.4047 .8828 .8732 .5743 .1091 .0381];o=0;for i=1:4 o=o-cH(i)*exp(-(sum(aH(i,:).*((x-pH(i,:)).^2))));endend% F21function o = F21(x)aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];o=0;for i=1:5 o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);endend % F22 function o = F22(x)aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5]; o=0;for i=1:7 o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);endend% F23function o = F23(x)aSH=[4 4 4 4;1 1 1 1;8 8 8 8;6 6 6 6;3 7 3 7;2 9 2 9;5 5 3 3;8 1 8 1;6 2 6 2;7 3.6 7 3.6];cSH=[.1 .2 .2 .4 .4 .6 .3 .7 .5 .5];o=0;for i=1:10 o=o-((x-aSH(i,:))*(x-aSH(i,:))'+cSH(i))^(-1);endend function o=Ufun(x,a,k,m)o=k.*((x-a).^m).*(x>a)+k.*((-x-a).^m).*(x<(-a));end
% This function initialize the first population of search agentsfunction Positions=initialization(SearchAgents_no,dim,ub,lb) Boundary_no= size(ub,2); % numnber of boundaries % If the boundaries of all variables are equal and user enter a single% number for both ub and lbif Boundary_no==1 Positions=rand(SearchAgents_no,dim).*(ub-lb)+lb;end % If each variable has a different lb and ubif Boundary_no>1 for i=1:dim ub_i=ub(i); lb_i=lb(i); Positions(:,i)=rand(SearchAgents_no,1).*(ub_i-lb_i)+lb_i; endend
到此,关于"基于Matlab怎么实现鲸鱼优化算法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
算法
鲸鱼
学习
猎物
搜索
代码
更多
粒子
螺旋
帮助
狩猎
不同
实用
接下来
变量
学者
数学
文章
方法
智能
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
我的世界服务器击杀提示指令
浙江服务器电源大概多少钱
女孩学计算机网络技术
软件开发人员国家资质认证
对华为云软件开发的认知
数据库加密技术的简介
网络技术网络交换
安徽超频服务器技术参数
科技助农互联网先行
域名导航软件开发
乾县教育局网络安全
新手怎么学计算机网络技术
如何查看orcle数据库版本
晶旦互联网科技上海
辽宁信息化软件开发创意
软件开发工程师怎么学
smtp服务器端口国内
数据库技术三级好过吗
数据库sql学生管理题
qq怎么设置网络和服务器
少年西游记服务器可以删除吗
安徽量化积分管理软件开发公司
网络安全性设计百度文库
宁波软件开发项目管理
网络安全2020软考
港行ps4pro怎么连接服务器
千兆独享服务器
网络安全事件种类
服务器分配多少平方合适
潮州app软件开发生产厂家