案例 020 过江走哪座桥:带限流的多通道指派

案例 020 过江走哪座桥:带限流的多通道指派

摘要:天河送海珠,三条可走非机动车的桥、一条禁行的隧道,20 趟过江且每桥每波限流 8 趟。本文建立 0-1 指派模型,把'接驳 + 桥面 + 出口 + 红绿灯'合成单趟成本,再加入限流约束,用 Gurobi 求得最优分配。结果表明:广州大桥 8 趟、海印 8 趟、猎德 4 趟,总时间 464.8 min;不限流的下限是 462.9 min,限流多花 0.4%。全走单一桥要 512 min 以上且违反限流,混合分配才既快又可行。

关键词:外卖配送;过江通道;指派模型;限流;Gurobi


1 问题提出

1.1 问题是什么

天河送海珠,珠江横在中间。三条能走非机动车的通道——广州大桥(1.2 km 桥面、6 个红绿灯)、海印桥(0.9 km、8 个)、猎德大桥(1.4 km、4 个);珠江隧道禁行非机动车。一批 20 趟过江,起点在天河(y>0.3)、终点在海珠(y<0)。

每趟必须选一座桥;高峰期为安全起见每座桥每波最多放 8 趟。求总通行时间最小的分配。

表 1 三条可用通道

通道 桥位 /km 桥面长度 /km 红绿灯 /个 单趟桥面时间 /min
广州大桥 -1.50 1.2 6 4.00
海印桥 0.60 0.9 8 3.00
猎德大桥 2.40 1.4 4 4.67

1.2 为什么要优化

  • 绕行差异大:广州大桥在西、猎德在东,起点偏东时走猎德能省 2—3 min,反之亦然;
  • 红绿灯折算:每个灯按 0.4 min 计,灯多的桥在短途上反而更慢;
  • 限流是硬约束:不限流时"全挤猎德",第 9 趟就得排队。

1.3 Gurobi 如何求解

0-1 指派模型:\(x_{tk}=1\) 表示第 \(t\) 趟走通道 \(k\)。

\[\min\ Z=\sum_{t}\sum_{k}c_{tk}x_{tk},\qquad \sum_{k}x_{tk}=1,\qquad \sum_{t}x_{tk}\le N \tag{1} \]

其中 \(c_{tk}\) 由"接驳 + 桥面 + 出口 + 灯"四段合成:

\[c_{tk}=\frac{60}{v}\Big(|x^o_t-x_k|+y^o_t-0.3+|x^d_t-x_k|-y^d_t\Big)+\frac{60L_k}{v(1-\lambda)}+\lambda_g n_k \tag{2} \]

模型 80 个 0-1 变量、43 条约束,0.003 s 求得最优;再对限流水位 \(N\) 与桥面风速折减 \(\lambda\) 做扫描。

2 数学模型

2.1 符号说明

\(T=\{1,\dots,20\}\) 为行程集,\(K=\{1,2,3\}\) 为可用通道,隧道 \(k=4\) 固定 \(x_{t4}=0\);\(x^o_t,y^o_t\) 为取餐点,\(x^d_t,y^d_t\) 为送达点;\(x_k\) 为桥梁东西向位置,\(L_k\) 为桥面长度,\(n_k\) 为红绿灯数;\(v=18\) km/h,\(\lambda_g=0.4\) min/灯,\(\lambda\) 为桥面风速折减,\(N=8\) 为限流水位。

2.2 目标函数

\[\min\ Z=\sum_{t\in T}\sum_{k\in K}c_{tk}x_{tk} \tag{3} \]

2.3 约束条件

每趟恰选一座桥、隧道禁行:

\[\sum_{k\in K}x_{tk}=1,\qquad x_{t4}=0,\qquad \forall t\in T \tag{4} \]

限流(每桥每波不超过 \(N\) 趟):

\[\sum_{t\in T}x_{tk}\le N,\qquad \forall k\in K \tag{5} \]

\[x_{tk}\in\{0,1\} \tag{6} \]

2.4 规模与性质

20×4=80 个 0-1 变量(其中一列固定为 0)、43 条约束。去掉限流后是纯指派问题(LP 即整数),加限流后仍保持全单模结构,Gurobi 在根节点即得整数解。

3 Gurobi 求解实现

3.1 建模要点

for t in range(n):
    m.addConstr(x.sum(t, "*") == 1)
    m.addConstr(x[t, 3] == 0)              # 隧道禁行
for k in range(3):
    m.addConstr(x.sum("*", k) <= N)        # 每桥限流

一条实现细节:禁行通道要显式建 \(x_{t4}=0\) 而不是从变量表里删掉。保留它可以让"为什么不能走隧道"写进模型(也便于把 \(\lambda\) 之类的参数扫到隧道上做敏感性对比);若删除,模型规模小一点,但解释性差、报错时不好定位。

3.2 求解结果

表 2 最优分配与情景对比

方案 总通行时间 / min 广州 / 海印 / 猎德 是否满足限流
全走广州大桥 511.8 20/0/0 否(20>8)
全走海印桥 515.9 0/20/0 否(20>8)
全走猎德大桥 682.6 0/0/20 否(20>8)
限流下最优 464.8 8/8/4 是

不限流时的理论下限是 462.9 min,限流后多花 1.9 min(0.4%)——这就是"排队"的价格。

4 结果分析

4.1 过江结构与分配

图 1 把 20 趟画成从北岸到南岸的连线:西侧的行程走广州大桥(蓝),中部的走海印桥(橙),东侧的走猎德大桥(绿)。三条桥各承担 8、8、4 趟,没有任何一趟跨到对侧去过江——因为横穿一次至少多 2 km。

图 1 过江通道与各趟的选桥结果

图 2 逐趟看时间:柱高是该趟的通行时间,红线是选定通道的序号。第 18 趟最慢(31.9 min),因为它离三座桥都远;而像第 4 趟只要 16.7 min,几乎贴着海印桥。

图 2 逐趟通行时间与选定通道

4.2 情景对比与累计

图 3 把"全走一座桥"与"限流下最优"摆在一起:全走广州大桥 512 min、海印 516 min、猎德 683 min,最优分配 465 min。最优值比最好的单桥方案还低 47 min——把 20 趟按位置分流,比"统一走一座桥"省得更多。

图 3 四种过江策略的总时间对比

图 4 用累计曲线比较"每单独立挑最快"与"限流下的最优":前者在 463 min 收尾,后者要 465 min。两条阶梯的差距不是均匀拉开的,而是在第 14 单附近突然变大——那正是限流开始生效的位置。

图 4 贪心与限流最优的累计时间

4.3 限流与风速的灵敏度

图 5 把每桥限流从 4 加到 14:总时间由 nan min 单调降到 462.9 min,被迫改道的趟数从 nan 降到 0。限流在 \(N<8\) 时明显抬价,$N\ge$8 后曲线走平——再放宽也没人愿意跨江。

图 5 最优总时间与改道趟数随限流上限的变化

图 6 同时扫限流与风速折减:横带随 \(N\) 增大变浅,纵带随风速增大变深,等值线大致是"水平 + 竖直"的网格——两个参数的主效应可分离,没有明显的交互项。

图 6 最优总时间关于限流上限与风速折减的热图

4.4 风速、前沿与分布

图 7 单看风速:\(\lambda\) 从 0 加到 40%,总时间从 464.8 升到 514.6 min,而猎德大桥(桥面最长)的使用次数从 4 单降到 4 单。风越大,桥面越长的桥越吃亏——这就是"长桥在恶劣天气下的惩罚"。

图 7 总时间与猎德大桥使用次数随风速折减的变化

图 8 把各限流水位的解画在"总时间—单桥最大负荷"平面上:\(N\) 越小,点越靠右上(时间长、负荷被压得低);\(N\) 大到一定程度后点全部贴在同一条竖线上。右侧灰色区是不可达的部分——限流的边际收益在 \(N=8\) 之后归零。

图 8 总时间—单桥负荷的方案前沿

图 9 是"改走次优桥"的代价分布:均值 3.7 min、最大 10.9 min。大多数趟改道的代价只有 1—2 min,所以限流带来的额外时间并不多;只有少数"卡在两桥中间"的趟才会被坑。

图 9 改走次优通道的时间代价分布

图 10 把三座桥的承担量与时间贡献并列:广州大桥 8 趟 / 156 min、海印 8 趟 / 193 min、猎德 4 趟 / 116 min。单均时间最省的是海印桥(24.1 min/单),它在三座桥里位置最居中。

图 10 各桥承担的行程数与通行时间

5 结论

  1. 20 趟过江、每桥限流 8 趟下,最优分配为广州大桥 8 趟、海印桥 8 趟、猎德大桥 4 趟,总时间 464.8 min。
  2. 不限流的理论下限是 462.9 min,限流多花 1.9 min(0.4%);这就是排队的价格。
  3. 全走单一桥要 512—683 min,比混合分配差 47 min 以上,且直接违反限流。
  4. 限流在 \(N<8\) 时明显抬价,$N\ge$8 后归零;桥面风速折减每加 10%,总时间约增 2.2%。
  5. 隧道应显式建 \(x_{t4}=0\) 而不是删变量,既保留解释性,也方便把参数扫描到禁行通道上做对比。

参考文献

[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.


复现方式:python batch.py;数据与结果见同目录 .csv / .json,图见 figs/

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