首页 > 行业资讯 > 基于Sinusoidal混沌映射的麻雀搜索算法求解单目标优化问题附matlab代码

基于Sinusoidal混沌映射的麻雀搜索算法求解单目标优化问题附matlab代码

时间:2022-11-03 来源: 浏览:

基于Sinusoidal混沌映射的麻雀搜索算法求解单目标优化问题附matlab代码

天天Matlab 天天Matlab
天天Matlab

TT_Matlab

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。

收录于合集 #智能优化算法及应用 625个

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

个人主页: Matlab科研工作室

个人信条:格物致知。

更多Matlab仿真内容点击

智能优化算法   神经网络预测 雷达通信 无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机

⛄ 内容介绍

雀搜索算法是一种新型的群智能优化算法     2020  年由   Xue     [15]   提出 主要是受麻雀的觅食   反哺食行为启发 具有寻优能力强 收敛速度快 的特点 雀搜索算法将整个麻雀种群分为三类 即寻 食物的生产者 抢夺食物的加入者和发现危险的 戒者   生产者和加入者可以相互转化 但各自在   群中的占比不会发生变化 在模拟实验中 需要使用虚拟麻雀进行食物的   与其他寻优算法相同 麻雀搜索算法首先需 对麻雀种群与适应度值进行初始化 麻雀种群可   初始化为如下形式 表达式为 (3)  

n 为麻雀的数量 d 为要优化的变量的维 度即独立参数的数目; xnd 为第 n 只麻雀第 d 维度的值。 由此,总体麻雀适应度值表征形式为  

(4) 中: f(x) 为个体适应度值。适应度值较好的麻雀 ( 即生产者 ) 在搜索中会优先获得食物并指引群体的觅食方向与范围,与此同时,生产者会具有更大的觅食搜索范围。生产者在觅食过程中,位置不断发生移动,而在遇到捕食者时,移动规则又会发生改变,即  

(5) 中: t 为当前迭代次数; j∈{1 2 d} x i t j 为迭代第 t 次时,第 i 个麻雀的第 j 个维度的值; α∈(0 1] ,为随机数; iter _ max 为迭代次数最多的常数; R2∈[0 1] ,为报警值; ST∈[0 1] ,为安全阈值; Q 为服从正态分布的随机数; L 1×d 阶矩阵 ( 元素全为 1) R2 ST 时,代表该区域安全,无捕食者出没,生产者会出现大范围觅食行为; R2≥ST 时,表示一些麻雀发现了捕食者并发出警告,所有麻雀迅速飞入安全区域。而对加入者而言,在觅食过程中,一旦生产者找到了好的食物源,加入者必会知晓,并飞向它的附近抢食,同时,也有加入者会时刻监视生产者,随时准备争抢食物。由此加入者的位置更新规则为

(6) 中: xp 为生产者占据的最佳位置; xworst 为全局最差位置; A 1×d 阶矩阵,每个元素随机为 1 或- 1 A† AT(AAT) 1 。当 i 时,表示适应性较差的第 i 个加入者抢夺食物失败,为了更好地获得食物避免挨饿只能飞往其他地区进行觅食。 总体而言,假设意识到危险的麻雀 ( 即警戒者 ) 10 ~20 %。初始位置则随机产生,规则为

(7) 中: λ 为步长控制函数,是一个均值为 0 ,方差为 1 的正态分布随机数; fi 为当前麻雀适应值; fg 为全局最好适应值; fw 为全局最差适应值; k 为麻雀移动方向; xbest 为全局最优位置; ε 为最小常数,避免除数为零。当 fi fg 时,警戒者位于种群边缘,意识到危险后向中央安全区靠近;当 fi fg 时,则是处于种群中央的麻雀意识到了危险,为躲避危险,则向其他麻雀身边靠拢。

⛄ 部分代码

%_________________________________________________________________________________

%  Salp Swarm Algorithm (SSA) source codes version 1.0

%

%   Main paper:

%   S. Mirjalili, A.H. Gandomi, S.Z. Mirjalili, S. Saremi, H. Faris, S.M. Mirjalili,

%   Salp Swarm Algorithm: A bio-inspired optimizer for engineering design problems

%   Advances in Engineering Software

%   DOI: http://dx.doi.org/10.1016/j.advengsoft.2017.07.002

%____________________________________________________________________________________

function [FoodFitness,FoodPosition,Convergence_curve]=SSA(N,Max_iter,lb,ub,dim,fobj)

if size(ub,1)==1

    ub=ones(dim,1)*ub;

    lb=ones(dim,1)*lb;

end

Convergence_curve = zeros(1,Max_iter);

%Initialize the positions of salps

SalpPositions=initialization(N,dim,ub,lb);

FoodPosition=zeros(1,dim);

FoodFitness=inf;

%calculate the fitness of initial salps

for i=1:size(SalpPositions,1)

    SalpFitness(1,i)=fobj(SalpPositions(i,:));

end

[sorted_salps_fitness,sorted_indexes]=sort(SalpFitness);

for newindex=1:N

    Sorted_salps(newindex,:)=SalpPositions(sorted_indexes(newindex),:);

end

FoodPosition=Sorted_salps(1,:);

FoodFitness=sorted_salps_fitness(1);

%Main loop

l=2; % start from the second iteration since the first iteration was dedicated to calculating the fitness of salps

while l<Max_iter+1

    c1 = 2*exp(-(4*l/Max_iter)^2); % Eq. (3.2) in the paper

    for i=1:size(SalpPositions,1)

        SalpPositions= SalpPositions’;

        if i<=N/2

            for j=1:1:dim

                c2=rand();

                c3=rand();

                %%%%%%%%%%%%% % Eq. (3.1) in the paper %%%%%%%%%%%%%%

                if c3<0.5 

                    SalpPositions(j,i)=FoodPosition(j)+c1*((ub(j)-lb(j))*c2+lb(j));

                else

                    SalpPositions(j,i)=FoodPosition(j)-c1*((ub(j)-lb(j))*c2+lb(j));

                end

                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

            end

        elseif i>N/2 && i<N+1

            point1=SalpPositions(:,i-1);

            point2=SalpPositions(:,i);

            SalpPositions(:,i)=(point2+point1)/2; % % Eq. (3.4) in the paper

        end

        SalpPositions= SalpPositions’;

    end

    for i=1:size(SalpPositions,1)

        Tp=SalpPositions(i,:)>ub’;Tm=SalpPositions(i,:)<lb’;SalpPositions(i,:)=(SalpPositions(i,:).*(~(Tp+Tm)))+ub’.*Tp+lb’.*Tm;

        SalpFitness(1,i)=fobj(SalpPositions(i,:));

        if SalpFitness(1,i)<FoodFitness

            FoodPosition=SalpPositions(i,:);

            FoodFitness=SalpFitness(1,i); 

        end

    end

    Convergence_curve(l)=FoodFitness;

    l = l + 1;

end

⛄ 运行结果

⛄ 参考文献

[1]黄敬宇. 融合t分布和Tent混沌映射的麻雀搜索算法研究[D]. 兰州大学.

❤️ 关注我领取海量matlab电子书和数学建模资料
❤️部分理论引用网络文献,若有侵权联系博主删除

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