多目标优化策略之一:非支配排序
多目标优化策略中的非支配排序是一种关键的技术,它主要用于解决多目标优化问题中解的选择和排序问题,确定解集中的非支配解(也称为Pareto解)。
关于什么是多目标优化问题,可以查看我的文章:改进候鸟优化算法之五:基于多目标优化的候鸟优化算法(MBO-MO)-CSDN博客
多目标优化算法之一:基于分解的方法_多目标优化怎么拆解模型求解-CSDN博客
图1 非支配排序的思维导航图
一、非支配排序的基本概念
(1)非支配解(Pareto解):如果一个解不被解集中的其他任何解所支配,则该解被称为非支配解(或不受支配解),也称Pareto解。假设有两个解S1和S2,如果S1在所有目标函数上都不比S2差,并且至少在一个目标函数上严格优于S2,则称S1支配S2,此时S1为非支配解。
(2)支配关系:若解S2在所有目标函数上均劣于S1,则称S1优于S2,也称S1支配S2,S2为受支配解。数学上,可以表达为S1⪯S2(注意,这里的符号“⪯”表示支配关系)。
(3)Pareto前沿面:所有非支配解组成的平面称为Pareto前沿面(Non-dominated front)。在目标函数较多时,前沿面通常为超曲面。
(4)非支配排序:非支配排序的过程是将解集中的所有解按照其非支配级别进行排序。首先,找出所有非支配解,这些解构成第一非支配前沿(Front 1)。然后,从剩余解中继续找出非支配解,构成第二非支配前沿(Front 2),以此类推,直到所有解都被分配到某个非支配前沿为止。
二、相关数学公式
1.支配关系的数学公式
虽然支配关系没有直接的数学公式来表示(因为它涉及到多个目标函数的比较),但可以通过以下逻辑条件来表达:
(1)对于所有目标函数,都有
(
不差于
)。
(2)存在至少一个目标函数,使得
(
在至少一个目标上严格优于
)。
2.拥挤距离公式
在非支配排序中,拥挤距离是一种用于保持种群多样性的机制。它衡量了某个解在目标函数空间中的“拥挤”程度,即该解周围其他解的密集程度。拥挤距离的计算公式通常与目标函数的个数和每个目标函数上的距离有关。
对于一个解d在当前种群D上的拥挤距离(d,D),其计算公式可能涉及多个目标函数上的距离计算,以及当前种群中每个目标函数的最大值和最小值。
三、非支配排序的过程
非支配排序的过程实际上是对解空间中的解进行分层的过程,具体步骤如下:
(1)初始化:
设所有解的集合为S,从中找出非支配解集合,记为F1。
(2)迭代分层:
令S=S-F1,即从S中移除已找到的非支配解集F1。
从更新后的S中再找出非支配解集合,记为F2。
重复上述步骤,直到S为空集。
(3)排序:
将每次找出的非支配解进行排序,得到{F1, F2, …, Fn}。其中,F1中的解是最优的,F2中的解次之,以此类推。
图2 非支配排序的过程
四、非支配排序的特点与应用
1.特点:
(1)非支配排序能够有效地区分不同解之间的优劣关系。
(2)通过分层的方式,可以清晰地展示出解空间中的Pareto前沿面。
2.应用:
(1)非支配排序广泛应用于多目标优化算法中,如NSGA-II(带精英策略的非支配排序遗传算法)等。
(2)在这些算法中,非支配排序用于对种群中的个体进行排序和选择,以指导算法的进化方向。
五、非支配排序与多目标优化的关系
多目标优化问题通常涉及多个相互冲突的目标,需要找到一组折衷的解(即Pareto最优解集)。非支配排序正是用于解决这一问题的一种有效方法。通过非支配排序,可以将解空间中的解按照优劣关系进行分层和排序,从而帮助决策者从Pareto最优解集中选择一个合适的解作为最终解决方案。
注意事项:
(1)多目标优化的复杂性:多目标优化问题通常涉及多个相互冲突的目标函数,因此很难找到单个解使得所有目标函数都达到最优。非支配排序正是为了解决这一问题而提出的。
(2)算法实现:在实际算法实现中,非支配排序通常与遗传算法等优化算法相结合,以迭代的方式搜索最优解集。
六、非支配排序的完整示例
假设我们有两个目标函数 f1(x) 和 f2(x),需要对种群进行非支配排序。以下是一个具体的实现过程(python代码):
1. 初始化种群
假设种群大小为5,每个个体的决策变量为一个实数,随机生成初始种群:
import random
# 初始化种群
population = [random.uniform(-55, 55) for _ in range(5)]
2. 定义目标函数
定义两个目标函数:
# 目标函数1def function1(x):
return -x**2
# 目标函数2def function2(x):
return -(x - 2)**2
3. 非支配排序算法
实现快速非支配排序算法:
def fast_non_dominated_sort(values1
相关文章:

多目标优化策略之一:非支配排序
多目标优化策略中的非支配排序是一种关键的技术,它主要用于解决多目标优化问题中解的选择和排序问题,确定解集中的非支配解(也称为Pareto解)。 关于什么是多目标优化问题,可以查看我的文章:改进候鸟优化算法之五:基于多目标优化的候鸟优化算法(MBO-MO)-CSDN博客 多目…...

Go学习:字符、字符串需注意的点
Go语言与C/C语言编程有很多相似之处,但是Go语言中在声明一个字符时,数据类型与其他语言声明一个字符数据时有一点不同之处。通常,字符的数据类型为 char,例如 :声明一个字符 (字符名称为 ch) 的语句格式为 char ch&am…...

Linux文件原生操作
Linux 中一切皆文件,那么 Linux 文件是什么? 在 Linux 中的文件 可以是:传统意义上的有序数据集合,即:文件系统中的物理文件 也可以是:设备,管道,内存。。。(Linux 管理的一切对象…...
解决Oracle SQL语句性能问题(10.5)——常用Hint及语法(7)(其他Hint)
10.5.3. 常用hint 10.5.3.7. 其他Hint 1)cardinality:显式的指示优化器为SQL语句的某个行源指定势。该Hint具体语法如下所示。 SQL> select /*+ cardinality([@qb] [table] card ) */ ...; --注: 1)这里,第一个参数(@qb)为可选参数,指定查询语句块名;第二个参数…...
JavaScript系列(50)--编译器实现详解
JavaScript编译器实现详解 🔨 今天,让我们深入探讨JavaScript编译器的实现。编译器是一个将源代码转换为目标代码的复杂系统,通过理解其工作原理,我们可以更好地理解JavaScript的执行过程。 编译器基础概念 🌟 &…...

