基于列生成算法的VRPTW问题建模

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 miniV(biC0i)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} miniV(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θk1        iV{0}(11) ∑ r k ∈ Ω θ k ≤ U (12) \sum_{r_k \in \Omega} \theta_k \leq U \tag{12} rkΩθkU(12) θ k ∈ N , r k ∈ Ω (13) \theta_k \in N,r_k \in \Omega \tag{13} θkN,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)AbijkCij
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={jV(i,j)A}bijk

约束(11)对应于约束(2),保证有顾客被服务。
约束(12)限制使用的车辆数量,每辆车对应一条路径。
约束(13) θ k \theta_k θk被定义为整形变量,没有将其定义为0-1变量。

列生成与集合覆盖模型

不幸的是,集合覆盖模型(10)-(13)不是很好处理,其困难之处在于集合 Ω \Omega Ω的不能被穷举出来,随着顾客数量的增加, Ω \Omega Ω将指数级暴增。这就用到了列生成技术。
列生成思想概述如下:

  1. 先把原问题 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的最优解。
  2. 此时,就需要通过一个子问题(subproblem)去检查是否存在一个非基变量,其reduced cost小于零?如果有,那么就把这个变量相关的系数列(column)加入到原问题P_0的系数矩阵中,回到第1步。
  3. 经过反复迭代,直到找不到reduced cost小于零的非基变量,那么就求得了原问题 P 0 P_0 P0的最优解。

主问题(master problem)

将上述set covering model松弛为线性模型,就是VRPTW的主问题。
即将 θ k ∈ N \theta_k \in N θkN 松弛为 : θ k ≥ 0 \theta_k \geq 0 θk0得到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θk1        iV{0}          (15) ∑ r k ∈ Ω θ k ≤ U            (16) \sum_{r_k \in \Omega} \theta_k \leq U~~~~~~~~~~\tag{16} rkΩθkU          (16) θ k ≥ 0 , r k ∈ Ω            (17) \theta_k \geq 0,r_k \in \Omega~~~~~~~~~~\tag{17} θk0,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Ω1Ckθ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Ω1aikθk1        iV{0}          (15) ∑ r k ∈ Ω 1 θ k ≤ U            (16) \sum_{r_k \in \Omega_1} \theta_k \leq U~~~~~~~~~~\tag{16} rkΩ1θkU          (16) θ k ≥ 0 , r k ∈ Ω 1            (17) \theta_k \geq 0,r_k \in \Omega_1~~~~~~~~~~\tag{17} θk0,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} maxiV{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} iV{0}aikλi+λ0Ck    rkΩ1          (19) λ i ≥ 0       i ∈ V ∖ { 0 }           (20) \lambda_i \geq0~~~~~i \in V \setminus \{0\}~~~~~~~~~\tag{20} λi0     iV{0}         (20) λ 0 ≤ 0          (21) \lambda_0 \leq 0~~~~~~~~\tag{21} λ00        (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 CkiV{0}aikλiλ00
r k r_k rk需要满足:

  1. 从depot出发,最终回到depot
  2. 每个顾客最多只能访问一次
  3. 满足容量和时间窗的约束

求解子问题可以采用启发式方法,脉冲算法等。

  • 3
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值