赞
踩
最经典的的车辆路径优化问题是旅行商问题(Travelling salesman problem,TSP),给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路。
刘兴禄 -《运筹优化常用模型、算法及案例实战:Python+Java实现》总结了TSP问题共有3种数学模型:
DFJ模型,也是最常见的模型如下:
min
∑
i
∈
V
∑
j
∈
V
d
i
j
x
i
j
subject to
∑
j
∈
V
x
i
j
=
1
,
∀
i
∈
V
,
i
≠
j
∑
i
∈
V
x
i
j
=
1
,
∀
j
∈
V
,
i
≠
j
∑
i
,
j
∈
S
x
i
j
≤
∣
S
∣
−
1
,
2
≤
∣
S
∣
≤
N
−
1
,
S
⊂
V
x
i
j
∈
{
0
,
1
}
,
∀
i
,
j
∈
V
这个subtour-elimination的约束,是一个枚举的约束,我们不能在建模的时候就直接全枚举,这样的话有复杂度的情况。等到把这些约束枚举完,黄花菜都凉了。 啰嗦几句,subtour-elimination的思路就是相当于cutting plane。在原来前两个约束的基础上,加上这个约束。但是如果你要在求解步骤model.optimize()之前就想全枚举,把subtour-elimination所有可能的
个约束全加上去,其他的不论,就只是加约束所耗费的时间,别人TSP早都解完去写Paper了,你这边约束还没加完。得不偿失,因此不能硬钢去枚举。
那怎么办呢?业内一般采用Gurobi或者CPLEX求解器中提供的callback(回调函数)的方法来动态的添加subtour-elimination约束。总的来讲,就是在branch and bound tree迭代的过程中,根据当前结点的松弛后的线性规划模型(relaxed LP)的解,来检查该解是否有存在子环路 subtour,如果有,我们就把执行subtour-elimination时候产生的破圈约束加到正在求解的模型中去; 如果没有,我们就直接接着迭代算法。
基本车辆路径问题(Vehicle Routing Problem,VRP)的数学模型可以使用整数线性规划(Integer Linear Programming,ILP)来表示。
min
∑
k
∈
V
∑
i
∈
N
∑
j
∈
N
c
i
j
x
i
j
k
subject to
∑
k
∈
V
∑
j
∈
N
x
i
j
k
=
1
,
∀
i
∈
C
∑
j
∈
N
x
0
j
k
=
1
,
∀
k
∈
V
,
∑
i
∈
N
x
i
h
k
−
∑
j
∈
N
x
h
j
k
=
0
,
∀
h
∈
C
,
∀
k
∈
V
,
∑
i
∈
N
x
i
,
n
+
1
,
k
=
1
∀
k
∈
V
,
s
i
k
+
t
i
j
−
M
i
j
(
1
−
x
i
j
k
)
⩽
s
j
k
,
∀
i
,
j
∈
N
,
∀
k
∈
V
,
a
i
⩽
s
i
k
⩽
b
i
,
∀
i
∈
N
,
∀
k
∈
V
,
x
i
j
k
∈
{
0
,
1
}
,
∀
i
,
j
∈
N
,
∀
k
∈
V
s
i
k
≥
0
,
∀
i
∈
N
,
∀
k
∈
V
带容量约束的车辆路径优化问题,CVRP,对一系列装卸货点进行适当的路径规划,在满足约束条件(客户需求、车辆载重和容积、车型、车辆行驶里程、配送中心数量等限制)和目标最优化(路程最短、成本最低、使用车辆数最少、配送时间最快等)下,将客户的配送需求从配送中心送达客户点,或从客户点送回配送中心。
场景:
单向:纯取货 / 纯送货;
单配送中心:只有一个配送中心/车场;
单车型:只考虑一种车型,
需求不可拆分:客户需求只能有一辆车满足;
车辆封闭:完成配送任务的车辆需回到配送中心;
车辆充足:不限制车辆数量,即配送车辆需求均能满足;
非满载:任意客户点的需求量小于车辆最大载重;
要求:
优化目标:最小化车辆启动成本和车辆行驶成本之和;
约束条件:车辆行驶距离约束,重量约束;
算法输入:配送中心位置、客户点位置、客户点需求、车辆最大载重、车辆最大行驶距离、车辆启动成本、车辆单位距离行驶成本;
算法输出:每辆车的行驶路径,经过的客户点,以及总成本。
问题描述
VRPTW问题定义在一队车辆
V
\mathcal{V}
V、一组客户
C
\mathcal{C}
C和一个有向图
G
\mathcal{G}
G上。图由
∣
C
∣
+
2
|\mathcal{C}|+2
∣C∣+2个点组成,其中客户由
1
,
2
,
⋯
,
n
1,2,\cdots,n
1,2,⋯,n表示,车站由
0
0
0(始发站)和
n
+
1
n+1
n+1(终点站)表示。所有节点的集合可表示为
N
=
{
0
,
1
,
2
,
⋯
,
n
,
n
+
1
}
\mathcal{N}=\{0,1,2,\cdots,n,n+1\}
N={0,1,2,⋯,n,n+1}。所有边的集合
A
\mathcal{A}
A表示了车站与客户之间,以及客户之间的有向连接。其中没有边从
0
0
0点终止或者从
n
+
1
n+1
n+1点开始。每一条弧
(
i
,
j
)
,
i
≠
j
(i,j),i\neq j
(i,j),i=j都对应一个成本
c
i
j
c_{ij}
cij和时间
t
i
j
t_{ij}
tij,时间可以包括在弧上
(
i
,
j
)
(i,j)
(i,j)的行驶时间和在
i
i
i点的服务时间。所有车辆通常是同质化的,每辆车都存在容量上限
Q
Q
Q,每一个客户点
i
i
i都有需要被满足的需求
d
i
d_i
di,并且需要在时间窗
[
a
i
,
b
i
]
[a_i,b_i]
[ai,bi]之内被服务[1]。待优化的问题即为,如何决策车辆访问客户的路径,使得在满足一定约束的条件下,实现最小化总成本的目标。
模型构建
参数
决策变量
混合整数规划模型
min
∑
k
∈
V
∑
i
∈
N
∑
j
∈
N
c
i
j
x
i
j
k
subject to
∑
i
∈
C
d
i
∑
j
∈
N
x
i
j
k
⩽
Q
,
∀
k
∈
V
,
∑
k
∈
V
∑
j
∈
N
x
i
j
k
=
1
,
∀
i
∈
C
∑
j
∈
N
x
0
j
k
=
1
,
∀
k
∈
V
,
∑
i
∈
N
x
i
h
k
−
∑
j
∈
N
x
h
j
k
=
0
,
∀
h
∈
C
,
∀
k
∈
V
,
∑
i
∈
N
x
i
,
n
+
1
,
k
=
1
∀
k
∈
V
,
s
i
k
+
t
i
j
−
M
i
j
(
1
−
x
i
j
k
)
⩽
s
j
k
,
∀
i
,
j
∈
N
,
∀
k
∈
V
,
a
i
⩽
s
i
k
⩽
b
i
,
∀
i
∈
N
,
∀
k
∈
V
,
x
i
j
k
∈
{
0
,
1
}
,
∀
i
,
j
∈
N
,
∀
k
∈
V
s
i
k
≥
0
,
∀
i
∈
N
,
∀
k
∈
V
下面是各个约束的具体含义:
参数
混合整数规划模型
min
∑
k
∈
K
∑
(
i
,
j
)
∈
A
c
i
j
k
x
i
j
k
subject to.
∑
k
∈
K
∑
j
:
(
i
,
j
)
∈
A
x
i
j
k
=
1
∀
i
∈
P
∪
D
,
∑
j
:
(
0
,
j
)
∈
A
x
0
j
k
=
1
∀
k
∈
K
,
∑
i
:
(
i
,
n
+
n
~
+
1
)
∈
A
x
i
,
n
+
n
~
+
1
k
=
1
∀
k
∈
K
,
∑
i
:
(
i
,
j
)
∈
A
x
i
j
k
−
∑
i
:
(
j
,
i
)
∈
A
x
j
i
k
=
0
∀
j
∈
P
∪
D
,
k
∈
K
,
x
i
j
k
=
1
⇒
B
j
k
≥
B
i
k
+
d
i
+
t
i
j
k
∀
(
i
,
j
)
∈
A
,
k
∈
K
,
x
i
j
k
=
1
⇒
Q
j
k
=
Q
i
k
+
q
j
∀
(
i
,
j
)
∈
A
,
k
∈
K
,
max
{
0
,
q
i
}
≤
Q
i
k
≤
min
{
C
k
,
C
k
+
q
i
}
∀
i
∈
V
,
k
∈
K
,
∑
j
:
(
i
,
j
)
∈
A
x
i
j
k
−
∑
j
:
(
n
+
i
,
j
)
∈
A
x
n
+
i
,
j
k
=
0
∀
i
∈
P
,
k
∈
K
B
i
k
≤
B
n
+
i
k
∀
i
∈
P
,
k
∈
K
.
e
i
≤
B
i
k
≤
l
i
∀
i
∈
V
,
k
∈
K
,
e
i
≤
B
i
k
≤
l
i
∀
i
∈
V
,
k
∈
K
,
B
n
+
n
~
+
1
k
−
B
0
k
≤
T
k
∀
k
∈
K
,
x
i
j
k
∈
{
0
,
1
}
∀
(
i
,
j
)
∈
A
,
k
∈
K
【注】约束(6)和(7)是非线性的,可以用大M进行线性化
https://www.sintef.no/projectweb/top/pdptw/li-lim-benchmark/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。