多目标灰狼算法(MOGWO)的Matlab代码详细注释及难点解释

目录

一、外部种群Archive机制

二、领导者选择机制

三、多目标灰狼算法运行步骤

四、MOGWO的Matlab部分代码详细注释

五、MOGWO算法难点解释

5.1 网格与膨胀因子

5.2 轮盘赌方法选择每个超立方体概率


 

      为了将灰狼算法应用于多目标优化问题,在灰狼算法中引入外部种群Archive,用于存储非支配最优解。采用领导者选择策略,从外部种群Archive选择捕食过程中的领导者eq?%5Calpha狼、eq?%5Cbeta狼及eq?%5Cdelta狼。

一、外部种群Archive机制

       算法每次迭代会产生新的个体,当个体要加入外部种群Archive时,将这些个体逐一与Archive中的个体进行比较,将会出现4种情况:

       (1)如果新个体被至少一个存档中的个体支配,则该个体不加入存档。 (2)如果新个体支配存档中的一个或多个个体,则新个体加入存档,同时将被其支配的个体从存档中删除。 (3)如果新个体与存档中的任一个体互不支配,则将该个体加入存档。 (4)如果存档中已满,应首先运行网格机制,重新安排目标空间的划分,并在最拥挤组中随机删除某些个体,新的个体被插入到不拥挤组中,提高接近最优前沿的多样性。

2ac50df81304fea547d97e5775020c4f.jpeg

二、领导者选择机制

        在存档中存放所有的非支配最优解,采用轮盘赌的方式从存档中选取头狼(包括eq?%5Calpha狼、eq?%5Cbeta狼及eq?%5Cdelta狼),选择搜索空间中最不拥挤的区域,并给出其非支配解中的一个作为eq?%5Calpha狼、eq?%5Cbeta狼或eq?%5Cdelta狼。为了提高算法的探索能力,每一个个体被选择的概率与其所在组的个体数成反比。

        如果在最不拥挤的超立方体中少于三个解,也会找到第二个不拥挤的超立方体来选择其它领导者,暂时将Delta排除在存档之外,以避免选择相同领导者;如果第二个最不拥挤的超立方体有一个解,这种情况也是一样的,因此应该从第三个最不拥挤的超立方体,选择其它领导者,暂时将Beta排除在存档之外,以避免选择相同领导者。

三、多目标灰狼算法运行步骤

2b42a482369b40b0ab33b32691219db0.png

四、MOGWO的Matlab部分代码详细注释

完整注释代码私信获取

 

clear all
clc
drawing_flag = 1;
nVar=5;        %变量维数
fobj=@(x) ZDT1(x);
lb=zeros(1,5); %下限
ub=ones(1,5);  %上限
VarSize=[1 nVar];
GreyWolves_num=100; %种群规模
for i=1:GreyWolves_num
    for j=1:nVar
        p1=2*nVar+3;
        r=2*cos(2*pi*j/p1);
        G(i,j)=mod(r*i,1);
    end
end
Boundary_no= size(ub,2); % numnber of boundaries

% If the boundaries of all variables are equal and user enter a signle
% number for both ub and lb
if Boundary_no==1
    X=G.*(ub-lb)+lb;
end

% If each variable has a different lb and ub
if Boundary_no>1
    for i=1:nVar
        ub_i=ub(i);
        lb_i=lb(i);
        X(:,i)=G(:,i).*(ub_i-lb_i)+lb_i;
    end
end

MaxIt=100;  % 最大迭代次数
Archive_size=100;   % 存档规模
alpha=0.1;  % 网格膨胀因子
nGrid=10;   % 每一维上的网格数
beta=4;     % 领导者选择压力因子
gamma=2;    % 额外的(待删除)存档个体选择压力
% 初始化
GreyWolves=CreateEmptyParticle(GreyWolves_num);
for i=1:GreyWolves_num
    GreyWolves(i).Velocity=0;
    GreyWolves(i).Position=zeros(1,nVar);
    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)     %对于第i个个体,第j个目标
    [Archive(i).GridIndex, Archive(i).GridSubIndex]=GetGridIndex(Archive(i),G);
end


