案例 055 跨江大桥堵了

案例 055 跨江大桥堵了

摘要:珠江把配送区切成北岸商家区与南岸客户区,24 单跨江订单只能靠一座大桥、一条绕行环线或一次水巴接驳完成。桥面通行时间随过桥单量二次上升(自由流 6.0 min,24 单全过桥时 23.3 min),于是"多送一单过桥"会给所有过桥订单加时间——这是典型的拥堵外部性。本文把每单的三选一指派写成 0-1 规划,用 \(s_{i}\ge t^{B}(r)-\sigma_{i}\) 线性化迟到,并在北岸 780、南岸 80 骑手分钟的运力约束下求解;由于 \(t^{B}\) 只依赖整数流量 \(r\),对 \(r\in\{0,\dots,24\}\) 做参数枚举,共 1726 个子问题、其中 1475 个可行且全部证到最优。结果:全部过桥总迟到 201.3 min、运力越界 25 min;全部绕行 122.6 min;按单决策只让 15 单(62.5%)过桥、9 单改派南岸骑手,总迟到压到 2.5 min,准时 21/24 单。最优分流比例不是拍出来的:它出现在"再塞一单过桥的边际延误"刚好等于"改派一单的固定代价"那一点。

关键词:跨江配送;拥堵外部性;绕行;骑手改派;参数化整数规划;时效重算

1 问题提出

1.1 问题是什么

午高峰 12:00—12:40,24 单订单全部从北岸商家取货、送到南岸客户,必须过一次江。三条通道的账完全不同:大桥自由流 6.0 min,但桥面只有一条非机动车道,过桥单量 \(r\) 越多越堵,\(t^{B}(r)=6.0\kappa+0.030r^{2}\);绕行环线多走 7.2 km、按 21.6 km/h 折 20.0 min,但完全不堵;水巴接驳由南岸骑手在码头接货,过江 15 min 含候船,代价是要占南岸的运力。

订单按余量分层见表 1:出餐完成时刻 \(p_{i}\) 在 7—13 min 之间,取餐到桥头 \(a_{i}\) 与桥头到客户 \(b_{i}\) 合计 8.8—11.8 min,承诺 35 min 送达,于是留给"过江段"的余量 \(\sigma_{i}=\bar{T}-p_{i}-a_{i}-b_{i}\) 只有 11.0—17.7 min。过江段时间一旦超过 \(\sigma_{i}\),这一单就开始迟到。

表 1 按过江段余量分层的订单构成(方式为最优方案)

余量区间 / min 单量 平均出餐 / min 平均在途 / min 平均余量 / min 过桥/改派/绕行
\(\sigma_{i}\in[11,13)\) 4 12.0 10.9 12.2 4/0/0
\(\sigma_{i}\in[13,15)\) 9 10.8 10.2 14.0 9/0/0
\(\sigma_{i}\in[15,18)\) 11 8.3 10.1 16.6 2/9/0

余量小于 13 min 的 4 单,即使桥面只有 12.8 min 也已经贴到承诺线,几乎没有腾挪余地;余量 15 min 以上的 11 单留足了缓冲,正是替桥面分流的第一批候选。分层表已经把答案摆在桌面上:能忍桥的忍桥,忍不了的分流。

表 2 三种配送方式的时间与运力占用

方式 过江时间 / min 北岸占用 / min 南岸占用 / min 适用条件
过桥 \(B\) 12.8(本案) \(a_{i}+b_{i}+t^{B}(r)\) 0 桥面可通行
绕行 \(D\) 20.0 \(a_{i}+b_{i}+T_{D}\) 0 桥面可通行
改派 \(H\) 15.0 \(a_{i}+\delta\) \(b_{i}+\delta\) 需南岸骑手

1.2 为什么要优化

第一,桥越堵越要多派人过桥,是典型的负反馈。照常过桥时 24 单全挤桥面,\(t^{B}\) 被自己抬到 23.3 min,总迟到 201.3 min,且北岸骑手分钟 805 已经超过 780 的运力上限——这不是"慢一点",是排不出来。

