找回密码
 立即注册
查看: 154|回复: 0

【改进鲸鱼优化算法】增强型鲸鱼优化算法(Matlab代码实现)

[复制链接]
发表于 2023-3-10 14:31 | 显示全部楼层 |阅读模式
    个人主页:研学社的博客

     欢迎来到本博客  


  博主优势:   
博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。r/>
座右铭:行百里者,半于九十。
1 概述

鲸鱼优化算法 (WOA) 是一个突出的问题解决器,广泛用于解决特征选择等 NP 难题。然而,它及其大多数变体都受到人口多样性低和搜索策略不佳的影响。为了减轻 WOA 的这些核心缺点,特别是为了处理功能选择问题,非常需要引入有效的策略。因此,本文致力于提出一种基于池化机制和2019种有效搜索策略的增强型鲸鱼优化算法E-WOA,分别是迁徙、优先选择和富集包围猎物。评估 E-WOA 的性能并与众所周知的 WOA 变体进行比较,以解决全局优化问题。获得的结果证明,E-WOA的性能优于WOA的变体。
2 运行结果





部分代码:
function [Convergence,Score_best,X_best]= E_WOA(SearchAgents_no,Max_iterproblem_size,lb,ub)
% Initialize the positions of search agents
Positions = initialization(SearchAgents_no,problem_size,ub,lb);
for j = 1:SearchAgents_no
    Fitness(j,1)  = Function(Positions(j,:));
end
% Set the best position for leader
[temp_fit, sorted_index] = sort(Fitness, 'ascend');
X_best = Positions(sorted_index(1),:);
Score_best = temp_fit(1);
% ==================================================== %
P_rate =  20;                    % The portion rate
Pool.Kappa = 1.5 * SearchAgents_no;   % The maximum pool size  
Pool.position = zeros(0, problem_size);  % The solutions stored in the pool
Idx0 = (SearchAgents_no - (Pool.Kappa * 0.3)+1);
X_worst = Positions(sorted_index(Idx0: end),:);
Pool = Pooling_Mechanism(Pool,problem_size,X_worst, X_best);

Convergence = zeros(1,Max_iter);
t = 1;         
% Main loop
while t <= Max_iter

    a2 = -1+t*((-1)/Max_iter);

    % Randomly select a P portion of the humpback whales
    P_portion = randperm(SearchAgents_no,P_rate);

    Pop_Pool = Pool.position;
    [P_rnd1, P_rnd2] = RandIndex(size(Pop_Pool,1),  SearchAgents_no);

    %% Probability rate
    p = rand(SearchAgents_no, 1);

    %% Cauchy distribution
    A = 0.5 + 0.1 * tan(pi * (rand(SearchAgents_no, 1) - 0.5));
    Idx = find(A <= 0);
    while ~ isempty(Idx)
        A(Idx) = 0.5 + 0.1 * tan(pi * (rand(length(Idx), 1) - 0.5));
        Idx = find(A <= 0);
    end
    A = min(A, 1);   

    for i = 1:size(Positions,1)
        if (i ~= P_portion)
            C = 2*rand;      % Eq. (6) in the paper
            b = 1;            
            for j=1:size(Positions,2)
                l=(a2-1)*rand+1;               
                if p(i) < 0.5
                    if A(i) < 0.5     % Enriched encircling prey search strategy
                        rand_leader_index = floor(size(Pop_Pool,1)*rand()+1); % Randomly selected from the matrix Pool
                        P_rnd3 = Pop_Pool(rand_leader_index, j);
                        D_prim = abs(C * X_best(j) - P_rnd3);  % Eq. (17)
                        X(i,j) =  X_best(j)- A(i)*D_prim;      % Eq. (16)

                    elseif A(i)>= 0.5 % Preferential selecting search strategy
                        X(i,j)   = Positions(i,j) + A(i)*( C* Pop_Pool(P_rnd1(i),j)- Pop_Pool(P_rnd2(i),j)) ; % Eq. (15)
                    end
                elseif p(i)>=0.5      % Spiral bubble-net attacking
                    D_prim =  abs(X_best(j)- Positions(i,j));           % Eq. (10)
                    X(i,j)=  D_prim * exp(b.*l).*cos(2*pi*l)+ X_best(j);% Eq. (9)
                end
            end
        end
    end
    %% Migrating search strategy
    best_max = max(X_best);
    best_min = min(X_best);
    P_portion = P_portion';
    X_rnd  =  rand(size(P_portion,1),problem_size).* (ub - lb) + lb;  % Eq.(13)
    X_brnd =  rand(size(P_portion,1),problem_size).*(best_max - best_min)+ best_min  ; % Eq.(14)
    X(P_portion, :)  = X_rnd -  X_brnd; % Eq.(12)

    %% Computing the fitness of whales
    for i = 1: size(Positions,1)
        X(i,:)   = boundConstraint(X(i,:), Positions(i,:), lb,ub);
        Fit(i,1) = Function(X(i,:));
        if Fit(i,1) < Score_best
            Score_best =  Fit(i,1);
            X_best   =  X(i,:);
        end
    end   
    I = (Fitness > Fit);
    Ind = find(I == 1);
    X_worst = Positions(Ind, :);
    % Definition 1. (Pooling mechanism)
    Pool = Pooling_Mechanism(Pool, problem_size, X_worst, X_best);

    % Updating the position of whales
    Fitness(Ind) = Fit(Ind) ;
    Positions(Ind, :) = X(Ind, :);   

    Convergence(t) = Score_best;
    t = t + 1;
end
end
3 参考文献

部分理论来源于网络,如有侵权请联系删除。



Enhanced whale optimization algorithm for medical feature selection: A COVID-19 case study - ScienceDirect
4 Matlab代码实现

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-6-17 02:52 , Processed in 0.090291 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表