灰狼优化算法(MOGWO)

摘要

  1. 固定大小的外部档案用来保存帕累托优化解
  2. 在多目标搜索空间中,这个档案被用来定义狼群社会等级和捕猎行为
  3. 这个算法在10个多目标测试集进行测试,并与MOEA/D和MOPSO进行对比

引言

  1. 将多个目标集成一个单一的目标

两个缺点:一个均匀分布的权重不能保证生成一组均匀分布的帕累托优化解集;由于不能使用负权重,且所有权重之和必须为常数,该方法无法找帕累托最优前沿的非凸区域。

  1. MOPSO的收敛速度非常快,在多目标优化中容易出现假帕累托最优前沿过早终止的问题

GWO

该算法是模拟灰狼的社会领导关系和捕猎技术,为了模拟灰狼在狩猎过程中的包围行为,除了社会领导外,提出了一下方程:

t表示当前代数,A和C是向量系数,Xp表示猎物位置,X表示一只灰狼的位置,A和C的计算公式:

a是在迭代过程中从2线性减到0,r1和r2是[0,1]中的随机数,alpha、beta、gamma是前三个最优解。

A的随机值大于1或小于-1,保证了狼群和猎物的偏离,C有助于GWO在优化过程中表现出更随机的行为,有利于规避局部最优。当A的绝对值大于1时,狼群偏离猎物,当A的绝对值小于1时,狼群向猎物收敛。

MOGWO

MOGWO比起GWO多了两个新增部分:

  1. 一个档案用于存储所得帕累托最优解集和进行非支配排序
  2. 选择策略,用于选择alpha、beta、gamma作为领导。

MOGWO的伪代码如下:

MOGWO算法的收敛性是有保证的,因为它利用了相同的数学模型来搜索最优解。事实证明,GWO要求搜索智能体在优化的初期突然改变位置,在优化的后期逐渐改变位置。MOGWO算法继承了GWO的所有特征,这意味着搜索智能体以相同的方式探索和开发搜索空间。主要的区别是,MOGWO围绕一组存档个体进行搜索(即使存档没有变化,也可能不同),而GWO只保存和改进三个最好的解。

MOGWO部分源代码如下,需要完整代码请联系我(免费)。

%% 清理空间

clear all

clc

close all

%% MOGWO算法参数

drawing_flag = 1;

% 测试函数及其细节确定

TestProblem='UF1';

nVar=10;

fobj = cec09(TestProblem);

xrange = xboundary(TestProblem, nVar);

lb=xrange(:,1)';

ub=xrange(:,2)';

VarSize=[1 nVar];

% 迭代次数、种群数量、存档数量

GreyWolves_num=100;

MaxIt=200; % Maximum Number of Iterations

Archive_size=100; % Repository Size

% 网格机制的参数

alpha=0.1; % Grid Inflation Parameter

nGrid=10; % Number of Grids per each Dimension

beta=4; % Leader Selection Pressure Parameter

gamma=2;

%% 种群初始化

GreyWolves=CreateEmptyParticle(GreyWolves_num);

for i=1:GreyWolves_num

​ GreyWolves(i).Velocity=0;%灰狼的初始速度为0

​ GreyWolves(i).Position=zeros(1,nVar);%灰狼的初始位置也为0

​ for j=1:nVar

​ GreyWolves(i).Position(1,j)=unifrnd(lb(j),ub(j),1);%灰狼的位置

​ end

