一、神经网络-支持向量机

支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。 1 数学部分 1.1 二维空间 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_02【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_03【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_04【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_05【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_06【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_07【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_02【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_09【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_04【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_11【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_04【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_13【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_02【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_15【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_16【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_17【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_04​ 2 算法部分 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_19【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_20【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_21【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_06【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_23【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_16【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_25

二、灰狼算法

灰狼算法

1 前言:

灰狼优化算法(Grey Wolf Optimizer,GWO)由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优化算法。该算法受到了灰狼捕食猎物活动的启发而开发的一种优化搜索方法,它具有较强的收敛性能、参数少、易实现等特点。近年来受到了学者的广泛关注,它己被成功地应用到了车间调度、参数优化、图像分类等领域中。


2 算法原理:

灰狼隶属于群居生活的犬科动物,且处于食物链的顶层。灰狼严格遵守着一个社会支配等级关系。如图:

【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_26

社会等级第一层:狼群中的头狼记为 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27 狼主要负责对捕食、栖息、作息时间等活动作出决策。由于其它的狼需要服从【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27 狼的命令,所以 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27 狼也被称为支配狼。另外, 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27 狼不一定是狼群中最强的狼,但就管理能力方面来说, 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27 狼一定是最好的。

社会等级第二层【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_33 狼,它服从于 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27 狼,并协助 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27 狼作出决策。在 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27 狼去世或衰老后,【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_33 狼将成为 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27 狼的最候选者。虽然 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_33 狼服从 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27 狼,但 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_33 狼可支配其它社会层级上的狼。

社会等级第三层【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_42 狼,它服从 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_33 狼,同时支配剩余层级的狼。【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_42 狼一般由幼狼、哨兵狼、狩猎狼、老年狼及护理狼组成。

社会等级第四层【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_46 狼,它通常需要服从其它社会层次上的狼。虽然看上去 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_46 狼在狼群中的作用不大,但是如果没有 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_46 狼的存在,狼群会出现内部问题如自相残杀。

GWO 优化过程包含了灰狼的社会等级分层跟踪包围攻击猎物等步骤,其步骤具体情况如下所示。

1)社会等级分层(Social Hierarchy)当设计 GWO 时,首先需构建灰狼社会等级层次模型。计算种群每个个体的适应度,将狼群中适应度最好的三匹灰狼依次标记为 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_33【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_42 ,而剩下的灰狼标记为 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_46。也就是说,灰狼群体中的社会等级从高往低排列依次为; 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_33【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_42【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_46。GWO 的优化过程主要由每代种群中的最好三个解(即 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_33【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_42 )来指导完成。

2)包围猎物( Encircling Prey )灰狼捜索猎物时会逐渐地接近猎物并包围它,该行为的数学模型如下:

【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_60

式中:t 为当前迭代次数:。表示 hadamard 乘积操作;A 和 C 是协同系数向量;Xp 表示猎物的位置向量; X(t) 表示当前灰狼的位置向量;在整个迭代过程中 a 由2 线性降到 0; r1 和 r2 是 [0,1] 中的随机向量。

3)狩猎( Hunring)

灰狼具有识别潜在猎物(最优解)位置的能力,搜索过程主要靠 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_33【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_42 灰狼的指引来完成。但是很多问题的解空间特征是未知的,灰狼是无法确定猎物(最优解)的精确位置。为了模拟灰狼(候选解)的搜索行为,假设 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_33【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_42 具有较强识别潜在猎物位置的能力。因此,在每次迭代过程中,保留当前种群中的最好三只灰狼( 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_33【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_42 ),然后根据它们的位置信息来更新其它搜索代理(包括 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_46)的位置。该行为的数学模型可表示如下:

【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_71

式中:【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_72【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_73【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_74 分别表示当前种群中 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_33【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_42 的位置向量;X表示灰狼的位置向量;【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_78【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_79【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_80 分别表示当前候选灰狼与最优三条狼之间的距离;当|A|>1时,灰狼之间尽量分散在各区域并搜寻猎物。当|A|<1时,灰狼将集中捜索某个或某些区域的猎物。

【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_81

从图中可看出,候选解的位置最终落在被 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_33【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_42 定义的随机圆位置内。总的来说, 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_33【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_42 需首先预测出猎物(潜 在最优解)的大致位置,然后其它候选狼在当前最优兰只狼的指引下在猎物附近随机地更新它们的位置。

