前言
论文阅读笔记:Heterogeneous Attentions for Solving Pickup and Delivery Problem via Deep Reinforcement Learning
一、PDP问题
定义:载具从仓库开始,依次访问所有取货节点和配送节点,只执行一次服务,最后返回仓库,尽可能地节省时间。注意,这里PDP允许连续的拾取或交付,或它们的混合,只要它满足优先约束。
n
n
n:客户请求数量
P
=
{
x
i
}
i
=
1
n
P=\{ x_i \}_{i=1}^n
P={xi}i=1n:pickup node set
D
=
{
x
i
}
i
=
n
+
1
2
n
D=\{ x_i \}_{i=n+1}^{2n}
D={xi}i=n+12n:delivery node set
x
i
x_i
xi:pickup node
x
n
+
1
x_{n+1}
xn+1:delivery node,与 pickup node 为成对的,具有优先级关系
仓库:node 0
X
=
{
x
0
}
∪
P
∪
D
X=\{ x_0 \} \cup P \cup D
X={x0}∪P∪D:complete node set
X
′
=
{
x
2
n
+
1
}
∪
X
=
{
x
i
}
i
=
0
2
n
+
1
X'=\{ x_{2n+1} \} \cup X =\{ x_i \}_{i=0}^{2n+1}
X′={x2n+1}∪X={xi}i=02n+1:其中
x
2
n
+
1
x_{2n+1}
x2n+1为仓库的copy
{
c
i
}
\{ c_i \}
{ci}:包含
{
x
i
}
\{ x_i \}
{xi}二维坐标
v
v
v:载具,从
x
i
x_i
xi全部运输到从
x
i
+
n
x_i+n
xi+n(有无限的运输能力)
D
i
j
D_{ij}
Dij:表示节点
x
i
x_i
xi到节点
x
j
x_j
xj的欧氏距离
f
f
f为载具
v
v
v的速度
y
i
j
∈
{
0
,
1
}
y_{ij} \in \{ 0,1 \}
yij∈{0,1}:二元变量,指示载具
v
v
v是否直接从节点
x
i
x_i
xi到节点
x
j
x_j
xj
B
i
B_{i}
Bi:表示节点
x
i
x_i
xi的到达时间
M
M
M是一个足够大的数
为追求速度尽量快、距离尽量短,可以得到如下目标函数:
min
∑
i
∈
X
∑
j
∈
X
D
i
j
f
y
i
j
\min \sum_{i \in X} \sum_{j \in X} \frac{D_{i j}}{f} y_{i j}
mini∈X∑j∈X∑fDijyij
约束条件如下:
∑
j
∈
X
y
i
j
=
1
,
i
∈
X
′
∑
i
∈
X
y
i
j
=
1
,
j
∈
X
′
B
j
≥
B
i
+
D
i
j
f
−
M
(
1
−
y
i
j
)
,
i
∈
X
′
,
j
∈
X
′
B
i
+
n
≥
B
i
+
D
i
,
i
+
n
f
,
i
∈
P
,
i
+
n
∈
D
y
i
j
=
{
0
,
1
}
,
i
∈
X
′
,
j
∈
X
′
B
i
≥
0
,
i
∈
X
′
\begin{aligned} \sum_{j \in X} y_{i j} &=1, \quad i \in X^{\prime}\\ \sum_{i \in X} y_{i j} &=1, \quad j \in X^{\prime}\\ B_j & \geq B_i+\frac{D_{i j}}{f}-M\left(1-y_{i j}\right), \quad i \in X^{\prime}, j \in X^{\prime}\\ B_{i+n} & \geq B_i+\frac{D_{i, i+n}}{f}, \quad i \in P, i+n \in D\\ y_{i j} &=\{0,1\}, \quad i \in X^{\prime}, j \in X^{\prime} \\ B_i & \geq 0, \quad i \in X^{\prime} \end{aligned}
j∈X∑yiji∈X∑yijBjBi+nyijBi=1,i∈X′=1,j∈X′≥Bi+fDij−M(1−yij),i∈X′,j∈X′≥Bi+fDi,i+n,i∈P,i+n∈D={0,1},i∈X′,j∈X′≥0,i∈X′
二、方法
1.PDP问题的RL形式
形式说明:
如图所示,其中节点1-3、2-4各自成对,节点1和2为pickup node,3和4位delivery node。
第一步:由于优先性限制,先将3和4掩盖。先选择节点1,之后将节点3去掩盖。路径中记录节点1,奖励为负值的时间。
第二步:选择节点2,余下与第一步同理。
Markov Decision Process (MDP):
通常意义上的MDP马尔科夫决策过程包含一个五元组
<
S
,
A
,
P
,
R
,
γ
>
<S,A,P,R,\gamma>
<S,A,P,R,γ>
S
S
S:有限状态集合;
A
A
A:有限动作集合;
P
P
P:状态转移概率矩阵
P
s
s
′
a
=
p
(
s
t
+
1
=
s
′
∣
s
t
=
s
,
A
t
=
a
)
P_{ss'}^{a}=p (s_{t+1} = s' | s_t = s,A_t=a)
Pss′a=p(st+1=s′∣st=s,At=a);状态转移矩阵 P 表现为,既当前状态为
s
t
=
s
s_t=s
st=s时,下一个状态变为
s
t
+
1
=
s
′
s_{t+1}= s'
st+1=s′的概率。
R
R
R:奖励函数
R
S
a
=
E
[
R
t
+
1
∣
S
t
=
s
,
A
t
=
a
]
R_S^{a}=E[R_{t+1}|S_t=s,A_t=a]
RSa=E[Rt+1∣St=s,At=a] ,既状态单次转换取得的收益;
γ
γ
γ:折扣因子/衰减系数
γ
∈
[
0
,
1
]
γ∈[0,1]
γ∈[0,1]。
状态: s t = ( L t ) s_t=(L_t) st=(Lt)表示在时间 t t t时的部分解决方案,其中 L t L_t Lt包含访问过的节点(含仓库)。
动作:在路径构建过程中,动作 a t a_t at用 ( x j ) (x_j) (xj)表示。如步数 t t t时选择节点 x j x_j xj。
转移:下一状态 s t + 1 = ( L t + 1 ) = ( L t ; x j ) s_{t+1}=(L_{t+1})=(L_t;{x_j}) st+1=(Lt+1)=(Lt;xj),源于步数 t t t是,在状态 s t s_t st时选择的节点。其中 ; ; ;表示将选择的节点与之前的路径连接。
奖励:为了使路线的总旅行时间最小,将奖励定义为目标值的负数,目标值由所有步骤的旅行时间的负数相加得到。
R
=
∑
t
=
1
T
r
t
R=\sum^{T}_{t=1}r_t
R=∑t=1Trt。
r
t
+
1
=
r
(
s
t
+
1
,
a
t
+
1
)
=
r
(
(
L
t
+
1
)
,
(
x
j
)
)
=
−
D
i
j
f
r_{t+1}=r(s_{t+1},a_{t+1})=r((L_{t+1}),(x_j))=-\frac{D_{ij}}{f}
rt+1=r(st+1,at+1)=r((Lt+1),(xj))=−fDij
策略:随机策略
p
θ
p_\theta
pθ在优先级约束下,在每个时间步自动选择一个节点。这个过程被反复重复,直到完成所有的取货-送货服务。执行该策略的最终结果是所有节点的排列,它规定了车辆访问每个节点的顺序。如:
π
=
{
π
1
,
π
1
,
.
.
.
,
π
T
}
\pi=\{ \pi_1,\pi_1,...,\pi_T \}
π={π1,π1,...,πT}。链式分解为:
P
(
π
∣
X
)
=
∏
t
=
0
T
−
1
p
θ
(
π
t
∣
X
,
π
1
:
t
−
1
)
P(\pi \mid X)=\prod_{t=0}^{T-1} p_\theta\left(\pi_t \mid X, \pi_{1: t-1}\right)
P(π∣X)=t=0∏T−1pθ(πt∣X,π1:t−1)
其中
X
X
X是问题实例的输入。根据所学到的pθ进行节点选择决策。
2.基于异构注意力的策略网络
演员网络(actor network)和评论家网络(critic network)的强化学习方法。
演员网络(actor network):在给定当前状态的所有动作上生成一个概率向量,然后相应地选择一个动作,迭代重复直到终止条件。其奖励是靠每一步的奖励累加得到的。
评论家网络(critic network):作为actor network的基准,计算基准奖励只依赖初状态。
在收到两个网络的奖励后,学习策略
p
θ
p_\theta
pθ。
(1)编码器:
将pickup node和delivery node连接起来 x i = ( x i ; x i + n ) x_i=(x_i;x_{i+n}) xi=(xi;xi+n),增强配对关系。其中 ; ; ;表示将选择的向量连接。然后线性投影到一个 d h = 128 d_h=128 dh=128 维度的空间中。之后 node embeddings通过 N N N个注意力层,每个注意层包含一个多头注意子层和一个前馈(FF)子层。
i
i
i为节点的指针,
h
i
l
−
1
,
i
∈
X
h_i^{l-1},i \in X
hil−1,i∈X表示注意力层
l
−
1
l-1
l−1的node embedding。
d
k
d_k
dk为
q
u
e
r
y
/
k
e
y
query/key
query/key维度,
d
v
d_v
dv为
v
a
l
u
e
value
value维度,
M
M
M是(异构注意力网络)的“头”数量,文章里取8。
d
k
=
d
v
=
d
h
M
d_k=d_v=\frac{d_h}{M}
dk=dv=Mdh
给定输入序列 X X X,自我注意力机制学习序列中任意两个元素之间的关系,以计算该序列的表示可以更好地提取特征。
为捕获关系,
q
u
e
r
y
,
k
e
y
,
v
a
l
u
e
query,key,value
query,key,value向量基于
X
X
X创建:
Q
i
=
W
Q
h
i
l
−
1
,
K
i
=
W
K
h
i
l
−
1
,
V
i
=
W
V
h
i
l
−
1
,
i
∈
X
,
Q_i=W^Q h_i^{l-1},\\ K_i=W^K h_i^{l-1}, \\V_i=W^V h_i^{l-1}, \\i \in X,
Qi=WQhil−1,Ki=WKhil−1,Vi=WVhil−1,i∈X,
其中
W
Q
,
W
K
∈
R
d
h
×
d
k
W^Q, W^K \in R^{d_h \times d_k}
WQ,WK∈Rdh×dk 和
W
V
∈
R
d
h
×
d
v
W^V \in R^{d_h \times d_v}
WV∈Rdh×dv都为可以训练的参数矩阵。
缩放点积作为 q u e r y query query和 k e y key key的相似度函数(compatibility function),来衡量两个节点之间的重要性;然后再通过softmax函数计算所有节点的权重,求解中典型VRP的原始自我注意计算如下:
a
i
j
=
softmax
(
Q
i
T
K
j
d
k
)
,
i
,
j
∈
X
a_{i j}=\operatorname{softmax}\left(\frac{Q_i^T K_j}{\sqrt{d_k}}\right), i, j \in X
aij=softmax(dkQiTKj),i,j∈X
其中,
a
i
j
a_{ij}
aij的值越大,说明节点
x
i
x_i
xi越依赖于节点
x
j
x_j
xj。
PDP节点中可能有异构角色,比如取件节点和派送节点的角色不同;配送前必须取货;允许连续访问多个取件/交付节点。对节点的均匀处理可能会限制解决方案质量。
故而设计了六种注意力。每个pickup node构建三种类型的注意力,分别学习与其配对的delivery node、所有pickup node和所有delivery node的关系。同样的为每个delivery node构建类似的关系。
核心注意力–配对节点:
Q
i
p
d
=
W
Q
p
d
h
i
P
,
K
i
p
d
=
W
K
h
i
+
n
D
,
V
i
p
d
=
W
V
h
i
+
n
D
,
Q
i
d
p
=
W
Q
d
p
h
i
D
,
K
i
d
p
=
W
K
h
i
−
n
P
,
V
i
d
p
=
W
V
V
h
i
−
n
P
\begin{aligned} &Q_i^{p d}=W^{Q_{p d}} h_i^P, \quad K_i^{p d}=W^K h_{i+n}^D, \quad V_i^{p d}=W^V h_{i+n}^D, \\ &Q_i^{d p}=W^{Q_{d p}} h_i^D,\quad K_i^{d p}=W^K h_{i-n}^P, \quad V_i^{d p}=W^{V^V} h_{i-n}^P \end{aligned}
Qipd=WQpdhiP,Kipd=WKhi+nD,Vipd=WVhi+nD,Qidp=WQdphiD,Kidp=WKhi−nP,Vidp=WVVhi−nP
核心注意力–pickup node与任意节点:
Q
i
p
P
=
W
Q
p
P
h
i
P
,
K
i
p
P
=
W
K
h
i
P
,
V
i
p
P
=
W
V
h
i
P
Q
i
p
D
=
W
Q
p
D
h
i
P
,
K
i
p
D
=
W
K
h
i
D
,
V
i
p
D
=
W
V
h
i
D
\begin{aligned} &Q_i^{p P}=W^{Q_{p P}} h_i^P, \quad K_i^{p P}=W^K h_i^P, \quad V_i^{p P}=W^V h_i^P \\ &Q_i^{p D}=W^{Q_{p D}} h_i^P, \quad K_i^{p D}=W^K h_i^D, \quad V_i^{p D}=W^V h_i^D \end{aligned}
QipP=WQpPhiP,KipP=WKhiP,VipP=WVhiPQipD=WQpDhiP,KipD=WKhiD,VipD=WVhiD
核心注意力–delivery node与任意节点:
Q
i
d
P
=
W
Q
d
P
h
i
D
,
K
i
d
P
=
W
K
h
i
P
,
V
i
d
P
=
W
V
h
i
P
Q
i
d
D
=
W
Q
d
D
h
i
D
,
K
i
d
D
=
W
K
h
i
D
,
V
i
d
D
=
W
V
h
i
D
\begin{aligned} &Q_i^{d P}=W^{Q_{d P}} h_i^D,\quad K_i^{d P}=W^K h_i^P, \quad V_i^{d P}=W^V h_i^P \\ &Q_i^{d D}=W^{Q_{d D}} h_i^D,\quad K_i^{d D}=W^K h_i^D, \quad V_i^{d D}=W^V h_i^D \end{aligned}
QidP=WQdPhiD,KidP=WKhiP,VidP=WVhiPQidD=WQdDhiD,KidD=WKhiD,VidD=WVhiD
h
i
P
h_i^P
hiP是第
i
i
i个pickup node 的 embedding
h
j
D
h_j^D
hjD是第
j
j
j个delivery node 的 embedding
h
l
−
1
=
C
o
n
c
a
t
(
h
0
,
h
i
P
,
h
j
D
)
,
∀
i
∈
P
,
∀
j
∈
D
h^{l-1}=Concat(h_0,h_i^P,h_j^D), \forall i \in P, \forall j \in D
hl−1=Concat(h0,hiP,hjD),∀i∈P,∀j∈D为低
l
−
1
l-1
l−1层的node embedding
所有参数矩阵都是可以训练的,并且与原始矩阵具有相同的大小。注意,为了加快训练速度,共享了7类注意力的所有 k e y key key和 v a l u e value value的参数矩阵,而独立保留了 q u e r y query query的所有参数矩阵,为的是从不同的角度学习问题的性质。
即时注意力–配对节点
a
i
,
i
+
n
p
d
=
softmax
(
Q
i
p
d
∗
K
i
+
n
p
d
d
k
)
,
i
∈
P
a
i
,
i
−
n
d
p
=
softmax
(
Q
i
d
p
∗
K
i
−
n
d
p
d
k
)
,
i
∈
D
\begin{aligned} &a_{i, i+n}^{p d}=\operatorname{softmax}\left(\frac{Q_i^{p d} * K_{i+n}^{p d}}{\sqrt{d_k}}\right), i \in P \\ &a_{i, i-n}^{d p}=\operatorname{softmax}\left(\frac{Q_i^{d p} * K_{i-n}^{d p}}{\sqrt{d_k}}\right), i \in D \end{aligned}
ai,i+npd=softmax(dkQipd∗Ki+npd),i∈Pai,i−ndp=softmax(dkQidp∗Ki−ndp),i∈D
∗
*
∗为元素积
即时注意力–剩余四种注意力
a
i
j
y
=
softmax
(
Q
i
y
T
K
j
y
d
k
)
,
y
∈
{
p
P
,
p
D
,
d
P
,
d
D
}
a_{i j}^y=\operatorname{softmax}\left(\frac{Q_i^{y T} K_j^y}{\sqrt{d_k}}\right), y \in\{p P, p D, d P, d D\}
aijy=softmax(dkQiyTKjy),y∈{pP,pD,dP,dD}
多头向量拼接不同的M头信息如下式,
MultiHead
(
Q
i
y
,
K
j
y
,
V
j
y
)
=
Concat
(
h
i
1
,
…
,
h
i
M
)
W
O
\operatorname{MultiHead}\left(Q_i^y, K_j^y, V_j^y\right)=\operatorname{Concat}\left(h_i^1, \ldots, h_i^M\right) W^O
MultiHead(Qiy,Kjy,Vjy)=Concat(hi1,…,hiM)WO
W
O
∈
R
d
h
×
d
h
W^O \in R^{d_h \times d_h}
WO∈Rdh×dh是可训练的参数矩阵
h
i
h_i
hi为单独的头向量
C
o
n
c
a
t
Concat
Concat为合并多个数组
h i h_i hi的计算如下
h i m = a i j V j + a i j p d ∗ V j p d + a i j d p ∗ V j d p + ∑ y ∑ j a i j y V j y y ∈ { p P , p D , d P , d D } , m ∈ { 1 , … , M } \begin{gathered} h_i^m=a_{i j} V_j+a_{i j}^{p d} * V_j^{p d}+a_{i j}^{d p} * V_j^{d p}+\sum_y \sum_j a_{i j}^y V_j^y \\ y \in\{p P, p D, d P, d D\}, \quad m \in\{1, \ldots, M\} \end{gathered} him=aijVj+aijpd∗Vjpd+aijdp∗Vjdp+y∑j∑aijyVjyy∈{pP,pD,dP,dD},m∈{1,…,M}
请注意,为了使得策略网络能够感知和学习-配对关系与优先约束,根据注意力类型将头添加到node embedding的不同部分。例如,从pickup node embedding到其他节点的注意力头只对pickup node有贡献,而添加到delivery node embedding的头为零。
注意力工作原理如下,
h i l ′ = B N l ( h i l − 1 + MultiHead i l ( Q i y , K j y , V j y ) ) h i l = B N l ( h i l ′ + F F l ( h i l ′ ) \begin{aligned} h_i^{l^{\prime}} &=B N^l\left(h_i^{l-1}+\operatorname{MultiHead}_i^l\left(Q_i^y, K_j^y, V_j^y\right)\right) \\ h_i^l &=B N^l\left(h_i^{l^{\prime}}+F F^l\left(h_i^{l^{\prime}}\right)\right. \end{aligned} hil′hil=BNl(hil−1+MultiHeadil(Qiy,Kjy,Vjy))=BNl(hil′+FFl(hil′)
h i l h_i^l hil为在 l l l层的node embedding,每层的参数是独立的。
每个多头注意力层和前馈层都由一个跳跃连接(skip-connection)和一个批量归一化层(BN)组成。
h i N h_i^N hiNgraph embedding的输入,计算自最后一层node embedding的均值。 h ˉ i N = 1 2 n + 1 ∑ i = 0 2 n h i N \bar{h}_i^N=\frac{1}{2 n+1} \sum_{i=0}^{2 n} h_i^N hˉiN=2n+11∑i=02nhiN
h i N h_i^N hiN和 h ˉ i N \bar{h}_i^N hˉiN都是译码器的输入。
(2)译码器
给定来自编码器的graph embedding和node embedding,解码器将生成一个概率向量,用于在每个解码步骤中选择一个节点。为实现这个,output embedding是需要的。
c
o
n
t
e
x
t
h
c
context\ {h}^c
context hc为output embedding,由graph embedding和在步骤t的最后一个node embedding组成。
h
c
=
Concat
(
h
ˉ
N
,
h
π
t
−
1
N
)
h^c=\operatorname{Concat}\left(\bar{h}^N, h_{\pi_{t-1}}^N\right)
hc=Concat(hˉN,hπt−1N)
第一步,node embedding通常被替换为可训练的参数。
g
l
i
m
p
s
e
h
g
glimpse\ {h}^g
glimpse hg用于聚合节点信息不同部分贡献
h
g
=
MultiHead
(
W
g
Q
h
c
,
W
g
K
h
N
,
W
g
V
h
N
)
h^g=\operatorname{MultiHead}\left(W_g^Q h^c, W_g^K h^N, W_g^V h^N\right)
hg=MultiHead(WgQhc,WgKhN,WgVhN)
W
g
Q
,
W
g
K
∈
R
d
h
×
d
k
,
W
g
V
∈
R
d
h
×
d
v
W_g^Q, W_g^K \in R^{d_h \times d_k}, W_g^V \in R^{d_h \times d_v}
WgQ,WgK∈Rdh×dk,WgV∈Rdh×dv为可训练的参数矩阵
若已知 q = W Q h g q=W^Q h^g q=WQhg 和 k i = W K h i N k_i=W^K h_i^N ki=WKhiN,在步骤t时域所有节点的相似度函数(compatibility function)计算如下,
h
^
t
=
C
⋅
tanh
(
h
t
)
h
i
t
=
{
q
T
k
i
d
k
,
if
i
∉
π
t
′
,
∀
t
′
<
t
−
∞
,
otherwise
\begin{gathered} \hat{h}^t=C \cdot \tanh \left(h^t\right) \\ h_i^t= \begin{cases}\frac{q^T k_i}{\sqrt{d_k}}, & \text { if } i \notin \pi_{t^{\prime}}, \forall t^{\prime}<t \\ -\infty, & \text { otherwise }\end{cases} \end{gathered}
h^t=C⋅tanh(ht)hit={dkqTki,−∞, if i∈/πt′,∀t′<t otherwise
C
C
C设置为10,一边剪裁结果更好地搜索。
无效节点在每一步都被动态屏蔽以保证可行性。
最后,采用softmax函数计算概率向量。
p
(
π
t
∣
X
,
L
t
−
1
)
=
softmax
(
h
t
^
)
p\left(\pi_t \mid X, L_{t-1}\right)=\operatorname{softmax}\left(\hat{h^t}\right)
p(πt∣X,Lt−1)=softmax(ht^)
p
i
t
p_i^t
pit表示在步骤t时选择节点
x
i
x_i
xi的概率。
这一过程反复进行明知道所有节点都被访问并且车辆返回到站点。
关于解码策略,我们可以贪婪地选择每一步概率最大的节点,我们也可以采用多个解检索最好的一个。
(3)训练算法
基于roll-out
策略梯度法:
(1)actor network:如
p
θ
p_\theta
pθ通过在这些操作上生成概率向量来控制节点选择的操作,并根据概率进行采样以更好地探索操作空间
(2)self-critic network: v ϕ v_\phi vϕ,与actor network相似结构的roll-out基准,通过选择具有最大概率消除方差的结点来计算给定初始状态下的奖励。
(3)强化学习算法在获得行动者网络的奖励R和批评家网络的基线奖励vφ(X)后,利用策略梯度法对两个网络的参数进行相应的更新。
(4)具体而言,在每一个场景,我们为每个实例构造一条路径,并在第12行计算针对该解决方案的奖励,在第16行更新actor network的参数。
此外,实例b的critic network vφ(Xb)的期望奖励从第13行策略的贪婪滚出中获得。
此外,根据第18行[8]中几个固定数量实例的配对t检验,当行动者网络的性能显著优于critic network时,将批评家网络的参数替换为actor network的参数。
通过更新这两个网络,策略pθ被训练为寻找更高质量的解。
实验与分析
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。