基于蛙跳算法的最优值计算matlab仿真

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

        蛙跳算法是基于种群进化的元启发式算法之一,通过模拟自然界中青蛙觅食过程中种群所体现出的交流与合作行为,以实现对问题的求解。在一片湿地中,分布着一群青蛙,每只青蛙有自己的想法,每只青蛙的想法则被定义为一个解。每只青蛙找到食物时,都会向其周围的青蛙传递信息,从而影响周围青蛙向其靠近,形成一个子种群(模因组)。可见,湿地中青蛙种群将形成多个这样的子种群。子种群内的青蛙相互影响,从而实现组内的局部搜索。当青蛙跳跃一定次数后,为了寻找更多的食物,所有青蛙将重新混合后再次形成子种群,寻找更多的食物。至此,完成种群的一次全局搜索。子种群局部搜索与整个种群全局搜索交替进行,从而实现对问题的求解。

       蛙跳算法(SFLA)是一种全新的启发式群体进化算法,具有高效的计算性能和优良的全局搜索能力。对混合蛙跳算法的基本原理进行了阐述,针对算法局部更新策略引起的更新操作前后个体空间位置变化较大,降低收敛速度这一问题,提出了一种基于阈值选择策略的改进蛙跳算法。通过不满足阈值条件的个体分量不予更新的策略,减小了个体空间差异,从而改善了算法的性能。数值实验证明了该改进算法的有效性,并对改进算法的阈值参数进行了率定。
       SFLA由Eusuff和Lansey为解决组合优化问题于2003年最先提出。作为一种新型的仿生物学智能优化算法,SFLA 结合了基于模因(meme)进化的模因演算法(MA,memeticalgorithm)和基于群体行为的粒子群算法(PSO,particle swarm optimization)2 种群智能优化算法的优点。该算法具有概念简单,调整的参数少,计算速度快,全局搜索寻优能力强,易于实现的特点。混合蛙跳算法主要应用于解决多目标优化问题,例如水资源分配、桥墩维修、车间作业流程安排等工程实际应用问题

2.仿真效果预览

matlab2022a仿真结果如下:

3.MATLAB核心程序

..................................................................
%%产生初始青娃
F=m*n;
tic;
for i1=1:F
    p(i1,:)=pmax*rands(1,d);
end
%%全局迭代寻优
yy=zeros(1,MAXGEN);
for ii=1:MAXGEN    
    for i2=1:F
        fitness(i2)=fun(p(i2,:));
    end
    %排序,找最好的,并分组
    [fitsort,index]=sort(fitness);
    for i3=1:F
        x(i3,:)=p(index(i3),:);
    end
    gx=x(1,:);%种群内最好的青娃
    yy(ii)=fitsort(1);
    % yy(ii)=fun(x(1,:));
  %   local=zeros(n,d);
    for i4=1:m 
      local = p(i4:m:end,:);
        for j=1:Ne %每组青蛙迭代次数
            pb=local(1,:);%组内最优
            pw=local(n,:);%组内最差
            s1=rand.*(pb-pw);%采用组内最优更新
            s1(find(s1>smax))=smax;
            temp= pw+s1;
          temp(find(temp>pmax))=pmax;
           temp(find(temp<pmin))=pmin;
           if fun(temp) > fun(pw)
               s1=rand.*(gx-pw);%采用全局最优更新
                s1(find(s1>smax))=smax;
               temp=pw+s1;
                 temp(find(temp>pmax))=pmax;
          temp(find(temp<pmin))=pmin;
           end
           if fun(temp)>fun(pw)
            s1=pmax*rands(1,d);%随机更新
             s1(find(s1>smax))=smax;
             temp=pw+s1;
             temp(find(temp>pmax))=pmax;
            temp(find(temp<pmin))=pmin;
            end
             local(n,:) = temp;
             for loc=1:n
             fitlocal(loc)=fun(local(loc,:));
             end
             [localsort,indexlocal]=sort(fitlocal);
             for loc=1:n
               localnew(loc,:) = local(indexlocal(loc),:);
              end    
             local=localnew;
        end   %结束Ne
             p(i4:m:end,:) =local;
    end    %结束m
  %最好的青娃适配值 
end  %结束MAXGEN
toc
a266

4.完整MATLAB

V

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在自然界的池塘中常常生活着一群青蛙,并且分布着许多石头,青蛙通过在不同的石头间进行跳跃去寻找食物较多的地方。每只青蛙通过跳跃到不同的石头来提高自己寻找食物的能力,而青蛙个体之间通过思想的交流与共享,实现信息的交互。混合蛙跳算法(Shuffled Frog Leaping Algorithm, SFLA)是模拟青蛙觅食过程中群体信息共享和交流机制而产生的一种群体智能算法,是一种全新的启发式群体智能进化算法。该算法由Eusuff和Lansey在2003年首次提出,并成功解决管道网络扩充中管道尺寸的最小化问题。关于蛙跳算法的研究目前还比较少,近年来国内外一些学者多将混合蛙跳算法用于优化问题、旅行商问题、模糊控制器设计等方面。 混合蛙跳算法的实现机理是通过模拟现实自然环境中青蛙群体在觅食过程中所体现出的协同合作和信息交互行为,来完成对问题的求解过程。每只青蛙被定义为问题的一个解。整个青蛙群体采用模因分组方法分为不同的子群体,来模拟青蛙的聚群行为,每个子群体称为模因分组。模因组中的每只青蛙都有为了靠近目标而努力的想法,具有对食物源远近的判断能力,并且受其他青蛙影响,这里称为文化。每个模因组都有自己的文化,影响着其他个体,并随着模因组的进化而进化。在模因组的每一次进化过程中,在每个模因组中找到组内位置最好和最差的青蛙。组内最差青蛙采用类似于粒子群算法中的速度位移模型操作算子,执行局部位置更新,对最差青蛙位置进行调整。模因组内经过一定次数的模因进化后,不同模因组间的青蛙重新混合成整个群体,实现各个模因组间的信息交流与共享,直到算法执行完预定的种群进化次数结束。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱C编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值