跳转至

定向问题(Orienteering Problem)⚓︎

约 1129 个字 预计阅读时间 4 分钟

说在前面

定向问题(Orienteering Problem),最早的描述出现在1987年的 Paper 中。(Golden, B. L., Levy, L., & Vohra, R. (1987). The orienteering problem. Naval Research Logistics, 34(3), 307–318.)。这篇笔记基于2016年的这篇综述展开。Gunawan, A., Lau, H. C., & Vansteenwegen, P. (2016). Orienteering Problem: A survey of recent variants, solution approaches and applications. European Journal of Operational Research, 255(2), 315–332. doi:10.1016/j.ejor.2016.04

问题描述是这样的。

给定一个客户节点集合 \(\mathcal{N}_c = \{1, 2, ..., |N|\}\)。除了这些节点外还有一个出发(返回)节点。所以图中所有节点集合 \(\mathcal{N} = \mathcal{N}_c \cup \{ 0\}\)。抵达每个节点都可以有一个非负的收益 \(p_i\)。我们必须从节点 0 出发,并回到节点 0。给定一个时间限制 \(T_{\max}\)。我们需要在这个时间内==访问其中一部分节点== ,目标是最大化访问这些节点的收益,每个节点至多访问一次。

这是定向问题(OP)的最基本的描述。可以视为这是一个背包问题 + TSP问题的结合。

我们接下来给出这个问题的数学规划模型。

决策变量:

\(x_{ij}\), 0-1变量,表示边 \((i, j)\) 是否被访问。如果访问了就是1,否则就是0。

目标函数:

\[\max \sum_{i \in \mathcal{N}} \sum_{j \in \mathcal{N}_c} p_j x_{ij} \]

最大化在每个节点的收益。

约束条件:

\[\begin{aligned}
\begin{cases}
\begin{align}
\sum_{j \in \mathcal{N}_c} x_{0j} = \sum_{j \in \mathcal{N}_c} x_{j0} = 1 \quad \\
\sum_{i \in \mathcal{N}}x_{ik} = \sum_{j \in \mathcal{N}} x_{kj} \leq 1 ; \quad \forall k \in \mathcal{N} \\
\sum_{i\in \mathcal{N}} \sum_{i\in \mathcal{N}} t_{ij} x_{ij} \leq T_{\max } \quad \\
1 \leq u_i \leq |\mathcal{N}|; \quad \forall i \in \mathcal{N} \quad \\
u_i - u_j + 1 \leq |\mathcal{N}| (1 - x_{ij}) ; \quad \forall i \in \mathcal{N} \quad \\
\end{align}
\end{cases}
\end{aligned}\]
约束编号 含义
1 约束从节点0出发,到0结束
2 流平衡约束
3 最大时间约束,这里假定在每个节点没有处理时间;所以这个约束也可以表示为行驶距离约束,比如无人机航程限制。
4 去子环约束(MTZ formulation)
5 去子环约束(MTZ formulation)

这个模型很容易可以改写成TOP(Team Orienteering Problem),团队定向问题,本质上是把背包问题和VRP问题结合在一起。

考虑收益递减的TOPTW问题⚓︎

我接触这个问题来源于数据魔术师的一个讲座,Paper场景是基于救灾场景的,意思是抵达每个节点的时间关系到在这个节点的收益。抵达得越晚,救援的效果就会越差。我们不得晚于某个时刻抵达某个节点(对应于带时间窗)。同样地,我们有多个救援队伍。假设队伍用 K 集合表示。车是同质的。

其他参数: \(p_i, d_i, s_i, D_i\),分别表示节点 \(i\) 的最大收益、收益衰减率、服务时长、服务截止时间。

决策变量:

\(x_{ij}\),0-1变量,表示边 \((i, j)\) 是否被访问。如果访问了就是1,否则就是0。这个和OP问题是一致的。

\(y_i\) : 0-1变量,表示客户 \(i\) 是否被服务。

\(a_i\): 连续变量,到达客户 \(i\) 的时间;

目标函数:

\[\max \quad \sum_{i \in \mathcal{N}_c} p_i y_i - d_i a_i\]

约束条件:

\[\begin{aligned}
\begin{cases}
\begin{align}
\quad \sum_{j \in \mathcal{N}_c} x_{0j} = K, \quad \forall i \in \mathcal{N}_c \quad \\
\sum_{i \in \mathcal{N}_c} x_{i0} = K, \quad \forall i \in \mathcal{N}_c \quad \\
\sum_{j \in \mathcal{N}, j \neq i} x_{ij} = \sum_{j \in \mathcal{N}, j \neq i} x_{ji}, \quad \forall i \in \mathcal{N}_c \quad \\
\sum_{j \in \mathcal{N}, j \neq i} x_{ji} = y_i, \quad \forall i \in \mathcal{N}_c \quad \\
a_i + s_i + t_{ij} \leq a_j + M_{ij}(1 - x_{ij}), \quad \forall i \in \mathcal{N}_c, j \in \mathcal{N} \quad \\
a_i \geq t_{0i} y_i, \quad \forall i \in \mathcal{N}_c \quad \\
a_i \leq D_i y_i, \quad \forall i \in \mathcal{N}_c \quad \\
a_0 \leq T_{\text{max}} \quad \\
x_{ij} \in \{0, 1\}, \quad \forall i, j \in \mathcal{N} \quad \\
y_i \in \{0, 1\}, \quad \forall i \in \mathcal{N}_c \quad \\
a_i \geq 0, \quad \forall i \in \mathcal{N} \quad \\
\end{align}
\end{cases}
\end{aligned}\]
约束编号 含义
6,7 约束从节点0出发,到0结束,总共K个队伍
8 流平衡约束
9 判断某个节点是否被任意车访问过
10 去子环约束(MTZ formulation)
11,12,13 约束到达节点的时间,以及抵达时刻不得太晚

该模型可以参考:【待补充】