万有引力搜索算法(GSA)的matlab实现

简介: 引力搜索算法将所有粒子当作有质量的物体,能够作无阻力运动。每个粒子会受到解空间中其它粒子的万有引力的影响,并产生加速度向质量更大的粒子运动。由于粒子的质量与粒子的适度值相关,适度值大的粒子其质量也会更大,因此,质量小的粒子在朝质量大趋近的过程中逐渐逼近优化问题中的最优解。本文基于matlab编程实现了引力搜索算法,并在5个不同的测试函数进行算法性能的测试,将迭代的过程可视化呈现。.........

参考文献:万有引力搜索算法的分析与改进_范炜锋

一、算法原理

引力搜索算法将所有粒子当作有质量的物体,能够作无阻力运动。每个粒子会受到解空间中其它粒子的万有引力的影响,并产生加速度向质量更大的粒子运动。由于粒子的质量与粒子的适度值相关,适度值大的粒子其质量也会更大,因此,质量小的粒子在朝质量大趋近的过程中逐渐逼近优化问题中的最优解。万有引力搜索算法的特点在于粒子不需要通过环境因素来感知环境中的情况,而是通过个体之间的万有引力的相互作用来实现优化信息的共享,因此,在没有环境因素的影响下,粒子也感知全局的情况,从而对环境展开搜索。

假设在一个D维搜索空间中包含N个粒子,第i个粒子的位置为:

其中表示第i个粒子在第k个维度上的位置。

1.惯性质量计算

每个粒子的惯性质量是由粒子所在位置所求得的适应值有关,在时刻t,粒子Xi的质量用Mi(t)来表示。由于惯性质量根据其相应的适应度值的大小来计算,因此,惯性质量越大的粒子表明越接近于解空间中的最优解,对其它粒子的吸引力越大。质量Mi(t)的计算公式如下:


其中表示粒子Xi的适应度函数。best(t)表示时刻 t中的最佳解,worst(t)表示时刻t中的最差解,如果是求最小值的问题,best对应粒子适应度的最小值,worst对应最大值;如果是求最大值问题,那么正好相反。

2.引力计算

在时刻t,物体j在第k维上受到物体i的引力如下:


其中: 表示一个非常小的常量; Maj(t)表示粒子j的惯性质量,而Mpi(t)表示粒子i的惯性质量。G(t)表示 t时刻的万有引力常数,会随着时间增加而会变小,计算公式如下:


Rij表示粒子i和粒子j的欧式距离,计算公式如下:


综上,在t时刻,第k个维度上作用于粒子i的合力的计算公式为:


另外,为了增强算法的收敛速度,还可以在计算粒子i受到的合力时,只考虑适应度值排名靠前粒子的影响,但这样有可能会导致算法陷入局部最优。

3.位置更新

当粒子受到其它粒子的引力作用后就会产生加速度,则粒子i在第k个维维度上获得的加速度为其作用力与惯性质量的比值:


在每一次迭代过程中,粒子根据计算得到的加速度来更新速度和位置,更新方式如下:


4.算法步骤

标准引力搜索算法的具体步骤如下:

1.初始化算法中的所有粒子的位置与加速度,并设置迭代次数与算法中的参.

数。

2.对每个粒子计算该粒子的适应值,并更新重力常数。

3.由计算得到的适应值计算每个粒子的质量,进一步计算每个粒子的加速度。

4.根据公式更新每个粒子的速度,然后更新粒子的位置。

5.如果未满足终止条件,返回步骤2;否则,输出此次算法的最优解。

二、测试函数

1.Sphere函数


其中x的取值范围为[-5.12,5.12],最优解在[0 0...0]处取得,最优值为0。

function fitness=Sphere(pop)
    %取值范围[-5.12,5.12],最优解在[0 0...0]处取得,最优值为0
    fitness=sum(pop.^2);
end

image.gif

2.Griewank函数


其中,x的取值范围在[-600,600],最优解在[0 0...0]处取得,最优值为0。

function fitness=Griewank(pop)
    %取值范围[-600,600],最优解在[0 0...0]处取得,最优值为0
    fitness=sum(pop.^2)/4000-prod(cos(pop)./sqrt(1:length(pop)))+1;
end

image.gif

3.Rosenbrock函数


其中x的取值范围[-5,10],最优解在[1 1...1]处取得,最优值为0。

function fitness=Rosenbrock(pop)
    %取值范围[-5,10],最优解在[1 1...1]处取得,最优值为0
    fitness=sum((pop(1:end-1).^2-pop(2:end)).^2+(pop(1:end-1)-1).^2);
end

image.gif

4.Ackley函数


其中x的取值范围在[-15,30],最优解在[0 0...0]处取得,最优值为0。原文中有个笔误,没有列出c的取值,c=20。

function fitness=Ackley(pop)
    %取值范围[-15,30],最优解在[0 0...0]处取得,最优值为0
    a=-0.2*sqrt(mean(pop.^2));
    b=mean(cos(20*pop));
    fitness=20+exp(1)-20*exp(a)-exp(b);
end

image.gif

5.Rastrign函数


其中x的取值范围在[-5.12,5.12],最优解在[0 0...0]处取得,最优值为0。

