【优化算法】蝗虫优化算法(GOA)【含Matlab源码 936期】
2021/6/20 17:22:36
本文主要是介绍【优化算法】蝗虫优化算法(GOA)【含Matlab源码 936期】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、简介
1 GOA数学模型
2 GOA迭代模型
3 GOA算法的基本流程
4 GOA缺点
二、源代码
clear all clc SearchAgents_no=100; % Number of search agents 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 iterations % Load details of the selected benchmark function [lb,ub,dim,fobj]=Get_Functions_details(Function_name); [Target_score,Target_pos,GOA_cg_curve, Trajectories,fitness_history, position_history]=GOA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj); figure('Position',[454 445 894 297]) %Draw search space subplot(1,5,1); func_plot(Function_name); title('Parameter space') xlabel('x_1'); ylabel('x_2'); zlabel([Function_name,'( x_1 , x_2 )']) box on axis tight subplot(1,5,2); hold on for k1 = 1: size(position_history,1) for k2 = 1: size(position_history,2) plot(position_history(k1,k2,1),position_history(k1,k2,2),'.','markersize',1,'MarkerEdgeColor','k','markerfacecolor','k'); end end plot(Target_pos(1),Target_pos(2),'.','markersize',10,'MarkerEdgeColor','r','markerfacecolor','r'); title('Search history (x1 and x2 only)') xlabel('x1') ylabel('x2') box on axis tight subplot(1,5,3); hold on plot(Trajectories(1,:)); title('Trajectory of 1st grasshopper') xlabel('Iteration#') box on axis tight subplot(1,5,4); hold on plot(mean(fitness_history)); title('Average fitness of all grasshoppers') xlabel('Iteration#') box on axis tight %Draw objective space subplot(1,5,5); semilogy(GOA_cg_curve,'Color','r') title('Convergence curve') xlabel('Iteration#'); ylabel('Best score obtained so far'); box on axis tight set(gcf, 'position' , [39 479 1727 267]); display(['The best solution obtained by GOA is : ', num2str(Target_pos)]); display(['The best optimal value of the objective funciton found by GOA is : ', num2str(Target_score)]); function [TargetFitness,TargetPosition,Convergence_curve,Trajectories,fitness_history, position_history]=GOA(N, Max_iter, lb,ub, dim, fobj) disp('GOA is now estimating the global optimum for your problem....') flag=0; if size(ub,1)==1 ub=ones(dim,1)*ub; lb=ones(dim,1)*lb; end if (rem(dim,2)~=0) % this algorithm should be run with a even number of variables. This line is to handle odd number of variables dim = dim+1; ub = [ub; 100]; lb = [lb; -100]; flag=1; end %Initialize the population of grasshoppers GrassHopperPositions=initialization(N,dim,ub,lb); GrassHopperFitness = zeros(1,N); fitness_history=zeros(N,Max_iter); position_history=zeros(N,Max_iter,dim); Convergence_curve=zeros(1,Max_iter); Trajectories=zeros(N,Max_iter); cMax=1; cMin=0.00004; %Calculate the fitness of initial grasshoppers for i=1:size(GrassHopperPositions,1) if flag == 1 GrassHopperFitness(1,i)=fobj(GrassHopperPositions(i,1:end-1)); else GrassHopperFitness(1,i)=fobj(GrassHopperPositions(i,:)); end fitness_history(i,1)=GrassHopperFitness(1,i); position_history(i,1,:)=GrassHopperPositions(i,:); Trajectories(:,1)=GrassHopperPositions(:,1); end [sorted_fitness,sorted_indexes]=sort(GrassHopperFitness); % Find the best grasshopper (target) in the first population for newindex=1:N Sorted_grasshopper(newindex,:)=GrassHopperPositions(sorted_indexes(newindex),:); end TargetPosition=Sorted_grasshopper(1,:); TargetFitness=sorted_fitness(1); % Main loop l=2; % Start from the second iteration since the first iteration was dedicated to calculating the fitness of antlions while l<Max_iter+1 c=cMax-l*((cMax-cMin)/Max_iter); % Eq. (2.8) in the paper for i=1:size(GrassHopperPositions,1) temp= GrassHopperPositions'; for k=1:2:dim S_i=zeros(2,1); for j=1:N if i~=j Dist=distance(temp(k:k+1,j), temp(k:k+1,i)); % Calculate the distance between two grasshoppers r_ij_vec=(temp(k:k+1,j)-temp(k:k+1,i))/(Dist+eps); % xj-xi/dij in Eq. (2.7) xj_xi=2+rem(Dist,2); % |xjd - xid| in Eq. (2.7) s_ij=((ub(k:k+1) - lb(k:k+1))*c/2)*S_func(xj_xi).*r_ij_vec; % The first part inside the big bracket in Eq. (2.7) S_i=S_i+s_ij; end end S_i_total(k:k+1, :) = S_i; end X_new = c * S_i_total'+ (TargetPosition); % Eq. (2.7) in the paper GrassHopperPositions_temp(i,:)=X_new'; end % GrassHopperPositions GrassHopperPositions=GrassHopperPositions_temp; for i=1:size(GrassHopperPositions,1) % Relocate grasshoppers that go outside the search space Tp=GrassHopperPositions(i,:)>ub';Tm=GrassHopperPositions(i,:)<lb';GrassHopperPositions(i,:)=(GrassHopperPositions(i,:).*(~(Tp+Tm)))+ub'.*Tp+lb'.*Tm; % Calculating the objective values for all grasshoppers if flag == 1 GrassHopperFitness(1,i)=fobj(GrassHopperPositions(i,1:end-1)); else GrassHopperFitness(1,i)=fobj(GrassHopperPositions(i,:)); end fitness_history(i,l)=GrassHopperFitness(1,i); position_history(i,l,:)=GrassHopperPositions(i,:); Trajectories(:,l)=GrassHopperPositions(:,1);
三、运行结果
四、备注
版本:2014a
完整代码或代写加1564658423
这篇关于【优化算法】蝗虫优化算法(GOA)【含Matlab源码 936期】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20MongoDB教程:从入门到实践详解
- 2024-11-17执行 Google Ads API 查询后返回的是空数组什么原因?-icode9专业技术文章分享
- 2024-11-17google广告数据不同经理账户下的凭证可以获取对方的api数据吗?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么实现同时向多个邮箱发送邮件?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么设置header 和 标签tag 呢?-icode9专业技术文章分享
- 2024-11-12Cargo deny安装指路
- 2024-11-02MongoDB项目实战:从入门到初级应用
- 2024-11-01随时随地一键转录,Google Cloud 新模型 Chirp 2 让语音识别更上一层楼
- 2024-10-25Google Cloud动手实验详解:如何在Cloud Run上开发无服务器应用
- 2024-10-24AI ?先驱齐聚 BAAI 2024,发布大规模语言、多模态、具身、生物计算以及 FlagOpen 2.0 等 AI 模型创新成果。