获得Pareto前沿的方法有什么?NSGA-Ⅱ怎么获得Pareto非支配解集 + 支配解集?怎么获得Pareto前沿?/非支配解集代码实现

news2024/11/15 6:56:02

获得Pareto前沿的方法有什么?

获得Pareto前沿的方法有很多,下面列举了一些常用的方法:

  1. 权重法(Weighted Sum Method):为每个目标函数分配一个权重,并将多目标优化问题转化为单目标优化问题。通过改变不同的权重组合来获得Pareto前沿。

  2. 约束法(ε-constraint Method):将其中一个目标设为主要目标,其他目标通过约束来控制,然后对主要目标进行优化。

  3. 非支配排序遗传算法(NSGA-II):这是一个基于遗传算法的多目标优化方法,它使用非支配排序策略和拥挤距离来保持种群的多样性。

  4. 多目标粒子群优化算法(MOPSO):它是基于粒子群优化的多目标优化方法,通常结合存档策略来维护Pareto前沿。

  5. 多目标模拟退火算法:基于模拟退火的策略进行多目标优化。

  6. 多目标蚁群算法:模仿自然界蚂蚁的行为,对多目标问题进行优化。

  7. RVEA(Reference Vector Guided Evolutionary Algorithm):是一种最新的进化算法,利用参考向量技术来引导搜索。

  8. 多目标深度学习方法:近年来,随着深度学习的发展,也有一些方法开始尝试结合深度学习技术来解决多目标优化问题。


NSGA-Ⅱ怎么获得Pareto非支配解集? + 代码实现

例子:以下列数据为例,其中第二行与第三行的数据都是越小越好

其中可以说解D支配解B,因为D在成本上小于B,且最糟反馈上不比B差。

1)求解支配解集代码:

import numpy as np
import pandas as pd

d = {
    'A': [20, 2.2],
    'B': [60, 4.4],
    'C': [65, 3.5],
    'D': [15, 4.4],
    'E': [55, 4.5],
    'F': [50, 1.8],
    'G': [80, 4.0],
    'H': [25, 4.6]
}
df = pd.DataFrame(data=d).T
data_labels = list(df.index)
data_array = np.array(df).T

# 指定解决的索引
sol_index = 1
sol = data_array[:, sol_index]
obj1_not_worse = np.where(sol[0] >= data_array[0, :])[0]
obj2_not_worse = np.where(sol[1] >= data_array[1, :])[0]
not_worse_candidates = set.intersection(set(obj1_not_worse), set(obj2_not_worse))

obj1_better = np.where(sol[0] > data_array[0, :])[0]
obj2_better = np.where(sol[1] > data_array[1, :])[0]
better_candidates = set.intersection(set(obj1_better), set(obj2_better))

dominating_solution = list(set.intersection(not_worse_candidates, better_candidates))

if len(dominating_solution) == 0:
    print("No solution dominates solution", data_labels[sol_index], ".")
else:
    print("Labels of one or more solutions dominating this solution :", end="")
    for k in dominating_solution:
        print(data_labels[k], end=',')

2)求解非支配解集代码:

import numpy as np
import pandas as pd

d = {
    'A': [20, 2.2],
    'B': [60, 4.4],
    'C': [65, 3.5],
    'D': [15, 4.4],
    'E': [55, 4.5],
    'F': [50, 1.8],
    'G': [80, 4.0],
    'H': [25, 4.6]
}
df = pd.DataFrame(data=d).T
data_labels = list(df.index)
data_array = np.array(df).T


def solve(sol_index):
    sol = data_array[:, sol_index]
    obj1_not_worse = np.where(sol[0] >= data_array[0, :])[0]
    obj2_not_worse = np.where(sol[1] >= data_array[1, :])[0]
    not_worse_candidates = set.intersection(set(obj1_not_worse), set(obj2_not_worse))

    obj1_better = np.where(sol[0] > data_array[0, :])[0]
    obj2_better = np.where(sol[1] > data_array[1, :])[0]
    better_candidates = set.intersection(set(obj1_better), set(obj2_better))

    dominating_solution = list(set.intersection(not_worse_candidates, better_candidates))
    if len(dominating_solution) == 0:
        return True
    else:
        return False