第二,绕行是保底而不是优选。全部绕行把 \(t^{B}\) 的拥堵彻底绕开,总迟到降到 122.6 min,但每单多背 20.0 min 的固定代价,24 单多烧 726 骑手分钟,准时率仍然是 0/24。

第三,对岸骑手是第三种资源。南岸只有 80 骑手分钟能用于接驳,一单只占 \(b_{i}+\delta\),却能省下整段过江时间;把它用在哪里、用几单,直接决定分流比例。

1.3 Gurobi 如何求解

引入三组 0-1 变量 \(x_{i,B},x_{i,D},x_{i,H}\),恰好选一种方式(式 3);迟到 \(s_{i}\) 用大 M 线性化(式 4),大 M 取 60(候选时间的量级,不用 \(10^{6}\));桥面流量 \(r=\sum_i x_{i,B}\) 是整数,\(t^{B}(r)\) 与 \(r\,t^{B}(r)\) 只在 \(r\) 取整时才有意义,于是把 \(r\) 当参数、对 0—24 逐个枚举(式 7),每个子问题都是纯线性 0-1 规划。1726 次子问题求解里 1475 个可行,平均每次 0.01 s,总墙钟 13 s。

2 数学模型

2.1 符号说明

\(I\) 为跨江订单集合(\(|I|=24\));\(x_{i,B},x_{i,D},x_{i,H}\) 为三种方式的 0-1 选择;\(r\) 为过桥单量;\(t^{B}(r)\) 为桥面通行时间;\(T_{D}\) 为绕行过江时间(20.0 min);\(T_{H}\) 为水巴接驳过江时间(15 min);\(\sigma_{i}\) 为过江段余量;\(s_{i}\) 为迟到分钟;\(a_{i},b_{i}\) 为两端的取送时间;\(\delta\) 为接力交接时间(3 min);\(C_{A},C_{B}\) 为两岸可用骑手分钟;\(M\) 为大 M;\(\varepsilon\) 为次目标权重。

2.2 目标函数

\[t^{B}(r)=\tau_{0}\,\kappa+c_{b}\,r^{2},\qquad r=\sum_{i\in I}x_{i,B}\tag{1} \]

\[\min\ Z=\sum_{i\in I}s_{i}+\varepsilon\sum_{i\in I}\left[x_{i,B}\left(a_{i}+b_{i}+t^{B}(r)\right)+x_{i,D}\left(a_{i}+T_{D}+b_{i}\right)+x_{i,H}\left(a_{i}+b_{i}+2\delta\right)\right]\tag{2} \]

主目标是总迟到分钟,次目标是骑手分钟消耗,权重 \(\varepsilon=5\times10^{-4}\):一骑手分钟只值 0.0005 迟到分钟,等价于"先保时效、再省运力"的字典序。写成一个目标而不是两阶段,是因为外层要对 25 个 \(r\) 各解一次,两阶段会把求解次数翻倍。

2.3 约束条件

\[x_{i,B}+x_{i,D}+x_{i,H}=1,\qquad x_{i,m}\in\{0,1\},\qquad i\in I,\ m\in\{B,D,H\}\tag{3} \]

每单必须选且只选一种方式。三种方式的分工是:\(B\) 走桥、\(D\) 走环线、\(H\) 在北岸码头交给南岸骑手。

\[s_{i}\ \ge\ t^{B}(r)-\sigma_{i}-M\,(1-x_{i,B}),\quad s_{i}\ \ge\ T_{D}-\sigma_{i}-M\,(1-x_{i,D}),\quad s_{i}\ \ge\ T_{H}-\sigma_{i}-M\,(1-x_{i,H}),\quad s_{i}\ \ge\ 0\tag{4} \]

迟到按所选方式的过江时间与余量之差计算,未选中的方式用 \(M(1-x)\) 关掉;\(s_{i}\ge 0\) 保证"早到"不计负迟到。

\[\sum_{i\in I}\left[x_{i,B}(a_{i}+b_{i})+x_{i,D}(a_{i}+T_{D}+b_{i})+x_{i,H}(a_{i}+\delta)\right]+r\,t^{B}(r)\ \le\ C_{A}\tag{5} \]

