MATLAB实现的正余弦优化算法(SCA)

发布于:2025-08-11 ⋅ 阅读:(16) ⋅ 点赞:(0)

MATLAB实现的正余弦优化算法(SCA)

1. 参数设置
% 参数设置
pop = 50; % 种群数量
dim = 2; % 问题维度
ub = [10, 10]; % 变量上界
lb = [-10, -10]; % 变量下界
MaxIter = 100; % 最大迭代次数
fobj = @(x) sum(x.^2); % 适应度函数,可根据需要调整
2. 种群初始化
% 种群初始化函数
function x = initialization(pop, ub, lb, dim)
    for i = 1:pop
        for j = 1:dim
            x(i, j) = (ub(j) - lb(j)) * rand() + lb(j);
        end
    end
end

% 初始化种群
x = initialization(pop, ub, lb, dim);
3. 越界检查
% 越界检查函数
function x = BoundaryCheck(x, ub, lb, dim)
    for i = 1:size(x, 1)
        for j = 1:dim
            if x(i, j) > ub(j)
                x(i, j) = ub(j);
            end
            if x(i, j) < lb(j)
                x(i, j) = lb(j);
            end
        end
    end
end
4. SCA算法主体
% SCA算法主体
function [Best_Pos, Best_Score, IterCurve] = SCA(pop, dim, ub, lb, fobj, MaxIter)
    a = 2; % 控制参数
    x = initialization(pop, ub, lb, dim); % 种群初始化
    Fitness = zeros(1, pop); % 适应度值初始化
    for i = 1:pop
        Fitness(i) = fobj(x(i, :)); % 计算适应度值
    end
    [SortFitness, Index] = sort(Fitness);
    Global_Best_Pos = x(Index(1), :);
    Global_Best_Score = SortFitness(1);
    IterCurve = zeros(1, MaxIter); % 迭代曲线

    for t = 1:MaxIter
        r1 = a - t * (a / MaxIter); % 计算r1
        for i = 1:pop
            for j = 1:dim
                r2 = rand() * (2 * pi);
                r3 = 2 * rand();
                r4 = rand();
                if r4 < 0.5
                    x(i, j) = x(i, j) + r1 * sin(r2) * abs(r3 * Global_Best_Pos(j) - x(i, j)); % 正弦更新位置
                else
                    x(i, j) = x(i, j) + r1 * cos(r2) * abs(r3 * Global_Best_Pos(j) - x(i, j)); % 余弦更新位置
                end
            end
            x(i, :) = BoundaryCheck(x(i, :), ub, lb, dim); % 越界检查
        end
        for i = 1:pop
            Fitness(i) = fobj(x(i, :));
            if Fitness(i) < Global_Best_Score
                Global_Best_Score = Fitness(i);
                Global_Best_Pos = x(i, :);
            end
        end
        IterCurve(t) = Global_Best_Score;
    end
    Best_Pos = Global_Best_Pos;
    Best_Score = Global_Best_Score;
end
5. 调用SCA算法
% 调用SCA算法
[Best_Pos, Best_Score, IterCurve] = SCA(pop, dim, ub, lb, fobj, MaxIter);

% 显示结果
disp(['最优解: ', num2str(Best_Pos)]);
disp(['最优适应度值: ', num2str(Best_Score)]);

% 绘制迭代曲线
figure;
plot(IterCurve, 'r-');
title('正余弦算法迭代曲线');
xlabel('迭代次数');
ylabel('适应度值');

参考代码 正余弦优化算法(SCA)的matlab代码 youwenfan.com/contentcsb/82151.html

说明

  1. 参数设置:定义了种群数量、问题维度、变量上下界、最大迭代次数和适应度函数。
  2. 种群初始化:随机生成初始种群。
  3. 越界检查:确保种群中的个体不会超出变量上下界。
  4. SCA算法主体:实现了正余弦优化算法的核心逻辑,包括全局探索和局部开发阶段。
  5. 调用SCA算法:调用SCA算法,输出最优解和适应度值,并绘制迭代曲线。

网站公告

今日签到

点亮在社区的每一天
去签到