dominating_set = []
for k in range(data_array.shape[1]):
    if solve(k):
        dominating_set.append(data_labels[k])
print(dominating_set)

3)别的实现方法

看:【精选】多目标pareto最优解集构造方法_多目标遗传算法如何增加帕累托解集_打呼噜的星.的博客-CSDN博客

非支配集求解(python)_非支配解_SoulMartyr的博客-CSDN博客

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

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

相关文章

订单30分钟自动关闭的五种解决方案

1 前言 在开发中,往往会遇到一些关于延时任务的需求。例如 生成订单30分钟未支付,则自动取消生成订单60秒后,给用户发短信 对上述的任务,我们给一个专业的名字来形容,那就是延时任务 。那么这里就会产生一个问题,这…

ElementPlus表格中的背景透明

ElementPlus表格中的背景透明 最近写大屏,用到elementplus中的el-table,为了让显示效果好看一点,需要把表格的白色背景调整为透明,与整个背景融为一体。可以参考的资料非常少,大部分都是ElmentUI的方法,在…

摆动序列【贪心4】

题目 分析 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {if(nums.size() < 2) return nums.size();int ret 0,left 0,right 0;for(int i 0;i < nums.size()-1;i){right nums[i1] - nums[i];if(right 0) continue;if(left …

Python数据分析实战-使用replace方法模糊匹配替换某列的值(附源码和实现效果)

实现功能 Python数据分析实战-使用replace方法模糊匹配替换某列的值 实现代码 import pandas as pd import re# 创建一个示例DataFrame data {A: [apple, banana, pineapple, orange, grape]} df pd.DataFrame(data)# 打印替换前的DataFrame print("替换前的DataFram…

5年经验之谈 —— 接口测试主要测哪些方面?

当今互联网时代&#xff0c;接口测试已经成为软件测试的一个重要组成部分。接口测试是指对系统各个接口进行验证&#xff0c;确保接口的正确性、稳定性和安全性。接口测试是软件开发过程中不可缺少的环节&#xff0c;它旨在确保接口能够正常工作&#xff0c;并且满足所需要的规…

OpenSSL 密码库实现证书签发流程详解

目录 0. 基础理论openssl简介对称加密和非对称加密生成证书流程原理CA签发流程openssl基础操作 1. 生成证书的步骤与原理2. 标准的CA签发流程2.1 创建私钥&#xff08;.key)2.2 基于私钥创建证书签名请求&#xff08;.csr&#xff09;2.3 &#xff08;可选&#xff09;直接同时…

三角形绘制

图形渲染管线的每个阶段的抽象展示 蓝色部分代表的是我们可以注入自定义的着色器的部分。现代OpenGL中&#xff0c;我们必须定义至少一个顶点着色器和一个片段着色器&#xff08;因为GPU中没有默认的顶点/片段着色器&#xff09;。 顶点输入 OpenGL是一个3D图形库&#xff0c…

智能化档案管理系统,利用超高频RFID技术提升档案管理效能

随着机关事业单位的发展&#xff0c;各种信息档案材料的数量不断增加&#xff0c;档案的类型也越来越多样化&#xff0c;传统的纸质储存方式已经无法满足现实需求。传统的档案管理方式存在一些问题&#xff0c;例如手工制作管理方法效率低下、档案储放顺序容易打乱、档案审查和…

ArmSoM-W3之RK3588硬编解码MPP环境配置

1. 简介 瑞芯微提供的媒体处理软件平台&#xff08;Media Process Platform&#xff0c;简称 MPP&#xff09;是适用于瑞芯微芯片系列的 通用媒体处理软件平台。该平台对应用软件屏蔽了芯片相关的复杂底层处理&#xff0c;其目的是为了屏蔽不 同芯片的差异&#xff0c;为使用者…

动态规划:13目标和

动态规划&#xff1a;13目标和 题目&#xff1a;494. 目标和 如何转化为01背包问题呢。 假设加法的总和为x&#xff0c;那么减法对应的总和就是sum - x。 所以我们要求的是 x - (sum - x) target x (target sum) / 2 此时问题就转化为&#xff0c;装满容量为x的背包&…

KF-GINS源码阅读(下)

文章目录 七、捷联惯导更新&#xff1a;insPropagation()1、insPropagation()&#xff1a;捷联惯导递推2、imuCompensate()&#xff1a;IMU数据误差补偿3、insMech()&#xff1a;IMU 状态更新&#xff08;机械编排&#xff09;4、velUpdate()&#xff1a;速度更新1. 算法2. 代码…

树上问题相关笔记

LCA LCA&#xff0c;即最近公共祖先。 我们用 f ( i , j ) f(i,j) f(i,j) 表示 i i i 的第 2 j 2^j 2j 级父亲&#xff0c;由于 i i i 的第 2 j 2^j 2j 级父亲可以由它的第 2 j − 1 2^{j-1} 2j−1 父亲向上再跳 2 j − 1 2^{j-1} 2j−1 层得到&#xff0c;那么 i i …

系列十四、Redis的集群(一)

一、是什么 1.1、概述 由于数据量过大&#xff0c;单个master-slave模式难以承担&#xff0c;当出现master节点故障的一瞬间&#xff0c;哨兵重新选举新的master节点之前&#xff0c;这一小段时间将会导致Redis服务不可用&#xff0c;因此需要对多个master-slave主从复制集进行…

AD20基本原理图的设计

1、利用先前学习的知识&#xff0c;创建文件名为“51单片机最小系统”的PCB工程文件&#xff0c;并将文件保存在相应的目录下。 2、在工程文件下创建原理图文件&#xff0c;命名为“51单片机最小系统”。 3、点击右边“Properties[ˈprɒpətiz]&#xff08;属性&#xff09;”…

数据库系统>分布式数据库

1.分布式数据库体系结构 分布式数据库体系结构如下图所示&#xff1a; 全局外模式&#xff1a;是对分布式数据库的最高层的抽象。 全局概念模式&#xff1a;是分布式数据库的整体抽象&#xff0c;包含了系统中全部数据的特性和逻辑结构&#xff0c;描述分布数据库全局数据的逻…

九月九日重阳节September 9th, Double Ninth Festival

每年农历九月初九&#xff0c;是中国传统节日“重阳节”。二九相重&#xff0c;称为“重九”&#xff0c;民间在该日有登高的风俗&#xff0c;所以重阳节又称“登高节”。On the ninth day of the ninth lunar month, comes the traditional Chinese holiday: the Double Ninth…

SystemVerilog Assertions应用指南 Chapter 1.21重复运算符

1.21重复运算符 如果信号“stat”在任何给定的时钟上升沿跳变为高,接着从下一个时钟周期起,信号“a”保持三个连续时钟周期为高,然后下一个时钟周期,信号“stop”为高&#xff0c;像上述描述的序列可以使用下面的SVA代码来检验。 sequence ss ;(posedge clk) $rose(start) |-&…

Transformer知识点

Transformer知识点 1.输入部分1.1文本嵌入层1.2位置编码器 2.编码部分2.1掩码张量2.2注意力机制2.3多头注意力机制2.4前馈全连接层2.5规范化层2.6子层连接结构2.7编码器层2.8编码器 3.解码部分1.编码器层2.编码器 4.输出部分 结构如下图&#xff0c;包括四部分&#xff1a;输⼊…

COSCon'23 开源社文创丨 给开源人一点“color see see”

成都城市限定 “小O在成都”行李箱贴纸 成都限定行李箱贴纸把小O和特色元素相融合 当小O遇到成都 在云端漫步的蓝色小章鱼 掉落到这座热情似火的城市&#xff0c; 结识了大熊猫朋友 学会了四川麻将 吃到了红油串串... 快带着小O来一场自由的旅游吧&#xff01; “你也要尝尝竹子…

UE4 材质实操记录

TexCoord的R通道是从左到右的递增量&#xff0c;G通道是从上到下的递增量&#xff0c;R通道减去0.5&#xff0c;那么左边就是【-0.5~0】区间&#xff0c;所以左边为全黑&#xff0c;Abs取绝对值&#xff0c;就达到一个两边向中间的一个递减的效果&#xff0c;G通道同理&#xf…