当前位置: 首页 > news >正文

【matlab 项目工期优化】基于NSGA2/3的项目工期多目标优化(时间-成本-质量-安全)

一 背景介绍

本文分享了一个通用的项目工期优化的案例,决策变量是每个子项目的工期,优化目标是项目的完成时间最小,项目的总成本现值最小,项目的总安全水平最高,项目的总质量水平最高。采用的算法是NSGA2和NSGA3算法。并设计了GUI界面。最后对比两个算法的优化结果,计算IGD,HV等多目标优化的指标来评估不同算法的优化效果,并通过熵权法,TOPSIS等算法从pareto解集中选择合适的方案进行展示。

二 模型介绍

2.1目标函数

本文主要是考虑:①项目的完成时间,②项目的总成本现值,③项目的质量水平和④项目的安全水平,四个目标函数的表达式分别为:

在这里插入图片描述

2.1.1目标函数1:项目的完成时间

在这里插入图片描述

2.1.2目标函数2:项目的总成本现值

在这里插入图片描述
在这里插入图片描述

2.1.3 目标函数3:项目的总质量水平

在这里插入图片描述

2.1.4目标函数4:项目的总安全水平

在这里插入图片描述

2.2约束条件

在这里插入图片描述

三 算法介绍

3.1 多目标优化问题

首先本文是一个多目标优化的问题,所谓多目标优化是指在优化问题中同时考虑多个目标函数的最优解。在多目标优化问题中,存在多个冲突的目标函数,而不是只有一个单一的目标函数。多目标优化的目标是找到一组解,使得这组解在所有目标函数上都能达到最优值,而不是只在其中一个目标函数上达到最优值。

多目标优化问题常见于现实生活中的复杂系统中,例如工程设计、经济规划、交通调度等领域。在这些问题中,往往需要综合考虑多个因素,如成本、效率、可行性等,以便找到一个平衡的解。

多目标优化通常涉及到多个决策变量和约束条件,因此相比于单目标优化问题,多目标优化问题更加困难和复杂。解决多目标优化问题的方法包括多目标遗传算法、多目标粒子群优化算法、多目标蚁群算法等。这些方法旨在通过迭代搜索和评估解的集合,逐步逼近真正的最优解集合,从而求解多目标优化问题。

3.2 多目标优化算法

常见的多目标优化算法有NSGA2/3 MOEAD MOPSO 等等,本文使用NSGA2/3对问题进行求解,并使用IGD,HV,等指标来评估算法的性能。

3.2.1 NSGA2

NSGA2(Non-dominated Sorting Genetic Algorithm II)是一种用于多目标优化问题的进化算法。它是基于遗传算法的一种改进,旨在解决多目标优化问题中非支配排序和多样性维持的问题。

NSGA2算法的主要步骤如下:

  1. 初始化种群:生成初始的候选解种群。

  2. 评估适应度:使用目标函数计算每个候选解的适应度。

  3. 非支配排序:将种群中的候选解按照非支配排序进行排序。非支配排序是根据候选解之间的支配关系将它们分成不同的等级。

  4. 计算拥挤度距离:为了保持种群的多样性,NSGA2使用拥挤度距离来度量解的稀疏程度。拥挤度距离是指解周围的密度,较远的解有较高的拥挤度距离。

  5. 选择操作:根据非支配排序和拥挤度距离,选择一部分候选解作为父代解。

  6. 交叉操作:使用交叉算子对父代解进行交叉操作,生成子代解。

  7. 变异操作:使用变异算子对子代解进行变异操作,引入新的解。

  8. 合并种群:将父代解和子代解合并为一个新的种群。

  9. 重复步骤2-8直到满足终止条件。

  10. 输出结果:选择最优的候选解作为最终的解集。

NSGA2算法通过使用非支配排序和拥挤度距离来维护解的多样性,可以找到一系列非支配解,这些解构成了帕累托前沿。这使得NSGA2算法在多目标优化问题中能够提供多个高质量的解供决策者选择。

3.1.2 NSGA3

NSGA-III(Non-dominated Sorting Genetic Algorithm III)是一种多目标优化算法,它是对经典的NSGA-II算法的改进和扩展。

NSGA-III算法的主要思想是将解空间划分为多个参考解集,每个参考解集中都包含了离散化的目标空间上的一组参考解。NSGA-III算法通过借助参考解集来引导种群的演化,从而在多目标优化过程中维持一定的多样性和收敛性。

