论文“客户移动下车辆路径问题“模型算法复现(附Java调用CPLEX求解代码)

本文介绍了在客户移动性背景下,如何构建和解决车辆路径问题。通过建立数学模型,包括节点和弧集合、旅行时间和服务时间窗等约束,目标是最小化总旅行时间。文章重点讲解了使用Java调用CPLEX求解模型的过程,包括数据读取、变量定义、目标函数和约束建立。在求解过程中,作者分享了遇到的坑和解决方案,并给出了15个客户、49个配送点案例的最优解,揭示了解决此类问题的挑战和时间消耗。
摘要由CSDN通过智能技术生成

1. 问题描述

在这里给大家介绍下这个问题,即车辆在配送过程中,客户具有移动性特点,其候选的配送位置并非固定唯一的,而是在不同时刻,有不同的位置。

比如,在早上7-8点,客户在家中,在8:30-17:30点客户在公司上班,而在17:30以后客户又回到家中。更复杂一些,客户在上班期间也可以到其他地方开会等。在这里,为了追踪到客户的具体位置,欧洲一些学者或企业 [1] 设想追踪客户的车辆位置,将快递包裹送到客户的车辆后备箱(快递员拥有车辆后备箱的一次性钥匙)。具体情景如下图所示[1]:

客户移动下车辆路径问题
当然,原文中好像是根据车辆停放的位置,将快递放入车辆后备箱中投递。这在现实中是很难做到的。不过,我们可以换一个场景,即客户在网上下单时,填写多个位置供选择,并对每个位置设置投递时间窗。那么和原文起到同样的结果。快递公司在投递时,可以考虑某个客户所有备选投递点,进行投递路径的规划。

2. 模型构建

2.1 符号说明

针对上述问题,为了建立该问题的数学模型,定义如下变量:
G = ( N ∪ 0 , A ) G=(N \cup {0},A) G=(N0,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)iA,jA,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 cC的候选位置点集合,它至少包括 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 cC的任意一个位置点 i ∈ N c i \in N_c iNc后的离开时间;
y c y_{c} yc:车辆服务客户 c ∈ C c \in C cC后剩余装载量

备注:原文中 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,jN{ 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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值