案例 154 上牌与年检:38.75 元买断每个月 84 元的扣车风险

案例 154 上牌与年检:38.75 元买断每个月 84 元的扣车风险

摘要:电动自行车必须上牌,无牌上路被查即扣车 3 天。上牌一次性花 38.75 元(工本费 30 元 + 半天误工 8.75 元),不上牌每月有 8% 的概率损失 1050 元,月度期望 84 元。模型只有 1 个 0-1 变量、1 条法规约束,求解是常数时间,重点全在口径:把一次性成本与月度风险直接相比,临界概率是 3.69%/月,低于它账面上"不上更省"——这正是很多人拖着不办的理由。补上状态递推(扣车即补牌、风险终结)后,12 个月等待的期望支出是 688.5 元、为 17.8 倍,而且临界概率在多期口径下不复存在:只要 \(p>0\),立即上牌恒优。最后给出概率 3%/8%/15% 与耗时 0.5/1/2 天的灵敏度分区,并拆开"3 天停业"与 1050 元损失之间的重复计算陷阱。

关键词:上牌合规;0-1 规划;状态递推;期望成本;临界概率

1 问题提出

1.1 问题是什么

广州对电动自行车实行登记上牌管理。上牌要跑一趟车管所:工本费 30 元,加上验车、排队、往返,半个工作日就没了。不上牌也能跑,但被查就是扣车,取车要等 3 天,这 3 天不能接单。

项目 数值 说明
上牌工本费 30 元 一次性
上牌耗时 \(\tau\) 0.5 天 可排在上午低谷
低谷时间影子价格 \(\eta\) 17.5 元/天 这半天本来只跑 2—3 单
上牌总成本 \(C\) 38.75 元 一次性,终身有效
月扣车概率 \(p\) 8% 片区执法强度折算
单次扣车损失 \(L\) 1050 元 3 天收入 1038.46 元 + 拖车 11.54 元
月度期望损失 84 元 \(p\times L\),每月重复
月收入目标 9000 元 日均 346.15 元(26 天)

单看这张表,结论像是显然的:38.75 元换掉每月 84 元的风险,值。但两个数直接相减是错的——一个是只付一次的钱,一个是每个月都在发生的期望。84 元不是"一共 84 元",而是"这个月 84 元、下个月还有 84 元";38.75 元也不会在第二个月再收一遍。真正要比的是累计值,而累计怎么算,取决于扣车之后会发生什么。

1.2 为什么要优化

  1. 口径错了结论就错。按单期比较,只要概率低于 3.69%/月,模型就说"别上牌",可这个结论只在一个月的时间尺度上成立,而骑手要跑几年。
  2. 扣车不是终点而是转折点。被扣之后必须补牌才能取车,补牌那一刻风险就终结了。所以"先不上、等被扣再说"的期望成本不是线性的 \(12\times84\),而是一条饱和曲线——这正是写成状态递推的理由。
  3. 法规不在目标函数里。目标函数只算钱,法规把 \(z\) 钉死为 1。两件事分开写:约束决定可行域,目标函数只负责解释"这条约束不是负担"。

1.3 Gurobi 如何求解

模型只有 1 个 0-1 变量、1 条约束,分支定界在根节点结束。计算量全在反复解:基准与时点 6 次、口径校准 3 次、灵敏度 9 点、二维网格 20 点、扫描 20 点,共 36 次。每个点重新建模、不套解析式——改参数就是改模型,避免手推公式与代码走岔。

2 数学模型

2.1 符号说明

符号 含义 取值
\(z\) 是否上牌,1 上牌 0 或 1
\(C\) 上牌一次性总成本 38.75 元
\(\tau,\ \eta\) 上牌耗时、低谷时间影子价格 0.5 天、17.5 元/天
\(p\) 月扣车概率 8%
\(L\) 单次扣车总损失 1050 元
\(N\) 考察月数 12
\(q_{t}\) 第 \(t\) 月月初仍未上牌的概率 \([0,1]\)
\(y_{t}\) 第 \(t\) 月主动上牌的概率份额 \([0,1]\)

