多目标优化算法——多目标粒子群优化算法(MOPSO)

Handling Multiple Objectives With Particle Swarm Optimization(多目标粒子群优化算法)

一、摘要:

本文提出了一种将帕累托优势引入粒子群优化算法的方法,使该算法能够处理具有多个目标函数的问题。与目前其他将粒子群算法扩展到解决多目标优化问题的建议不同,我们的算法使用二级(即外部)粒子库,这些粒子库稍后被其他粒子用来引导它们自己的飞行。我们还加入了一个特殊的突变算子,丰富了我们算法的探索能力。采用几个测试函数和指标,从进化多目标优化的标准文献中验证了所提出的方法。结果表明,该方法具有很强的竞争性,可以被认为是解决多目标优化问题的可行选择。

二、概念解释

1.支配(Dominance ) : 在多目标优化问题中,如果个体p至少有一个目标比个体q好,而且个体p的所有目标都不比q差;那么称个体p支配个体q

S1支配S2:

在这里插入图片描述

S1和S2互不支配:

在这里插入图片描述

2.序值(Rank): 如果p支配q,那么p的序值比q低;如果p和q互不支配,那么p和q有相同的序值

3.拥挤距离(Crowding Distance): 表示个体之间的拥挤程度,测量相同序值个体之间的距离。

4.帕累托(Pareto)

pareto最优解与pareto最优解集:
如果对于优化问题的一个解A,不存在其他的解可以支配解A,那么解A就是一个pareto最优解。显然pareto最优解不只一个,由这些解组成的集合就称为pareto最优解集。pareto最优解集中所有解的互相之间都是非支配的关系,也就是解集中不存在任何一个解完全优于其他解(要和平共处)。所以,和PSO最后要求出唯一一个最优解不同,MOPSO的目标是求出一个互相之间为非支配关系的解的集合,也就是pareto最优解集。

帕累托最优解也称为非劣解、可容许解或有效解;它们对应的向量称为非支配向量。

下图中:S1、S3、S5、S6、S9之间互不支配,且不被其他解支配,这些解称为Pareto解或非支配解。在下图的多目标优化问题中,如果在整个可行的变量空间中再不能找到解能够支配上述五个解,那么上述五个解称为Pareto最优解,所有的Pareto最优解组成Pareto最优解集

在这里插入图片描述

5.帕累托最优解对应的目标函数值就是帕累托最优前沿,对于两个目标的问题,其Pareto最优前沿通常是条线。而对于多个目标,其Pareto最优前沿通常是一个超曲面

6.外部存档:因为粒子群算法在迭代过程中各个粒子的速度和位置都是不断变化的,适应度(目标函数)也随之变化,所以一般都需要采用一个外部存档将pareto最优解的数据存储下来。

三、算法原理

​ 1.算法流程图
在这里插入图片描述

  1. MOPSO:
  • 根据pareto支配原则,计算得到Archive集(存放当前的非劣解)计算局部最优pbest
  • 计算Archive集中的拥挤度在Archive集选择全局最优gbest
  • 更新粒子的速度和位置,并计算适应值更新Archive集(需注意防止溢出)
  1. PSO和MOPSO的大框架一致,MOPSO只是根据多目标问题改进了PSO中的pbest和gbest的选取方法
  • 速度更新公式:

在这里插入图片描述

  • 位置更新公式:

在这里插入图片描述

​ 当一个决策变量超出其边界时,我们会做两件事:

​ 1)决策变量取其相应边界(下边界或上边界)的值;

​ 2)它的速度乘以**-1**,以便它在相反的方向上搜索。

  • pbest的选取:
    单目标问题中,PSO可以根据适应度直接找出该粒子历史最好的位置
    多目标问题中,MOPSO找出该粒子历史最好的位置(保存于该粒子结构体的一个属性中),(即如果记忆中的位置支配当前位置时,则保留记忆中的位置;否则当前位置取代记忆中的位置;)如果在更新当前粒子的历史最好位置发现当前位置与历史最佳互不支配0.5概率随机选一个

    在这里插入图片描述

  • gbest的选取:
    单目标问题中,PSO可以根据适应度直接找出当前最好的粒子
    多目标问题中,MOPSO根据Pareto找出当前最好的粒子集合,最后找到最不拥挤的那个粒子

    MOPSO中,gbest变成了REP[h],REP[h]是从存储库中获取的值;索引h的选择方式如下:那些包含一个以上粒子的超立方体的适应度值等于:任何数字x>1除以它们包含的粒子数的结果。这旨在降低那些包含更多粒子的超立方体的适应度,它可以被视为一种适应度共享的形式。然后,我们将这些适应度值应用于轮盘赌来选择超立方体,再选择相应粒子。当选中某个超立方体后,我们随机选择超立方体中的一个粒子。

  1. 外部存档

