正弦余弦算法(Sine Cosine Algorithm, SCA)
正弦余弦算法(SCA)是一种基于基于正弦和余弦函数的种群优化算法。SCA具有独特的数学模型和非常有竞争力的结果,并且对于许多问题具有快速收敛性,特别是对于现实世界的案例,得到了广泛应用。
正弦余弦算法的数学模型
下图展示了在[−2,2]范围内的正弦和余弦函数影响的概念模型。该图显示了如何改变正弦和余弦函数的范围需要一个解决方案来更新其自身和另一个解决方案之间的空间内外的位置。
正弦余弦算法的伪代码
正弦余弦算法的主程序
% Sine Cosine Algorithm (SCA)
% Reference:SCA: A Sine Cosine Algorithm for solving optimization problems
% Code by Luzhenhui Yangtze University
function [Destination_fitness,Destination_position,Convergence_curve]=SCA(N,Max_iteration,lb,ub,dim,fobj)
% 输出
% Destination_fitness:最优值或最优适应度值
% Destination_position:最优值所对应的个体位置信息
% Convergence_curve:每一次迭代的最优值,后期用于迭代曲线的绘制
% 输入
% N:算法种群个体数目
% Max_iteration:算法最大迭代次数
% lb:变量取值范围的下界
% ub:变量取值范围的上界
% dim:变量的维度
% fobj:目标函数
% 种群个体的初始化
X=initialization(N,dim,ub,lb);
% 算法的初始化
Destination_position=zeros(1,dim);
Destination_fitness=inf;
Convergence_curve=zeros(1,Max_iteration);
Objective_values = zeros(1,size(X,1));
% 确定初始种群的最优值及其相对应的最优个体
for i=1:size(X,1)
Objective_values(1,i)=fobj(X(i,:));
if i==1
Destination_position=X(i,:);
Destination_fitness=Objective_values(1,i);
elseif Objective_values(1,i)<Destination_fitness
Destination_position=X(i,:);
Destination_fitness=Objective_values(1,i);
end
All_objective_values(1,i)=Objective_values(1,i);
end
% 算法的主要迭代步骤
t=2;
while t<=Max_iteration
a = 2;
Max_iteration = Max_iteration;
r1=a-t*((a)/Max_iteration); % r1从2到0线性递减,如公式(3.4)
% 更新种群个体
for i=1:size(X,1)
for j=1:size(X,2)
r2=(2*pi)*rand();
r3=2*rand;
r4=rand();
if r4<0.5
X(i,j)= X(i,j)+(r1*sin(r2)*abs(r3*Destination_position(j)-X(i,j))); % 公式(3.1)
else
X(i,j)= X(i,j)+(r1*cos(r2)*abs(r3*Destination_position(j)-X(i,j))); % 公式(3.2)
end
end
end
for i=1:size(X,1)
% 边界处理
Flag4ub=X(i,:)>ub;
Flag4lb=X(i,:)<lb;
X(i,:)=(X(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
Objective_values(1,i)=fobj(X(i,:)); % 计算更新后个体的适应度值
if Objective_values(1,i)<Destination_fitness
Destination_position=X(i,:);
Destination_fitness=Objective_values(1,i);
end
end
Convergence_curve(t)=Destination_fitness;
t=t+1;
end
该博客主要分享SCA算法的代码,并带有中英文注释!
分享不易,喜欢的请大家点赞加收藏,谢谢!