2.2 目标函数

单期口径先把题面的账摆平:上牌付 \(C\),不上付月度期望 \(pL\)。

\[\min_{z\in\{0,1\}}\ z\left(30+17.5\times 0.5\right)+\left(1-z\right)\times 0.08\times 1050 \tag{1} \]

其中 \(C=30+17.5\times 0.5=38.75\) 元。式 (1) 两项量纲不同(一次性对每月),只在一个月的时间窗内自洽——第 4 节会反复用到这一点。

2.3 约束条件

法规约束把可行域压成一个点:

\[z=1 \tag{2} \]

多期口径需要状态递推。设 \(q_{t}\) 为第 \(t\) 月月初仍未上牌的概率,\(y_{t}\) 为当月主动上牌的概率份额,则

\[q_{1}=1-y_{1},\qquad q_{t+1}=\left(1-p\right)q_{t}-y_{t+1},\qquad q_{t}\ge 0 \tag{3} \]

第二项 \((1-p)q_{t}\) 就是"这个月没被扣、风险继续"的那部分人;被扣的 \(p q_{t}\) 当月即补牌,退出状态。\(N\) 月内的期望支出为

\[W\left(N\right)=\sum_{t=1}^{N}p\left(1-p\right)^{t-1}\left(L+C\right) \tag{4} \]

等比求和得闭式,并令其等于 \(C\) 求临界概率:

\[W\left(N\right)=\left(L+C\right)\left[1-\left(1-p\right)^{N}\right] \tag{5} \]

\[p^{*}=\frac{C}{L} \tag{6} \]

式 (6) 只在单期口径成立。代入式 (5) 会发现 \(W(N)-C=L[1-(1-p)^{N}]\ge 0\) 对任何 \(p>0\) 恒成立,多期口径没有临界概率。

2.4 规模与性质

单期模型 1 变量 1 约束;时点模型 \(N+1\) 个 0-1 变量、1 条指派约束;递推本身是 \(O(N)\) 的代数运算。目标关于 \(z\) 线性、约束是等式,最优解必在端点;式 (5) 关于 \(N\) 单调递增且上凸(饱和到 \(L+C\)),关于 \(p\) 单调递增。

3 Gurobi 求解实现

3.1 建模要点

z = m.addVar(vtype=GRB.BINARY, name="z")
m.addConstr(z == 1, name="law")          # 法规先钉死可行域
m.setObjective(z * CREG + (1 - z) * P * L, GRB.MINIMIZE)

上牌时点用另一支 MIP:\(y_{k}\) 表示"第 \(k\) 月才上牌",系数由式 (4) 逐月递推算出,再让 Gurobi 在 \(N+1\) 个候选月里选一个。

y = m.addVars(N + 2, vtype=GRB.BINARY)
m.addConstr(gp.quicksum(y[k] for k in range(1, N + 2)) == 1)   # 只能上一次
m.setObjective(gp.quicksum(E[k] * y[k] for k in range(1, N + 2)), GRB.MINIMIZE)

一个实现细节:\(E(k)\) 不用闭式,用循环累加 \(p(1-p)^{t-1}(L+C)\) 再加 \(C\)。这样"改概率就是改模型",且递推与闭式在基准点相差 0.000 元,互校通过。

3.2 求解结果

模型 设置 \(z\) 或 \(k\) 目标值 / 元
基准(法规) \(z=1\) 1 38.75
只算钱 无法规约束 1 38.75
强制不上 \(z=0\) 0 84
上牌时点 MIP \(N=12\) \(k=1\) 38.75
时点 MIP(锁 \(k\ge 2\)) 不许首月上牌 \(k=2\) 122.7

