列生成算法在垃圾收集车辆路径问题中的应用示例
字数 2413 2025-11-08 20:56:04

列生成算法在垃圾收集车辆路径问题中的应用示例

题目描述
考虑一个垃圾收集车辆路径问题(Garbage Collection Vehicle Routing Problem, GCVRP)。某城市有多个垃圾收集点,每个点产生一定量的垃圾。多辆容量相同的垃圾收集车从车库出发,服务各收集点(收集垃圾)后返回车库。目标是设计车辆路径,使得总行驶距离最短,且满足:每辆车不超过容量限制;每个点只被一辆车服务一次;车辆从车库出发并返回。

该问题可建模为集合覆盖模型,但可能的路径组合太多(组合爆炸)。使用列生成算法,主问题选择最优路径组合,子问题(定价问题)生成有潜力的新路径(即检验数负的列)。

解题过程

1. 问题建模

  • 设垃圾收集点集合为 \(N\),车辆集合为 \(K\)(同质车辆,容量均为 \(Q\))。
  • 每个点 \(i\) 的垃圾量为 \(q_i\)
  • 车库编号为 0。
  • 主问题(限制主问题,Restricted Master Problem, RMP)为线性松弛的集合覆盖模型:

\[ \min \sum_{r \in \Omega} c_r \theta_r \]

\[ \text{s.t. } \sum_{r \in \Omega} a_{ir} \theta_r = 1, \quad \forall i \in N \]

\[ \sum_{r \in \Omega} \theta_r \leq |K| \]

\[ \theta_r \geq 0, \quad \forall r \in \Omega \]

其中:

  • \(\Omega\) 是所有可行路径的集合(初始为部分路径的子集);
  • \(c_r\) 是路径 \(r\) 的长度;
  • \(a_{ir} = 1\) 表示路径 \(r\) 服务点 \(i\),否则为 0;
  • \(\theta_r\) 表示路径 \(r\) 的使用程度(线性松弛下可为分数)。

2. 列生成流程
列生成迭代求解:

  • 步骤 1:求解当前 RMP(线性规划),得到对偶变量 \(\pi_i\)(对应每个点 \(i\) 的覆盖约束)和 \(\mu\)(对应车辆数约束,\(\mu \leq 0\))。
  • 步骤 2:子问题(定价问题)寻找检验数为负的路径,即求解:

\[ \min_{r \in \Omega} \left( c_r - \sum_{i \in N} a_{ir} \pi_i - \mu \right) \]

由于 \(\mu\) 是常数,目标等价于最小化 \(c_r - \sum_{i \in N} a_{ir} \pi_i\)
子问题实为一个带容量约束的最短路径问题(Elementary Shortest Path Problem with Resource Constraints, ESPPRC),可通过动态规划(如标签算法)求解。

  • 步骤 3:若找到检验数 \(\bar{c}_r = c_r - \sum_i a_{ir} \pi_i - \mu < 0\) 的路径 \(r\),将其加入 RMP,返回步骤 1;否则当前解为原问题线性松弛的最优解。

3. 子问题的具体求解(标签算法)

  • 状态定义:标签 \((i, S, q)\) 表示路径从车库 0 到点 \(i\),已服务点集为 \(S\),累计垃圾量为 \(q\)。为减少状态数,可使用支配规则:若两标签到同一点 \(i\),且 \(S_1 \subseteq S_2\)\(q_1 \leq q_2\)、成本更低,则标签 1 支配标签 2,可舍弃被支配标签。
  • 扩展标签:从点 \(i\) 扩展至未访问点 \(j\),若 \(q + q_j \leq Q\),则生成新标签 \((j, S \cup \{j\}, q + q_j)\),路径成本增加 \(d_{ij}\)(距离),并减去对偶值 \(\pi_j\)(因为目标中含 \(-\sum a_{ir} \pi_i\))。
  • 终止:扩展至车库 0 结束,得到完整路径。记录检验数最小的路径。

4. 获取整数解
列生成得到线性松弛最优解后,需整数化(因 \(\theta_r\) 应为 0 或 1)。常用方法:

  • 将列生成得到的所有路径构造一个整数规划模型(集合覆盖模型),用分支定界法求解。
  • 或直接对 RMP 进行分支定价(Branch-and-Price),在分支节点中继续列生成。

5. 实例演示(简化)
假设 4 个收集点 \(N = \{1,2,3,4\}\),垃圾量 \(q = [2,1,3,2]\),车辆容量 \(Q = 5\),距离矩阵对称。初始 RMP 包含少量可行路径(如单点路径)。

  • 迭代 1:求解 RMP,得对偶值 \(\pi_i\)。子问题中,计算路径检验数,发现路径 \(0 \to 1 \to 3 \to 0\)(垃圾量 5,成本 \(c_r = d_{01} + d_{13} + d_{30}\)),检验数 \(\bar{c}_r = c_r - (\pi_1 + \pi_3) - \mu\)。若为负,加入 RMP。
  • 迭代 2:更新 RMP 求解,重复直至无负检验数路径。
  • 最终得到线性松弛下分数解,再通过整数规划求解器得到整数解。

总结
列生成通过分解思想处理路径组合爆炸问题:主问题管理路径选择,子问题生成改进路径。关键点在于子问题的高效求解(如标签算法)和整数化处理。该方法适用于大规模垃圾收集路径优化,显著减少计算资源。

