论文“客户移动下车辆路径问题"模型Cplex求解复现(附Java调用CPLEX求解代码)
1. 问题描述
在这里给大家介绍下这个问题,即车辆在配送过程中,客户具有移动性特点,其候选的配送位置并非固定唯一的,而是在不同时刻,有不同的位置。
比如,在早上7-8点,客户在家中,在8:30-17:30点客户在公司上班,而在17:30以后客户又回到家中。更复杂一些,客户在上班期间也可以到其他地方开会等。在这里,为了追踪到客户的具体位置,欧洲一些学者或企业 [1] 设想追踪客户的车辆位置,将快递包裹送到客户的车辆后备箱(快递员拥有车辆后备箱的一次性钥匙)。具体情景如下图所示[1]:
当然,原文中好像是根据车辆停放的位置,将快递放入车辆后备箱中投递。这在现实中是很难做到的。不过,我们可以换一个场景,即客户在网上下单时,填写多个位置供选择,并对每个位置设置投递时间窗。那么和原文起到同样的结果。快递公司在投递时,可以考虑某个客户所有备选投递点,进行投递路径的规划。
2. 模型构建
2.1 符号说明
针对上述问题,为了建立该问题的数学模型,定义如下变量:
让 G = ( N ∪ 0 , A ) G=(N \cup {0},A) G=(N∪0,A) 代表有向图,其中:
N = { 1 , 2 , . . . , n } N = \{1,2,...,n\} N={ 1,2,...,n} 和 0 0 0 代表配送网络中节点集,其中 0 0 0 代表车场,其他节点代表客户配送位置;
A = { ( i , j ) ∣ i ∈ A , j ∈ A , i ≠ j } A = \{(i,j)|i \in A,j \in A, i \not= j \} A={(i,j)∣i∈A,j∈A,i=j} 代表弧集合;
C = { 1 , 2 , . . . , c } ∪ 0 C = \{1,2,...,c\} \cup {0} C={ 1,2,...,c}∪0代表客户集,每个客户需求为 d c d_c dc; 另外,设 N c N_c Nc 代表客户 c ∈ C c \in C c∈C的候选位置点集合,它至少包括 N N N 中的一个节点。
任意两个节点之间有旅行时间 t i j t_{ij} tij, 每个节点的服务时间窗为 [ a i c , b i c ] [a_i^c,b_i^c] [aic,bic]; 另外车辆最大载重为 Q Q Q, 最大行驶时间为 T T T, 车辆集合 V V V.
2.2 模型构建
为了建立模型,定义如下决策变量:
x i j x_{ij} xij: 如果车辆经过弧 ( i , j ) (i,j) (i,j),则等于1; 否则,等于 0 0 0.
定义如下中间变量:
s c s_{c} sc: 车辆服务客户 c ∈ C c \in C c∈C的任意一个位置点 i ∈ N c i \in N_c i∈Nc后的离开时间;
y c y_{c} yc:车辆服务客户 c ∈ C c \in C c∈C后剩余装载量
备注:原文中 s c s_{c} sc 是用另外一个字母表示的。
具体模型如下:
目标函数:
z = min x , s , y ∑ i , j ∈ N ∪ { 0 } x i j w i j z = \min\limits_{x,s,y} \sum\limits_{i,j \in N \cup \{0\}} x_{ij}w_{ij} z=x,s,ymini,j∈N∪{
0}∑xijwij (1)
该目标函数表示最小化服务全部客户的总的旅行时间。在这里 w i j w_{ij} wij 即为 t i j t_{ij} tij
约束条件如下:
∑ i ∈ N c ∑ j ∈ N ∪ { 0 } / { i } x i j = 1 , ∀ c ∈ C \sum \limits_ {i \in N_c}\sum\limits_{j \in N \cup \{0\} / \{i\}} x_{ij}=1, \forall c\in C