大数据相关职位 职业进阶路径
大数据相关职位 & 职业进阶路径 📌 大数据相关职位 & 职业进阶路径 大数据领域涵盖多个方向,包括数据工程、数据分析、数据治理、数据科学等,每个方向的进阶路径有所不同。以下是大数据相关职位的详细解析及其职业进阶关系。 &#…...

基础项目实战——学生管理系统(c++)
目录 前言一、功能菜单界面二、类与结构体的实现三、录入学生信息四、删除学生信息五、更改学生信息六、查找学生信息七、统计学生人数八、保存学生信息九、读取学生信息十、打印所有学生信息十一、退出系统十二、文件拆分结语 前言 这一期我们来一起学习我们在大学做过的课程…...

C++,STL,【目录篇】
文章目录 一、简介二、内容提纲第一部分:STL 概述第二部分:STL 容器第三部分:STL 迭代器第四部分:STL 算法第五部分:STL 函数对象第六部分:STL 高级主题第七部分:STL 实战应用 三、写作风格四、…...

【Rust自学】15.3. Deref trait Pt.2:隐式解引用转化与可变性
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 15.3.1. 函数和方法的隐式解引用转化(Deref Coercion) 隐式解引用转化(Deref Coercion)是为函数和方法提供的一种便捷特性。 它的原理是…...

密码强度验证代码解析:C语言实现与细节剖析
在日常的应用开发中,密码强度验证是保障用户账户安全的重要环节。今天,我们就来深入分析一段用C语言编写的密码强度验证代码,看看它是如何实现对密码强度的多维度检测的。 代码整体结构 这段C语言代码主要实现了对输入密码的一系列规则验证&a…...
arkts bridge使用示例
接上一篇:arkui-x跨平台与android java联合开发-CSDN博客 本篇讲前端arkui如何与后端其他平台进行数据交互,接上一篇,后端os平台为Android java。 arkui-x框架提供了一个独特的机制:bridge。 1、前端接口定义实现 定义一个bri…...
LINUX部署微服务项目步骤
项目简介技术栈 主体技术:SpringCloud,SpringBoot,VUE2, 中间件:RabbitMQ、Redis 创建用户 在linux服务器home下创建用户qshh,用于后续本项目需要的环境进行安装配置 #创建用户 useradd 用户名 #设置登录密…...
zsh安装插件
0 zsh不仅在外观上比较美观,而且其具有强大的插件,如果不使用那就亏大了。 官方插件库 https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins 官方插件库并不一定有所有的插件,比如zsh-autosuggestions插件就不再列表里,下面演示zs…...
网站如何正式上线(运维详解)
因为平台原因,不能有太多链接,所以下文中链接都删除了,想访问的去原文链接:https://www.zhoudongqi.com/ TIPS 这篇文章是我自己运营运维的wordpess站点的经验总结,可以说十分详细,域名,服务器和…...
SQL server 数据库使用整理
标题:SQL server 数据库使用整理 1.字符串表名多次查询 2.读取SQL中Json字段中的值:JSON_VALUE(最新版本支持,属性名大小写敏感) 1.字符串表名多次查询 SELECT ROW_NUMBER() OVER (ORDER BY value ASC) rowid,value…...

【Rust自学】17.2. 使用trait对象来存储不同值的类型
喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 17.2.1. 需求 这篇文章以一个例子来介绍如何在Rust中使用trait对象来存储不同值的类型。 …...

初始化mysql报错cannot open shared object file: No such file or directory
报错展示 我在初始化msyql的时候报错:mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory 解读: libaio包的作用是为了支持同步I/O。对于数据库之类的系统特别重要,因此…...

2025年1月22日(网络编程)
系统信息: ubuntu 16.04LTS Raspberry Pi Zero 2W 系统版本: 2024-10-22-raspios-bullseye-armhf Python 版本:Python 3.9.2 已安装 pip3 支持拍摄 1080p 30 (1092*1080), 720p 60 (1280*720), 60/90 (640*480) 已安装 vim 已安装 git 学习…...

Jason配置环境变量
jason官网 https://jason-lang.github.io/ https://github.com/jason-lang/jason/releases 步骤 安装 Java 21 或更高版本 安装 Visual Studio Code 根据操作系统,请按照以下具体步骤操作 视窗 下载 Jason 的最新版本,选择“jason-bin-3.3.0.zip”…...

蓝桥杯python语言基础(7)——自定义排序和二分查找
目录 一、自定义排序 (一)sorted (二)list.sort 二、二分查找 bisect 一、自定义排序 (一)sorted sorted() 函数会返回一个新的已排序列表,而列表的 sort() 方法会直接在原列表上进行排序…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...