Skip to content

Clarke–Wright 节约算法(Savings, CVRP 经典构造)

Clarke 与 Wright(1964)针对车辆路径问题(VRP,常见为有容量 CVRP)提出过一类构造式启发式:将原先各自独立的两条送货车线合并为一条,使总行驶距离得到「节约」。其要点是先计算客户对 (i, j) 的节约量,再按节约从大到小尝试合线。是 基础启发式 中边合并系构造的代表;与 插入启发式 在弧上逐点插客户的步态不同。总览与分类见 启发式算法总览


一、什么是「节约」?

设车场为 0、客户为 i, j。距离记为 d(·,·)。下面先给对称路长(d(u,v)=d(v,u))下最常见的推导;有向或不对称网时,节约定义需与开闭路、弧向约定一起写进实现与可复现说明,但「合并可省回场/绕路」的直觉一致。

1.1 合并前

两车分别给 i、j 送货,最简叙述为两条独立往返小回路(径向回场):

  • 车线 1:0 → i → 0,路程长为 d(0, i) + d(i, 0) = 2d(0, i)(对称时)。
  • 车线 2:0 → j → 0,路程长为 2d(0, j)(对称时)。

在合并前设定下,两条路径合起来的总路长为

1.2 合并后

改由同一条车线依次服务 i 与 j 再回场(顺序取为 0 → i → j → 0;若还允许 j 在 i 前,实现里要另作对称讨论):

1.3 节约量

节约量定义为「合并前路程减合并后路程」(能少跑多少路):

化简后得到下列最常用的节约值公式(对称路长下与常见写法一致):

含义:从「i 与 j 各跑一趟车场回场」改接成 i 到 j 的直连,相当于用一段 i–j 直路替代与车场相关的一段绕行。S(i, j) 越大,通常越值得优先尝试合并。
:CVRP 在合并时除节约外还须满足容量、端点、是否同路等条件,见后文;仅有正数字的节约不足以保证可合并为可行车线。

1.4 合并前/合并后示意(同尺度直观对照)

合并前:两车、两条往返合并后:单车、一条 0–i–j–00iji 径向j 径向0ij
左:0→i 与 0→j 各成往返小回路。右:合并为 0→i→j→0;虚线/多余径向在合并时被删除,i–j 段(绿)是新增直连。

二、并线主流程:并行 C-W(文献与实现中最常写的版本之一)

说明:C-W 还有「串行」等变体(合一条、重算、再合);下框对应「并行」savings 的典型叙述:所有节约一次算好、按表从高到低试合并。其它变体以所用文献与代码为准。

▶ 并行 C-W 节约法(CVRP 叙述)

1. 计算距离矩阵

计算车场 0 与所有客户、以及客户两两之间的距离 d(·,·)(有向时按弧定义)。

2. 计算节约矩阵

对所有客户对 (i, j)(i≠j,常约定 i<j 避免重复)用
计算节约值。需求 q_i, q_j 在下一步才参与约束,不在此式内。

3. 节约值排序

将所有 S(i, j) 从大到小排序。节约越大,一般表示在尚未考虑容量时,先尝试合并 (i, j) 的吸引力越大。

4. 按序尝试合并

从最大节约的 (i, j) 起依次处理;对当前 (i, j) 在合并前同时检查(常用三条):

  • 约束:合并后该条线路总需求是否不超过单车容量上界 Q。
  • 端点/可接性:i 与 j 是否各自能作为所在路径的「可与对方拼接的一端」;典型要求二者分别处在各自链路径的外端、且能按约定与车场方向接成 0-…-i-…-j-…-0 这类结构。若任一点已夹在两个客户之间(非链端),则本对 (i, j) 不合并。
  • 独立性:i 与 j 当前若已在同一条完整路径中,则无需再对这对做合并。

若上述均可行,则按约定把两条片段接成更长的可行车线并更新;否则弃置本对 (i, j),继续下一对。

5. 扫完表

对排序后的节约表依次处理全部 (i, j) 对,或据实现设早停。输出当前路径方案(可再接局部改进等)。


三、变体、性质与可复现

上节内嵌的 SVG 为页面内可读的静态图;你若有可合法使用的参考图,也可放入 docs/or-opt/resources/ 并在本页以 ![说明](../../resources/xxx.png) 引用。有向、多车场、时间窗时,节约式与端点/可接规则要按题设写清。算法不保证 CVRP 全局最优,但实现快、常与 k-opt 系列 或元启发式搭配,或作初始上界。

:TSP 与带车场、多约束的 CVRP 不划等号。车数有上界、需求异质等时,以所用文献的 λ、μ 修正或并行/串行混合版为准。
注(路径)resources 相对本文件 heuristics/simple/clarke-wright-savings.md../../resources/;若你习惯把图放在与 or-opt 同级的别目录,请改链接。

个人笔记