时点 MIP 选 \(k=1\):第一个月就办。锁定 \(k\ge 2\) 后最优变成 \(k=2\),代价 122.7 元——晚一个月就贵了 84.0 元,正好是一个月的期望损失,是上牌费的 2.2 倍。

4 结果分析

4.1 一次性成本与月度风险不在同一个量纲上

图 1 上牌成本与扣车损失的棒棒糖对照

图 1 把七个数字排在一起:上牌 38.75 元(工本费 30 + 误工 8.75);单次扣车 1050 元(3 天收入 1038.46 + 拖车 11.54);月期望 84 元。单次扣车是上牌成本的 27.1 倍。**唯一不能直接比的就是 38.75 与 84**:前者只发生一次,后者按月重复。 ### 4.2 概率越高,等待越像在赌

图 2 月扣车概率与 12 个月期望总支出(气泡为 12 月内被扣概率)

图 2 横轴 1%—20%,纵轴是等待策略 12 个月的期望支出,而上牌那条水平线一直停在 38.75 元。概率 3% 时等待是 333 元、8% 时 688 元、20% 时 1014 元。气泡是被扣概率:8% 对应 63.2%——三分之二的人在一年内会被扣一次。曲线在低概率端几乎是平的,这正是"小概率无所谓"的错觉来源。 ### 4.3 四个方案:等待的代价是十七倍

图 3 四种策略的 12 个月期望支出对比

永不上牌 1008 元是违规上界(风险不终结);等待 688.5 元(窗口内被扣才补);期末对齐补牌 702.7 元;立即上牌 38.75 元。差额 664 元,18.1 倍。第三个柱子比第二个高 14.2 元,那是"一年都没被扣、最终仍要办"的 36.8% 人群的补牌费,只有做终点对齐才计入。 ### 4.4 时序:累计曲线是凹的,这恰好证明风险会终结

图 4 12 个月累计期望支出:立即上牌、等待(风险终结)、永不上牌

图 4 是关键的一张。等待那条线不是直线:第 1 月涨 84 元,第 12 月只涨 34.8 元,因为 $q_{t}$ 按 $(1-p)^{t-1}$ 衰减。永不上牌那条虚线是直的,12 个月 1008 元。两条线的差 320 元,就是"扣车后补牌终结风险"这件事的价值——忽略它会把等待成本高估 46.4%。第 6 个月等待已累计 429 元,是上牌成本的 11.1 倍;摊薄到每月只要 3.23 元,**0.46 个月就回本**。 ### 4.5 灵敏度:3% 与 15% 的分区,以及耗时的影响

图 5 扣车概率与上牌耗时的单期净收益(阴影为「不上」区)

图 5 三条线对应耗时 0.5/1/2 天,与零线的交点分别是 3.69%、4.52%、6.19%——耗时翻两番只把临界概率从 3.69% 抬到 6.19%,因为 30 元工本费占了大头。阴影区(概率低于 3.69%)里单期模型翻成"不上",这就是"概率低到 3% 以下才开始显得不划算"的来源。但那个区里法规约束 $z=1$ 不动;把 12 期写成式 (5),$p=3\%$ 时差额仍有 321 元,也翻不过来。

图 6 扣车概率与单次损失的决策分区(含耗时 2 天的分界线)

图 6 把概率与损失两个维度铺开。蓝区是单期口径的"不上"区,分界线是双曲线 $L=38.75/p$;虚线是耗时 2 天的分界($L=65.00/p$),把边界往右推了一点。星标是本案(8%、1050 元),落在红区,与 Gurobi 的解一致。但真正要读的是这句话:**12 期口径下整张图都是上牌,包括蓝区**。 ### 4.6 时间尺度、前沿与分布

图 7 时间尺度对等待成本的影响(右轴为上牌成本的月度摊薄)

图 7 横轴换成月数,三条曲线对应 3%/8%/15%。3% 那条 24 个月才涨到 565 元,15% 那条半年就到 678 元。右轴是上牌成本的月度摊薄 $C/N$,12 个月摊到 3.23 元、24 个月 1.61 元,一条反比曲线。三条等待曲线最终都饱和在 $L+C=1088.75$ 元,即"迟早被扣一次并补牌"的确定成本——时间越长,等待越接近这个上界,也越显荒谬。