列生成算法在垃圾收集车辆路径问题中的应用示例 题目描述 考虑一个垃圾收集车辆路径问题(Garbage Collection Vehicle Routing Problem, GCVRP)。某城市有多个垃圾收集点,每个点产生一定量的垃圾。多辆容量相同的垃圾收集车从车库出发,服务各收集点(收集垃圾)后返回车库。目标是设计车辆路径,使得总行驶距离最短,且满足:每辆车不超过容量限制;每个点只被一辆车服务一次;车辆从车库出发并返回。 该问题可建模为集合覆盖模型,但可能的路径组合太多(组合爆炸)。使用列生成算法,主问题选择最优路径组合,子问题(定价问题)生成有潜力的新路径(即检验数负的列)。 解题过程 1. 问题建模 设垃圾收集点集合为 \( N \),车辆集合为 \( K \)(同质车辆,容量均为 \( Q \))。 每个点 \( i \) 的垃圾量为 \( q_ i \)。 车库编号为 0。 主问题(限制主问题,Restricted Master Problem, RMP)为线性松弛的集合覆盖模型: \[ \min \sum_ {r \in \Omega} c_ r \theta_ r \] \[ \text{s.t. } \sum_ {r \in \Omega} a_ {ir} \theta_ r = 1, \quad \forall i \in N \] \[ \sum_ {r \in \Omega} \theta_ r \leq |K| \] \[ \theta_ r \geq 0, \quad \forall r \in \Omega \] 其中: \( \Omega \) 是所有可行路径的集合(初始为部分路径的子集); \( c_ r \) 是路径 \( r \) 的长度; \( a_ {ir} = 1 \) 表示路径 \( r \) 服务点 \( i \),否则为 0; \( \theta_ r \) 表示路径 \( r \) 的使用程度(线性松弛下可为分数)。 2. 列生成流程 列生成迭代求解: 步骤 1 :求解当前 RMP(线性规划),得到对偶变量 \( \pi_ i \)(对应每个点 \( i \) 的覆盖约束)和 \( \mu \)(对应车辆数约束,\( \mu \leq 0 \))。 步骤 2 :子问题(定价问题)寻找检验数为负的路径,即求解: \[ \min_ {r \in \Omega} \left( c_ r - \sum_ {i \in N} a_ {ir} \pi_ i - \mu \right) \] 由于 \( \mu \) 是常数,目标等价于最小化 \( c_ r - \sum_ {i \in N} a_ {ir} \pi_ i \)。 子问题实为一个带容量约束的最短路径问题(Elementary Shortest Path Problem with Resource Constraints, ESPPRC),可通过动态规划(如标签算法)求解。 步骤 3 :若找到检验数 \( \bar{c} r = c_ r - \sum_ i a {ir} \pi_ i - \mu < 0 \) 的路径 \( r \),将其加入 RMP,返回步骤 1;否则当前解为原问题线性松弛的最优解。 3. 子问题的具体求解(标签算法) 状态定义 :标签 \( (i, S, q) \) 表示路径从车库 0 到点 \( i \),已服务点集为 \( S \),累计垃圾量为 \( q \)。为减少状态数,可使用支配规则:若两标签到同一点 \( i \),且 \( S_ 1 \subseteq S_ 2 \)、\( q_ 1 \leq q_ 2 \)、成本更低,则标签 1 支配标签 2,可舍弃被支配标签。 扩展标签 :从点 \( i \) 扩展至未访问点 \( j \),若 \( q + q_ j \leq Q \),则生成新标签 \( (j, S \cup \{j\}, q + q_ j) \),路径成本增加 \( d_ {ij} \)(距离),并减去对偶值 \( \pi_ j \)(因为目标中含 \( -\sum a_ {ir} \pi_ i \))。 终止 :扩展至车库 0 结束,得到完整路径。记录检验数最小的路径。 4. 获取整数解 列生成得到线性松弛最优解后,需整数化(因 \( \theta_ r \) 应为 0 或 1)。常用方法: 将列生成得到的所有路径构造一个整数规划模型(集合覆盖模型),用分支定界法求解。 或直接对 RMP 进行分支定价(Branch-and-Price),在分支节点中继续列生成。 5. 实例演示(简化) 假设 4 个收集点 \( N = \{1,2,3,4\} \),垃圾量 \( q = [ 2,1,3,2 ] \),车辆容量 \( Q = 5 \),距离矩阵对称。初始 RMP 包含少量可行路径(如单点路径)。 迭代 1:求解 RMP,得对偶值 \( \pi_ i \)。子问题中,计算路径检验数,发现路径 \( 0 \to 1 \to 3 \to 0 \)(垃圾量 5,成本 \( c_ r = d_ {01} + d_ {13} + d_ {30} \)),检验数 \( \bar{c}_ r = c_ r - (\pi_ 1 + \pi_ 3) - \mu \)。若为负,加入 RMP。 迭代 2:更新 RMP 求解,重复直至无负检验数路径。 最终得到线性松弛下分数解,再通过整数规划求解器得到整数解。 总结 列生成通过分解思想处理路径组合爆炸问题:主问题管理路径选择,子问题生成改进路径。关键点在于子问题的高效求解(如标签算法)和整数化处理。该方法适用于大规模垃圾收集路径优化,显著减少计算资源。