一、简介
万有引力搜索算法(Gravitational Search Algorithm,GSA)是由伊朗克曼大学的Esmat Rashedi等人于2009年所提出的一种新的启发式优化算法,其源于对物理学中的万有引力进行模拟产生的群体智能优化算法。万有引力搜索算法GSA的原理是通过将搜索粒子看作一组在空间运行的物体,物体间通过万有引力相互作用吸引,物体的运行遵循动力学的规律。适度值较大的粒子其惯性质量越大,因此万有引力会促使物体们朝着质量最大的物体移动,从而逐渐逼近求出优化问题的最优解。万有引力搜索算法GSA具有较强的全局搜索能力与收敛速度。随着GSA理论研究的进展,其应用也越来越广泛,逐渐引起国内外学者的关注。但是万有引力搜索算法GSA与其他全局算法一样,存在易陷入局部解,解精度不商等问题,有很多待改进之处。本章将着重向广大编程爱好者介绍最基本的万有引力算法,各编程科研人员可以基于本章算法加以改进并应用到实际案例中。
1 惯性质量计算
2 引力计算
3 位置更新
4 参数分析
5 万有引力算法实现流程
二、源代码
% 万有引力搜索算法
clc,clear,close all
warning off
feature jit off
N=50; % 粒子数量(智能个体)
max_it=1000; % 最大迭代次数
ElitistCheck=1; % ElitistCheck: 算法执行次数选择
Rpower=1; % Rpower: 'R'的次方
min_flag=1; % 1: 求函数最小值,0:求函数最大值
F_index=1; % 带求解函数选择
[Fbest,Lbest,BestChart,MeanChart]=GSA(F_index,N,max_it,ElitistCheck,min_flag,Rpower);
% 输出:
% Fbest: 最优适应度值.
% Lbest: 最优解向量
% BestChart: 适应度变化值.
% MeanChart: 平均适应度变化值
Fbest, % 最优适应度值
Lbest, % 最优解
%% 绘制适应度曲线
figure('color',[1,1,1])
plot(BestChart,'linewidth',2),
xlabel('\fontsize{12}\bf Iteration');ylabel('\fontsize{12}\bf 最优适应度值');
legend('\fontsize{10}\bf GSA',1);
grid on
% 万有引力搜索算法
function [Fbest,Lbest,BestChart,MeanChart]=GSA(F_index,N,max_it,ElitistCheck,min_flag,Rpower)
%V: 速度
%a: 加速度
%M: 质量. Ma=Mp=Mi=M;
%dim: 待求解未知量维数
%N: 智能粒子个数
%X: 种群个体位置. dim-by-N matrix.
%R: 种群之间的距离
%[low-up]: 取值范围
%Rnorm: 范数
%Rpower: Power of R
Rnorm=2; % 2阶范数,即欧氏距离
% 获取待求解目标方程的未知数个体以及取值范围
[low,up,dim]=test_functions_range(F_index);
% 随机的初始化个体
X=initialization(dim,N,up,low);
% 适应度值数组初始化
BestChart=[];
MeanChart=[];
V=zeros(N,dim); % 速度初始化
for iteration=1:max_it % 迭代开始
% iteration
% 检查x个体是否在取值范围内
X=space_bound(X,up,low);
% 计算适应度值
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 % 极小值求解
Fbest=best;Lbest=X(best_X,:);
end
else
if best>Fbest % 极大值求解
Fbest=best;Lbest=X(best_X,:);
end
三、运行结果
四、备注
版本:2014a