基于列生成算法的VRPTW问题建模
GVA无向连通图,V为无向连通图中所有的节点集合(包括配送中心和客户点),A为图中所有的弧的集合。配送中心用0和n1表示。NV∖0n1表示客户点集合,U表示车辆集合,Cij表示车辆从i到j花费的时间。无向连通图GVA中所有有效的车辆路径都是从0到n1。0和n1的时间窗满足a0b0an1bn1,表示配送中心最早离开时间和最晚到达时间。0和n1点的需求为d0dn10,服务时间为S0。
VRPTW问题描述
G = ( V , A ) G=(V,A) G=(V,A)无向连通图, V V V为无向连通图中所有的节点集合(包括配送中心和客户点), A A A为图中所有的弧的集合。配送中心用 0 0 0和 n + 1 n+1 n+1表示。 N = V ∖ { 0 , n + 1 } N=V\setminus\{0,n+1\} N=V∖{0,n+1}表示客户点集合, U U U表示车辆集合, C i j C_{ij} Cij表示车辆从 i i i到 j j j花费的时间。
无向连通图 G = ( V , A ) G=(V,A) G=(V,A)中所有有效的车辆路径都是从 0 0 0到 n + 1 n+1 n+1。 0 0 0和 n + 1 n+1 n+1的时间窗满足 [ a 0 , b 0 ] = [ a n + 1 , b n + 1 ] [a_0,b_0]=[a_{n+1},b_{n+1}] [a0,b0]=[an+1,bn+1],表示配送中心最早离开时间和最晚到达时间。 0 0 0和 n + 1 n+1 n+1点的需求为 d 0 = d n + 1 = 0 d_0=d_{n+1}=0 d0=dn+1=0,服务时间为 S 0 = S n + 1 = 0 S_0=S_{n+1}=0 S0=Sn+1=0。满足 m i n i ∈ V ( b i − C 0 i ) ≥ a 0 min_{i∈V} (b_i-C_{0i})\geq a_0 mini∈V(bi−C0i)≥a0和 m i n i ∈ V ( a i + S i + C i 0 ) ≤ b n + 1 min_{i∈V} (a_i+S_i+C_{i0})\leq b_{n+1} mini∈V(ai+Si+Ci0)≤bn+1关系时才存在可行解。模型中允许车辆在配送中心停留,故弧 ( 0 , n + 1 ) (0,n+1) (0,n+1)满足约束。
由三角不等式,消除不满足时间约束的弧:
(
a
i
+
S
i
+
C
i
j
)
>
b
j
(a_i+S_i+C_{ij})> b_{j}
(ai+Si+Cij)>bj;消除不满足车辆容量的弧:
d
i
+
d
j
>
Q
d_i + d_j>Q
di+dj>Q
符号说明:
V
V
V
~~~~
~~~~
=
{
0
,
⋅
⋅
⋅
,
n
}
=\{0,···,n\}
={0,⋅⋅⋅,n},0是配送中心,
1
1
1到
n
n
n是客户点。
A
A
A
~~~~
~~~~
弧集合
C
i
j
C_{ij}
Cij
~~~~
~~
在弧
(
i
,
j
)
∈
A
上的行驶时间
(i,j)∈A上的行驶时间
(i,j)∈A上的行驶时间
d
i
d_i
di
~~~~
~~~~
客户
i
i
i的需求量,
d
0
=
0
d_0=0
d0=0
S
i
S_i
Si
~~~~
~~~~
客户
i
i
i的服务时间
Q
Q
Q
~~~~
~~~~
车辆容量
U
U
U
~~~~
~~~~
车辆集合
a
i
a_i
ai
~~~
~~~~~
开始时间窗
a
i
a_i
ai
~~~
~~~~~
结束时间窗
M
M
M
~~~~
~~~
一个足够大的数
决策变量:
x
i
j
u
x_{ij}^u
xiju
~~~
~~~~~
车辆u是否使用弧
(
i
,
j
)
(i,j)
(i,j)
s
i
u
s_i^u
siu
~~~
~~~~~
车
u
u
u开始服务顾客
i
i
i的时间
VRPTW数学模型
VRPTW的集合覆盖模型(set covering model)
m
i
n
∑
r
k
∈
Ω
C
k
θ
k
(10)
min\sum_{r_k \in \Omega}C_k\theta_k\tag{10}
minrk∈Ω∑Ckθk(10)
s
u
b
j
e
c
t
t
o
subject~to
subject to
∑
r
k
∈
Ω
a
i
k
θ
k
≥
1
i
∈
V
∖
{
0
}
(11)
\sum_{r_k \in \Omega}a_{ik}\theta_k\geq1~~~~~~~~i\in V \setminus \{0\}\tag{11}
rk∈Ω∑aikθk≥1 i∈V∖{0}(11)
∑
r
k
∈
Ω
θ
k
≤
U
(12)
\sum_{r_k \in \Omega} \theta_k \leq U \tag{12}
rk∈Ω∑θk≤U(12)
θ
k
∈
N
,
r
k
∈
Ω
(13)
\theta_k \in N,r_k \in \Omega \tag{13}
θk∈N,rk∈Ω(13)
其中:
θ
k
θ
k
=
1
代表路径使用
r
k
\theta_k~~~~~~~~~\theta_k=1代表路径使用r_k
θk θk=1代表路径使用rk
Ω
\Omega
Ω
~~~~~
~~~~~
可行路径的集合,可行路径指从配送中心出发,回到配送中心,
~~~~~
~~~~~~~~
满足车辆容量和时间窗约束,且至少访问一个顾客的路径。
C
k
C_k
Ck
~~~~
~~~~
路径
r
k
r_k
rk的成本,
r
k
∈
Ω
r_k∈\Omega
rk∈Ω。
a
i
k
a_{ik}
aik
~~~~
~~~~
a
i
k
=
1
a_{ik}=1
aik=1代表路径
k
k
k使用节点
b
i
j
k
b_{ijk}
bijk
~~~~
~~~
b
i
j
k
=
1
b_{ijk}=1
bijk=1代表路径
k
k
k使用弧
(
i
,
j
)
(i,j)
(i,j)
有
C
k
C_k
Ck和
C
i
j
C_{ij}
Cij关系如下:
C
k
=
∑
(
i
,
j
)
∈
A
b
i
j
k
C
i
j
C_k=\sum_{(i,j)∈A} b_{ijk} C_{ij}
Ck=(i,j)∈A∑bijkCij
有
a
i
k
a_{ik}
aik和
b
i
j
k
b_{ijk}
bijk关系如下:
a
i
k
=
∑
{
j
∈
V
∣
(
i
,
j
)
∈
A
}
b
i
j
k
a_{ik}=\sum_{\{j∈V|(i,j)∈A\}} b_{ijk}
aik={j∈V∣(i,j)∈A}∑bijk
约束(11)对应于约束(2),保证有顾客被服务。
约束(12)限制使用的车辆数量,每辆车对应一条路径。
约束(13)
θ
k
\theta_k
θk被定义为整形变量,没有将其定义为0-1变量。
列生成与集合覆盖模型
不幸的是,集合覆盖模型(10)-(13)不是很好处理,其困难之处在于集合
Ω
\Omega
Ω的不能被穷举出来,随着顾客数量的增加,
Ω
\Omega
Ω将指数级暴增。这就用到了列生成技术。
列生成思想概述如下:
- 先把原问题 P 0 P_0 P0限制(restrict)到一个规模更小(即变量数比原问题少的)的问题 P 1 P_1 P1,用单纯形法求解 P 1 P_1 P1的最优解,但是此时只求得了 P 1 P_1 P1的最优解,而不是 P 0 P_0 P0的最优解。
- 此时,就需要通过一个子问题(subproblem)去检查是否存在一个非基变量,其reduced cost小于零?如果有,那么就把这个变量相关的系数列(column)加入到原问题P_0的系数矩阵中,回到第1步。
- 经过反复迭代,直到找不到reduced cost小于零的非基变量,那么就求得了原问题 P 0 P_0 P0的最优解。
主问题(master problem)
将上述set covering model松弛为线性模型,就是VRPTW的主问题。
即将
θ
k
∈
N
\theta_k \in N
θk∈N 松弛为 :
θ
k
≥
0
\theta_k \geq 0
θk≥0得到MP如下:
m
i
n
∑
r
k
∈
Ω
C
k
θ
k
(14)
min\sum_{r_k \in \Omega}C_k\theta_k~~~~~~~~~~\tag{14}
minrk∈Ω∑Ckθk (14)
s
u
b
j
e
c
t
t
o
subject~to
subject to
∑
r
k
∈
Ω
a
i
k
θ
k
≥
1
i
∈
V
∖
{
0
}
(15)
\sum_{r_k \in \Omega}a_{ik}\theta_k\geq1~~~~~~~~i\in V \setminus \{0\}~~~~~~~~~~\tag{15}
rk∈Ω∑aikθk≥1 i∈V∖{0} (15)
∑
r
k
∈
Ω
θ
k
≤
U
(16)
\sum_{r_k \in \Omega} \theta_k \leq U~~~~~~~~~~\tag{16}
rk∈Ω∑θk≤U (16)
θ
k
≥
0
,
r
k
∈
Ω
(17)
\theta_k \geq 0,r_k \in \Omega~~~~~~~~~~\tag{17}
θk≥0,rk∈Ω (17)
限制主问题(restricted master problem,RMP)
主问题中,
Ω
\Omega
Ω表示所有可行路径的集合,则
∣
Ω
∣
|\Omega|
∣Ω∣表示可行路径的数量,由
Ω
\Omega
Ω不好被穷举,则要限制MP(将
Ω
\Omega
Ω缩小到其子集
Ω
1
\Omega_1
Ω1),则RMP如下:
m
i
n
∑
r
k
∈
Ω
1
C
k
θ
k
(14)
min\sum_{r_k \in \Omega_1}C_k\theta_k~~~~~~~~~~\tag{14}
minrk∈Ω1∑Ckθk (14)
s
u
b
j
e
c
t
t
o
subject~to
subject to
∑
r
k
∈
Ω
1
a
i
k
θ
k
≥
1
i
∈
V
∖
{
0
}
(15)
\sum_{r_k \in \Omega_1}a_{ik}\theta_k\geq1~~~~~~~~i\in V \setminus \{0\}~~~~~~~~~~\tag{15}
rk∈Ω1∑aikθk≥1 i∈V∖{0} (15)
∑
r
k
∈
Ω
1
θ
k
≤
U
(16)
\sum_{r_k \in \Omega_1} \theta_k \leq U~~~~~~~~~~\tag{16}
rk∈Ω1∑θk≤U (16)
θ
k
≥
0
,
r
k
∈
Ω
1
(17)
\theta_k \geq 0,r_k \in \Omega_1~~~~~~~~~~\tag{17}
θk≥0,rk∈Ω1 (17)
限制主问题的对偶问题DRMP
m
a
x
∑
i
∈
V
∖
{
0
}
λ
i
+
U
λ
0
(18)
max \sum_{i \in V \setminus \{0\}} \lambda_i+U\lambda_0~~~~~~~~~~\tag{18}
maxi∈V∖{0}∑λi+Uλ0 (18)
∑
i
∈
V
∖
{
0
}
a
i
k
λ
i
+
λ
0
≤
C
k
r
k
∈
Ω
1
(19)
\sum_{i \in V \setminus \{0\}} a_{ik}\lambda_i+\lambda_0 \leq C_k~~~~r_k \in \Omega_1~~~~~~~~~~\tag{19}
i∈V∖{0}∑aikλi+λ0≤Ck rk∈Ω1 (19)
λ
i
≥
0
i
∈
V
∖
{
0
}
(20)
\lambda_i \geq0~~~~~i \in V \setminus \{0\}~~~~~~~~~\tag{20}
λi≥0 i∈V∖{0} (20)
λ
0
≤
0
(21)
\lambda_0 \leq 0~~~~~~~~\tag{21}
λ0≤0 (21)
其中:
λ
i
\lambda_i
λi:非负对偶变量,对应约束(15)
λ
0
\lambda_0
λ0:非负对偶变量,对应约束(16)
子问题/定价子问题(pricing subproblem)
子问题目的是找到一条路径
r
k
∈
Ω
∖
Ω
1
r_k\in\Omega\setminus\Omega_1
rk∈Ω∖Ω1,使得
C
k
−
∑
i
∈
V
∖
{
0
}
a
i
k
λ
i
∗
−
λ
0
∗
≤
0
C_k-\sum_{i \in V \setminus\{0\}}a_{ik}\lambda_i^*-\lambda_0^*\leq0
Ck−i∈V∖{0}∑aikλi∗−λ0∗≤0
r
k
r_k
rk需要满足:
- 从depot出发,最终回到depot
- 每个顾客最多只能访问一次
- 满足容量和时间窗的约束
求解子问题可以采用启发式方法,脉冲算法等。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)