%% MOGWO main loop
for it=1:MaxIt
    a=2-it*((2)/MaxIt);     %a从2线性减小到0
    for i=1:GreyWolves_num  %对于每个搜索个体     
        clear rep2
        clear rep3       
        % Choose the alpha, beta, and delta grey wolves
        %领导者选择组件选择搜索空间中最不拥挤的区域,并给出其非支配解中一个作为alpha,、beta或delta狼

        Delta=SelectLeader(Archive,beta);
        Beta=SelectLeader(Archive,beta);
        Alpha=SelectLeader(Archive,beta);  

        % 如果在最不拥挤的超立方体中少于三个解,也会找到第二个不拥挤的超立方体来选择其它领导者
        % 暂时将Delta排除在存档之外,以避免选择相同领导者
        if size(Archive,1)>1           %如果存档中不止一个个体
            counter=0;
            for newi=1:size(Archive,1) %对于存档中每个个体
                if sum(Delta.Position~=Archive(newi).Position)~=0 %如果Delta是存档中的个体
                    counter=counter+1;
                    rep2(counter,1)=Archive(newi);                %rep2是排除Delta后的存档
                end
            end
            Beta=SelectLeader(rep2,beta); %在排除Delta后的存档中用轮盘赌法选择Beta
        end  

.
.
.
.
.
.
.

function [occ_cell_index ,occ_cell_member_count]=GetOccupiedCells(pop)
    GridIndices=[pop.GridIndex];         %存档中每个个体在网格中的位置
    occ_cell_index=unique(GridIndices);  %GridIndices剔除一个小网格中的重复值,从小到大排序 
    occ_cell_member_count=zeros(size(occ_cell_index));
    m=numel(occ_cell_index);             %存档中个体占据的小网格数
    for k=1:m
        occ_cell_member_count(k)=sum(GridIndices==occ_cell_index(k)); %计算小网格上解数量
    end    
end


function i=RouletteWheelSelection(p)
    r=rand;
    c=cumsum(p);            %累计概率
    i=find(r<=c,1,'first'); %r首次<=c的第几个值
end


function z=ZDT1(x)
n=numel(x);
f1=x(1);
g=1+9/(n-1)*sum(x(2:end));
h=1-sqrt(f1/g);
f2=g*h;
z=[f1
    f2];
end

function z=ZDT2(x)
n=numel(x);
f1=x(1);
g=1+9/(n-1)*sum(x(2:end));
h=1-(f1/g)^2;
f2=g*h;
z=[f1
    f2];
end

function z=ZDT3(x)
n=numel(x);
f1=x(1);
g=1+9/(n-1)*sum(x(2:end));
h=1-f1/g-(f1/g)*sin(10*pi*x(1));
f2=g*h;
z=[f1
    f2];
end

function z=ZDT4(x)
n=numel(x);
f1=x(1);
sum=0;
for i=2:n
    sum = sum+(x(i)^2-10*cos(4*pi*x(i)));
end
g=1+(n-1)*10+sum;
f2=g*(1-(f1/g)^0.5);
z=[f1
    f2];
end

五、MOGWO算法难点解释

5.1 网格与膨胀因子

       算法中的网格其实就是将目标空间划分为一个个网格,划分网格后就可以知道每个网格中有几个粒子,同理也就能知道某个粒子在哪个网格中。网格膨胀因子就是将网格膨胀的参数。图一中第一坐标外的就是膨胀出的网格。eq?mincj就是膨胀后的网格下边界,eq?maxcj就是膨胀后的网格上边界。

ec67a81d313046aa862519b53c87adf4.png

图1 网格膨胀因子解释图

 mincj=min(costs(j,:));  %每个目标上的存档个体目标函数最小值
 maxcj=max(costs(j,:));  %每个目标上的存档个体目标函数的最大值      
 dcj=alpha*(maxcj-mincj);      
 mincj=mincj-dcj;          
 maxcj=maxcj+dcj;             

5.2 轮盘赌方法选择每个超立方体概率

 beta=4;     % 领导者选择压力因子
.
.
.
 p=occ_cell_member_count.^(-beta);
 p=p/sum(p); %通过轮盘赌方法进行选择,每个超立方体概率 
 selected_cell_index=occ_cell_index(RouletteWheelSelection(p)); %用轮盘赌选择的所在区域 
