锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

(含源码)麻雀搜索算法(SSA)的原理和matlab实现

时间:2023-04-10 14:37:00 电感式接近传感器ssa

一、算法原理

研究表明,圈养麻雀有两种不同类型:发现者和加入者。发现者负责在种群中寻找食物,并为整个麻雀种群提供觅食区域和方向,而加入者则利用发现者获取食物。在生活中,如果我们仔细观察,我们会发现当群体中的麻雀发现周围有捕食者时,群体中的一个或多个人会发出唧唧喳喳的声音。一旦发出这样的声音,整个群体将立即避免危险,然后飞往其他安全区域觅食。这种麻雀被称为警觉者。

麻雀搜索算法是利用麻雀的生物特性迭代优化算法。

警觉位置更新策略如下:

二、测试函数

1.Sphere函数

x的值范围为[-5.12,5.最优解在[02] 0...0]最优值为0。

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

2.Griewank函数

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

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

3.Rosenbrock函数

x的取值范围[-5,10],最优解[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

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

5.Rastrign函数

x的值范围为[-5.12,5.最优解在[02] 0...0]最优值为0。

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

三、matlab部分代码

%% 清理内存空间 clc clear close all %% 设置麻雀参数 index1=input(1)-Sphere,2-Griewank,3-Rosenbrock,4-Ackley,5-Rastrign'); pop_num=200;%麻雀数量 dim=2;%问题的维度/决策变量的数量 [x_min,x_max]=set_pop(index1,dim);设置粒子位置%,速度上下限 fitness=zeros(1,pop_num);各麻雀适应度函数值% %% 设置算法参数 ST=0.8;%设置安全阈值 PD_num=0.2*pop_num;%发现者数量 SD_num=0.1*pop_num;%警觉人数 it_max=50;%最大迭代次数 it=1; %% 初始化种群 x=(x_max-x_min).*rand(pop_num,dim) x_min;随机初始化麻雀的位置% x_worst=zeros(dim,it_max);全局最差位置% x_best=zeros(dim,it_max);全局最优位置% Xp=zeros(dim,it_max);发现者占据的最佳位置% fitness_worst=-inf;全局最差的适应度值% fitness_best=inf;全球最佳适应度值% history=zeros(1,it_max);%历史最佳适应度值 %% 作为警察的麻雀初始化 perm=randperm(pop_num); SD=perm(1:SD_num); %% 迭代求最优解 while it<=it_max     更新种群     it=it 1; end figure(2) plot(1:it_max,history) xlabel(‘迭代次数’) ylabel(最优适应度函数)

四、测试结果

假设每个函数都是二维的,你可以用平面坐标表示麻雀的位置,进一步用图形直观地显示麻雀搜索算法的迭代,因为在迭代后期(即迭代次数大于总迭代次数的一半),适应性低的加入者将实施随机搜索策略,以避免局部最佳,因此并非所有麻雀都会跑到最佳位置。五个测试函数的迭代如下:

1.Sphere函数

2.Griewank函数

3.Rosenbrock函数

4.Ackley函数

5.Rastrign函数

结果表明,麻雀搜索算法可以迭代上述五个测试函数以获得最优解。

完整代码:麻雀搜索算法(SSA)的原理和matlab实现

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章