正余弦(SCA)优化算法(附完整Matlab代码,可直接复制)

正余弦算法是一种随机优化算法,原理简单,易于实现。其寻优过程可分为两个阶段:
1、全局探索阶段:快速搜索空间中的可行区域。
2、局部开发阶段:即局部寻优。
其种群更新公式为:
X_{i}^{t+1}=X_{i}^{t}+r_{1}*sin(r_2)*|r_3*P_{i}^{t}-X_{i}^{t}| (r_4<0.5)

X_{i}^{t+1}=X_{i}^{t}+r_{1}*sin(r_2)*|r_3*P_{i}^{t}-X_{i}^{t}| (r_4\geqslant 0.5)

r_1=a-t*\frac{a}{T}

X_{i}^{t}为当前个体第i维第t代位置;

P_{i}^{t}为当前全局最优解;

r_1表示下一个解的位置区域在当前解和最优解之内或者之外,较小的r_1利于算法的局部开发、较大的r_1能提高算法的全局搜索能力;

r_2为区间[0,2*pi]内的随机数;

r_3为[0,2]之间的随机数;

r_4为[0,1]之间的随机数,保证位置更新在正弦和余弦函数之间的平等切换;

a恒等于2;

T为最大迭代次数;

t为当前迭代次数;

正余弦(SCA)优化算法(附完整Matlab代码,可直接复制)_第1张图片

 Fig1.正余弦算法的全局搜索和局部搜索切换

使用正余弦算法的寻优能力较差,很可能多次运行最优适应度值没有变化,多运行几次试试。

正余弦算法的完整matlab代码如下:

 
 
%pop——种群数量
%dim——问题维度
%ub——变量上界,[1,dim]矩阵
%lb——变量下界,[1,dim]矩阵
%fobj——适应度函数(指针)
%MaxIter——最大迭代次数
%Best_Pos——x的最佳值
%Best_Score——最优适应度值
clc;
clear all;
close all;
pop=50;
dim=2;
ub=[10,10];
lb=[-10,-10];
MaxIter=100;
fobj=@(x)fitness(x);%设置适应度函数
[Best_Pos,Best_Score,IterCurve]=SCA(pop,dim,ub,lb,fobj,MaxIter);
%…………………………………………绘图…………………………………………
figure(1);
plot(IterCurve,'r-','linewidth',2);
grid on;
title('正余弦算法迭代曲线');
xlabel('迭代次数');
ylabel('适应度值');
%…………………………………… 结果显示……………………………………
disp(['求解得到的x1,x2是:',num2str(Best_Pos(1)),' ',num2str(Best_Pos(2))]);
disp(['最优解对应的函数:',num2str(Best_Score)]);
 
 
%种群初始化函数
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
%种群越界调整函数
function x=BoundrayCheck(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)

运行结果:

 正余弦(SCA)优化算法(附完整Matlab代码,可直接复制)_第2张图片

相关阅读:

1、粒子群(PSO)优化算法(附完整Matlab代码,可直接复制)

2、灰狼(GWO)优化算法(附完整Matlab代码,可直接复制)

3、正余弦(SCA)优化算法(附完整Matlab代码,可直接复制)

4、萤火虫(FA)优化算法(附完整Matlab代码,可直接复制)

你可能感兴趣的:(Matlab,matlab,算法,开发语言)