多目标优化学习笔记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

相关文章

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

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和并发控制:② 垃圾回收:③ 栈和