当前位置: 首页 > 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的数据库…...

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

今日科技热点速览

🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...

uniapp 字符包含的相关方法

在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...