NSGA-III算法的核心步骤如下:

  1. 初始化种群:随机生成一组初始解,并计算每个解的目标函数值。
  2. 快速非支配排序:根据每个解的目标函数值对种群进行非支配排序,将解划分为多个等级。
  3. 计算拥挤度:为每个等级中的解计算拥挤度,用于评估解的多样性。
  4. 环境选择:根据非支配排序和拥挤度,选择一组优质的解作为父代。
  5. 创建子代:通过交叉和变异操作生成一组新的子代解。
  6. 更新参考解集:将子代解与当前参考解集进行比较,更新参考解集,并筛选出非支配解作为下一代的参考解。
  7. 终止条件判断:检查是否满足终止条件,如果满足则终止算法,否则返回步骤2。

NSGA-III算法的特点是可以在多目标优化问题中保持较好的收敛性和多样性。通过引入参考解集来指导种群的演化,NSGA-III算法可以保证种群在不同的目标空间区域都有合适的覆盖,从而有效平衡了收敛性和多样性之间的冲突。

总的来说,NSGA-III算法是一种强大的多目标优化算法,它在实际应用中已被广泛使用,并取得了良好的效果。

3.3 pareto最优

多目标优化对比单目标优化的最大差别体现在,单目标优化得到的是一个确定的解,而多目标优化得到的互不支配的pareto最优解集合。
Pareto解是多目标优化问题中的一种解决方案,它是指在多个冲突的目标函数下无法再进行优化的解。在多目标优化中,常常存在冲突的目标函数,即某个目标函数的优化会导致其他目标函数的劣化。Pareto解就是无法在同时优化多个目标函数的情况下找到更好的解决方案。Pareto解也被称为非支配解,因为它在所有目标函数中都是最优的,无法被其他解所支配。在多目标优化问题中,我们常常希望找到尽可能多的Pareto解,从中选择最合适的解决方案。

四 算例分析

4.1 项目流程

本文研究的项目的流程如下图:
在这里插入图片描述

4.2项目数据

项目数据通过excel直接读取
在这里插入图片描述

4.3 参数设置

在这里插入图片描述

五 结果演示

5.1 NSGA2优化结果

在这里插入图片描述

5.2 NSGA3优化结果

在这里插入图片描述

5.3 GUI界面

5.3.1 登录界面

在这里插入图片描述

5.3.2 数据读取和参数设置界面

在这里插入图片描述

5.3.3 结果显示界面

在这里插入图片描述

5.3.4 查看方案界面

在这里插入图片描述

六 项目分享

提供①项目源码分享,②项目辅导答疑和③项目代码定制,欢迎各位朋友咨询。
> =免责声明=
感谢知识付费 建模编程不易 整理资料不易!
相关代码撰写、优化、封装、原创由CSDN博主:蓝色洛特完成
均是个人不成熟的想法及建议,我说的不一定对。
出现任何学术不端行为与本人无关,分享的模型和代码仅供参考学习,如有侵权请后台私信

相关文章:

【matlab 项目工期优化】基于NSGA2/3的项目工期多目标优化(时间-成本-质量-安全)

一 背景介绍 本文分享了一个通用的项目工期优化的案例,决策变量是每个子项目的工期,优化目标是项目的完成时间最小,项目的总成本现值最小,项目的总安全水平最高,项目的总质量水平最高。采用的算法是NSGA2和NSGA3算法。…...

Python考前复习

选择题易错: python3不能完全兼容python2内置函数是python的内置对象之一,无需导入其他模块python中汉字变量合法,如“小李123”合法;但T-C不合法,因为有“-”集合无顺序,不能索引;range(5)[2]…...

虚拟机交叉编译基于ARM平台的opencv(ffmpeg/x264)

背景: 由于手上有一块rk3568的开发板,需要运行yolov5跑深度学习模型,但是原有的opencv不能对x264格式的视频进行解码,这里就需要将ffmpegx264编译进opencv。 但是开发板算力有限,所以这里采用在windows下,安…...

react之错误边界

错误边界实质是指什么 实际上是组件 错误边界捕获什么时候的错误 在渲染阶段的错误 错误边界捕获的是谁的错误 捕获的是子组件的错误 错误边界不能捕获什么错误 1、不能捕获异步代码 2、不能捕获事件处理函数 3、不能捕获服务端渲染 4、不能捕获自身抛出的错误 错误…...

openEuler系统之使用Keepalived+Nginx部署高可用Web集群

Linux系统之使用Keepalived+Nginx部署高可用Web集群 一、本次实践介绍1.1 本次实践简介1.2 本次实践环境规划二、keepalived介绍2.1 keepalived简介2.2 keepalived主要特点和功能2.3 使用场景三、Keepalived和Nginx介绍3.1 Nginx简介3.2 Nginx特点四、master节点安装nginx4.1 安…...

基于图像处理的滑块验证码匹配技术

