预测得好,不等于决策得好
物流服务同时收到三个请求。AI 模型估计每辆车到每位客户的时间。在第一个例子中,这些估计甚至完全准确。反复选择最近的车辆与客户组合,是否就足够?并不。把一辆车分给一个请求后,它就不能再服务其他请求。单独看划算的选择,可能占用在别处更有价值的资源。问题不一定在预测模型,而可能在把估计转成行动的规则。
摘要。本文在线上构造可复现案例,比较贪心选择与最小成本分配,并用可检查的下界证明最优性。随后加入车辆与请求的不兼容条件,展示局部合理选择如何走入死路,再研究成本误差何时会改变决策。目标是区分预测、优化与可行性。数据不来自真实车队或客户,也不测量 AI 模型性能或企业节约。
小到可以逐一核查的例子
想象一条双向直路,车辆 V1、V2、V3 分别位于 0、3、8 千米处,请求 A、B、C 位于 1、−2、10 千米处。负号只表示在原点左侧。假设速度恒为 1 千米/分钟,没有交通,抵达后立即服务。每辆车恰好分配一个请求,每个请求恰好分配一辆车。这里不是多站点路线规划。
配对成本 cᵢⱼ 由位置差的绝对值除以速度得到。在选定速度下,千米距离与分钟时间数值相同。下面矩阵列出所有备选时间,并非要执行九次行程。最终只选三个单元格,每行每列各一个。
| 车辆 | A(分钟) | B(分钟) | C(分钟) |
|---|---|---|---|
| V1 | 1 | 2 | 10 |
| V2 | 2 | 5 | 7 |
| V3 | 7 | 10 | 2 |
贪心选择与失去机会的代价
明确局部规则:在所有剩余组合中选成本最低的一对,然后移除该车辆与请求。这是贪心策略,因为不会重新考虑之前的选择。首先选 V1→A,成本 1;接着选 V3→C,成本 2;剩下 V2 与 B,成本 5。合计 8 车辆·分钟,是三辆车行驶时间之和,并非同时出发时总共经过八分钟。
改为 V1→B、V2→A、V3→C,则是 2+2+2=6。第一项分配多花一分钟,却让 V2 用两分钟到 A,而不是用五分钟到 B。多付出一,节省三,总计减少两车辆·分钟。这个反例足以否定“始终选择局部最小就得到全局最小”,但不代表每次贪心选择都差,也不能说明真实车队会得到同样比例的改善。
把问题写出来,约束就清晰了
定义 xᵢⱼ:车辆 i 分给请求 j 时为 1,否则为 0。目标是最小化被选单元格的成本之和。两组约束防止车辆重复分配,也防止请求无人服务:
Σ 表示对指定索引求和,∀ 表示“对每一个”。也就是说,每行每列必须恰有一次选择。目标是总时间,不是最慢客户的时间、利润或公平性。改变目标可能改变解。虽然本例成本为 6 的方案也降低了最大时间,但这种巧合不意味着总和与最大值通常可以互换。
三辆车共有 3!=6 个完整分配。感叹号表示阶乘:第一辆车三种选择,第二辆两种,第三辆一种。程序全部枚举,成本为 6、8、16、18、22、22,因此最小值不是碰巧试到的。若每个排列都求和 n 项,枚举成本为 O(n·n!)。它适合解释三个车辆的例子,却不适合直接扩展到大型车队。
如何证明六确实是最小值
还可以给出比完整列表更简洁的证明。为每辆车设数值 uᵢ,为每个请求设 vⱼ,使 uᵢ+vⱼ 始终不超过 cᵢⱼ。它们不是实际收费,而是辅助数学量。对任意完整方案,这些数之和都是成本下界,因为每辆车和每个请求都恰好出现一次。
检查第一行:u₁+v 得到 [1,2,2],不超过 [1,2,10];第二行为 [2,3,3],不超过 [2,5,7];第三行为 [1,2,2],不超过 [7,10,2]。所以任何方案成本至少为 6。已有成本恰为 6 的方案,就不可能再有更优解。−1 合法,因为辅助数值不是物理行驶时间。这是一个对偶证书:用九次比较和一次求和核查最优性,而无需相信算法名称。
证书证明的是对已写出的矩阵和约束最优,并不证明时间预测正确,也不证明包含了全部业务约束。当 AI 智能体把方案称为“最优”时,这一区别十分重要:相对于哪些数据、目标和允许选择?数学证明可以毫无瑕疵,却仍描述了错误的业务问题。
局部选择何时会让请求无车可派
加入一个假设约束:V2 不能服务 B,例如缺少该服务要求的技术条件。这是不兼容参数,不是对人的判断。明确要求 x₂B=0,比编造一个极高时间并期待算法避开它更清晰。只要有限成本仍被允许,在困难实例中就可能被选中。
贪心仍选 V1→A、V3→C,随后面对唯一剩余且被禁止的组合而停止。程序报告方案不完整,而不是把真实执行服务的成本写成无穷大。但 V1→B、V2→A、V3→C 仍可行,成本仍为 6。失败的是不可撤回的选择序列,不是问题无解。修复必须允许重新分配先前决定。
时间来自预测时,多大误差会改变方案?
此前几何关系给出精确时间。现在单独做敏感性分析,把时间视为预测成本,仅修改 V2→A,记新值为 λ 分钟。并不声称这一孤立变化来自原来的理想道路,而是其他单元格固定时的抽象预测更新。最初贪心方案成本始终为 8,交换 A、B 的方案为 λ+4。λ=4 时相等,低于阈值时交换更好,高于时另一个方案更好。