​ GreyWolves(i).Cost=fobj(GreyWolves(i).Position')';

​ GreyWolves(i).Best.Position=GreyWolves(i).Position;

​ GreyWolves(i).Best.Cost=GreyWolves(i).Cost;

end

% 确定支配关系

GreyWolves=DetermineDomination(GreyWolves);

% 非支配解存档

Archive=GetNonDominatedParticles(GreyWolves);

% 网格机制

Archive_costs=GetCosts(Archive); % 存档种群的适应度

G=CreateHypercubes(Archive_costs,nGrid,alpha);

for i=1:numel(Archive)

​ [Archive(i).GridIndex Archive(i).GridSubIndex]=GetGridIndex(Archive(i),G);

end

%% 迭代

for it=1:MaxIt

​ a=2-it*((2)/MaxIt);

​ for i=1:GreyWolves_num

​ clear rep2

​ clear rep3

​ % 选头狼

​ % Choose the alpha, beta, and delta grey wolves

​ Delta=SelectLeader(Archive,beta);

​ Beta=SelectLeader(Archive,beta);

​ Alpha=SelectLeader(Archive,beta);

​ % If there are less than three solutions in the least crowded

​ % hypercube, the second least crowded hypercube is also found

​ % to choose other leaders from.

​ if size(Archive,1)>1

​ counter=0;

​ for newi=1:size(Archive,1)

​ if sum(Delta.Position=Archive(newi).Position)=0

​ counter=counter+1;

​ rep2(counter,1)=Archive(newi);

​ end

​ end

​ Beta=SelectLeader(rep2,beta);

​ end

​ % This scenario is the same if the second least crowded hypercube

​ % has one solution, so the delta leader should be chosen from the

​ % third least crowded hypercube.

​ if size(Archive,1)>2

​ counter=0;

​ for newi=1:size(rep2,1)

​ if sum(Beta.Position=rep2(newi).Position)=0

​ counter=counter+1;

​ rep3(counter,1)=rep2(newi);

​ end

​ end

​ Alpha=SelectLeader(rep3,beta);

​ end

​ % 同GWO一样

​ % Eq.(3.4) in the paper

​ c=2.*rand(1, nVar);

​ % Eq.(3.1) in the paper

​ D=abs(c.*Delta.Position-GreyWolves(i).Position);

​ % Eq.(3.3) in the paper

​ A=2.a.rand(1, nVar)-a;

​ % Eq.(3.8) in the paper

​ X1=Delta.Position-A.*abs(D);

​ % Eq.(3.4) in the paper

​ c=2.*rand(1, nVar);

​ % Eq.(3.1) in the paper

​ D=abs(c.*Beta.Position-GreyWolves(i).Position);

​ % Eq.(3.3) in the paper

​ A=2.a.rand()-a;

​ % Eq.(3.9) in the paper

​ X2=Beta.Position-A.*abs(D);

​ % Eq.(3.4) in the paper

​ c=2.*rand(1, nVar);

​ % Eq.(3.1) in the paper

​ D=abs(c.*Alpha.Position-GreyWolves(i).Position);

​ % Eq.(3.3) in the paper

​ A=2.a.rand()-a;

​ % Eq.(3.10) in the paper

​ X3=Alpha.Position-A.*abs(D);

​ % Eq.(3.11) in the paper

​ GreyWolves(i).Position=(X1+X2+X3)./3;

​ % Boundary checking

​ GreyWolves(i).Position=min(max(GreyWolves(i).Position,lb),ub);

​ GreyWolves(i).Cost=fobj(GreyWolves(i).Position')';

​ end

​ % 支配关系、存档、网格更新

​ GreyWolves=DetermineDomination(GreyWolves);

​ non_dominated_wolves=GetNonDominatedParticles(GreyWolves);

​ Archive=[Archive

​ non_dominated_wolves];

​ Archive=DetermineDomination(Archive);

​ Archive=GetNonDominatedParticles(Archive);

​ for i=1:numel(Archive)

​ [Archive(i).GridIndex Archive(i).GridSubIndex]=GetGridIndex(Archive(i),G);

​ end

​ if numel(Archive)>Archive_size

​ EXTRA=numel(Archive)-Archive_size;

​ Archive=DeleteFromRep(Archive,EXTRA,gamma);

​ Archive_costs=GetCosts(Archive);

​ G=CreateHypercubes(Archive_costs,nGrid,alpha);

​ end

​ disp(['In iteration ' num2str(it) ': Number of solutions in the archive = ' num2str(numel(Archive))]);

​ save results

​ % Results

​ costs=GetCosts(GreyWolves);

​ Archive_costs=GetCosts(Archive);

​ hold off

​ plot(costs(1,:),costs(2,:),'k.');

​ hold on

​ plot(Archive_costs(1,:),Archive_costs(2,:),'rd');

​ legend('Grey wolves','Non-dominated solutions');

​ drawnow

end

灰狼优化算法(MOGWO)的更多相关文章

  1. [Algorithm] 群体智能优化算法之粒子群优化算法

    同进化算法(见博客<[Evolutionary Algorithm] 进化算法简介>,进化算法是受生物进化机制启发而产生的一系列算法)和人工神经网络算法(Neural Networks,简 ...

  2. 基于网格的分割线优化算法(Level Set)

    本文介绍一种网格分割线的优化算法,该方法能够找到网格上更精确.更光滑的分割位置,并且分割线能够自由地合并和分裂,下面介绍算法的具体原理和过程. 曲面上的曲线可以由水平集(level set)形式表示, ...

  3. paper 8:支持向量机系列五:Numerical Optimization —— 简要介绍求解求解 SVM 的数值优化算法。

    作为支持向量机系列的基本篇的最后一篇文章,我在这里打算简单地介绍一下用于优化 dual 问题的 Sequential Minimal Optimization (SMO) 方法.确确实实只是简单介绍一 ...

  4. MOPSO 多目标例子群优化算法

    近年来,基于启发式的多目标优化技术得到了很大的发展,研究表明该技术比经典方法更实用和高效.有代表性的多目标优化算法主要有NSGA.NSGA-II.SPEA.SPEA2.PAES和PESA等.粒子群优化 ...

  5. SMO优化算法(Sequential minimal optimization)

    原文:http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html SMO算法由Microsoft Research的John C. ...

  6. 优化算法-BFGS

    优化算法-BFGS BGFS是一种准牛顿算法, 所谓的"准"是指牛顿算法会使用Hessian矩阵来进行优化, 但是直接计算Hessian矩阵比较麻烦, 所以很多算法会使用近似的He ...

  7. NYOJ-63 小猴子下落(二叉树及优化算法详解)

      小猴子下落 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 有一颗二叉树,最大深度为D,且所有叶子的深度都相同.所有结点从左到右从上到下的编号为1,2,3,··· ...

  8. DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week2优化算法

    1. Mini-batch梯度下降法 介绍 假设我们的数据量非常多,达到了500万以上,那么此时如果按照传统的梯度下降算法,那么训练模型所花费的时间将非常巨大,所以我们对数据做如下处理: 如图所示,我 ...

  9. 常见优化算法统一框架下的实现:最速下降法,partan加速的最速下降法,共轭梯度法,牛顿法,拟牛顿法,黄金分割法,二次插值法

    常见优化算法实现 这里实现的主要算法有: 一维搜索方法: 黄金分割法 二次差值法 多维搜索算法 最速下降法 partan加速的最速下降法 共轭梯度法 牛顿法 拟牛顿法 使用函数表示一个用于优化的目标, ...

  10. deeplearning.ai 改善深层神经网络 week2 优化算法 听课笔记

    这一周的主题是优化算法. 1.  Mini-batch: 上一门课讨论的向量化的目的是去掉for循环加速优化计算,X = [x(1) x(2) x(3) ... x(m)],X的每一个列向量x(i)是 ...

随机推荐

  1. JOISC 2022 记录

    Day1 T1 Jail 操作很类似华容道.由于这题是可以树,同时每一个人走的都是最短路,这也就意味着不会出现通过好多个人一起的挪动来匀出空间. 所以如果合法,必然存在一种方案是每一次直接将一个人挪到 ...

  2. tensorflow解决回归问题简单案列

    1 待拟合函数 noise服从均值为0,方差为15的正太分布,即noise ~ N(0,15). 2 基于模型的训练 根据散点图分布特点,猜测原始数据是一个二次函数模型,如下: 其中,a,b,c为待训 ...

  3. postgresql备份和恢复操作

    1.介绍 最近项目上用了postgresql数据库,部署的时候需要备份数据库并在现场进行恢复操作,特此记录.我是在windows上安装的pgadmin4,此处用cmd下操作的: 备份命令:pg_dum ...

  4. 麒麟系统开发笔记(十一):在国产麒麟系统上使用gdb定位崩溃异常方法流程进阶定位代码行数及专项测试Demo

    前言   上一篇,通过研究,可以定位到函数,本篇进一步优化,没有行数,程序较为复杂的时候,就无法定位,所以进一步定位.  本篇做了qBreakpad的研究,但是没有成功,过程也还是填出来,后来突然注意 ...

  5. django时区相关说明

    # naive time 从字面意思上理解,这是个"幼稚的时间",所以可以理解为它是个本地时间,不带时区信息,不能直接用于存储,如下 import datetime datetim ...

  6. centos7安装桌面-GNOME

    CENTOS7安装桌面系统 GNOME桌面 # yum安装 # 更新已安装软件 yum upgrade -y # 安装额外yum源 yum install epel-release -y # 安装X ...

  7. 【LeetCode回溯算法#11】解数独,这次是真的用回溯法处理二维数组

    解数独 力扣题目链接(opens new window) 编写一个程序,通过填充空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出 ...

  8. 启动Study.BlazorOne项目

    由于Study.Trade模块的Blazor是基于国内著名的BootstrapBlazor组件,因此Study.BlazorOne项目也必须添加对BootstrapBlazor的支持. # 1.去Bo ...

  9. 【Azure Key Vault】Key Vault能不能生成DigiCert证书?能不能自动 Rotate 证书呢?

    问题描述 因为Azure Key Vault服务上保管的证书可以轻松的与其他Azure服务集成使用,所以需要知道 Key Vault 能不能生成 DigiCert 证书?能不能自动 Rotate 证书 ...

  10. 【Azure 应用服务】Azure Function (PowerShell) 执行时报错 "out of memory"

    问题描述 在Azure Function App服务中,创建一个PowerShell脚本的函数,遇见了OOM(Out Of Memory)的异常报错: 2022-01-10T07:44:37 Welc ...