问题描述
现有n个作业需要使用同意机器进行生产加工,每个作业的作业时间、交付时间、提前完工惩罚费率、拖后完工惩罚费率分别用
p
j
、
d
j
、
α
j
、
β
j
p_j、d_j、\alpha_j、\beta_j
pj、dj、αj、βj表示。其中作业时间和交付时间一般用整数表示,如果不是整数则通过放大10或100等倍数实现。这些作业在时刻0时原材料准备完毕,作业不能中断加工,机器同一时间只能加工一个作业。现在需要对这些作业在机器上的排序和具体加工时间进行安排,实现总的提前和拖期成本最小。因为客户的交付时间各不相同,因此称之为不同交付时间单机提前、拖后调度问题。
令
E
j
=
m
a
x
(
0
,
d
j
−
C
j
)
E_j=max(0,d_j-C_j)
Ej=max(0,dj−Cj)和
T
j
=
m
a
x
(
0
,
C
j
−
d
j
)
T_j=max(0,C_j-d_j)
Tj=max(0,Cj−dj)分别为某个作业
π
\pi
π下作业
j
j
j的提前时长和拖后时长,该问题的目标函数如下:
f
(
π
)
=
∑
j
=
1
n
(
α
j
E
j
+
β
j
T
j
)
f(\pi)=\sum^n_{j=1}(\alpha_jE_j+\beta_jT_j)
f(π)=j=1∑n(αjEj+βjTj)
使用车间调度三元组表示法,该调度问题可以表示为1||
∑
j
=
1
n
(
α
j
E
j
+
β
j
T
j
)
\sum^n_{j=1}(\alpha_jE_j+\beta_jT_j)
∑j=1n(αjEj+βjTj)。该调度问题NP难问题。通常采用启发式或元启发式算法进行调度优化。
排序算法和邻域生成法
交付时间不同的1||
∑
j
=
1
n
(
α
j
E
j
+
β
j
T
j
)
\sum^n_{j=1}(\alpha_jE_j+\beta_jT_j)
∑j=1n(αjEj+βjTj)问题调度优化通常包括两个过程:
(1)通过各种方法生成交由目标函数的作业排序;
(2)根据作业排序生成具体调度方案
第一阶段可以使用EDD\LPT\SPT等启发式排序规则,或SA、Tabu、GA等元启发式算法,常见方法如下;
(1) 相邻两点位置互换:前后相邻两点间位置互换,构建当前排序的邻域解,并进行判断和当前解的更新;
(2)相间两点位置互换:当前排序中间隔一定数量d的两个作业进行位置互换,构建当前排序的邻域解,并进行判断和当前解的更新;
(3)两点位置交换:从
n
n
n中取2个作业进行位置互换,构建当前排序的邻域解,并及逆行判断和当前解的更新
(4)单点插入:随机选择某个点,将其插入到当前排序的不同位置,构建排序的邻域解,并进行判断和当前解的更新;
四种邻域生成方法在每次迭代过程中,会涉及大量运算。
调度方案生成算法
优化计算中第二项内容是根据特定的作业排序,生成具有较小ET的具体调度方案,调度方案会根据前后作业之间的空闲时段的调整来降低调度方法的ET值。空闲时段将机器的整个生成过程分隔为不同的作业块block。每个作业块中的各个作业加工过程前后相邻,前一作业加工结束后一作业立刻开工。