RedZero9 发表于 2023-2-7 19:49

鲸鱼优化算法及其实现

鲸鱼优化算法(whale optimization algorithm, WOA)是群智能算法类型中的一种,通过模拟鲸鱼的行为方式,从而解决优化问题。本章将深入讨论鲸鱼优化算法的实现原理以及如何将算法应用于实际的优化问题中。
本章主要涉及到的知识点有:

[*]算法介绍:包括算法的起源和工作原理。
[*]算法的主要过程:介绍其中的核心搜索行为和过程。
[*]算法的常用参数:帮助控制算法的优化效果。
[*]求解非线性函数的寻优问题:通过本章最后的实例,演示如何将鲸鱼优化算法应用于实际的优化问题。
注意:本章内容包含实例代码,根据代码的步骤演算,即可求得问题的最终结果。
14.1鲸鱼优化算法介绍

本节首先介绍鲸鱼优化算法的基本概念,理解这些概念是学习鲸鱼优化算法的基础。了解算法概念后,才能将算法应用于实际问题当中。
14.1.1鲸鱼优化算法的起源和发展概述

鲸鱼优化算法是群智能算法领域,除了蚁群算法、粒子群算法之外的一种新型的群智能优化算法。该算法是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等人提出的一种新的群体智能优化算法
在鲸鱼优化算法中,每一条鲸鱼都代表一个解决方案,鲸鱼们在算法的迭代过程中不断探索和围捕猎物,并不断尝试改进自己的解决方案。鲸鱼优化算法能够有效地解决各种复杂的优化问题,并且具有较快的收敛速度。
鲸鱡优化算法自发明以来,已经广泛应用于工业和学术领域,并在近几年受到了越来越多的关注。目前,鲸鱼优化算法已经成为了一种流行的优化算法,并在众多的研究领域中得到了广泛的应用。
14.1.2鲸鱼优化算法的工作原理

鲸鱼优化算法是一种基于鲸鱼行为的模拟算法,用于解决优化问题。他通过对自然界中座头鲸群体狩猎行为的模拟,通过鲸鱼群体搜索、包围、追捕和攻击猎物等过程实现优时化搜索的目的。鲸鱼优化算法的工作原理如下:
1、初始化:首先,在算法开始时,需要为每个鲸鱼设定一个初始位置,并生成初始种群。
2、搜索:每个鲸鱼都会按照一定的规则探索空间。这个过程可以模拟鲸鱼包围、追捕和攻击猎物等过程。
3、评估:每当鲸鱼移动的时候,都会对当前的鲸鱼种群计算适应度值。如果当前的适应度值优于之前的适应度值,则将当前适应度值设为最优解。
4、更新:当所有的鲸鱼都完成了移动和评估后,算法会更新所有鲸鱼的位置,并重复以上步骤。
5、迭代:鲸鱼优化算法可以进行多次迭代,直到找到最优解为止。
鲸鱼优化算法的优势在于操作简单,调整的参数少以及跳出局部最优的能力强,它能够快速找到最优解,并且对于各种类型的优化问题都能有效地工作。对于基础的问题,它还具有很好的收敛性和稳定性。
简而言之,鲸鱼优化算法是一种通过模拟鲸鱼生物行为的过程来寻找最优解的算法。它具有较高的效率和稳定性,并能应用于各种类型的优化问题。
14.2鲸鱼优化算法的核心过程

WOA算法首先在可行解空间中初始化一群鲸鱼个体,每个鲸鱼都代表极值优化问题的一个潜在的最优解,用位置表示鲸鱼的特征,适应度值由适应度函数计算得到,适应度的好坏表示鲸鱼的优劣。鲸鱼在解空间中探索,通过模拟包围猎物、狩猎行为、搜索猎物的行为更新个体位置。鲸鱼种群每更新一次位置,就计算一次适应度,并通过比较更新当前的最优适应度值。
假设在一个D维的空间中,由n个鲸鱼组成的种群X=(X1,X2,…,Xn),其中第n个鲸鱼表示为一个D维的向量Xn=(xn1,xn2,…,XnD)T,代表第n个鲸鱼在D维空间中的位置,也即是表示一个问题的解。根据目标函数计算每个鲸鱼位置对应的适应度。
在迭代过程中,鲸鱼的主要行为包括包围猎物、捕获猎物、搜索猎物,下面将进行详细讲解。
注意:D表示问题中解的变量个数。
14.2.1包围猎物