图 8 上牌时点 k 的成本—停业天数前沿(阴影为成本不可达区)

图 8 每个点是一个上牌时点 $k$:横轴 12 个月期望支出,纵轴期望无法接单天数(上牌误工 0.5 天 + 3 天 $\times$ 期望扣车次数)。$k=1$ 在左下角(38.75 元、0.5 天),$k=13$ 在右上(703 元、2.40 天)。两个维度同向恶化,帕累托前沿退化成**一个点**:不存在"多花钱换安全"的取舍,最便宜的同时也最安全。

图 9 首次被扣月份的分布与累计概率

图 9 是几何分布:中位第 9 月,均值 $1/p=12.5$ 月。12 个月累计 63.2%,24 个月 86.5%。换句话说,不上牌的骑手平均跑不到 13 个月就会碰上第一次扣车,而一次的损失就是上牌成本的 27.1 倍。 ### 4.7 成本构成与重复计算

图 10 三种策略 12 个月期望支出的构成分解

图 10 把 1050 元拆开:3 天收入 1038.46 元 + 拖车保管 11.54 元。**这里有个容易犯的重复计算**:1050 元里已经含了 3 天停业,若再说"另外还有 3 天停业、折 1038 元收入",就把同一笔损失算了两次。正确做法二选一:要么用 1050 元(含收入 + 拖车 + 罚款),要么用 3 天收入 1038.46 元再加显性费用。本文全篇取前者,所以图 10 里"3 天收入损失"只是 1050 元的内部拆项,不是额外项。若再叠加 200 元罚款,$L=1250$,临界概率降到 3.10%/月。 ### 4.8 口径校准:把误工按日均可支配收入算 题面的时间影子价格 17.5 元/天(半天 8.75 元)是"上牌排在低谷"的口径。若保守按日均收入 346.15 元计,上牌成本变成 203.08 元:单期 $z=0$(203 > 84,账面不上),但 12 期等待是 867.0 元、为立即上牌的 4.3 倍,仍然上牌。**结论对时间价值不敏感,对时间尺度极其敏感**:换成日均口径,单期临界概率从 3.69% 升到 19.34%,12 期照样翻不过来。 ## 5 结论
  1. 上牌的真实成本 38.75 元(工本费 30 + 半天误工 8.75),一次性、终身有效;不上的月度期望损失 84 元,是成本的 2.17 倍。
  2. 单期临界概率 3.69%/月只在"只算一个月"时成立;把它当长期判据,会抹掉"三分之二骑手一年内必被扣"这个事实。
  3. 状态递推 \(q_{t+1}=(1-p)q_{t}-y_{t+1}\) 是关键增量:扣车即补牌、风险终结,等待成本是饱和曲线而非直线,12 个月 688.5 元、17.8 倍;忽略终结会把成本高估 46%。
  4. 多期口径下临界概率消失:\(W(N)-C=L[1-(1-p)^{N}]\ge 0\) 恒成立,只要 \(p>0\) 立即上牌就是最优,时点 MIP 也选 \(k=1\);晚一个月贵 84.0 元,是上牌费的 2.2 倍。
  5. 灵敏度上,概率 3%—15%、耗时 0.5—2 天,单期口径只在概率低于 6.19%(耗时 2 天)时才翻转;成本与风险两个维度同向,前沿退化成一个点——法规要求的那件事,恰好也是最省钱的那件事。

参考文献

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

[2] Puterman M L. Markov Decision Processes: Discrete Stochastic Dynamic Programming[M]. 2nd ed. Hoboken: John Wiley & Sons, 2014.

[3] Ross S M. Introduction to Probability Models[M]. 12th ed. London: Academic Press, 2019.

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

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

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