群体智能优化算法-正弦余弦算法(Sine Cosine Algorithm, SCA,含Matlab源代码)

一、文章摘要

正弦余弦算法(Sine Cosine Algorithm, SCA)是一种轻量级的群体智能优化算法,由 Seyedali Mirjalili 于 2016 年提出。该算法通过正弦函数和余弦函数引导搜索个体围绕最优解进行跳跃式移动,实现在搜索空间内的全局探索与局部开发。SCA 具有参数少、结构简洁、易于实现等优点,广泛应用于函数优化、特征选择、机器学习等领域。

二、SCA 算法详解

(1)算法思想

SCA 中,每个候选解是一个位置向量。算法以当前最优解为"目的地",通过正弦/余弦函数控制搜索个体(解)的跳跃方式向其靠近。其主要特征为:

  • 正弦函数驱动:产生向目标"靠近"或"远离"的跳跃;
  • 余弦函数驱动:产生绕目标"旋转"的跳跃;
  • 随机参数调节搜索步长,控制全局/局部平衡。

(2)核心数学模型与公式

位置更新公式(核心):

三、完整代码

Matlab 复制代码
function [Destination_fitness,Destination_position,Convergence_curve]=SCA(N,Max_iteration,lb,ub,dim,fobj)
% 正弦余弦算法(Sine Cosine Algorithm, SCA)主函数
% 输入参数说明:
% N               ------ 搜索个体数量
% Max_iteration   ------ 最大迭代次数
% lb, ub          ------ 每维变量的上下界
% dim             ------ 变量维度
% fobj            ------ 目标函数句柄
% 输出:
% Destination_fitness ------ 最优解的适应度值
% Destination_position ------ 最优解的位置
% Convergence_curve ------ 每代最优解变化曲线(用于收敛分析)

% 初始化搜索个体的位置(种群)
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
end

% 主循环开始
t = 2;  % 第一轮已完成适应度计算,从第二代开始
while t <= Max_iteration

    % 线性递减控制因子 r1(公式 3.4)
    a = 2;
    r1 = a - t * (a / Max_iteration);  % 从 2 线性减小到 0

    % 更新每个搜索个体的位置
    for i = 1:size(X,1)
        for j = 1:size(X,2)

            % 随机参数产生(用于控制正余弦方向和幅度)
            r2 = (2 * pi) * rand();  % 角度因子 [0, 2π]
            r3 = 2 * rand();         % 缩放因子 [0, 2]
            r4 = rand();             % 方向选择因子 [0, 1]

            % 位置更新公式(核心)
            if r4 < 0.5
                % 正弦跳跃(靠近或远离目标)
                X(i,j) = X(i,j) + r1 * sin(r2) * abs(r3 * Destination_position(j) - X(i,j));
            else
                % 余弦跳跃(绕目标旋转)
                X(i,j) = X(i,j) + r1 * cos(r2) * abs(r3 * Destination_position(j) - X(i,j));
            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;

    % 迭代加 1
    t = t + 1;
end
end

%% 初始化函数:为每个搜索个体随机生成一个解
function X = initialization(SearchAgents_no, dim, ub, lb)
% 输入:
%   SearchAgents_no ------ 搜索个体数量
%   dim              ------ 解的维度
%   ub, lb           ------ 上下边界(可为标量或向量)
% 输出:
%   X                ------ 初始种群位置矩阵

Boundary_no = size(ub,2);  % 边界维度

if Boundary_no == 1
    % 所有变量使用相同的上下界
    X = rand(SearchAgents_no, dim) .* (ub - lb) + lb;
else
    % 每个变量使用不同的边界
    for i = 1:dim
        ub_i = ub(i);
        lb_i = lb(i);
        X(:,i) = rand(SearchAgents_no,1) .* (ub_i - lb_i) + lb_i;
    end
end
end

四、总结

正弦余弦算法(SCA)是一种结构简单、易于实现的元启发式优化算法,凭借其独特的正弦与余弦跳跃机制,在搜索过程中实现了全局探索与局部开发的平衡。通过不断调整步长与方向,SCA 能够有效引导搜索个体趋近于全局最优解,具有收敛速度快、适应性强、参数少等优点。该算法适用于各类连续优化问题,广泛应用于函数优化、机器学习参数调优、图像处理、工程设计等多个领域,是一种通用性强、应用前景广阔的智能优化工具。

相关推荐
max5006001 小时前
基于Meta Llama的二语习得学习者行为预测计算模型
人工智能·算法·机器学习·分类·数据挖掘·llama
王哥儿聊AI2 小时前
Lynx:新一代个性化视频生成模型,单图即可生成视频,重新定义身份一致性与视觉质量
人工智能·算法·安全·机器学习·音视频·软件工程
lisw053 小时前
连接蓝牙时“无媒体信号”怎么办?
人工智能·机器学习·微服务
手握风云-4 小时前
优选算法的寻踪契合:字符串专题
算法
jie*4 小时前
小杰机器学习(nine)——支持向量机
人工智能·python·机器学习·支持向量机·回归·聚类·sklearn
闭着眼睛学算法4 小时前
【华为OD机考正在更新】2025年双机位A卷真题【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】
java·c语言·javascript·c++·python·算法·华为od
nju_spy4 小时前
南京大学 - 复杂结构数据挖掘(一)
大数据·人工智能·机器学习·数据挖掘·数据清洗·南京大学·相似性分析
IT古董4 小时前
【第五章:计算机视觉-项目实战之目标检测实战】2.目标检测实战:中国交通标志检测-(2)中国交通标志检测数据格式转化与读取
算法·目标检测·计算机视觉
MobotStone4 小时前
LLM 采样入门到进阶:理解与实践 Top-K、Top-P、温度控制
算法
Coovally AI模型快速验证4 小时前
从避障到实时建图:机器学习如何让无人机更智能、更安全、更实用(附微型机载演示示例)
人工智能·深度学习·神经网络·学习·安全·机器学习·无人机