鲸鱼在狩猎时要包围猎物,通过包围猎物的方式更新自身的位置,即


(14-1)
(14-2)
其中,t 表示目前的迭代次数,A 和 C 表示系数,X*(t)表示目前适应度最好的鲸鱼位置,X(t)表示目前迭代次数中鲸鱼的位置,A 和 C 由式(14-3)、式(14-4)得出。


(14-3)
(14-4)
(14-5)
其中,r1和 r2是随机数,范围在(0,1)中,a 的值从 2到 0下降,t 表示目前的迭代次数,Tmax为初始设置的最大迭代次数。
14.2.2捕获猎物

鲸鱼狩猎的时候,采用螺旋运动的方式向猎物游去,即


(14-6)
其中,Dp=|X*(t)- X(t)|表示鲸鱼差距猎物的距离大小, b 是一个常数,表示螺线的形状,l 是随机数,范围属于(-1,1)。鲸鱼在螺旋包围猎物的同时,也要不断收缩包围圈,所以要对选择收缩包围机制和螺旋模型设置概率Pi和1 -Pi来更新鲸鱼的位置,即


(14-7)
通过概率p、参数a和波动范围A的变化,鲸鱼会用不同的方式更新自己的位置,向着更优的位置移动。
14.2.3搜索猎物

搜索猎物是为了寻找到更优的解,即


(14-8)
(14-9)
其中,Xrand是随机的鲸鱼位置,当 A≥1 的时候,随机选择一个鲸鱼个体,更新其他鲸鱼的位置,增加探索的随机性,希望能找到一个更优秀的猎物,通过加强算法的搜索能力从而使 WOA 算法探索全局最优解。
14.3鲸鱼优化算法的常用参数

14.3.1设置种群数量

种群数量越多,找到最优解的可能性越大。但同时,过多的种群数量会降低程序的运行速度,因此需要设置合理的种群数量。
14.3.2设置探索边界

探索边界指的是变量的上下界,探索边界可以帮助鲸鱼在可行空间中寻找最优解。
14.3.3设置迭代次数

迭代次数越大,求解的目标值越接近实际的函数值。迭代次数同样需要合理地设置,过少的迭代次数,可能会造成算法不能很好地收敛;过大的迭代次数,可能会增加算法程序的运行时间,造成时间维度上的资源浪费。
14.3.4设置变量维度

变量维度即鲸鱼的位置维度,根据题目的要求设置即可,解的变量的数量多少即设置多少。
14.4鲸鱼优化算法求解非线性函数的寻优问题

14.4.1问题背景

本次寻优例题的非线性函数为


(14-10)
函数图像如图14.1所示:


图14.1函数图像
从图形可以看出,该函数有多个局部极小值,在(0,0)附近取极小值,极小值为0。
14.4.2寻优求解思路和步骤

利用鲸鱼优化算法求解极值的算法流程如图14.2所示。


图14.2鲸鱼优化算法求解极值的算法流程图
其中,初始化种群需要初始化位置和适应度;根据14.2.1节的公式包围猎物;根据14.2.2节的公式捕获猎物;根据14.2.3节的公式搜索猎物。
本实例中,适应度根据函数表达式进行计算,函数值即适应度值。鲸鱼种群数量为20,每个鲸鱼的维数为2,算法的迭代次数为500。
注意:适应度函数代码需要单独存放在f.m的m文件中,其余代码可以存放在main.m的文件中。两个文件同时放置在同一路径之中。
14.4.3使用MATLAB实现问题的求解

根据鲸鱼优化算法的原理,在MATLAB中实现程序的编写。
1.WOA算法的参数设置
设置WOA算法的参数,MATLAB代码如下:
%清空运行环境
    clear;
    clc;
close all
%设置参数
    pop_num=20;      %   种群数量
Max_iter=500;    % 迭代次数
t=0;%迭代计数器
    iter=1;%初始迭代次数
