WOA鲸鱼优化算法

       鲸鱼算法(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

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/113994469