车间作业调度问题
车间作业调度问题(Job Shop Scheduling Problem,JSSP)是经典的组合优化问题,在阅读论文过程中发现了对其描述如下:
给定一组工件
J
=
1
,
2
,
.
.
.
,
n
J=1,2,...,n
J=1,2,...,n,要求在一组机器
M
=
1
,
2
,
.
.
.
,
m
M=1,2,...,m
M=1,2,...,m上加工完成,满足以下约束条件:
1)每个工件在机器上的加工次序给定;
2)每台机器在任何时刻最多只加工一个工件,工件加工的时间是固定的且工序一旦开始不能被中断;
3)每道工序必须等到其所有的前继工序加工完毕后才能开始加工。
数学描述如下:
f
=
m
i
n
{
m
a
x
{
c
i
k
}
}
(1)
f=min\{max\{c_{ik}\}\} \tag{1}
f=min{max{cik}}(1)s.t.
c
i
k
−
p
i
k
+
M
(
1
−
a
i
h
k
)
≥
c
i
h
,
i
=
1
,
2
,
.
.
.
.
,
n
;
h
,
k
=
1
,
2
,
.
.
.
m
(2)
c_{ik}-p_{ik}+M(1-a_{ihk})\ge c_{ih}, \\i=1,2,....,n;h,k=1,2,...m \tag{2}
cik−pik+M(1−aihk)≥cih,i=1,2,....,n;h,k=1,2,...m(2)
c
j
k
−
c
i
k
+
M
(
1
−
x
i
j
k
)
≥
p
j
k
,
i
,
j
=
1
,
2
,
.
.
.
.
,
n
;
k
=
1
,
2
,
.
.
.
m
(3)
c_{jk}-c_{ik}+M(1-x_{ijk})\ge p_{jk}, \\ i,j=1,2,....,n;k=1,2,...m \tag{3}
cjk−cik+M(1−xijk)≥pjk,i,j=1,2,....,n;k=1,2,...m(3)
c
i
k
≥
0
,
i
=
1
,
2
,
.
.
.
,
n
;
k
=
1
,
2
,
.
.
.
,
m
(4)
c_{ik}\ge 0,i=1,2,...,n;k=1,2,...,m\tag{4}
cik≥0,i=1,2,...,n;k=1,2,...,m(4)
其中,符号
c
i
k
c_{ik}
cik和
p
i
k
p_{ik}
pik分别表示工件
i
i
i在机器
k
k
k上的加工完成时间和加工时长;
M
M
M是一个足够大的正数;
a
i
h
k
a_{ihk}
aihk和
x
i
j
k
x_{ijk}
xijk分别为指示系数和指示变量,意义如下:
a
i
h
k
=
{
1
若机器
h
先于机器
k
加工工件
i
0
非上述情况
(5)
a_{ihk}= \begin{cases} 1& \text{若机器$h$先于机器$k$加工工件$i$}\\ 0& \text{非上述情况} \end{cases}\tag{5}
aihk={10若机器h先于机器k加工工件i非上述情况(5)
x
i
j
k
=
{
1
若工件
i
先于工件
j
在机器
k
上加工
0
非上述情况
(6)
x_{ijk}= \begin{cases} 1& \text{若工件$i$先于工件$j$在机器$k$上加工}\\ 0& \text{非上述情况} \end{cases}\tag{6}
xijk={10若工件i先于工件j在机器k上加工非上述情况(6)
理解:
目标函数(1)中的
m
a
x
{
c
i
k
}
max\{c_{ik}\}
max{cik}表示一系列工件最后一个工件完工的时间。
约束(2)表示,若机器
h
h
h先于机器
k
k
k加工工件
i
i
i,则需保证
c
i
k
−
p
i
k
≥
c
i
h
c_{ik}-p_{ik}\ge c_{ih}
cik−pik≥cih,即工件
i
i
i在机器
h
h
h上加工完后再到机器
k
k
k上加工。
约束(3)表示,若工件
i
i
i先于工件
j
j
j在机器
k
k
k上加工,则须保证
c
j
k
−
c
i
k
≥
p
j
k
c_{jk}-c_{ik}\ge p_{jk}
cjk−cik≥pjk,即工件
j
j
j在机器
k
k
k上加工完后才能再加工工件
i
i
i。
约束(4)表示每个工件在每个机器上都要加工。
编码
这里对基于工序的编码方式进行介绍:
每个个体的染色体有所有工序的排序构成,每个基因代表一个工序,同一作业的所有工序由同一作业序号表示,根据他们在染色体排序中的顺序决定他们在不同机器上的加工顺序。对于一个
n
n
n个工件,
m
m
m个机器的作业调度问题,每个染色体由
n
×
m
n\times m
n×m个基因组成,每个工件号在染色体中出现的次数为
m
m
m次,同一工件的第
i
i
i次出现表示该工件的第
i
i
i道工序。
解码
这里采用前插式解码,根据给定的染色体,对每个当前工序,从其所在机器的前面开始遍历,如果有时间间隔和约束条件可以满足当前工序,则将其插入该位置。
示例
下面以论文《Optimization of job shop scheduling problems using teaching-learning-based optimization algorithm》中的例子为例。已知的工件对应的操作机器、时间如下表所示,
假设编码为:1 2 3 1 2 3 2 1 3
那么它对应的时间安排是什么样的呢?
将上述两个表格进行重新整理:
Job | Operation1 | Operation2 | Operation3 |
---|---|---|---|
1 | 1(15) | 2(25) | 3(18) |
2 | 2(10) | 3(20) | 1(7) |
3 | 3(8) | 1(12) | 2(10) |
(括号外为这一操作使用的机器,括号内为每一步操作所需时间)
1 表示工件1的第一个操作,在机器1上完成:15min
2 表示工件2的第一个操作,在机器2上完成:10min
3 表示工件3的第一个操作,在机器3上完成:8min
1 表示工件1的第二个操作,在机器2上完成:此时需等待工件1的第一个操作已完成,且机器2有空闲:15min+25min=40min
2 表示工件2的第二个操作,在机器3上完成:此时需等待工件2的第一个操作已完成,且机器3有空闲:10min+20min=30min
3 表示工件3的第二个操作,在机器1上完成:此时需等待工件3的第一个操作已完成,且机器1有空闲:15min+12min=27min
2 表示工件2的第三个操作,在机器1上完成:此时需等待工件2的第二个操作已完成,且机器1有空闲:30min+7min=37min
1 表示工件1的第三个操作,在机器3上完成:此时需等待工件1的第二个操作已完成,且机器3有空闲:40min+18min=58min
3 表示工件3的第三个操作,在机器2上完成:此时需等待工件3的第二个操作已完成,且机器2有空闲:40min+10min=50min
于是该染色体对应甘特图如下: