多目标优化学习笔记2:MOPSO 基本概念及计算流程

2024-02-15 12:18

本文主要是介绍多目标优化学习笔记2:MOPSO 基本概念及计算流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

多目标优化(Multi-objective Optimization)是指迭代搜寻出能够满足所有约束
条件的解,而且可行解都是以点集的形式出现。
多目标优化的可行解是一组可选的可行解,是帕累托前沿线上的点。根据实际需求,在可选解集中挑选出符合实际问题的方案,做出最终选择。

CarlosA. Coello 等在2004年加入Pareto 竞争机制和微粒知识库的多目标粒子群(MOPSO)算法是解决多目标问题的非常经典的方法。较PSO有两个创新点。
基本思想:通过群体中个体之间的协作和信息共享来寻找最优解,它包含有进化计算和群体智能的特点。
关于非支配解(Pareto解)、pareto最优解集,pareto前沿的概念,请移步我前一篇文章
简述多目标优化、非劣解、pareto解概念

一 基本概念

MOPSO算法涉及到的参变量主要有:
粒子群数量;迭代次数;例子的速度范围、位置范围;适应度值;存档阈值;惯性因子;速度因子;网格。
控制参数的选择能够影响算法的性能效率。
一般参数设定:粒子数50个,非劣解集个数上限为50,个体学习因子 C1为 1,群体学习因
C2为 2,变异因子为 0.1,最大迭代次数为 200。

二,单目标和多目标的区别

MOPSO算法与PSO算法的区别主要涉及两个方面:
1,pbest的确定
单目标选择时,两个粒子的对比,只需要对比一下就可以选择出哪个较优。
多目标选择时,两个粒子的对比,并不能对比出哪个好一些。如果粒子的每个目标都要好的话,则该粒子更优。若有些更好,有些更差的话,就无法严格的说哪个好些,哪个差一些。
2,gbest的确定
单目标选择时,选择最优的那个粒子就可以。
多目标选择时,最优的个体有多个,引领种群进化方向的引领者不唯一,是多个。

MOPSO给出的解决方法
1,对于pbest
在不能严格对比出哪个好一些时随机选择一个其中一个作为历史最优。
2,对于gbest
在最优集里面(存档中)根据拥挤程度选择一个领导者。尽量选择不那么密集位置的粒子(在这里用到了网格法)。
MOPSO在选择领导者和对存档(也可以说是pareto临时最优断面)进行更新的时候应用了自适应网格法,详细参考2。
如何选择领带者呢?

MOPSO在存档中选择一个粒子跟随。如何选择呢?根据网格划分,假设每个网格中粒子数个,i代表第几个网格。该网格中的粒子被选择的概率为 ,即粒子越拥挤,则选择的概率越低。这是为了保证能够对未知的区域进行探索。
如何进行存档呢?

在种群更新完成之后,是如何进行存档的呢?MOPSO进行了三轮筛选。

首先,根据支配关系进行第一轮筛选,将劣解去除,剩下的加入到存档中。

其次,在存档中根据支配关系进行第二轮筛选,将劣解去除,并计算存档粒子在网格中的位置。

最后,若存档数量超过了存档阀值,则根据自适应网格进行筛选,直到阀值限额为止。重新进行网格划分。

三、MOPSO的计算步骤

MOPSO的计算步骤共7个步骤:
1,初始化
需要初始化的参数:
2,更新速度V和x

3,计算适应度

4,更新pbest

5,更新存档
1>第一轮:根据支配关系进行第一轮筛选,将劣解去除,得到Parto最优解集,加入到存档中。这时该存档中包含了旧一代种群的存档和新一代种群存档的集合。适应度集合也包含了新旧两代的

2>第二轮:在包含两代的存档中的粒子群根据支配关系进行第二轮筛选,将劣解去除,并计算存档粒子在网格中的位置

3>第三轮:若经过第二轮后,存档数量超过了存档阈值,则根据自适应网格法进行清除,拥挤度越高,被清除的概率越高,重新进行网格划分

6,更新全局最优gbest

7,循环2-6步骤,直至满足循环结束条件。

参考:1,MOPSO算法思路和基本定义梳理
2,对多目标粒子群算法MOPSO的理解

这篇关于多目标优化学习笔记2:MOPSO 基本概念及计算流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/711365

相关文章

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

使用JavaConfig配置Spring的流程步骤

《使用JavaConfig配置Spring的流程步骤》JavaConfig是Spring框架提供的一种基于Java的配置方式,它通过使用@Configuration注解标记的类来替代传统的XML配置文... 目录一、什么是 JavaConfig?1. 核心注解2. 与 XML 配置的对比二、JavaConf

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据