dim=2;%个体的维度
ub=5;%变量的上界
lb=-5;%变量的下界
2.种群初始化
随机初始化鲸鱼的位置,并计算鲸鱼的适应度,程序代码如下:
%初始化种群
    Leader_pos=zeros(1,dim);%初始化最优个体的位置
    Leader_score=inf; %使用-inf 求解最小值问题
Boundary_no= size(ub,2); %设置边界数量
    % 如果变量的上下界相同,为其编号,生成位置
    if Boundary_no==1
      Positions=rand(pop_num,dim).*(ub-lb)+lb;
    end
    % 如果变量的上下界不相同,生成位置
    if Boundary_no>1
      for i=1:dim
            ub_i=ub(i);
            lb_i=lb(i);
            Positions(:,i)=rand(pop_num,1).*(ub_i-lb_i)+lb_i;
      end
    end   
    Convergence_curve=zeros(1,Max_iter);%初始收敛曲线
适应度函数代码如下:
function y = f(x)
%计算适应度
dim=size(x,2);%获取个体的维度
y=sum(x.^2-10*cos(2*pi.*x))+10*dim;%获取适应度值
end
3.迭代寻找最优值
根据鲸鱼的行为习惯,更新鲸鱼个体的位置,根据适应度值更新最优的个体和群体适应度值,程序代码如下:
    %开始迭代
while t<Max_iter
   for i=1:size(Positions,1)
      % 返回超出搜索空间边界的鲸鱼个体
      Flag4ub=Positions(i,:)>ub;
      Flag4lb=Positions(i,:)<lb;
      Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
      % 计算每个鲸鱼个体的适应度值
      fitness=f(Positions(i,:));
      % 更新最优的鲸鱼个体
      if fitness<Leader_score
            Leader_score=fitness;
            Leader_pos=Positions(i,:);
      end
    end
    a=2-t*((2)/Max_iter); %在公式(14-5)中,a从2线性下降到0
    %a2从-1减至-2
    a2=-1+t*((-1)/Max_iter);
    % 更新鲸鱼的位置
    for i=1:size(Positions,1)
      r1=rand(); % r1是中的随机数
      r2=rand(); % r2是中的随机数
      A=2*a*r1-a;% 对应公式(14-3)
      C=2*r2;   % 对应公式(14-4)
      b=1;               % 公式(14-6)中的参数
      l=(a2-1)*rand+1;   % 公式(14-6)中的参数
      p = rand();      % 公式(14-6)中的参数
         for j=1:size(Positions,2)
            if p<0.5   
                if abs(A)>=1
                  rand_leader_index = floor(pop_num*rand()+1);
                  X_rand = Positions(rand_leader_index, :);
                  D_X_rand=abs(C*X_rand(j)-Positions(i,j));% 对应公式 (14-8)
                  Positions(i,j)=X_rand(j)-A*D_X_rand;         % 对应公式 (14-9)
                elseif abs(A)<1
                  D_Leader=abs(C*Leader_pos(j)-Positions(i,j));   % 对应公式 (14-1)
                  Positions(i,j)=Leader_pos(j)-A*D_Leader;          % 对应公式 (14-2)
                end
            elseif p>=0.5
                distance2Leader=abs(Leader_pos(j)-Positions(i,j));
                % 对应公式 (14-6)
                Positions(i,j)=distance2Leader*exp(b.*l).*cos(l.*2*pi)+Leader_pos(j);
            end
      end
    end
    t=t+1;
    Convergence_curve(t)=Leader_score;%更新收敛曲线
    end
4.分析结果
WOA算法迭代500次,画出最优适应度的变化曲线,程序代码如下:
%画出每一代的最优适应度,即目标值
plot(Convergence_curve);
title('最优目标值','fontsize',12)
xlabel('迭代次数','fontsize',12);
ylabel('目标值','fontsize',12);
最优目标值的变化如图14.3所示。


图14.3最优目标值迭代图
最终得到的最优目标值为0,对应的鲸鱼个体的位置为(2.7894e-09 -1.5969e-09),WOA算法寻找得到接近函数实际最优值的目标值,表明WOA算法具有较强的寻优搜索能力。
页: [1]
查看完整版本: 鲸鱼优化算法及其实现