北岸骑手分钟:过桥与绕行的整段在途都要占用北岸骑手,改派只占用取餐到码头的一段 \(a_{i}+\delta\);桥面拥堵时间 \(r\,t^{B}(r)\) 是"每单都变慢"的总代价,必须整体计入,否则模型会忽略自己造成的拥堵。

\[\sum_{i\in I}x_{i,H}\,(b_{i}+\delta)\ \le\ C_{B},\qquad \sigma_{i}=\bar{T}-p_{i}-a_{i}-b_{i}\tag{6} \]

南岸骑手分钟只被改派占用,\(b_{i}+\delta\) 是码头到客户加交接;\(\sigma_{i}\) 的定义把承诺、出餐、两端在途一次性折成"过江段还剩多少余量"。

\[Z^{\star}=\min_{r\in\{0,1,\dots,24\}}\ \Phi(r),\qquad \Phi(r)=\min_{x}\left\{Z\ \middle|\ \sum_{i}x_{i,B}=r\right\}\tag{7} \]

外层对整数流量 \(r\) 枚举:\(\Phi(r)\) 是固定 \(r\) 后的线性子问题,\(Z^{\star}\) 是 25 个子问题的最小值。\(\Phi(r)\) 关于 \(r\) 不是凸的(过桥边际延误递增、但改派受南岸运力上限约束),枚举比梯度类方法可靠。

2.4 规模与性质

每个子问题 24 组 0-1 变量(72 个)、24 个连续迟到变量、约 100 条约束,是带容量约束的多选指派问题,LP 松弛已经很紧,单次求解在 0.01 s 量级。真正的难点不在规模,而在拥堵的自指性:\(t^{B}\) 依赖决策者的集体行为,把 \(r\) 提出来做参数,才让它保持线性。

3 Gurobi 求解实现

3.1 建模要点

固定 \(r\) 后桥面时间变成常数,所有约束都是线性的,这是本案例最关键的一步:

for r in range(N + 1):                      # 桥面流量只有 25 种可能
    tt = 6.0 * kappa + 0.030 * r * r        # 拥堵时间成为常数
    m = gp.Model(); xb = m.addVars(N, vtype=GRB.BINARY)
    m.addConstr(gp.quicksum(xb[i] for i in range(N)) == r)
    m.addConstrs((s[i] >= tt - SL[i] - 60 * (1 - xb[i]) for i in range(N)))
    m.addConstr(gp.quicksum(xb[i]*(a[i]+tt+b[i]) ...) <= CAPA)

MIPGap 设 1e-9、TimeLimit 2 s;实际上每个子问题都在 0.01 s 内证到最优,TimeLimit 从未触发。若改用 PWL 表达 \(t^{B}(r)\),\(\kappa=2.5\) 时 LP 松弛明显变弱,8 s 都收不满 gap——这是本案例放弃 PWL 的直接原因。

3.2 求解结果

表 3 四种情景的时效与运力

情景 过桥 / 单 改派 / 单 总迟到 / min 准时 / 单 骑手分钟 / min
照常过桥 24 0 201.3 0 805
全部绕行 0 0 122.6 0 726
按单决策 15 9 2.5 21 491
封路重算 0 9 77.6 0 600

按单决策给出 \(r^{\star}=15\)、\(t^{B}=12.8\) min、9 单改派,总迟到 2.5 min,北岸 415 + 南岸 76 = 491 骑手分钟。照常过桥要 805 骑手分钟,比运力多 25;全部绕行 726;封路时只能 9 单改派、其余绕行,总迟到 77.6 min。

4 结果分析

图 1 跨江路网结构:大桥、绕行环线与水巴接驳三条通道

4.1 路网结构 图 1 把三条通道画在同一张示意图上:北岸六个商家、南岸六个客户,中间是可拥堵的大桥、可接驳的水巴和向西绕出的环线。大桥是唯一"越用越慢"的通道,环线是唯一"用多少都不慢、但每单固定贵 20.0 min"的通道,水巴是唯一"不占北岸过江时间、但要占南岸人力"的通道——三条通道的稀缺资源各不相同,这正是需要按单决策而不是按方案决策的原因。

