1 简介
2009 年伊朗的克曼大学教授 Esmat Rashedi 等人提出了引力搜索算法[5(] Gravitational Search Algorithm),该算法是基于牛顿万有引力定律:“在宇宙间,每一个粒子由于万有引力的作用而彼此相互吸引,这力的大小与粒子的质量成正比,与他们之间的距离成反比”。
2 部分代码
% GSA code v1.0.
% Generated by Esmat Rashedi, 2009.
% Adopted from: " E. Rashedi, H. Nezamabadi-pour and S. Saryazdi,
% 揋SA: A Gravitational Search Algorithm? Information sciences, vol. 179,
% no. 13, pp. 2232-2248, 2009."
% Gravitational Search Algorithm.
function [Fbest,Lbest,BestChart,MeanChart]=GSA(F_index,N,max_it,ElitistCheck)
%V: Velocity.
%a: Acceleration.
%M: Mass. Ma=Mp=Mi=M;
%dim: Dimension of 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;
Rpower=1;
min_flag=1; % 1: minimization, 0: maximization
%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 chart of best so far and average fitnesses.
BestChart=[];MeanChart=[];
V=zeros(dim,N);
for iteration=1:max_it
% iteration
%Checking allowable range.
X=space_bound(X,up,low);
%Evaluation of agents.
fitness=evaluateF(X,F_index);
[best best_X]=min(fitness); %min: minimization. max: maximization.
if iteration==1
Fbest=best;Lbest=X(:,best_X);
end
if best<Fbest % < : minimization. > : maximization
Fbest=best;Lbest=X(:,best_X);
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
3 仿真结果
4 参考文献
[1]陈功贵等. "基于改进引力搜索算法的无功优化仿真研究." 实验技术与管理 33.5(2016):5.