多目标应用:四种多目标优化算法(NSGA2、NSPSO、NSDBO、NSCOA)求解柔性作业车间调度问题(FJSP),MATLAB代码

一、柔性作业车间调度问题

柔性作业车间调度问题(Flexible Job Scheduling Problem, FJSP) 的描述如下:n个工件 { J , J 2 , . . , J n } \{J,J_2,..,J_n\} {J,J2,..,Jn}要在 m m m 台机器 { M 1 , M 2 , . . , M m } \{M_1,M_2,..,M_m\} {M1,M2,..,Mm} 上加工。每个工件包含一道或多道工序,工序顺序是预先确定的,每道工序可以在多台不同加工机器上进行加工,工序的加工时间随加工机器的不同而不同。调度目标是为每道工序选择最合适的机器、确定每台机器上各个工序的最佳加工顺序以及开工时间,使整个系统的某些性能指标达到最优。因此,柔性作业车间调度问题包含两个子问题:确定各工件的加工机器 (机器选择子问题) 和确定各个机器上的加工先后顺序 (工序排序子问题)。

此外,在加工过程中还需要满足下面的约束条件:
(1) 同一台机器同一时刻只能加工一个工件;
(2) 同一工件的同一道工序在同一时刻只能被一台机器加工;
(3) 每个工件的每道工序一旦开始加工不能中断;
(4) 不同工件之间具有相同的优先级;
(5)不同工件的工序之间没有先后约束,同一工件的工序之间有先后约束;
(6)所有工件在零时刻都可以被加工。

1.1符号描述

n : n: n:工件总数;
m : m: m: 机器总数;
i , e : i,e: i,e: 机器序号, i , e = 1 , 2 , 3 , . . . , m i,e=1,2,3,...,m i,e=1,2,3,...,m ;
j , k : j,k: j,k: 工件序号, j , k = 1 , 2 , 3 , . . . , n ; j,k=1,2,3,...,n; j,k=1,2,3,...,n; h j : h_j: hj:工件 j j j 的工序总数;
h , l : h,l: h,l: 工序序号, h = 1 , 2 , 3 , . . . , h j h=1,2,3,...,h_j h=1,2,3,...,hj ;
Ω j h : \Omega_{jh}: Ωjh:工件 j j j 的第 h h h 道工序的可选加工机器集;
m j h : m_{jh}: mjh:工件 j j j 的第 h h h 道工序的可选加工机器数;
O j h : O_{jh}: Ojh:工件 j j j 的第 h h h道工序;
M i j h : M_{ijh}: Mijh:工件 j j j 的第 h h h道工序在机器 i i i 上加工;
p i j h : p_{ijh}: pijh:工件 j j j的第 h h h道工序在机器 i i i上的加工时间;
s j h : s_{jh}: sjh:工件 j j j 的第 h h h 道工序加工开始时间;
c j h : c_{jh}: cjh:工件 j j j的第 h h h道工序加工完成时间;
d j : d_j: dj:工件 j j j 的交货期;
L L L: 一个足够大的正数;
C j C_j Cj: 每个工件的完成时间;
C max ⁡ : C_{\max}: Cmax: 最大完工时间;
T o : T o = ∑ j = 1 n h j T_o:\quad T_o=\sum_{j=1}^nh_j To:To=j=1nhj, 所有工件工序总数;
x i j h = { 1 , 如果工序 O j h 选择机器 i ; 0 , 否则; x_{ijh}=\begin{cases}1,\text{如果工序}O_{jh}\text{选择机器}i;\\0,\text{否则;}\end{cases} xijh={1,如果工序Ojh选择机器i;0,否则;
y i j h k l = { 1 , 如果 O i j h 先于 O i k l 加工 ; 0 , 否则 ; y_{ijhkl}=\begin{cases}1,\text{如果}O_{ijh}\text{先于}O_{ikl}\text{加工};\\0,\text{否则};\end{cases} yijhkl={1,如果Oijh先于Oikl加工;0,否则;

1.2约束条件

C 1 : s j h + x i j h × p i j h ≤ c j h C_{1}:s_{jh}+x_{ijh}\times p_{ijh}\leq c_{jh} C1:sjh+xijh×pijhcjh

其中: i = 1 , … , m ; j = 1 , … , n ; i=1,\ldots,m;j=1,\ldots,n; i=1,,m;j=1,,n; h = 1 , … , h j h=1,\ldots,h_j h=1,,hj
C 2 : c j h ≤ s j ( h + 1 ) C_{2}:c_{jh}\leq s_{j(h+1)} C2:cjhsj(h+1)
其中 : j = 1 , … , n ; h = 1 , . . . , h j − 1 :j=1,\ldots,n;h=1,...,h_j-1 :j=1,,n;h=1,...,hj1
C 3 : c j h j ≤ C max ⁡ C_{3}:c_{jh_j}\leq C_{\max} C3:cjhjCmax
其中: j = 1 , . . . , n j=1,...,n j=1,...,n
C 4 : s j h + p i j h ≤ s k l + L ( 1 − y i j h k l ) C_{4}:s_{jh}+p_{ijh}\leq s_{kl}+L(1-y_{ijhkl}) C4:sjh+pijhskl+L(1yijhkl)

其中 : j = 0 , … , n ; k = 1 , … , n ; h = 1 , … , h j ; l = 1 , … , h k ; i = 1 , … , m :j=0,\ldots,n;k=1,\ldots,n;h=1,\ldots,h_j;l=1,\ldots,h_k;i=1,\ldots,m :j=0,,n;k=1,,n;h=1,,hj;l=1,,hk;i=1,,m
C 5 : c j h ≤ s j ( h + 1 ) + L ( 1 − y i k l j ( h + 1 ) ) C_{5}:c_{jh}\leq s_{j(h+1)}+L(1-y_{iklj(h+1)}) C5:cjhsj(h+1)+L(1yiklj(h+1))

其中 : j = 1 , … , n ; k = 0 , … , n ; h = 1 , … , h j − 1 ; l = 1 , … , h k ; i = 1 , … , m :j=1,\ldots,n;k=0,\ldots,n;h=1,\ldots,h_j-1;\quad l=1,\ldots,h_k;\quad i=1,\ldots,m :j=1,,n;k=0,,n;h=1,,hj1;l=1,,hk;i=1,,m
h 1 : ∑ i = 1 m j h x i j h = 1 h_{1}:\sum_{i=1}^{m_{jh}}x_{ijh}=1 h1:i=1mjhxijh=1
其中: h = 1 , . . . , h j ; j = 1 , . . . , n ; h=1,...,h_j;j=1,...,n; h=1,...,hj;j=1,...,n;

h 2 : ∑ j = 1 n ∑ h = 1 h j y i j h k l = x i k l h_{2}:\sum_{j=1}^n\sum_{h=1}^{h_j}y_{ijhkl}=x_{ikl} h2:j=1nh=1hjyijhkl=xikl

其中: i = 1 , … , m ; k = 1 , … , n ; l = 1 , … , h k i=1,\ldots,m;k=1,\ldots,n;l=1,\ldots,h_k i=1,,m;k=1,,n;l=1,,hk
h 3 : ∑ i = 1 n ∑ i = 1 n k y i j h k l = x i j h h_{3}:\sum_{i=1}^n\sum_{i=1}^{n_k}y_{ijhkl}=x_{ijh} h3:i=1ni=1nkyijhkl=xijh

其中: i = 1 , … , m ; j = 1 , … , n ; h = 1 , … , h k i=1,\ldots,m;j=1,\ldots,n;\quad h=1,\ldots,h_k i=1,,m;j=1,,n;h=1,,hk
C 6 : s j h ≥ 0 , c j h ≥ 0 C_{6}:s_{jh}\geq0,c_{jh}\geq0 C6:sjh0,cjh0

其中 : j = 0 , 1 , . . . , n ; h = 1 , . . . , h j :j=0,1,...,n;h=1,...,h_j :j=0,1,...,n;h=1,...,hj

C 1 C_{1} C1 C 2 C_{2} C2表示每一个工件的工序先后顺序约束 ;
C 3 C_{3} C3表示工件的完工时间的约束,即每一个工件的完工时间不可能超过总的完工时间 ;
C 4 C_{4} C4 C 5 C_{5} C5表示同一时刻同一台机器只能加工一道工序 ;
h 1 h_{1} h1表示机器约束,即同一时刻同一道工序只能且仅能被一台机器加工;
h 2 h_{2} h2 h 3 h_{3} h3表示存在每一台机器上可以存在循环操作 ;
C 6 C_{6} C6表示各个参数变量必须是正数。

1.3目标函数

(1) 最大完工时间最小。

完工时间是每个工件最后一道工序完成的时间,其中最大的那个时间就是最大完工时间(makespan)。它是衡量调度方案的最根本指标, 主要体现车间的生产效率,也是 FJSP 研究中应用最广泛的评价指标之一。如下式所示:

f 1 = min ⁡ ( max ⁡ l ≤ j ≤ n ( C j ) ) f_1=\min(\max_{\mathrm{l\leq}j\leq n}(C_j)) f1=min(maxljn(Cj))

(2)机器最大负荷最小。

在 FJSP 求解中,存在选择机器的过程,各个机器的负荷随着不同的调度方案而不同。负荷最大的机器就是瓶颈设备,为提高每台机器的利用率,必须使得各台机器的负荷尽量小且平衡。如下式所示:

f 2 = min ⁡ ( max ⁡ l ≤ i ≤ m ∑ j = 1 n ∑ h = 1 h j p i j h x i j h ) f_2=\min(\max_{\mathrm{l\leq}i\leq m}\sum_{j=1}^n\sum_{h=1}^{h_j}p_{ijh}x_{ijh}) f2=min(maxlimj=1nh=1hjpijhxijh)

(3)总机器负荷最小。

工序在不同机器上的加工时间是不同的,那么总的机器负荷随着不同的调度方案而不同。尽量使最大完工时间一样的情况下,减少所有机器的总消耗。如下式所示:

f 3 = min ⁡ ( ∑ i = 1 m ∑ j = 1 n ∑ h = 1 h j p i j h x i j h ) f_3=\min(\sum_{i=1}^m\sum_{j=1}^n\sum_{h=1}^{h_j}p_{ijh}x_{ijh}) f3=min(i=1mj=1nh=1hjpijhxijh)
参考文献:
[1]张国辉.柔性作业车间调度方法研究[D].华中科技大学,2009.

二、四种多目标优化算法介绍

  1. NSGA2:
    NSGA-II(Non-dominated Sorting Genetic Algorithm II)是一种流行的多目标遗传算法,由Deb等人在2002年提出,用于解决具有多个冲突目标的优化问题。它在第一代非支配排序遗传算法(NSGA)的基础上进行了改进,主要改进点包括:

快速非支配排序算法:NSGA-II引入了快速非支配排序方法,将算法的计算复杂度从O(MN3)降低到O(MN2),其中M是目标个数,N是种群个数。这种方法首先计算每个个体的支配计数和被支配集合,然后通过迭代过程快速确定各个非支配层级。

拥挤比较算子:为了维持种群的多样性,NSGA-II使用了拥挤比较算子来估计个体间的拥挤程度。在同一非支配层级中,拥挤度较高的个体更可能被选择,以避免算法过早收敛至局部最优解。

精英策略:NSGA-II采用了精英策略,将父代和子代种群合并后进行非支配排序,然后根据排序和拥挤度选择下一代种群,这样可以确保优秀的个体不会被丢失。

NSGA-II算法的主要步骤包括:

  • 初始化种群
  • 计算个体的适应度(目标函数值)
  • 快速非支配排序
  • 拥挤度计算
  • 选择、交叉和变异操作生成新一代种群
  • 合并父代和子代种群
  • 重复上述过程直到满足终止条件
  1. 非支配粒子群优化算法 (NSPSO, Non-dominated Sorting Particle Swarm Optimization):

    • 原理: 粒子群优化算法(Particle Swarm Optimization, PSO)是一种模拟鸟群或鱼群的社会行为的算法。NSPSO结合了非支配排序和粒子群优化算法,通过粒子间的信息共享和个体学习来优化多目标问题。
    • 特点: 算法具有良好的全局搜索能力和快速收敛性,同时能够保持解的多样性。
  2. 非支配蜣螂优化算法 (NSDBO, Non-dominated Sorting Dung Beetle Optimization):

    • 原理: 蜣螂优化算法(Dung Beetle Optimization, DBO)是一种模拟蜣螂滚球行为的算法。它通过模拟蜣螂寻找食物、滚球和避障的行为来搜索最优解。非支配排序用于生成Pareto前沿,以确保解的多样性和优化目标的平衡。
    • 特点: 算法具有较强的局部搜索能力和逃逸局部最优的能力,适合解决复杂的多目标优化问题。
  3. 非支配小龙虾优化算法 (NSCOA, Non-dominated Sorting Crayfish Optimization Algorithm):

    • 原理: 小龙虾优化算法(Crayfish Optimization Algorithm, COA)是一种模拟小龙虾觅食和逃避捕食者行为的算法。它通过模拟小龙虾的觅食路径和逃避策略来搜索最优解。非支配排序用于生成Pareto前沿,以确保解的多样性和优化目标的平衡。
    • 特点: 算法具有良好的探索能力和适应性,能够适应不同的优化问题,并且能够保持解的多样性。

三、四种算法求解FJSP

四种算法求解FJSP,以最大完工时间最小、机器最大负荷最小、总机器负荷最小为目标函数。

3.1部分代码

%% 算法求解
%% 算法求解
R(1).Result = NSGA2(MachineNum,jobNum,jobInfo,operaNumVec,candidateMachine,energy);
R(2).Result = NSPSO(MachineNum,jobNum,jobInfo,operaNumVec,candidateMachine,energy);
R(3).Result = NSDBO(MachineNum,jobNum,jobInfo,operaNumVec,candidateMachine,energy);
R(4).Result = NSCOA(MachineNum,jobNum,jobInfo,operaNumVec,candidateMachine,energy);
%% Pareto解
Strcol={'r*','go','bs','k>'};
NameAlgorith={'NSGA2','NSPSO','NSDBO','NSCOA'};
figure(1)
for i=1:4scatter3(R(i).Result.obj_matrix(:,1), R(i).Result.obj_matrix(:,2), R(i).Result.obj_matrix(:,3),50,Strcol{i})hold on
end
xlabel('最大完工时间'); ylabel('总能耗'); zlabel('总成本', 'Rotation', 90)
legend(NameAlgorith)

3.2部分结果

以Mk01数据集为例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、完整MATLAB代码

见下方名片

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring 事物使用场景说明

事务使用场景。 在某些业务场景下,如果一个请求中,需要同时写入多张表的数据。为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到spring事务。 确实&am…

【Shiro】Shiro 的学习教程(五)之 SpringBoot 集成 Shiro + JWT

与 Spring 集成&#xff1a;与 Spring 集成 与 SpringBoot 集成&#xff1a;与 SpringBoot 集成 1、SpringBoot Shiro Jwt ①&#xff1a;引入 pom.xml&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-…

【网络安全】服务基础第二阶段——第三节:Linux系统管理基础----Linux用户与组管理

目录 一、用户与组管理命令 1.1 用户分类与UID范围 1.2 用户管理命令 1.2.1 useradd 1.2.2 groupadd 1.2.3 usermod 1.2.4 userdel 1.3 组管理命令 1.3.1 groupdel 1.3.2 查看密码文件 /etc/shadow 1.3.4 passwd 1.4 Linux密码暴力破解 二、权限管理 2.1 文件与目…

sping boot 基于 RESTful 风格,模拟增删改查操作

RESTful -> 增&#xff1a;post 删&#xff1a;delete 改: put 查: get RESTful 资源路径&#xff0c;一般以 s 复数结尾 以下是代码示例&#xff1a; package com.example.springboot.controller;import org.springframework.web.bind.annotation.*;RestControll…

Mac+Pycharm配置PyQt6教程

安装包 pip install PyQt6 PyQt6-tools #查看Qt版本 pip show PyQt6 pip show pyqt6-tools 配置扩展工具 QTD(界面设计) Program&#xff1a;/Users/wan/PycharmProjects/NewDemo/venv/lib/python3.11/site-packages/qt6_applications/Qt/bin/Designer.app Working directo…

虚拟机ubuntu配置opencv和opencv_contrib

前期准备 1.下载opencv和opencv_contrib源码 opencv-4.6.0&#xff1a;https://opencv.org/releases/ opencv_contrib-4.6.0&#xff1a;https://github.com/opencv/opencv_contrib 在ubuntu直接下载或者在window上下好传到虚拟机里都可以 自己找个地方把他们解压&#xf…

基于springboot+vue+uniapp的“共享书角”图书借还管理系统小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

Leetcode69.x的平方根

题目 代码&#xff08;首刷看解析 2024年9月8日&#xff09; 注意相乘越界问题 class Solution { public:int mySqrt(int x) {if (x 0) return 0;if (x 1) return 1;int left 1;int right x / 2;while (left < right) {int mid left (right - left) / 2;if (mid <…

【第0007页 · 数组】数组中重复的数据(如何实现数组的原地修改)

【前言】本文以及之后的一些题解都会陆续整理到目录中&#xff0c;若想了解全部题解整理&#xff0c;请看这里&#xff1a; 第0007页 数组中重复的数据 今天&#xff0c;我们来看一个在实际工作中运用不多&#xff0c;但是对于一些算法题还是有必要的奇技淫巧——数组的原地修…

探索非局部均值滤波在椒盐噪声去除中的应用

在图像处理领域&#xff0c;椒盐噪声是一种常见的干扰&#xff0c;它会导致图像出现随机的黑白像素点&#xff0c;严重影响图像质量。为了解决这一问题&#xff0c;本文将介绍一种有效的去噪技术——非局部均值滤波&#xff08;NLM&#xff09;的改进版本&#xff0c;即NAMF&am…

springboot数据库连接由localhost改成IP以后访问报错500(2024/9/7

步骤很详细&#xff0c;直接上教程 情景复现 一.没改为IP之前正常 二.改完之后报错 问题分析 SQL没开启远程连接权限 解决方法 命令行登入数据库 mysql -u root -p切换到对应数据库 use mysql;设置root用户的连接权限允许其他IP连接数据库 update user set host % whe…

keepalived和lvs高可用集群

keepavlied和lvs高可用集群搭建 主备模式&#xff1a; 关闭防火墙和selinux systemctl stop firewalld setenforce 0部署master负载调度服务器 zyj86 安装ipvsadm keepalived yum install -y keepalived ipvsadm修改主节点配置 vim /etc/keepalived/keepalived.conf! Conf…

240908-Linux设置软连接关联大模型文件

在Linux中&#xff0c;您可以使用ln命令来创建软链接&#xff08;符号链接&#xff09;。软链接是一种特殊类型的文件&#xff0c;它指向另一个文件或目录。以下是如何设置软链接的步骤&#xff1a; 创建软链接 基本语法&#xff1a; ln -s [目标文件或目录] [软链接的名称]示…

驾驭不断发展的人工智能世界

从很多方面来看&#xff0c;历史似乎正在重演。许多企业正争相采用生成式人工智能 (Gen AI)&#xff0c;就像它们争相采用云计算一样&#xff0c;原因也是一样的&#xff1a;效率、成本节约和竞争优势。 然而&#xff0c;与云一样&#xff0c;GenAI 仍是一项发展中的技术&…

Django+Vue3前后端分离学习(一)(项目开始时settings.py里的设置)

一、创建django项目 二、修改settings.py里的配置&#xff1a; 1、修改语言和时区&#xff1a; # 语言编码 LANGUAGE_CODE zh-hansTIME_ZONE UTCUSE_I18N True# 不用时区 USE_TZ False 2、配置数据库&#xff1a; DATABASES {default: {ENGINE: django.db.backends.m…

[数据集][目标检测]街头摊贩识别检测数据集VOC+YOLO格式758张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;758 标注数量(xml文件个数)&#xff1a;758 标注数量(txt文件个数)&#xff1a;758 标注类别…

前端几种常见框架【第一节】

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 最近比较忙&#xff0c;本人在复习软考中级设计考试&#xff0c;所以本系列文从零基础开始复习软考到结束软考&#xff08;计算机技术与软件专业技术资格考试&#xff09;作为国家级职业资格认证考试&#x…

【路径规划】 使用计算机视觉和机器人操纵器绘制肖像

摘要 本项目展示了使用计算机视觉和机械臂绘制肖像的完整流程。系统利用网络摄像头获取肖像图像&#xff0c;经过图像处理后生成路径&#xff0c;然后利用逆向运动学将路径转化为机械臂的运动轨迹&#xff0c;最终在硬件机器人上执行绘制。实验结果表明&#xff0c;该系统能够…

Android Launcher3

一、定义与功能 Android Launcher是Android操作系统中的一个重要组件&#xff0c;它负责管理和呈现用户界面&#xff0c;包括桌面、应用程序抽屉和部件。Launcher不仅为用户提供了一个启动应用程序的入口&#xff0c;还允许用户自定义手机的主屏幕、图标、小部件布局以及一些基…

2023年AI芯片峰会

概述 开幕式 再谈人工智能芯片——魏少军 可重构计算技术的软件定义芯片 生成式AI与大语言模型时代的NVIDIA GPU生态——NVIDIA NN的发展脉络 1989年&#xff0c;证明神经网络可以表示概率的近似&#xff0c;使得其具有强大的数据拟合能力。 模型的各项能力在2020年基本超…