灰狼优化算法(MOGWO)
灰狼优化算法(MOGWO)
摘要
- 固定大小的外部档案用来保存帕累托优化解
- 在多目标搜索空间中,这个档案被用来定义狼群社会等级和捕猎行为
- 这个算法在10个多目标测试集进行测试,并与MOEA/D和MOPSO进行对比
引言
- 将多个目标集成一个单一的目标
两个缺点:一个均匀分布的权重不能保证生成一组均匀分布的帕累托优化解集;由于不能使用负权重,且所有权重之和必须为常数,该方法无法找帕累托最优前沿的非凸区域。
- 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多了两个新增部分:
- 一个档案用于存储所得帕累托最优解集和进行非支配排序
- 选择策略,用于选择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)的更多相关文章
- [Algorithm] 群体智能优化算法之粒子群优化算法
同进化算法(见博客<[Evolutionary Algorithm] 进化算法简介>,进化算法是受生物进化机制启发而产生的一系列算法)和人工神经网络算法(Neural Networks,简 ...
- 基于网格的分割线优化算法(Level Set)
本文介绍一种网格分割线的优化算法,该方法能够找到网格上更精确.更光滑的分割位置,并且分割线能够自由地合并和分裂,下面介绍算法的具体原理和过程. 曲面上的曲线可以由水平集(level set)形式表示, ...
- paper 8:支持向量机系列五:Numerical Optimization —— 简要介绍求解求解 SVM 的数值优化算法。
作为支持向量机系列的基本篇的最后一篇文章,我在这里打算简单地介绍一下用于优化 dual 问题的 Sequential Minimal Optimization (SMO) 方法.确确实实只是简单介绍一 ...
- MOPSO 多目标例子群优化算法
近年来,基于启发式的多目标优化技术得到了很大的发展,研究表明该技术比经典方法更实用和高效.有代表性的多目标优化算法主要有NSGA.NSGA-II.SPEA.SPEA2.PAES和PESA等.粒子群优化 ...
- SMO优化算法(Sequential minimal optimization)
原文:http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html SMO算法由Microsoft Research的John C. ...
- 优化算法-BFGS
优化算法-BFGS BGFS是一种准牛顿算法, 所谓的"准"是指牛顿算法会使用Hessian矩阵来进行优化, 但是直接计算Hessian矩阵比较麻烦, 所以很多算法会使用近似的He ...
- NYOJ-63 小猴子下落(二叉树及优化算法详解)
小猴子下落 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 有一颗二叉树,最大深度为D,且所有叶子的深度都相同.所有结点从左到右从上到下的编号为1,2,3,··· ...
- DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week2优化算法
1. Mini-batch梯度下降法 介绍 假设我们的数据量非常多,达到了500万以上,那么此时如果按照传统的梯度下降算法,那么训练模型所花费的时间将非常巨大,所以我们对数据做如下处理: 如图所示,我 ...
- 常见优化算法统一框架下的实现:最速下降法,partan加速的最速下降法,共轭梯度法,牛顿法,拟牛顿法,黄金分割法,二次插值法
常见优化算法实现 这里实现的主要算法有: 一维搜索方法: 黄金分割法 二次差值法 多维搜索算法 最速下降法 partan加速的最速下降法 共轭梯度法 牛顿法 拟牛顿法 使用函数表示一个用于优化的目标, ...
- deeplearning.ai 改善深层神经网络 week2 优化算法 听课笔记
这一周的主题是优化算法. 1. Mini-batch: 上一门课讨论的向量化的目的是去掉for循环加速优化计算,X = [x(1) x(2) x(3) ... x(m)],X的每一个列向量x(i)是 ...
随机推荐
- 100 行代码实现用户登录注册与 RESTful 接口 - 手把手教程附 Python 源码
在开发大多数应用时,用户系统都是必不可少的部分,而我们总是需要开发围绕用户的登录,注册,获取,更新等接口.在这篇文章将带你用一百多行代码简洁地实现一套这样的用户鉴权与 RESTful 接口,并使用 S ...
- P8670 [蓝桥杯 2018 国 B] 矩阵求和 题解
题目传送门 前置知识 欧拉函数 解法 欧拉反演,简单地推下式子即可. \(\begin{aligned}\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} \gcd ...
- JS leetcode 找到所有数组中消失的数字 题解分析
壹 ❀ 引 十天前做的一道题了,一直没整理,今天才花时间去读了官方题解思路,这道题也凸显出了算法思路的重要性,执行耗时差的真不是一点半点.题目来自448. 找到所有数组中消失的数字,题目描述如下: 给 ...
- NC17508 指纹锁
题目链接 题目 题目描述 HA实验有一套非常严密的安全保障体系,在HA实验基地的大门,有一个指纹锁. 该指纹锁的加密算法会把一个指纹转化为一个不超过1e7的数字,两个指纹数值之差越小,就说明两 ...
- 两台redhat7虚拟机配置ssh免密访问
说明 有时候为了方便搭建各种集群环境,需要配置多台虚拟机之间可以互相免密码访问.本文就介绍一下这个知识点,希望所帮助的朋友给老徐点个赞:) 两台虚拟机环境配置如下: 虚拟机1:192.168.56.1 ...
- SpringCloud Bus动态刷新中心化配置
说明 上一篇我们介绍了配置中心实战,并留下了一个配置修改后如何实现自动刷新的问题,下面就实际操作一下,首先是手动刷新单个微服务,其次是利用消息总线实现全部刷新. 手动动态刷新 动态刷新是当远程配置文件 ...
- Python之记录日志
日志级别 DEBUG: 最低级别,用于调试小细节. INFO:记录程序中的一般事件或确认一切工作正常. WARNING:表示可能出现的问题,但不会终止程序工作. ERROR:用于记录错误,会导致程序失 ...
- Innodb 存储引擎表
目录 索引组织表 Innodb逻辑存储结构 表空间 段 区 页 行 Innodb 行记录格式 Compact Redundant 行溢出数据 Compressed 和 Dynamic 行记录格式 ch ...
- c2工具sliver的python客户端无法修改grpc超时时间的解决办法
业务需要,调用了很多implants来执行对应系统上的命令, 但是无论怎么指定interactive.py中execute方法参数, 命令执行超时时间总是30. 后面通过扩展execute方法增加一个 ...
- gitlab/github 设置 SSH
最近项目要部署到另一台机器上,故要重新 git clone 一下 一开始只是简单的设置 config 里的 user.name 和 user.email,以为就可以 clone(邮箱账户拥有项目的权限 ...