群体智能优化算法-正弦余弦算法(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 能够有效引导搜索个体趋近于全局最优解,具有收敛速度快、适应性强、参数少等优点。该算法适用于各类连续优化问题,广泛应用于函数优化、机器学习参数调优、图像处理、工程设计等多个领域,是一种通用性强、应用前景广阔的智能优化工具。

相关推荐
oioihoii3 分钟前
C++20 中 `constexpr` 的强大扩展:算法、工具与复数库的变革
算法·c++20
圣保罗的大教堂9 分钟前
《算法笔记》9.6小节 数据结构专题(2)并查集 问题 D: More is better
算法
小钊(求职中)13 分钟前
Lambda 和 Stream 从 0 到 1,从基础到实战
java·开发语言·后端·算法
phoenix@Capricornus38 分钟前
常用序列的离散时间傅里叶变换(DTFT)
图像处理·算法
昂子的博客1 小时前
热门面试题第14天|Leetcode 513找树左下角的值 112 113 路径总和 105 106 从中序与后序遍历序列构造二叉树 (及其扩展形式)以一敌二
java·数据结构·算法·leetcode·职场和发展
longlong int1 小时前
【每日算法】Day 6-1:哈希表从入门到实战——高频算法题(C++实现)
c++·算法·散列表
G皮T1 小时前
【Python Cookbook】字符串和文本(二)
数据结构·python·算法·字符串
Code哈哈笑2 小时前
【机器学习】从回声定位到优化引擎:蝙蝠算法在SVR超参数优化中的应用
人工智能·算法·机器学习·蝙蝠算法
HR Zhou2 小时前
群体智能优化算法-沙丁鱼群优化算法(Salp Swarm Algorithm (SSA,含Matlab源代码)
算法·机器学习·matlab·优化·群体智能优化
最好的药物是乌梅2 小时前
【蓝桥杯速成】| 12.回溯排列&N皇后
数据结构·算法·leetcode·蓝桥杯