function fitness=Rastrign(pop)
    %取值范围[-5.12,5.12],最优解在[0 0...0]处取得,最优值为0
    fitness=sum(pop.^2-10*cos(2*pi*pop)+10);
end

image.gif

三、matlab部分代码

%% 清理内存空间
clc
clear
close all
%% 粒子参数的设定
index=input('请选择测试函数:1-Sphere,2-Griewank,3-Rosenbrock,4-Ackley,5-Rastrign');
pop_num=100;%粒子数量
dim=2;%问题的维度/决策变量的个数
[x_min,x_max,v_min,v_max]=set_pop(index,dim);%设置粒子位置,速度的上下限
iteration_num=200;%最大迭代次数
fitness=zeros(1,pop_num);%各粒子的适应度函数值
worst=zeros(1,iteration_num);%粒子的最差适应度
best=zeros(1,iteration_num);%粒子的最佳适应度
%% 初始化种群
pop=(x_max-x_min).*rand(pop_num,dim)+x_min;%随机初始化粒子位置
pop_v=zeros(pop_num,dim);%初始化粒子速度
Dij=zeros(pop_num,pop_num);%粒子i和j之间的距离
Fij=zeros(pop_num,pop_num);%粒子i和j之间的引力
F=zeros(pop_num,dim);%粒子受到的合力
Alpha=zeros(pop_num,dim);%粒子的加速度
%% 算法参数的设定
% G0:引力常量
% r:引力公式中的常量
% K:只取适应度前20%的粒子的引力
% dt:每次迭代的时间
[G0,r,K,dt]=deal(100,1,0.2,2);
iteration=1;
%% 迭代求最优解
while iteration<=iteration_num
    省略......
    iteration=iteration+1;
end
figure(2)
plot(1:iteration_num,best)
title('算法收敛情况')
xlabel('迭次次数')
ylabel('适应度函数')

image.gif

四、测试结果

测试图像中始终有一个粒子不会收敛,这是算法中设置的一个全局搜索粒子,目的是避免算法陷入局部最优。为了便于迭代过程的可视化,设定粒子的维度为2,五个测试函数的迭代结果如下:

1.Sphere函数


2.Griewank函数


3.Rosenbrock函数


4.Ackley函数


5.Rastrign函数

image.gif

结果表明,针对上面五个测试函数,采用基本的引力搜索算法就可以迭代求得最优解,而且最终所有粒子都会因引力的作用固定到全局最优的位置上。

相关文章
|
5天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
1月前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
1天前
|
算法
基于遗传优化算法的风力机位置布局matlab仿真
本项目基于遗传优化算法(GA)进行风力机位置布局的MATLAB仿真,旨在最大化风场发电效率。使用MATLAB2022A版本运行,核心代码通过迭代选择、交叉、变异等操作优化风力机布局。输出包括优化收敛曲线和最佳布局图。遗传算法模拟生物进化机制,通过初始化、选择、交叉、变异和精英保留等步骤,在复杂约束条件下找到最优布局方案,提升风场整体能源产出效率。
|
1月前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
149 68
|
1天前
|
算法 安全 机器人
基于包围盒的机械臂防碰撞算法matlab仿真
基于包围盒的机械臂防碰撞算法通过构建包围盒来近似表示机械臂及其环境中各实体的空间占用,检测包围盒是否相交以预判并规避潜在碰撞风险。该算法适用于复杂结构对象,通过细分目标对象并逐级检测,确保操作安全。系统采用MATLAB2022a开发,仿真结果显示其有效性。此技术广泛应用于机器人运动规划与控制领域,确保机器人在复杂环境中的安全作业。
|
1天前
|
机器学习/深度学习 数据采集 算法
基于WOA鲸鱼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB 2022a实现时间序列预测,采用CNN-GRU-SAM网络结构,结合鲸鱼优化算法(WOA)优化网络参数。核心代码含操作视频,运行效果无水印。算法通过卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征,全连接层整合输出。数据预处理后,使用WOA迭代优化,最终输出最优预测结果。
|
4天前
|
算法
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。
|
1月前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
2天前
|
传感器 算法
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
本项目基于遗传算法(GA)优化多机无源定位系统的GDOP,使用MATLAB2022A进行仿真。通过遗传算法的选择、交叉和变异操作,迭代优化传感器配置,最小化GDOP值,提高定位精度。仿真输出包括GDOP优化结果、遗传算法收敛曲线及三维空间坐标点分布图。核心程序实现了染色体编码、适应度评估、遗传操作等关键步骤,最终展示优化后的传感器布局及其性能。
|
4天前
|
算法 数据可视化 数据安全/隐私保护
一级倒立摆平衡控制系统MATLAB仿真,可显示倒立摆平衡动画,对比极点配置,线性二次型,PID,PI及PD五种算法
本课题基于MATLAB对一级倒立摆控制系统进行升级仿真,增加了PI、PD控制器,并对比了极点配置、线性二次型、PID、PI及PD五种算法的控制效果。通过GUI界面显示倒立摆动画和控制输出曲线,展示了不同控制器在偏转角和小车位移变化上的性能差异。理论部分介绍了倒立摆系统的力学模型,包括小车和杆的动力学方程。核心程序实现了不同控制算法的选择与仿真结果的可视化。
32 15

热门文章

最新文章