🙉

Index Al (4)万有引力搜索算法

万有引力搜索算法(Universal Gravitational Search Algorithm)是一种基于模拟自然界物体间引力相互作用的元启发式优化算法。该算法模拟了物体之间的引力和相互吸引力,并通过迭代过程寻找全局最优解。
以下是万有引力搜索算法的基本步骤:
  1. 初始化种群:根据问题的特点和要求,初始化一定数量的个体,称为粒子或代理。每个个体代表问题的一个潜在解决方案。
  1. 计算适应度:对于每个个体,通过适应度函数计算其适应度值。适应度函数根据问题的特点而定,可以是要最大化或最小化的目标函数。
  1. 更新个体:这一块就是根据万有引力算法的公式进行更新(公众号打公式太难受了,小伙伴们随便去知网找一篇GSA的文章都有介绍,我这块就不写了)
  1. 更新适应度:更新每个个体的适应度值。
  1. 判断停止条件:根据预定义的停止条件(例如达到最大迭代次数或适应度阈值),判断是否终止算法。
  1. 重复步骤3到步骤5,直到满足停止条件。
  1. 输出结果:根据停止条件确定的最佳个体即为算法的最优解

代码实现

function [Fbest,Lbest,BestChart,MeanChart]=GSA(F_index,N,max_it,ElitistCheck,min_flag,Rpower) %V: Velocity. %a: Acceleration. %M: Mass. Ma=Mp=Mi=M; %dim: Dimension of the test function. %N: Number of agents. %X: Position of agents. dim-by-N matrix. %R: Distance between agents in search space. %[low-up]: Allowable range for search space. %Rnorm: Norm in eq.8. %Rpower: Power of R in eq.7. Rnorm=2; %get allowable range and dimension of the test function. [low,up,dim]=test_functions_range(F_index); %random initialization for agents. X=initialization(dim,N,up,low); %create the best so far chart and average fitnesses chart. BestChart=[];MeanChart=[]; V=zeros(N,dim); for iteration=1:max_it % iteration %Checking allowable range. X=space_bound(X,up,low); %Evaluation of agents. fitness=evaluateF(X,F_index); if min_flag==1 [best best_X]=min(fitness); %minimization. else [best best_X]=max(fitness); %maximization. end if iteration==1 Fbest=best;Lbest=X(best_X,:); end if min_flag==1 if best<Fbest %minimization. Fbest=best;Lbest=X(best_X,:); end else if best>Fbest %maximization Fbest=best;Lbest=X(best_X,:); end end BestChart=[BestChart Fbest]; MeanChart=[MeanChart mean(fitness)]; %Calculation of M. eq.14-20 [M]=massCalculation(fitness,min_flag); %Calculation of Gravitational constant. eq.13. G=Gconstant(iteration,max_it); %Calculation of accelaration in gravitational field. eq.7-10,21. a=Gfield(M,X,G,Rnorm,Rpower,ElitistCheck,iteration,max_it); %Agent movement. eq.11-12 [X,V]=move(X,a,V); end %iteration
notion image