读图时沿较低分支观察。扫描使用 0 至 10 分钟、步长 0.1 的 101 个值,每次检查所有分配,而不只是绘出的两种。同样的小变化,远离交点时可能无关紧要,接近交点时却会决定结果。因此,只看时间预测平均误差不足以描述决策稳定性;还要看误差落在何处,以及备选方案是否接近。
所有配对都存在误差时的简单界
回到初始矩阵,最优分配成本 6,次优 8,差距 Δ 为 2 车辆·分钟。假设每项成本的绝对变化最多为 ε 分钟。含 n 个配对的方案最多变化 nε,两个方案差值最多变化 2nε。因此保持原胜者的充分条件为:
这是保守解释:若每项误差都小于三分之一分钟,按此上界,任何竞争方案都无法弥补全部差距。它不是必要阈值,因为还计算了两个方案共有配对的误差,而这些误差在比较中会抵消。此外,对每项成本的界是假设很强的条件,不能从平均误差低推导出来;必须验证,或改用合适的不确定性模型。
代码取 ε=0.3 分钟,检查九项误差各为 +ε 或 −ε 的全部 2⁹=512 个极端组合,胜者不变。线性成本差在这种盒状不确定集合上的极值位于顶点,因此该检查对声明模型有意义,并不是对 512 名客户的随机试验。没有估计成功概率,也没有估计真实误差分布。
从教学案例到业务系统
更大问题应使用分配算法,而非阶乘枚举。SciPy 1.18.0 文档中的 linear_sum_assignment 也支持矩形矩阵,采用修改版 Jonker–Volgenant 方法。已阅读定义、约束与 API 注释;本文没有运行 SciPy,也没有复现文档引用的论文。结果由标准 Python 与明确证书验证。
请求随时间到达会改变问题:等待可能改善匹配,却让客户延迟。每车多站点会引入路线与行程依赖;容量、时间窗、充电、班次和服务约束需要额外建模。如果车辆已出发,仅更新矩阵不够,还需区分可修改决定与已执行承诺。本文只分析一个分配时刻,不包含这些动态现象。
结论,以及代码可以核查什么
最近车辆可能对一个客户正确,对整体却错误。本例局部多花一分钟,避免别处多花三分钟;存在不兼容条件时,甚至避免一个请求无车可派。AI 可以估计成本,但系统还必须表达约束、比较完整方案。预测质量与决策质量通过这一环节联系起来,而不是等价。纠正一个忽略备选方案的算法,并不需要更大的模型。
短代码枚举六个方案并验证证书。完整包还包含贪心规则、禁止配对、λ 扫描与 512 个扰动。平局排序是确定性的,没有随机生成,因此没有随机种子。保存所有排列需要 O(n·n!) 内存,此外矩阵占 O(n²)。图由保存的结果生成,不来自生成式封面。执行程序不仅能检查最优数值,还能了解备选方案为何失败。
技术参考与可复现性
SciPy 1.18.0 — scipy.optimize.linear_sum_assignment.
from itertools import permutations
C = [[1, 2, 10], [2, 5, 7], [7, 10, 2]]
plans = sorted((sum(C[i][j] for i, j in enumerate(p)), p)
for p in permutations(range(3)))
print(plans)
u, v = [2, 3, 2], [-1, 0, 0]
assert all(u[i] + v[j] <= C[i][j] for i in range(3) for j in range(3))
assert sum(u) + sum(v) == plans[0][0] == 6
代码、数据与说明 · JSON. 教学计算使用 Python 3.14.0,图使用 Matplotlib 3.11.2。分析由 AI 辅助,不声称经过同行评审或人工审核。原创 ImageGen 封面仅作示意,不记录 EL-AI 人员、场所或实际安装。来源查阅于 2026 年 10 月 3 日。

