0
点赞
收藏
分享

微信扫一扫

【SVM分类】基于鲸鱼算法优化支持向量机实现数据分类matlab代码

yundejia 2022-01-05 阅读 77

1 简介

Mirjalili和Lewis在2016年从座头鲸的猎食行为中得到启示,提出一种新的元启发式优化算法——鲸鱼优化算法。该算法仿照座头鲸的泡泡网觅食方法,通过收缩包围、螺旋位置更新以及随机捕食行为捕猎,如图1所示。通过模仿其觅食建立数学模型,具体的寻优过程如下:首先通过判断系数向量A是否在区间[–1,1]内,若不在就采用搜索捕食的方式跳出当前包围圈;若在就通过判断阈值p选择包围猎物还是狩猎行为。为了减少控制变量,该算法只有位置向量,去掉了速度向量,所以使得算法的寻优能力得到增强。

img

img

img

2 部分代码

%_________________________%

% Whale Optimization Algorithm (WOA) source codes demo 1.0        %

% The Whale Optimization Algorithm

function [Leader_score,Leader_pos,Convergence_curve]=WOA(SearchAgents_no,Max_iter,lb,ub,dim,fobj)

% initialize position vector and score for the leader

Leader_pos=zeros(1,dim);

Leader_score=inf; %change this to -inf for maximization problems

%Initialize the positions of search agents

% Positions=initialization(SearchAgents_no,dim,ub,lb);

Positions=ceil(rand(SearchAgents_no,dim).*(ub-lb)+lb);

Convergence_curve=zeros(1,Max_iter);

t=0;% Loop counter

% Main loop

while t<Max_iter

 for i=1:size(Positions,1)

   

   % Return back the search agents that go beyond the boundaries of the search space

   Flag4ub=Positions(i,:)>ub;

   Flag4lb=Positions(i,:)<lb;

   Positions(i,:)=(Positions(i,:).(~(Flag4ub+Flag4lb)))+ub.Flag4ub+lb.*Flag4lb;

   

   % Calculate objective function for each search agent

   fitness=fobj(Positions(i,:));

   

   % Update the leader

   if fitness<Leader_score % Change this to > for maximization problem

     Leader_score=fitness; % Update alpha

     Leader_pos=Positions(i,:);

   end

   

 end

 a=2-t*((2)/Max_iter); % a decreases linearly fron 2 to 0 in Eq. (2.3)

 % a2 linearly dicreases from -1 to -2 to calculate t in Eq. (3.12)

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

 % Update the Position of search agents

 for i=1:size(Positions,1)

   r1=rand(); % r1 is a random number in [0,1]

   r2=rand(); % r2 is a random number in [0,1]

   

   A=2ar1-a; % Eq. (2.3) in the paper

   C=2*r2;   % Eq. (2.4) in the paper

   

   

   b=1;        % parameters in Eq. (2.5)

   l=(a2-1)*rand+1;  % parameters in Eq. (2.5)

   

   p = rand();    % p in Eq. (2.6)

   

   for j=1:size(Positions,2)

     

     if p<0.5  

       if abs(A)>=1

         rand_leader_index = floor(SearchAgents_no*rand()+1);

         X_rand = Positions(rand_leader_index, :);

         D_X_rand=abs(C*X_rand(j)-Positions(i,j)); % Eq. (2.7)

         Positions(i,j)=X_rand(j)-A*D_X_rand;   % Eq. (2.8)

         

       elseif abs(A)<1

         D_Leader=abs(C*Leader_pos(j)-Positions(i,j)); % Eq. (2.1)

         Positions(i,j)=Leader_pos(j)-A*D_Leader;   % Eq. (2.2)

       end

       

     elseif p>=0.5

     

       distance2Leader=abs(Leader_pos(j)-Positions(i,j));

       % Eq. (2.5)

       Positions(i,j)=distance2Leaderexp(b.l).cos(l.2*pi)+Leader_pos(j);

       

     end

     

   end

 end

 t=t+1;

 Convergence_curve(t)=Leader_score;

%   [t Leader_score]

end

3 仿真结果

4 参考文献

[1]郑威迪等. "基于改进型鲸鱼优化算法和最小二乘支持向量机的炼钢终点预测模型研究." 电子学报 3(2019):7.

[2]田宏伟, 赵启明, & 庞晓辉. (2020). 一种基于鲸鱼优化算法优化加权最小二乘支持向量机的风机故障预测方法. CN111062533A.

部分理论引用网络文献,若有侵权联系博主删除。

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,有科研问题可私信交流。

举报

相关推荐

0 条评论