图 2 逐单承诺余量与基础在途:气泡为订单金额,颜色为最优方式

4.2 逐单余量 图 2 横轴是两端的取送时间 \(a_{i}+b_{i}\),纵轴是过江段余量 \(\sigma_{i}\),气泡大小是订单金额,颜色是最优方式。三条水平线分别是过桥 12.8、改派 15、绕行 20.0 min:点落在某条线之上就说明那种方式对这一单不迟到。余量低于 15 min 的单只能靠"哪条通道更快"定方式;余量高于 15 min、三种方式都不迟到的单,颜色由次目标(骑手分钟)决定——改派两岸各占 \(a_{i}+\delta\)、\(b_{i}+\delta\),合计 16.2 min,比过桥的 23.0 min 少。

图 3 四种情景的总迟到与准时率

4.3 四情景对比 图 3 是核心对比。照常过桥总迟到 201.3 min、准时 0/24;全部绕行 122.6 min、准时 0/24;按单决策 2.5 min、准时 21/24;封路重算 77.6 min、准时 0/24。从"全过桥"到"按单决策",迟到少了 199 min,靠的不是多跑路,而是把 9 单从桥上拿下来——桥面少 9 单,剩下的每一单都快了 23.3−12.8 = 10.5 min。

图 4 三种方案的累计送达曲线与承诺时刻

4.4 累计送达 图 4 是累计送达曲线,竖线是承诺 35 min。按单决策的曲线在 35 min 之前就爬完了 21 单,尾巴只剩几单;全部绕行的曲线整体右移约 20.0 min,35 min 时一单都没送出;照常过桥最差,前 35 min 几乎没动——因为桥面被自己堵住了。曲线的斜率就是"每小时能送几单",三条曲线的差距全部产生在 35 min 这条竖线的左侧。

图 5 拥堵倍数对总迟到与最优过桥比例的影响(三条绕行距离)

4.5 主灵敏度:拥堵倍数 图 5 左轴是总迟到,右轴是最优过桥比例,三条实线对应绕行 5.4, 7.2, 9.0 km。\(\kappa\) 从 1.00 涨到 2.50,总迟到从 2.5 涨到 52.9 min,过桥单量从 15 单掉到 7 单。逐点结果见表 4。

表 4 拥堵倍数扫描(绕行 7.2 km)

拥堵倍数 \(\kappa\) 过桥 / 单 绕行 / 单 改派 / 单 总迟到 / min 准时 / 单
1.00 15 0 9 2.5 21
1.25 13 2 9 6.9 20
1.50 12 3 9 12.9 14
1.75 10 5 9 20.4 10
2.00 9 6 9 31.5 5
2.25 9 6 9 41.4 2
2.50 7 8 9 52.9 0

桥越慢,模型越早把单子往环线和码头赶:过桥比例从 62.5% 一路降到 29%。绕行越短这条下坡越平——绕行 5.4 km 时 \(\kappa\) 每升 0.25 倍只多 3.4 min,绕行 9.0 km 时要多 13.3 min。

图 6 拥堵倍数 × 绕行距离 的总迟到热图

4.6 二维:拥堵 × 绕行距离 图 6 是 4×5 热图,行是 \(\kappa\)、列是绕行距离,格内是总迟到。最轻的一角 0.1 min,最重的一角 82.5 min(2.5 倍 / 9.0 km)。\(\kappa=1.0\) 那一行几乎是一条平线(0—3 min),而 \(\kappa=2.5\) 那一行从 20 一路涨到 83 min——桥顺畅时环线再短也没人用,绕行距离是个闲参数;桥堵起来,绕行距离立刻变成最贵的那一格。热图的"下冷上热、左浅右深"就是这个意思。

图 7 南岸接驳运力对改派单量与总迟到的影响

4.7 第三维:南岸运力 图 7 横轴是南岸可用骑手分钟,左轴总迟到、右轴改派单量。运力从 40 加到 160,改派单量从 5 单涨到 11 单,总迟到从 14.1 降到 0.1 min。运力过 100 骑手分钟后曲线压平:总迟到已经接近 0,再多的对岸骑手也无单可救——此时瓶颈不在南岸人手,而在桥面把剩下 15 单压在同一段 12.8 min 上。加人救不了桥,这是本案例最反直觉的一条。

