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