​ 外部存档主要目的是保存搜索过程中发现的非支配向量的历史记录,由两个主要部分组成:存档控制器网格

存档控制器:它的功能是决定一个解是否能被添加到归档集中。决策过程如下:算法的种群每次迭代发现的非支配向量与外部储存库的向量进行比较,这个外部储存库在一开始的时候是空的。如果外部的归档集是空的,则接受当前解(见Fig1,case1)。如果这个新解被外部归档集中的某个个体支配,则新解将自动被移除(见Fig1,case2)。否则如果外部归档集中的个体没有一个支配想进入归档集的解,则这个解将被存储在外部归档集中。如果归档集中存在某些解被新解支配,则这些解将从归档集中移除(见Fig1,case3、4)。最后,如果外部种群达到最大容量,则启动自适应网格程序(见Fig1,case5)。

在这里插入图片描述

网格:为了获得均匀分布的Pareto前沿,我们的方法使用了[21]中提出的自适应网格技术。其基本思想是使用一个外部归档集储存所有非支配解。在归档集中,目标函数空间被分割成几个区域,如Fig2所示。注意,如果外部种群中的个体在当前网格边界外,则必须重新计算网格并且重新定位网格中的每个个体(见Fig3)。

在这里插入图片描述

自适应网格实际上是一个超立方体形成的空间。这个超立方体的维度和目标函数一样多。每个超立方体可以被解释为一个不含任何个体的地理区域。自适应网格技术的主要优点是其计算开销少于小生境技术。唯一的例外是如果网格在每一代都必须更新。此时,自适应网格技术的计算复杂度和小生境技术的计算复杂度相同。自适应网格用于实现解的均匀分布。为了实现这个目标,有必要提供确定的信息(即子网格的数量)。

  1. 突变算子:突变算子通过引入随机扰动,有效避免了粒子群陷入局部最优,提升了算法的全局搜索能力。均匀突变保证了随机性,而非均匀突变则随着迭代次数的增加逐渐减少突变程度,平衡了探索和开发的关系。
四、ZDT问题运行结果
  1. ZDT1

    在这里插入图片描述

  2. ZDT2

    在这里插入图片描述

  3. ZDT3

    在这里插入图片描述

  4. ZDT4

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。 原文链接:分享|16个含源码和数据集的计算机视觉实战项目 本文将分享16个含源码和数据集的计算机视觉实战项目。具体包括: 1. 人…

Android导出Excel

poi org.apache.poi:poi-ooxml:4.x: 不支持Android使用, 不支持原因:Android底层库不支持xml所需的bean类,使用即报错only supported starting with Android O (–min-api 26) org.apache.poi:poi-ooxml:5.2.0: 支持A…

简历面-面经03

面经04 项目细则 项目名称:基于鸿蒙的爱心云捐赠系统 鸿蒙开发 ArkTS语言 ArkTS在继承TypeScript语法的基础上进行了优化,以提供更高的性能和开发效率。 目前流行的编程语言TypeScript是在JavaScript基础上通过添加类型定义扩展而来的,而A…

Jenkins升级到最新版本后无法启动

1. 场景还原 最近在web界面将jenkins升级到最新版本后,后台无法启动jenkins服务,服务状态如下: 运行jenkins命令提示invalid Java version jenkins --version jenkins: invalid Java version: java version "1.8.0_202" Java(TM)…

【计算机视觉+MATLAB】自动检测并可视化圆形目标:通过 imfindcircles 和 viscircles 函数

引言 自动检测图像中的圆形或圆形对象,并可视化检测到的圆形。 函数详解 imfindcircles imfindcircles是MATLAB中的一个函数,用于在图像中检测并找出圆形区域。 基本语法: [centers, radii] imfindcircles(A, radiusRange) [centers, r…

鸿蒙NEXT元服务:利用App Linking实现无缝跳转与二维码拉起

【效果】 元服务链接格式(API>12适用):https://hoas.drcn.agconnect.link/ggMRM 生成二维码后效果: 【参考网址】 使用App Linking实现元服务跳转:文档中心 草料二维码:草料二维码生成器 【引言】 …

Matlab读取4-D uint8变量需要转变成double型变量

Matlab读取4-D uint8变量需要转变成double型变量 如rgbData是一个4-D uint8变量,里面是像素数据,读取的代码如下: R double(rgbData(z, x, y, 1)); G double(rgbData(z, x, y, 2)); B double(rgbData(z, x, y, 3)); inscribedSpherePixe…

下载安装Android Studio

(一)Android Studio下载地址 https://developer.android.google.cn/studio 滑动到 点击下载文档 打开新网页 切换到english ![](https://i-blog.csdnimg.cn/direct/b7052b434f9d4418b9d56c66cdd59fae.png 等待一会,出现 点同意后&#xff0…

【C/C++】深入解析 Stack 与 Queue 数据结构(详解):实现原理、应用场景与性能优化

文章目录 引言栈(Stack)数据结构详解1. 栈的基本概念2. 栈的实现原理3. C中的栈实现4. 栈的应用场景5. 栈的性能分析6. 实战示例:括号匹配 队列(Queue)数据结构详解1. 队列的基本概念2. 队列的实现原理3. C中的队列实现…

Flutter:encrypt插件 AES加密处理

1、pubspec.yaml导入插件 cupertino_icons: ^1.0.8 # 密码加密 encrypt: 5.0.3encrypt封装 import package:encrypt/encrypt.dart; /// 加密类 class EncryptUtil {static final EncryptUtil _instance EncryptUtil._internal();factory EncryptUtil() > _instance;Encrypt…

深入理解HTML基本结构:构建现代网页的基石

深入理解HTML基本结构:构建现代网页的基石 在数字时代,HTML(超文本标记语言)是构建和设计网页的基础。了解HTML的基本结构对于任何希望掌握网页开发的人来说至关重要。本文将详细介绍HTML文件的基本骨架,包括其核心标…

【css实现收货地址下边的平行四边形彩色线条】

废话不多说&#xff0c;直接上代码&#xff1a; <div class"address-block" ><!-- 其他内容... --><div class"checked-ar"></div> </div> .address-block{height:120px;position: relative;overflow: hidden;width: 500p…

从零开始配置Qt+VsCode环境

从零开始配置QtVsCode环境 文章目录 从零开始配置QtVsCode环境写在前面扩展安装及配置Qt Configure配置 VsCode创建Qt工程VsCodeQMakeMinGwVsCodeQMakeMsvcVsCodeCMakeMinGwVsCodeCMakeMsvcQtCreatorQMakeMinGw->VsCodeQtCreatorQMakeMsvc->VsCodeQtCreatorCMakeMinGw-&g…

【前端】JavaScript中的字面量概念与应用详解

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;字面量1. 数字字面量2. 字符串字面量3. 布尔字面量4. 空值字面量&#xff08;null&#xff09;5. 对象字面量6. 数组字面量7. 正则表达式字面量8. 特殊值字面量9. 函数字…

使用Spring Data MongoDB中的MongoTemplate实现分组查询最新的数据

假设我们的mongoDB数据库中有一个集合名为stents的集合&#xff0c;我们想查询出每个支架号对应的最新的一条数据&#xff0c;即有多少个支架就会有对应多少条最新的支架数据。 我们使用Spring Data MongoDB中的MongoTemplate来查询所有支架的最新数据&#xff0c;可以通过构建…

nodejs import 导入module.exports = xxx的模块, 在ES6项目中导入commonJs规范的require模块

在 Node.js 模块化开发中&#xff0c;import遵循的是ES6规范&#xff0c;require遵循的是CommonJS规范&#xff0c;他们都用于加载模块&#xff0c;当我们的项目是使用es6规范时&#xff0c; 需要使用一个地方的commonJs规范的模块&#xff0c; 我们就可以使用 import xxx …

STM32 外设简介

STM32 外设简介 STM32 是由意法半导体 (STMicroelectronics) 开发的一系列基于 ARM Cortex 内核的微控制器&#xff0c;广泛应用于嵌入式系统中。STM32 系列的一个重要特点是其丰富而强大的外设模块&#xff0c;支持多种接口和功能&#xff0c;能满足工业控制、物联网、消费电…

Python使用ffmpeg进行本地视频拉流,并使用训练模型识别人脸,并将识别后的模型推流源码

前言&#xff1a; Windows上搭建nginx-rtsp流媒体服务器&#xff0c;实现FFmpeg推流、录像转rtsp推流 - WayWayWayne - 博客园参考上述文章和一些webRTC前端拉流文章 主要是缕一缕思路和每个部分的代码功能&#xff0c;文件命名高度相似导致。 效果&#xff1a; 代码&#x…

Java面经之JVM

[1]. 说说双亲委派机制&#xff1f; 类的加载器主要有启动类加载器、拓展类加载器、应用程序类加载器、用户自定义类加载器。 当Java程序需要加载一个类时&#xff0c;类加载器首先会检查是否已经加载过该类&#xff0c;如果已经加载过&#xff0c;则直接返回该类&#xff1b…

训练的decoder模型文本长度不一致,一般设置为多大合适,需要覆盖最长的文本长度么

在训练解码器模型时,文本长度不一致是常见的情况,需要根据任务的特性和数据集的长度分布来设置合理的最大长度 (max_length)。以下是一些指导原则,帮助你设置合适的最大长度: 1. 是否需要覆盖最长文本长度 覆盖最长文本长度: 如果任务对完整性要求很高(例如生成数学公式、…