车辆路径问题与时间窗
车辆路径问题(VRP)决定每辆车按什么顺序访问哪些地点,并检查容量、工时和道路限制。加入时间窗后,客户只允许在指定时段开始服务;车可以早到等待,却不能把晚到的服务硬记成准时。单独求各地点到仓库的最短路径,并不会自动给出一条可执行的整车路线。
一辆车、两个客户
一条直线上,仓库 在零千米,客户 在二千米,客户 在五千米。车辆行驶一千米用一分钟,在每个客户处服务一分钟;出发时间为零,最晚必须在第十三分钟回仓。 的服务开始时间须在第 至 分钟, 须在第 至 分钟。两处货量分别为二和三件,车辆容量五件。
按 行驶:第 分钟到 并服务到 ;再行驶三分钟,第 分钟到 ,等待到 分钟才开始服务,到 分钟结束;再行驶五分钟,恰在 分钟回仓。货量 没有超过容量。若先去 ,第 分钟到达后要等到 分钟,服务完第 分钟,再去 至少第 分钟,已经超过 的最晚开始时间四。两种访问顺序的纯路程都为十千米,时间窗却只允许第一种。
把路程变成约束
令 为从地点 到 的行车成本, 为行车时间, 为在 的服务时长, 为服务开始时间窗, 为交付货量。对每辆车 ,二元变量 表示它直接从 驶向 。常见目标是 ,同时要求每个客户恰访问一次,车辆从仓库出发并回到仓库,中间每到一处就有一条离开的弧。
给车 在客户 的服务开始时刻记 。若 ,时间必须满足 若弧没被选,上述递推不应约束这辆车,可用足够大的常数 写成 ,但 过大会使整数规划数值松弛、计算变慢;应由仓库营业时间与时间窗推得有效上界。还要把载货量沿选中弧递推,或直接对每条已构成路线检查 。只对总需求检查 不足以保证每辆车都装得下。
上面简单例子之所以允许在 等一分钟,是因为时间变量表示服务开始,不是刚到门口的时刻。若客户要求服务完成不晚于 ,则约束改为 ;不能沿用开始时间窗并声称满足了完成时限。若道路单行、早晚高峰不同, 也未必等于 ,更不能把地图上的直线距离直接代入。
求解和验收
对少量客户可枚举访问顺序并逐条模拟服务时间与载重;规模增大后用整数规划、约束规划或专门的路径搜索。启发式求解器返回的是可行方案还是已证明最优,须看求解状态和最优界,不能因路径看起来短就自称最优。逐车验收应打印访问序列、抵达与服务开始时刻、等待、服务结束、剩余载重和回仓时刻;若任何时窗或容量不满足,就不是合法解。
需求、路况和客户可服务时间带有不确定性时,可按不同交通时段模拟路线,报告延误次数与备用车辆成本。硬时窗与可付罚金的软时窗代表不同合同,不应混用。若允许客户不服务,也要在目标里明确未服务的损失,而不是让求解器悄悄丢掉难送的地点。