【麻雀搜索算法】基于Sine混沌麻雀搜索算法求解单目标优化问题matlab代码
【麻雀搜索算法】基于Sine混沌麻雀搜索算法求解单目标优化问题matlab代码
TT_Matlab
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。
1 简介
2 部分代码
%_________________________________________________________________________%
%
麻雀优化算法 %
%_________________________________________________________________________%
function
[Best_pos,Best_score,curve]=SSA(pop,Max_iter,lb,ub,dim,fobj)
ST
=
0.6;%预警值
PD
=
0.7;%发现者的比列,剩下的是加入者
SD
=
0.2;%意识到有危险麻雀的比重
PDNumber
=
round(pop*PD); %发现者数量
SDNumber
=
round(pop*SD);%意识到有危险麻雀数量
if(max(size(ub))
=
= 1)
ub
=
ub.*ones(1,dim);
lb
=
lb.*ones(1,dim);
end
%种群初始化
X0
=
initialization(pop,dim,ub,lb);
X
=
X0;
%计算初始适应度值
fitness
=
zeros(1,pop);
for
i = 1:pop
fitness(i)
=
fobj(X(i,:));
end
[fitness,
index]= sort(fitness);%排序
BestF
=
fitness(1);
WorstF
=
fitness(end);
GBestF
=
fitness(1);%全局最优适应度值
for
i = 1:pop
X(i,
:
) = X0(index(i),:);
end
curve
=
zeros(1,Max_iter);
GBestX
=
X(1,:);%全局最优位置
X_new
=
X;
for
i = 1: Max_iter
BestF
=
fitness(1);
WorstF
=
fitness(end);
R2
=
rand(1);
for
j = 1:PDNumber
if(R2<ST)
X_new(j,
:
) = X(j,:).*exp(-j/(rand(1)*Max_iter));
else
X_new(j,
:
) = X(j,:) + randn()*ones(1,dim);
end
end
for
j = PDNumber+1:pop
%
if(j>(pop/2))
if(j>(pop
- PDNumber)/2 + PDNumber)
X_new(j,
:
)= randn().*exp((X(end,:) - X(j,:))/j^2);
else
%产生-1,1的随机数
A
=
ones(1,dim);
for
a = 1:dim
if(rand()>0.5)
A(a)
=
-1;
end
end
AA
=
A’*inv(A*A’);
X_new(j,
:
)= X(1,:) + abs(X(j,:) - X(1,:)).*AA’;
end
end
Temp
=
randperm(pop);
SDchooseIndex
=
Temp(1:SDNumber);
for
j = 1:SDNumber
if(fitness(SDchooseIndex(j))>BestF)
X_new(SDchooseIndex(j),
:
) = X(1,:) + randn().*abs(X(SDchooseIndex(j),:) - X(1,:));
elseif(fitness(SDchooseIndex(j))
=
= BestF)
K
=
2*rand() -1;
X_new(SDchooseIndex(j),
:
) = X(SDchooseIndex(j),:) + K.*(abs( X(SDchooseIndex(j),:) - X(end,:))./(fitness(SDchooseIndex(j)) - fitness(end) + 10^-8));
end
end
%边界控制
for
j = 1:pop
for
a = 1: dim
if(X_new(j,a)>ub(a))
X_new(j,a)
=
ub(a);
end
if(X_new(j,a)<lb(a))
X_new(j,a)
=
lb(a);
end
end
end
%更新位置
for
j=1:pop
fitness_new(j)
=
fobj(X_new(j,:));
end
for
j = 1:pop
if(fitness_new(j)
< GBestF)
GBestF
=
fitness_new(j);
GBestX
=
X_new(j,:);
end
end
X
=
X_new;
fitness
=
fitness_new;
%排序更新
[fitness,
index]= sort(fitness);%排序
BestF
=
fitness(1);
WorstF
=
fitness(end);
for
j = 1:pop
X(j,
:
) = X(index(j),:);
end
curve(i)
=
GBestF;
end
Best_pos
=
GBestX;
Best_score
=
curve(end);
end
3 仿真结果
4 参考文献
[1]汤安迪, 韩统, 徐登武,等. 基于等级制度和布朗运动的混沌麻雀搜索算法[J]. 空军工程大学学报:自然科学版, 2021, 22(3):8.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
-
2023年血糖新标准公布,不是3.9-6.1,快来看看你的血糖正常吗? 2023-02-07
-
2023年各省最新电价一览!8省中午执行谷段电价! 2023-01-03
-
GB 55009-2021《燃气工程项目规范》(含条文说明),2022年1月1日起实施 2021-11-07
-
PPT导出高分辨率图片的四种方法 2022-09-22
-
2023年最新!国家电网27家省级电力公司负责人大盘点 2023-03-14
-
全国消防救援总队主官及简历(2023.2) 2023-02-10
-
盘点 l 中国石油大庆油田现任领导班子 2023-02-28
-
我们的前辈!历届全国工程勘察设计大师完整名单! 2022-11-18
-
关于某送变电公司“4·22”人身死亡事故的快报 2022-04-26