滑块验证码是一种常见的验证码形式,通过拖动滑块与背景图像中的缺口进行匹配,验证用户是否为真人。本文将详细介绍基于图像处理的滑块验证码匹配技术,并提供优化代码以提高滑块位置偏移量的准确度,尤其是在背景图滑块阴影较浅的情…...

【JavaEE精炼宝库】文件操作(1)——基本知识 | 操作文件——打开实用性编程的大门

目录 一、文件的基本知识1.1 文件的基本概念:1.2 树型结构组织和目录:1.3 文件路径(Path):1.4 二进制文件 VS 文本文件:1.5 其它: 二、Java 操作文件2.1 方法说明:2.2 使用演示&…...

常用排序算法_06_归并排序

1、基本思想 归并排序采用分治法 (Divide and Conquer) 的一个非常典型的应。归并排序的思想就是先递归分解数组,再合并数组。归并排序是一种稳定的排序方法。 将数组分解最小之后(数组中只有一个元素,数组有序);然后…...

14-8 小型语言模型的兴起

过去几年,我们看到人工智能能力呈爆炸式增长,其中很大一部分是由大型语言模型 (LLM) 的进步推动的。GPT-3 等模型包含 1750 亿个参数,已经展示了生成类似人类的文本、回答问题、总结文档等能力。然而,虽然 LLM 的能力令人印象深刻…...

【Linux】:进程创建与终止

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux程序地址空间的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从…...

横截面交易策略:概念与示例

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学,点击下方链接报名: 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…...

4.2 投影

一、投影和投影矩阵 我们以下面两个问题开始,问题一是为了展示投影是很容易视觉化的,问题二是关于 “投影矩阵”(projection matrices)—— 对称矩阵且 P 2 P P^2P P2P。 b \boldsymbol b b 的投影是 P b P\boldsymbol b Pb。…...

23种设计模式之装饰者模式

深入理解装饰者模式 一、装饰者模式简介1.1 定义1.2 模式类型1.3 主要作用1.4 优点1.5 缺点 二、模式动机三、模式结构四、 装饰者模式的实现4.1 组件接口4.2 具体组件4.3 装饰者抽象类4.4 具体装饰者4.5 使用装饰者模式4.6 输出结果: 五、 应用场景5.1 图形用户界面…...

数据结构--单链表实现

欢迎光顾我的homepage 前言 链表和顺序表都是线性表的一种,但是顺序表在物理结构和逻辑结构上都是连续的,但链表在逻辑结构上是连续的,而在物理结构上不一定连续;来看以下图片来认识链表与顺序表的差别 这里以动态顺序表…...

2024攻防演练:亚信安全推出MSS/SaaS短期定制服务

随着2024年攻防演练周期延长的消息不断传出,各参与方将面临前所未有的挑战。面对强大的攻击队伍和日益严格的监管压力,防守单位必须提前进行全面而周密的准备和部署。为应对这一形势,亚信安全特别推出了为期三个月的MSS/SaaS短期订阅方案。该…...

基于java+springboot+vue实现的在线课程管理系统(文末源码+Lw)236

摘要 本文首先介绍了在线课程管理系统的现状及开发背景,然后论述了系统的设计目标、系统需求、总体设计方案以及系统的详细设计和实现,最后对在线课程管理系统进行了系统检测并提出了还需要改进的问题。本系统能够实现教师管理,科目管理&…...

每日一更 EFK日志分析系统

需要docker和docker-compose环境 下面时docker-compose.yaml文件 [rootnode1 docker-EFK]# cat docker-compose.yaml version: 3.3services:elasticsearch:image: "docker.elastic.co/elasticsearch/elasticsearch:7.17.5"container_name: elasticsearchrestart: …...

python类继承和类变量

Python一些类继承和实例变量的使用 定义基类 class APIException:code 500msg "Sorry, error"error_code 999def __init__(self, msgNone):print("APIException init ...")def error_400(self):pass复用基类的属性值 class ClientTypeError(APIExcept…...

js 随机生成整数

随机生成一个唯一的整数 id export const randomId () > { return Date.now() Math.floor(Math.random() * 10000) } 生成随机ID的方法 // 随机生成0 - 9999 export const randomId ()> { return Math.floor(Math.random() * 10000).toString() } // 随机生成0-999之…...

深入Django(七)

Django的数据库迁移系统 引言 在前六天的教程中,我们介绍了Django的基本概念、模型、视图、模板、URL路由和表单系统。今天,我们将讨论Django的数据库迁移系统,它是管理和跟踪数据库变化的关键组件。 Django数据库迁移概述 Django的数据库…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子&#xff08…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

JVM垃圾回收机制全解析

Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...