图 8 改派单量—总迟到 帕累托前沿与南岸运力越界区

4.8 帕累托前沿 图 8 横轴是改派单量(对岸协作成本的代理),纵轴是总迟到,点线是把改派单量固定为 \(k=0,1,\dots,9\) 逐点求解得到的十条"给定分流"最优解。前沿从(9 单、2.5 min)走到(0 单、30.8 min):少改派 9 单,迟到多 28.3 min,平均一单 3.1 min。 右侧灰带是南岸 80 骑手分钟的越界区(超过 9 单就排不出骑手),下方灰带是迟到小于 0 的不可行区。照常过桥(0 改派、201.3 min,已超出纵轴)与全部绕行(三角、0 改派、122.6 min)都落在同一竖线上却高出一大截——在"零改派"这个横坐标上,前沿只值 30.8 min,它们分别贵出 170 与 92 min,说明差的不只是用不用对岸骑手,还有过桥单量本身。

图 9 四种情景送达时长的累计分布

4.9 时长分布 图 9 是四种情景送达时长的累计分布。按单决策的曲线最陡,35 min 处累计概率已达 88%;封路曲线的中位送达比按单决策晚 4.3 min,35 min 处只有 0%;照常过桥的曲线最长尾,最慢的一单要 47 min。分布的形状比均值更能说明问题:按单决策是把长尾砍掉,不是把整体往前挪。

图 10 按单决策方案下逐单送达时长的四段分解

4.10 时长分解 图 10 把按单决策下每单的送达时长拆成四段:出餐等待、取餐到桥头、过江段、到客户。红色过江段的高度在 12.8(过桥)与 15(改派)之间跳变,9 根更长的红条就是改派的单;浅蓝的出餐等待是刚性成本,横线 35 min 之上的部分就是迟到。注意改派单的红段是 15 min,比过桥的 12.8 min 还长:单看一单是亏的。它们之所以被选中,是因为每挪走一单,桥上剩下的 15 单各快一点,合计赚回的比这一单亏的多——这正是拥堵外部性在逐单层面的样子。

5 结论

  1. 桥面拥堵是内生的:全部过桥时 \(t^{B}\) 被 24 单自己抬到 23.3 min,总迟到 201.3 min,北岸骑手分钟 805 超出运力 25 min,方案在运力上就不可行。
  2. 全部绕行把总迟到降到 122.6 min,但每单固定多背 20.0 min、多烧 726 骑手分钟,准时率仍只有 0/24;绕行是封路时的保底,不是通畅时的优选。
  3. 按单决策的最优分流是 15 单过桥(62.5%)+ 9 单改派 + 0 单绕行,总迟到 2.5 min、准时 21/24,骑手分钟 491,全部落在运力内。
  4. 分流比例随拥堵单调下降:\(\kappa\) 从 1.00 到 2.50,过桥比例从 62.5% 降到 29%,总迟到从 2.5 涨到 52.9 min;南岸运力从 80 继续加,改派单量在 11 单处封顶,瓶颈重新回到桥上。
  5. 封路情景下只能 9 单改派、其余绕行,总迟到 77.6 min,比按单决策多 75.0 min——这 75.0 min 就是"桥"这个基础设施的年化价值:它不在任何一单的账上,只在封路那一天一次性结算。

参考文献

[1] Gurobi Optimization LLC. Gurobi Optimizer Reference Manual[Z]. 2024.

[2] Kellerer H, Pferschy U, Pisinger D. Knapsack Problems[M]. Berlin: Springer, 2004.

[3] Martello S, Toth P. Knapsack Problems: Algorithms and Computer Implementations[M]. Chichester: John Wiley & Sons, 1990.

[4] 司守奎, 孙玺菁. 数学建模算法与应用[M]. 3 版. 北京: 国防工业出版社, 2021.

posted @ 2026-11-11 18:02  小青蛙电气  阅读(2)  评论(0)    收藏  举报