.
.
.
 function i=RouletteWheelSelection(p)
    r=rand;
    c=cumsum(p);            %累计概率
    i=find(r<=c,1,'first'); %r首次<=c的第几个值
 end

         例: occ_cell_member_count=[2 1 1 1 1 1 1],则 p = [0.0103 0.1649 0.1649 0.1649 0.1649 0.1649 0.1639],因为这里 p = occ_cell_member_count.^(-beta))。则累计概率c = [0.0103 0.1753 0.3402 0.5052 0.6701 0.8351 1]。因为这里eq?c%3Dcumsum%5Cleft%20%28%20p%20%5Cright%20%29 。  

         如果运行后随机数eq?r%3Drand%3D0.3828,则eq?r首次eq?%5Cleq%20c时位置为4,所以eq?i%3D4。选择的区域selected_cell_index为occ_cell_index数组中第4个位置的区域。这里假设occ_cell_index=[17 19 26 33 43 62 82],就有selected_cell_index=33。          

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/42645.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

extern “C“的作用效果

代码 1.cpp #include <string.h>struct s {char data1;short data2;int data3;long data4; };// 定义C函数&#xff0c;汇编符号标头由g编译器按规则生成 void fun(void) {struct s src;src.data1 A;src.data2 2;src.data3 3;src.data4 4;struct s res;memcpy(&…

深度学习——过拟合和Dropout

基本概念 什么是过拟合&#xff1f; 过拟合&#xff08;Overfitting&#xff09;是机器学习和深度学习中常见的问题之一&#xff0c;它指的是模型在训练数据上表现得很好&#xff0c;但在未见过的新数据上表现较差的现象。 当一个模型过度地学习了训练数据的细节和噪声&#…

web地理信息系统开发开源架构设计

Web端地理信息软件系统研发一般包括前端展示、后端服务、地图服务、数据库等几大部分。为了节约项目经费&#xff0c;实现地理信息软件项目研发&#xff0c;采用了开源技术路线&#xff0c;通过对比&#xff0c;采用如下开发架构&#xff1a; 1、前端展示 前端展示采用angular…

FTP与HTTP: 哪种协议更适合大文件传输?

随着互联网技术的发展&#xff0c;网络传输已成为了现代社会中不可或缺的一部分。无论是文本、图像、音频、视频等各种类型的数据&#xff0c;相应的传输协议也在不断地发展和更新。FTP&#xff08;File Transfer Protocol&#xff09;和HTTP&#xff08;Hyper Text Transfer P…

java电子病历系统源码

电子病历系统采取结构化与自由式录入的新模式&#xff0c;自由书写&#xff0c;轻松录入。化实现病人医疗记录&#xff08;包含有首页、病程记录、检查检验结果、医嘱、手术记录、护理记录等等。&#xff09;的保存、管理、传输和重现&#xff0c;取代手写纸张病历。不仅实现了…

EGE-UNet, 轻量化U-Net

随着transform 的出现&#xff0c;现在语义分割网路结构越来越复杂&#xff0c;轻量化网路也较少了&#xff0c;有些轻量化也只是名义上的轻量化。今天我看到一篇很好的论文&#xff0c;上海交大发表在 MICCAI 2023 的最新研究工作&#xff0c;一个称为Efficient Group Enhance…

信息与通信工程学科面试准备——通信原理|信息与通信工程方向保研面试题集|BUAA

注意&#xff1a; 以下内容&#xff0c;基本上都是二系通信方向保研复试被提问过的内容。如果是专硕&#xff0c;那么电路分析、电磁场、DSP等方面的问题会更多&#xff0c;这里主要针对通信学硕。以下内容不能保证全覆盖&#xff1a;有的同学被问到什么是范德蒙行列式&#x…

html a标签换行显示

文章目录 用css display属性不用css&#xff0c;可以用<br>标签换行示例 用css display属性 可以使用CSS的display属性来实现多个a标签每行显示一个。 HTML代码&#xff1a; <div class"link-container"><a href"#">Link 1</a>…

前端工程化第一章:webpack5基础(上)

文章目录 1. 什么是webpack&#xff1f;2. webpack使用2.2. 前置知识2.1. 创建一个项目 3. webpack打包3.1. 创建一个webpack.config.js文件3.2. 入口&#xff08;entry&#xff09;3.2.1. webpack.config.js3.2.2. src/index.js3.2.3. package.json 3.3. 输出&#xff08;outp…

