
获取更多资讯,赶快关注公众号(名称:智能制造与智能调度,公众号:deeprlscheduler)吧!
柔性作业车间调度问题是组合优化中的经典问题,也是一种真实生产环境下非常常见的组织形式。本文章针对上一篇文章中存在的局限性,提出一个基于三维析取图分派的端到端深度强化学习调度框架。该框架采用改进的指针网络,根据选择的调度特征对所有待调度工序进行编码,通过注意力机制,在每次解码时指向一个输入作为动作,使用RNN对解码器网络进行建模。为了训练该网络以最小化制造期,使用了策略梯度法来进行强化学习训练,训练后的模型可以实时地产生出连续工件序列作为调度解,而不再是选择启发式规则。通过实验证明,该方法在只训练一个模型的情况下就可以用于求解不同规则的柔性作业车间调度问题,并得到优于经典启发式规则的性能。关注公众号后,点击阅读原文下载原文。
端到端深度强化学习调度框架
近年来,随着在自然语言等时序领域的应用越来越广泛,序列到序列模型与深度强化学习的结合产生出了解决组合优化问题的新方法,这些端到端方法以给定问题实例作为输入,利用训练好的深度神经网络直接输出问题的解,而不再是通过选择启发式规则间接地构造解。受上述启发,本章构造了一套基于端到端模型和三维析取图模型的深度强化学习柔性作业车间调度框架。
端到端深度强化学习求解
随着调度分派的进行,部分输入元素在解码之间是可变的,这些动态元素可能是解码过程本身的动作,也可以是由环境决定的。如在柔性作业车间调度问题中,剩余工时随着调度的进行不断减少,或者可以考虑工件是随时间动态抵达的,而这与调度决策无关。给定一个输入三维析取图,可以将其表达为 N O NO NO道工序在d-维调度特征空间 S F = { f o , O ∈ O } S F=\left\{f_{o}, O \in \boldsymbol{O}\right\} SF={fo,O∈O}的序列,其中 f o = { f 1 , ⋯ , f d } ∈ R d f_{o}=\left\{f_{1}, \cdots, f_{d}\right\} \in \mathbb{R}^{d} fo={f1,⋯,fd}∈Rd,每一道输入工序 O O O表达为特征元组序列(sequence of feature tuples) { f o t ≐ ( f s o , f d o t ) , t = 0 , 1 , ⋯ } \left\{f_{o}^{t} \doteq\left(f_{s_{o}}, f d_{o}^{t}\right), t=0,1, \cdots\right\} {fot≐(fso,fdot),t=0,1,⋯},其中 f s o f_{s_{o}} fso和 f d o t f d_{o}^{t} fdot分别表示输入工序的静态特征和动态特征。 f o t f_{o}^{t} fot可以认为是描述时刻 t t t输入工序 o o o的特征向量。将固定时刻 t t t时的所有输入状态集定义为 S F t S F_{t} SFt。调度本质上就是给定一组输入工序,得到这些工序的排序 ,使得制造期最短,所以可以借鉴机器翻译领域的序列到序列模型来求解调度问题,并将这种输入一个序列输出另一序列的方法称为端到端(End-to-end)的方法。
从 S F 0 S F_{0} SF0中的任意输入开始,其中使用指针 π ( 0 ) \pi(0) π(0)参照(refer to)该输入。在每一解码时刻 t ( t = 0 , ⋯ , N O − 1 ) t(t=0, \cdots, N O-1) t(t=0,⋯,NO−1), π ( t + 1 ) \pi(t+1) π(t+1)都指向可选输入 S F t S F_{t} SFt中的一个,从而确定下一解码步的输入。重复执行该过程直到满足终止条件,即在满足约束条件的情况下所有工序已调度完成,结果将生成一个长度为 N O NO NO的序列 π \pi π 。目的是给定输入工序集 O O O,学习一个可以生成序列 π \pi π 的随机策略 p ( π ∣ S F 0 ) p\left(\pi \mid S F_{0}\right) p(π∣SF0),在满足约束的同时最小化制造期。神经网络结构使用链式法则将拓扑排序的概率因式分解为:
p
(
π
∣
S
F
0
)
=
∏
t
=
0
N
O
−
1
p
(
π
(
t
)
∣
π
(
<
t
)
,
S
F
t
)
(1)
p\left(\pi \mid S F_{0}\right)=\prod_{t=0}^{N O-1} p\left(\pi(t) \mid \pi(< t), SF_{t}\right)\tag{1}
p(π∣SF0)=t=0∏NO−1p(π(t)∣π(<t),SFt)(1)
且
S
F
t
+
1
=
F
(
π
(
t
)
,
S
F
t
)
(2)
S F_{t+1}=F\left(\pi(t), S F_{t}\right)\tag{2}
SFt+1=F(π(t),SFt)(2)
为问题表达的迭代更新,其中
F
.
F.
F.为状态转移函数。等式(1)右侧的每一项都是通过注意力机制计算得到的,即:
p
(
π
(
t
)
∣
π
(
<
t
)
,
S
F
t
)
=
softmax
(
g
(
h
t
,
S
F
t
)
)
(3)
p\left(\pi(t) \mid \pi(< t), S F_{t}\right)=\operatorname{softmax}\left(g\left(h_{t}, S F_{t}\right)\right)\tag{3}
p(π(t)∣π(<t),SFt)=softmax(g(ht,SFt))(3)
其中 g g g为一个输出与输入等长向量的仿射函数, h t h_t ht为RNN解码器的状态,其总结了之前所有解码步 π ( < t ) \pi(< t) π(<t)的信息。
状态、动作和奖励
从整体、任务和工件三个角度分别提出了描述调度问题的动态和静态特征,如下表所示。其中整体信息用于描述调度问题的全貌,常以比例、均值、标准差等形式出现,且为了能够适应不同规模的问题,通常关于平均值进行归一化;任务信息则是反映每项加工任务的工件和工序相关属性,不同任务间通过最大最小缩放(Max-Min scaling)实现归一化;机床信息描述了每台机床的可加工信息和已调度信息,同样使用最大最小缩放进行归一化;动态特征随着调度分派的进行会不断发生变化,而静态特征则是由调度问题本身决定的,在调度过程中不会发生变化。
基于析取图模型,在每一决策时刻从所有就绪任务集合中选择某一工序,而每一次选择就对应一种行为。由于在调度中同一工件的不同工序间存在顺序约束,因此有效动作只能从当前就绪任务集合中选择,为了能够生成可行解,提出了一种新的掩码机制,即设置选择当前就绪任务集合以外的任意工序的对数概率为
−
∞
-\infty
−∞。前面已经提到,在柔性作业车间调度问题中,除了工件排序,还存在机床分配问题,为此认为同一道工序在不同机床上加工时为不同的工序,那么调度问题中总工序数就从
∑
i
=
1
N
N
O
i
\sum_{i=1}^{N} N O_{i}
∑i=1NNOi变为
∑
i
=
1
N
J
∑
h
=
1
N
O
i
N
M
i
n
\sum_{i=1}^{N J} \sum_{h=1}^{N O_{i}} N M_{i n}
∑i=1NJ∑h=1NOiNMin,而通过掩码机制的限制,这些工序中只有位于当前就绪任务集合中的工序
o
∈
O
ready
o \in \boldsymbol{O}_{\text {ready }}
o∈Oready 才可以被选择。
如下图所示的调度特征和调度行为,左半部分为按照可选机床扩展出来的工序,即认为同一道工序在不同机床加工时为不同的工序,右半部分为每道工序对应的特征,整体特征、任务特征、机床特征和静态特征、动态特征分别以不同的颜色和线型表示。每道工序的特征包括了整体、任务和机床的动静态特征,其中整体特征在所有工序任务上都相同,那么在构造特征序列时,整体特征相当于在其左侧的长箭头范围内进行了行复制,同时任务特征在所有可选机床上都相同,那么任务特征相当于在其左侧的短箭头范围内进行了行复制。所有工序特征均输入到网络中,输出就是从就绪任务集合中按照某一概率分布选择一道工序,如第一个动作 a 1 a^1 a1只能从各工件的首道工序(右侧箭头构成)中进行选择,这样就实现了在满足工艺约束的同时,仅输出一个动作就可以同时选择工序及其所需要的机床。
由于优化的目标是最小化制造期,而强化学习的目标是最大化期望累积奖励,为了保持两者的方向一致,将制造期的相反数作为奖励函数,这种奖励函数本质上还是一种等价奖励函数。
网络模型
拟采用的神经网络模型
循环神经网络编码器增加了额外的复杂性,但实际上是不必要的,而省略它可以使该方法更一般化。循环神经网络只有当输入传送的是顺序信息时才有必要,但是对于像柔性作业车间调度这样的组合优化问题来说,输入集合的顺序是没有特殊意义的,任意的工序排列所包含的信息都和原始输入相同,对最终调度结果没有影响。因此可以将编码器循环神经网络移除,直接使用嵌入后的输入代替循环神经网络隐藏层状态。
下图为所采用的模型,其包含两个主要组件,第一个是嵌入集Embedding,将输入映射成一个D维向量空间,对应于输入的不同元素可能有多个嵌入,但是它们在输入之间是共享的;第二个是解码器,在每一次解码时指向一个输入。这里使用循环神经网络对解码器进行建模。
训练方法
强化学习为训练神经网络进行组合优化提供了合适的范式,特别是因为这些问题有相对简单甚至可以在测试时使用的奖励机制。因此提出了利用无模型策略的强化学习方法来优化指针网络的参数
θ
\theta
θ。目标是给定输入调度案例
s
s
s时的期望制造期,定义如下:
J
(
θ
∣
s
)
=
E
π
∼
p
θ
(
⋅
∣
s
)
C
(
π
∣
s
)
(4)
J(\boldsymbol{\theta} \mid s)=\mathbb{E}_{\pi \sim p_{\theta}(\cdot \mid s)} C(\pi \mid s)\tag{4}
J(θ∣s)=Eπ∼pθ(⋅∣s)C(π∣s)(4)
在训练过程中,调度案例是从分布 S \mathcal{S} S中采样得到的,即 J ( θ ) = E s ∼ S J ( θ ∣ s ) J(\boldsymbol{\theta})=\mathbb{E}_{s \sim \mathcal{S}} J(\boldsymbol{\theta} \mid s) J(θ)=Es∼SJ(θ∣s)。
可采用策略梯度法和随机梯度下降法对参数进行优化,其中最常用的算法就是REINFORCE,可以将式(4)的梯度形式化表达为:
∇
θ
J
(
θ
∣
s
)
=
E
π
∼
p
θ
(
∣
s
)
[
(
C
(
π
∣
s
)
−
b
(
s
)
)
∇
θ
log
p
θ
(
π
∣
s
)
]
(5)
\nabla_{\theta} J(\theta \mid s)=\mathbb{E}_{\pi \sim p_{\theta}(\mid s)}\left[(C(\pi \mid s)-b(s)) \nabla_{\theta} \log p_{\theta}(\pi \mid s)\right]\tag{5}
∇θJ(θ∣s)=Eπ∼pθ(∣s)[(C(π∣s)−b(s))∇θlogpθ(π∣s)](5)
其中 b ( s ) b(s) b(s)表示不依赖于策略 π \pi π的基线函数,其估计了期望制造期,在不影响梯度值 ∇ θ J ( θ ∣ s ) \nabla_{\theta} J(\theta \mid s) ∇θJ(θ∣s)的情况下可以有效降低梯度方差。下式证明了式(6)中引入基线后不会影响期望值。
E π ∼ p θ ( ∣ s ) [ b ( s ) ∇ θ log p θ ( π ∣ s ) ] = ∫ a p θ ( π ∣ s ) b ( s ) ∇ θ log p θ ( π ∣ s ) d a = ∫ a b ( s ) ∇ θ p θ ( π ∣ s ) d a = b ( s ) ∇ θ ∫ a p θ ( π ∣ s ) d a = b ( s ) ∇ θ 1 = 0 (6) \begin{aligned} &\mathbb{E}_{\pi \sim p_{\theta}(\mid s)}\left[b(s) \nabla_{\theta} \log p_{\theta}(\pi \mid s)\right] \\ &=\int_{a} p_{\theta}(\pi \mid s) b(s) \nabla_{\theta} \log p_{\theta}(\pi \mid s) d a \\ &=\int_{a} b(s) \nabla_{\theta} p_{\theta}(\pi \mid s) d a \\ &=b(s) \nabla_{\theta} \int_{a} p_{\theta}(\pi \mid s) d a \\ &=b(s) \nabla_{\theta} 1 \\ &=0 \end{aligned}\tag{6} Eπ∼pθ(∣s)[b(s)∇θlogpθ(π∣s)]=∫apθ(π∣s)b(s)∇θlogpθ(π∣s)da=∫ab(s)∇θpθ(π∣s)da=b(s)∇θ∫apθ(π∣s)da=b(s)∇θ1=0(6)
由于在实际中不可能穷举所有的调度案例,因此通常采用蒙特卡洛采样法进行近似,独立同分布的采样B个调度案例
S
1
,
S
2
,
…
,
S
B
∼
S
S_{1}, S_{2}, \ldots, S_{B} \sim \mathcal{S}
S1,S2,…,SB∼S,每个调度案例采样一个调度解,即
π
i
∼
p
θ
(
⋅
∣
s
i
)
\pi_{i} \sim p_{\theta}\left(\cdot \mid s_{i}\right)
πi∼pθ(⋅∣si),式(5)中的梯度可以近似为:
∇
θ
J
(
θ
)
≈
1
B
∑
i
=
1
B
(
C
(
π
i
∣
s
i
)
−
b
(
s
i
)
)
∇
θ
log
p
θ
(
π
i
∣
s
i
)
(7)
\nabla_{\theta} J(\theta) \approx \frac{1}{B} \sum_{i=1}^{B}\left(C\left(\pi_{i} \mid s_{i}\right)-b\left(s_{i}\right)\right) \nabla_{\theta} \log p_{\theta}\left(\pi_{i} \mid s_{i}\right)\tag{7}
∇θJ(θ)≈B1i=1∑B(C(πi∣si)−b(si))∇θlogpθ(πi∣si)(7)
使用一个参数化的基线来估计预期的制造期
E
π
∼
p
θ
(
⋅
∣
s
)
C
(
π
∣
s
)
\mathbb{E}_{\pi \sim p_{\theta}(\cdot \mid s)} C(\pi \mid s)
Eπ∼pθ(⋅∣s)C(π∣s)通常可以提高学习效率。因此,引入了一个参数为
θ
v
\theta_{v}
θv的评论家辅助网络,来学习在给定输入序列s的情况下由当前策略
p
θ
p_{\theta}
pθ所找到的期望制造期。
以预测值
b
θ
v
(
s
)
b_{\theta_{v}}(s)
bθv(s)和采样的实际制造期的均方误差为目标,利用随机梯度下降对评论家进行训练。
L
(
θ
v
)
=
1
B
∑
i
=
1
B
∥
b
θ
v
(
s
i
)
−
C
(
π
i
∣
s
i
)
∥
2
2
(8)
\mathcal{L}\left(\theta_{v}\right)=\frac{1}{B} \sum_{i=1}^{B}\left\|b_{\theta_{v}}\left(s_{i}\right)-C\left(\pi_{i} \mid s_{i}\right)\right\|_{2}^{2}\tag{8}
L(θv)=B1i=1∑B∥bθv(si)−C(πi∣si)∥22(8)
用于求解柔性作业车间调度问题的端到端深度强化学习训练算法如Algorithm 2所示。
实验结果
训练细节
结果分析
为了验证算法的有效性,使用所提出的算法训练一个模型来求解不同规模的柔性作业车间调度,并与9种启发式规则(3种工件排序规则,SPT:工序加工时间最短,SRPT:剩余加工时间最短,FOPNR:剩余工序数最少;3种机床排序规则,EF:最早完成加工,SPT:机床加工时间最短,SPTW:工序工时+机床负荷最小。两者之间组合就得到9种)进行比较。Nazari等仅将静态特征作为解码器网络的输入,但是在柔性作业车间调度问题中,动态特征也会对调度产生非常大的影响,因此需要将动态和静态特征均输入到网络,同时与仅输入静态特征的情况进行了对比。将前者称为AC-SD,后者称为AC-S。
选取Brandimarte’s Data标准案例来进行验证,其中包含了10个不同规模的调度案例,调度结果如下表所示。