基于多元宇宙算法的柔性车间调度问题求解

基于多元宇宙算法的柔性车间调度问题求解


摘要:本文主要介绍基于多元宇宙算法的柔性车间调度问题求解

## 1.柔性作业车间调度问题
柔性作业车间调度问题(Flexible Job Shop Scheduling Problem,FJSP),是一种经典的组合优化问题。在FJSP问题中,有多个作业需要在多个机器上进行加工,每个作业由一系列工序组成,每个工序需要在特定的机器上完成。同时,每个机器一次只能处理一个工序,且每个工序的处理时间可能不同。FJSP问题的目标是找到一个最优的作业调度方案,使得所有作业的完成时间最小化。这个问题的难点在于需要考虑到多个作业,多个机器和多个工序之间的复杂关系,并且需要在有限的时间内找到最优解。
柔性作业车间调度问题( FJSP)的描述如下:n个工件 { J , J 2 , . . , J n } \left\{J, J_2, . ., J_n\right\} {J,J2,..,Jn} 要在 m m m 台机器 { M 1 , M 2 , . . , M m } \left\{M_1, M_2, . ., M_m\right\} {M1,M2,..,Mm} 上加工。每个工件包含一道或多道工序,工序顺序是预先确定的,每道工序可以在多台不同加工机器上进行加工,工序的加工时间随加工机器的不同而不同。调度目标是为每道工序选择最合适的机器,确定每台机器上各个工序的最佳加工顺序以及开工时间,使整个系统的某些性能指标达到最优。因此,柔性作业车间调度问题包含两个子问题:确定各工件的加工机器(机器选择子问题)和确定各个机器上的加工先后顺序(工序排序子问题)。

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

1.1 约束条件

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

其中: i = 1 , … , m ; j = 1 , … , n ; h = 1 , … , h j i=1, \ldots, m ; j=1, \ldots, n ; h=1, \ldots, h_j i=1,,m;j=1,,n;h=1,,hj

C 2 : c j h ≤ s j ( h + 1 ) C_2: c_{j h} \leq s_{j(h+1)} C2:cjhsj(h+1)

其中: j = 1 , … , n ; h = 1 , … , h j − 1 j=1, \ldots, n ; h=1, \ldots, h_j-1 j=1,,n;h=1,,hj1

C 3 : c j h j ≤ C max ⁡ C_3: c_{j h_j} \leq C_{\max } C3:cjhjCmax

其中: j = 1 , … , n j=1, \ldots, 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_{j h}+p_{i j h} \leq s_{k l}+L\left(1-y_{i j h k l}\right) 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_{j h} \leq s_{j(h+1)}+L\left(1-y_{i k l j(h+1)}\right) 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_{j h}} x_{i j h}=1 h1:i=1mjhxijh=1
其中: h = 1 , … , h j ; j = 1 , … , n h=1, \ldots, h_j ; j=1, \ldots, 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_{i j h k l}=x_{i k l} 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_{i j h k l}=x_{i j h} 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_{j h} \geq 0, c_{j h} \geq 0 C6:sjh0,cjh0

其中: j = 0 , 1 , … , n ; h = 1 , … , h j j=0,1, \ldots, n ; h=1, \ldots, 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 表示各个参数变量必须是正数。

n n n :工件总数;
m m m :机器总数;
i , e i, e i,e :机器序号, i , e = 1 , 2 , 3 , … , m i, e=1,2,3, \ldots, m i,e=1,2,3,,m
j , k : j, k: j,k: 工件序号, j , k = 1 , 2 , 3 , … , n ; h j j, k=1,2,3, \ldots, n ; h_j j,k=1,2,3,,n;hj :工件 j j j 的工序总数;
h , l : h, l: h,l: 工序序号, h = 1 , 2 , 3 , … , h j h=1,2,3, \ldots, h_j h=1,2,3,,hj
Ω j h \Omega_{j h} Ωjh :工件 j j j 的第 h h h 道工序的可选加工机器集;
m j h m_{j h} mjh :工件 j j j 的第 h h h 道工序的可选加工机器数;
O j h O_{j h} Ojh :工件 j j j 的第 h h h 道工序;
M i j h M_{i j h} Mijh :工件 j j j 的第 h h h 道工序在机器 i i i 上加工;
p i j h p_{i j h} pijh :工件 j j j 的第 h h h 道工序在机器 i i i 上的加工时间;
s j h s_{j h} sjh :工件 j j j 的第 h h h 道工序加工开始时间;
c j h c_{j h} 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_{\text {max }} Cmax  :最大完工时间;
T o : T o = ∑ j = 1 n h j T_o: T_o=\sum_{j=1}^n h_j To:To=j=1nhj ,所有工件工序总数;
x i j h = { 1 ,  如果工序  O j h  选择机器  i ; 0 ,  否则; x_{i j h}=\left\{\begin{array}{l}1, \text { 如果工序 } O_{j h} \text { 选择机器 } i ; \\ 0, \text { 否则;}\end{array}\right. xijh={1, 如果工序 Ojh 选择机器 i;0, 否则;
y i j h k l = { 1 ,  如果  O i j h  先于  O i k l  加工; 0 ,  否则; y_{i j h k l}=\left\{\begin{array}{l}1, \text { 如果 } O_{i j h} \text { 先于 } O_{i k l} \text { 加工;} \\ 0, \text { 否则;}\end{array}\right. yijhkl={1, 如果 Oijh 先于 Oikl 加工;0, 否则;

1.2约束条件

FJSP的目标函数是最大完工时间最小。完工时间是每个工件最后一道工序完成的时间,其中最大的那个时间就是最大完工时间 (makespan)。它是衡量调度方案的最根本指标,主要体现车间的生产效率,如下式所示:

f = min ⁡ ( max ⁡ 1 ≤ j ≤ n ( C j ) ) f=\min \left(\max _{1 \leq j \leq n}\left(C_j\right)\right) f=min(1jnmax(Cj))

2.多元宇宙算法

多元宇宙算法原理请参考:https://blog.csdn.net/u011835903/article/details/107785205

3.实验案例及结果

本文采用Brandimarte 数据集进行测试

Brandimarte 数据集是柔性作业车间调度问题(FJSP)中的一个经典数据集,用于研究和测试各种调度算法。该数据集包含了多个工件和机器的调度信息,旨在优化生产线上的任务顺序,以达到最小化完成时间、最大化效率或最小化成本等目标。Brandimarte 数据集的格式如下:第一行包含至少两个数字:第一个数字表示工件数,第二个数字表示机器数,第三个数字表示每道工序平均可有几台机器加工。接下来的每一行表示一个工件的各工序可用机器情况。

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

4.Matlab代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能算法研学社(Jack旭)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值