正弦余弦算法(Sine Cosine Algorithm, SCA)

正弦余弦算法(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算法的代码,并带有中英文注释!
分享不易,喜欢的请大家点赞加收藏,谢谢!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值