WOA鲸鱼优化算法

FPGA教程目录

MATLAB教程目录

-----------------------------------------------------------------------

       鲸鱼算法(Whale Optimization Algorithm)是根据鲸鱼围捕猎物的行为而提出的算法。鲸鱼是一种群居的哺乳动物,在捕猎时它们也会相互合作对猎物进行驱赶和围捕。鲸鱼算法提出时间并不长,也是一个新兴的优化算法,研究应用案例不多。   鲸鱼算法中,每个鲸鱼的位置代表了一个可行解。在鲸鱼群捕猎过程中,每只鲸鱼有两种行为,一种是包围猎物,所有的鲸鱼都向着其他鲸鱼前进;另一种是汽包网,鲸鱼环形游动喷出气泡来驱赶猎物。在每一代的游动中,鲸鱼们会随机选择这两种行为来进行捕猎。在鲸鱼进行包围猎物的行为中,鲸鱼将会随机选择是向着最优位置的鲸鱼游去还是随机选择。

clc;
clear;
close all;
warning off;
 

        Iters        = 200;         %最大迭代次数
        Num          = 50;   
        D            = dim; %搜索空间维数
        woa_idx      = zeros(1,D);
        woa_get      = inf; 

        %初始化种群的个体
        xwoa         = randn(Num,D); %随机初始化位置
        for t=1:Iters
            for i=1:Num
                %目标函数更新
                pa(i)  = func_F1_10(xwoa(i,:),sel);
                Fitout = pa(i);
                %更新
                if Fitout < woa_get  
                   woa_get = Fitout; 
                   woa_idx = xwoa(i,:);
                end
            end
            %调整参数
            c1 = 2-t*((1)/300); 
            c2 =-1+t*((-1)/300);
            %位置更新
            for i=1:Num
                r1         = rand();
                r2         = rand();
                K1         = 2*c1*r1-c1;  
                K2         = 2*r2;             
                l          =(c2-1)*rand + 1;  
                rand_flag  = rand();   

                for j=1:D
                    if rand_flag<0.5   
                       if abs(K1)>=1
                          RLidx    = floor(Num*rand()+1);
                          X_rand   = xwoa(RLidx, :);
                          D_X_rand = abs(K2*X_rand(j)-xwoa(i,j)); 
                          xwoa(i,j)= X_rand(j)-K1*D_X_rand;     
                       else
                          D_Leader = abs(K2*woa_idx(j)-xwoa(i,j)); 
                          xwoa(i,j)= woa_idx(j)-K1*D_Leader;    
                       end
                    else
                        distLeader = abs(woa_idx(j)-xwoa(i,j));
                        xwoa(i,j)  = distLeader*exp(6*l).*cos(l.*2*pi)+woa_idx(j);
                    end
                end
            end
            pb        = func_F1_10(woa_idx,sel); 
            Pbest(t)  = pb;
        end
            Rs(mtkl) = Pbest(end);
        end
        RRs{idx2}(idx1,:)=[min(Rs),max(Rs),mean(Rs),std(Rs)];
    end
end

  • 14
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

fpga和matlab

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

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

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

打赏作者

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

抵扣说明:

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

余额充值