基于深度学习的高精度课堂人脸检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度课堂人脸检测系统可用于日常生活中或野外来检测与定位课堂人脸目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的课堂人脸目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标…

【论文阅读】2020ECCV-DFDNet

Blind Face Restoration via Deep Multi-scale Component Dictionaries 中文&#xff1a;基于深度多尺度分量字典的盲人脸复原 paper&#xff1a; code&#xff1a;https://github.com/csxmli2016/DFDNet 摘要&#xff1a; 近年来&#xff0c;基于参考的人脸恢复方法因其在真…

使用Seata解决分布式事务问题

说明&#xff1a;在分布式架构下&#xff0c;一个请求需要多个微服务来实现。当一个请求牵扯到多个微服务时&#xff0c;事务问题就变得麻烦起来。 问题描述 现在有三个服务&#xff0c;分别是账户服务、库存服务和订单服务&#xff0c;生成一个订单&#xff0c;需要确保商品…

Docker 命令(二)

查看 docker 版本信息 docker version #查看版本信息docker 信息查看 docker info Client:Context: defaultDebug Mode: falsePlugins:app: Docker App (Docker Inc., v0.9.1-beta3)buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)Server:Containers: 0 …

Python补充笔记3-bug问题

目录 一、Bug 粗心导致的语法错误​ ​编辑 知识不熟练导致的错误​ 思路不清晰导致的问题​ 被动掉坑​ 二、try…except…else结构​ 三、try…except…else…finally结构​ 四、常见异常类型​编辑traceback模块 pycharm调试 一、Bug 粗心导致的语法错误 知识不熟练导致的…

【Vue 面试题10道】我好像之前想过要写,不过之前JavaScript面试题比较多,就暂时略过了,这些应该几乎把常问的都包括了

博主&#xff1a;_LJaXi Or 東方幻想郷 专栏&#xff1a; 前端面试题 开发工具&#xff1a;Vs Code 本题针对 Vue2 这些几乎把常用的都包括了&#xff0c;问别的就没意思了&#xff0c;毕竟工作拧螺丝嘛 我都好久不用Vue了&#xff0c;不过用了React再回看Vue感觉好简单啊… 其…

Dubbogo 详解

Dubbogo 详解 简介 dubbo功能很强大的微服务开发框架&#xff0c;支持多种通信协议&#xff0c;并具有流量治理的功能。 dubbo在有了大转变&#xff0c;拥抱了云原生&#xff0c;从哪些方面可以体现呢&#xff1f; 推出了自己的Trip协议修复了服务发现的级别&#xff0c;之…

20230723红米Redmi Note8Pro掉在水里的处理步骤

20230723红米Redmi Note8Pro掉在水里的处理步骤 2023/7/23 18:18 百度搜搜&#xff1a;小米手机进水 破音怎么处理 Redmi Note8Pro 6400万全场景四摄 液冷游戏芯 4500mAh长续航 NFC 18W快充 红外遥控 https://www.zhiliancy.com/a/q5podmr12.html 首页 / 热文 / 内容 小米喇叭…

【从删库到跑路】MySQL数据库的索引(一)——索引的结构(BTree B+Tree Hash),语法等

&#x1f38a;专栏【MySQL】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f970;欢迎并且感谢大家指出小吉的问题 文章目录 &#x1f354;概述&#x1f354;索引结构⭐B-Tree多路平衡查找树&#x1f3f3;️‍&a…

前端技术Vue学习笔记--001

前端技术Vue学习笔记 文章目录 前端技术Vue学习笔记1、Vue2和Vue3比较2、Vue简介3、Vue快速上手4、插值表达式{{}}5、Vue响应式特性6、Vue指令6.1、v-html指令6.2、v-show指令和v-if指令6.3、v-else指令和v-else-if指令6.4、v-on指令6.4.1、v-on指令基础6.4.2、v-on调用传参 6.…

win10电脑便签常驻桌面怎么设置?

你是否曾经因为繁忙的工作而忘记了一些重要的事项&#xff1f;相信很多人都会回答&#xff1a;忘记过&#xff01;其实在快节奏的职场中&#xff0c;我们经常需要记录一些重要的信息&#xff0c;例如会议时间、约见客户时间、今天需要完成的工作任务等。而为了能够方便地记录和…