灰狼优化算法(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. JS Leetcode 26. 删除有序数组中的重复项 题解分析,字典与快慢双指针

    壹 ❀ 引 本题来自LeetCode26. 删除有序数组中的重复项,是一道简单题,题目描述如下: 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组 ...

  2. 用ELK分析每天4亿多条腾讯云MySQL审计日志(2)--EQL

    上一篇介绍了用ELK分析4亿多条审计日志过程,现在介绍如何用Python3分析ES的程序 需要分析的核心库审计数据: 1,950多张表,几十个账号, 2,5种操作类型(select,update,in ...

  3. 探秘C语言数组:解锁高效数据管理与多维空间编程技巧"

    欢迎大家来到贝蒂大讲堂 养成好习惯,先赞后看哦~ 所属专栏:C语言学习 贝蒂的主页:Betty's blog 引言 前面贝蒂给大家介绍了选择结构与循环结构,今天,贝蒂准备给大家介绍C语言中一个非常重要 ...

  4. tox运行报C901错误解决办法

    # 报C901表示该函数太复杂! 解决办法 在函数上添加如下注释即可 # flake8: noqa: C901

  5. 机器学习策略篇:详解满足和优化指标(Satisficing and optimizing metrics)

    满足和优化指标 要把顾及到的所有事情组合成单实数评估指标有时并不容易,在那些情况里,发现有时候设立满足和优化指标是很重要的,让我告诉是什么意思吧. 假设已经决定很看重猫分类器的分类准确度,这可以是\( ...

  6. 【Azure App Service】同一个App Service下创建多个测试站点的方式

    问题描述 在一个App Service中,部署多个应用,每个应用相互独立,类似与IIS中在根目录下创建多个子应用的情况. 问题解答 可以的.通过App Service Configuration页面, ...

  7. Apache Hudi 在 vivo 湖仓一体的落地实践

    作者:vivo 互联网大数据团队 - Xu Yu 在增效降本的大背景下,vivo大数据基础团队引入Hudi组件为公司业务部门湖仓加速的场景进行赋能.主要应用在流批同源.实时链路优化及宽表拼接等业务场景 ...

  8. Java 常用类 String的常用方法(2)

    1 /** 2 * String 常用方法(2) 3 * boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束 4 * boolean startsWith ...

  9. Java 类的结构之三 :构造器(或构造方法,constructor)的使用

    1 /* 2 * 类的结构之三 :构造器(或构造方法,constructor)的使用 3 * construct:建设 建造 4 * 5 * 一.构造器的作用: 6 * 创建对象 7 * 初始化对象的 ...

  10. Java 从键盘输入不确定的整数 并判断读入的整数和负数的个数,输入0时候结束

    1 /** 2 * 从键盘输入不确定的整数 并判断读入的整数和负数的个数,输入0时候结束 3 * 4 */ 5 6 Scanner scan = new Scanner(System.in); 7 8 ...