【智能优化算法】基于融合Sin混沌和分段权值的阿基米德优化算法(SAOA) 求解单目标优化问题附matlab代码
【智能优化算法】基于融合Sin混沌和分段权值的阿基米德优化算法(SAOA) 求解单目标优化问题附matlab代码
TT_Matlab
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。
1 简介
针对阿基米德优化算法(Archimedes Optimization Algorithm,AOA)存在全局搜索能力弱、收敛精度低,易陷入局部最优等问题,提出融合Sin混沌和分段权值的阿基米德优化算法(SAOA)。首先,采用无限折叠迭代的Sin混沌反向学习策略初始化种群,提高初始阶段解的质量,为全局搜索多样性奠定基础;其次,引入算数交叉算子,将当前个体向与全局最优个体进行交叉,引导种群向最优解区域寻优,提高全局搜索能力;同时,引入分段权值策略,平衡算法的全局勘探与局部开发能力,降低算法陷入局部最优的概率;最后,通过对8个测试函数和部分CEC2014函数进行仿真实验及Wilcoxon秩和检验来评估改进算法的寻优性能,实验结果表明改进算法在搜索精度、收敛速度和稳定性等方面均有较大提升。另外,引入优化机械设计案例进行测试分析,进一步验证SAOA在工程优化问题上的可行性和适用性。
2 部分代码
function
[Xbest, Scorebest,Convergence_curve] = AOA(Materials_no,Max_iter,fobj, dim,lb,ub,C3,C4)
%
Initialization
C1
=
2;C2=6;
u
=
.9;l=.1; %paramters in Eq. (12)
X
=
lb+rand(Materials_no,dim)*(ub-lb);%initial positions Eq. (4)
den
=
rand(Materials_no,dim); % Eq. (5)
vol
=
rand(Materials_no,dim);
acc
=
lb+rand(Materials_no,dim)*(ub-lb);% Eq. (6)
for
i=1:Materials_no
Y(i)
=
fobj(X(i,:));
end
[Scorebest,
Score_index] = min(Y);
Xbest
=
X(Score_index,:);
den_best
=
den(Score_index,:);
vol_best
=
vol(Score_index,:);
acc_best
=
acc(Score_index,:);
acc_norm
=
acc;
for
t = 1:Max_iter
TF
=
exp(((t-Max_iter)/(Max_iter))); % Eq. (8)
if
TF>1
TF
=
1;
end
d
=
exp((Max_iter-t)/Max_iter)-(t/Max_iter); % Eq. (9)
acc
=
acc_norm;
r
=
rand();
for
i=1:Materials_no
den(i,
:
)=den(i,:)+r*(den_best-den(i,:)); % Eq. (7)
vol(i,
:
)=vol(i,:)+r*(vol_best-vol(i,:));
if
TF<.45%collision
mr
=
randi(Materials_no);
acc_temp(i,
:
)=(den(mr,:)+(vol(mr,:).*acc(mr,:)))./(rand*den(i,:).*vol(i,:)); % Eq. (10)
else
acc_temp(i,
:
)=(den_best+(vol_best.*acc_best))./(rand*den(i,:).*vol(i,:)); % Eq. (11)
end
end
acc_norm
=
((u*(acc_temp-min(acc_temp(:))))./(max(acc_temp(:))-min(acc_temp(:))))+l; % Eq. (12)
for
i=1:Materials_no
if
TF<.4
for
j=1:size(X,2)
mrand
=
randi(Materials_no);
Xnew(i,j)
=
X(i,j)+C1*rand*acc_norm(i,j).*(X(mrand,j)-X(i,j))*d; % Eq. (13)
end
else
for
j=1:size(X,2)
p
=
2*rand-C4; % Eq. (15)
T
=
C3*TF;
if
T>1
T
=
1;
end
if
p<.5
Xnew(i,j)
=
Xbest(j)+C2*rand*acc_norm(i,j).*(T*Xbest(j)-X(i,j))*d; % Eq. (14)
else
Xnew(i,j)
=
Xbest(j)-C2*rand*acc_norm(i,j).*(T*Xbest(j)-X(i,j))*d;
end
end
end
end
Xnew
=
fun_checkpositions(dim,Xnew,Materials_no,lb,ub);
for
i=1:Materials_no
v
=
fobj( Xnew(i,:));
if
v<Y(i)
X(i,
:
)=Xnew(i,:);
Y
(i)=v;
end
end
[var_Ybest,var_index]
=
min(Y);
Convergence_curve(t)
=
var_Ybest;
if
var_Ybest<Scorebest
Scorebest
=
var_Ybest;
Score_index
=
var_index;
Xbest
=
X(var_index,:);
den_best
=
den(Score_index,:);
vol_best
=
vol(Score_index,:);
acc_best
=
acc_norm(Score_index,:);
end
end
end
function
vec_pos=fun_checkpositions(dim,vec_pos,var_no_group,lb,ub)
Lb
=
lb*ones(1,dim);
Ub
=
ub*ones(1,dim);
for
i=1:var_no_group
isBelow1
=
vec_pos(i,:) < Lb;
isAboveMax
=
(vec_pos(i,:) > Ub);
if
isBelow1 == true
vec_pos(i,
:
) =Lb;
elseif
find(isAboveMax== true)
vec_pos(i,
:
) = Ub;
end
end
end
3 仿真结果
4 参考文献
[1]罗仕杭,何庆.融合Sin混沌和分段权值的阿基米德优化算法[J/OL].计算机工程与应用:1-12[2022-02-23].
博主简介: 擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的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