4)攻击猎物(Attacking Prey)构建攻击猎物模型的过程中,根据2)中的公式,a值的减少会引起 A 的值也随之波动。换句话说,A 是一个在区间[-a,a](备注:原作者的第一篇论文里这里是[-2a,2a],后面论文里纠正为[-a,a])上的随机向量,其中a在迭代过程中呈线性下降。当 A 在[-1,1]区间上时,则捜索代理(Search Agent)的下一时刻位置可以在当前灰狼与猎物之间的任何位置上。

5)寻找猎物(Search for Prey)灰狼主要依赖 【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_27【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_预测模型_33【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_42 的信息来寻找猎物。它们开始分散地去搜索猎物位置信息,然后集中起来攻击猎物。对于分散模型的建立,通过|A|>1使其捜索代理远离猎物,这种搜索方式使 GWO 能进行全局搜索。GWO 算法中的另一个搜索系数是C。从2)中的公式可知,C向量是在区间范围[0,2]上的随机值构成的向量,此系数为猎物提供了随机权重,以便増加(|C|>1)或减少(|C|<1)。这有助于 GWO 在优化过程中展示出随机搜索行为,以避免算法陷入局部最优。值得注意的是,C并不是线性下降的,C在迭代过程中是随机值,该系数有利于算法跳出局部,特别是算法在迭代的后期显得尤为重要。

​三、代码

% Grey Wolf Optimizer
function [Alpha_score,Alpha_pos,Convergence_curve]=GWO(SearchAgents_no,Max_iter,lb,ub,dim,fobj)

% initialize alpha, beta, and delta_pos
Alpha_pos=zeros(1,dim);
Alpha_score=inf; %change this to -inf for maximization problems

Beta_pos=zeros(1,dim);
Beta_score=inf; %change this to -inf for maximization problems

Delta_pos=zeros(1,dim);
Delta_score=inf; %change this to -inf for maximization problems

%Initialize the positions of search agents
Positions=initialization(SearchAgents_no,dim,ub,lb);

Convergence_curve=zeros(1,Max_iter);

l=0;% Loop counter

% Main loop
while l<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 Alpha, Beta, and Delta
        if fitness<Alpha_score 
            Alpha_score=fitness; % Update alpha
            Alpha_pos=Positions(i,:);
        end
        
        if fitness>Alpha_score && fitness<Beta_score 
            Beta_score=fitness; % Update beta
            Beta_pos=Positions(i,:);
        end
        
        if fitness>Alpha_score && fitness>Beta_score && fitness<Delta_score 
            Delta_score=fitness; % Update delta
            Delta_pos=Positions(i,:);
        end
    end
    
    
    a=2-l*((2)/Max_iter); % a decreases linearly fron 2 to 0
    
    % Update the Position of search agents including omegas
    for i=1:size(Positions,1)
        for j=1:size(Positions,2)     
                       
            r1=rand(); % r1 is a random number in [0,1]
            r2=rand(); % r2 is a random number in [0,1]
            
            A1=2*a*r1-a; % Equation (3.3)
            C1=2*r2; % Equation (3.4)
            
            D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); % Equation (3.5)-part 1
            X1=Alpha_pos(j)-A1*D_alpha; % Equation (3.6)-part 1
                       
            r1=rand();
            r2=rand();
            
            A2=2*a*r1-a; % Equation (3.3)
            C2=2*r2; % Equation (3.4)
            
            D_beta=abs(C2*Beta_pos(j)-Positions(i,j)); % Equation (3.5)-part 2
            X2=Beta_pos(j)-A2*D_beta; % Equation (3.6)-part 2       
            
            r1=rand();
            r2=rand(); 
            
            A3=2*a*r1-a; % Equation (3.3)
            C3=2*r2; % Equation (3.4)
            
            D_delta=abs(C3*Delta_pos(j)-Positions(i,j)); % Equation (3.5)-part 3
            X3=Delta_pos(j)-A3*D_delta; % Equation (3.5)-part 3             
            
            Positions(i,j)=(X1+X2+X3)/3;% Equation (3.7)
            
        end
    end
    l=l+1;    
    Convergence_curve(l)=Alpha_score;
end



  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.

【SVM分类】基于灰狼算法优化SVM实现数据分类matlab源码_matlab_91