案例 051 雨天加价,接还是不接

案例 051 雨天加价,接还是不接

摘要:雨天平台把单价抬上去,同时把车速压下来、把超时与事故概率抬上去,补贴到底是补偿还是诱饵,不能只看账面单价。本文用一场 200 min 的雨夜班次、18 张派单,把降雨强度 \(\theta\) 同时写进耗时、超时概率与事故概率,建立 0-1 接单模型,并用情景法把 CVaR 写成线性约束,与期望收益组成双口径目标。照常接单期望净收益 68.35 元,但 90% CVaR 只有 -12.92 元;只接高价单期望 52.98 元、CVaR -14.13 元;停摆为 0。期望口径下该接,风险调整口径下要补贴到 4.62 元/单才该接,而平台当天只给 3.0 元——差 1.62 元,这就是骑手在雨里犹豫的全部理由。

关键词:雨天补贴;CVaR;风险调整收益;0-1 背包;临界补贴;外卖派单


1 问题提出

1.1 问题是什么

雨夜 18:30—21:50,18 张派单在手机里排队,平台每单加 3.0 元雨天补贴。代价写在另一面:车速从 24 km/h 掉到 16.3 km/h,单均耗时被拉到 29.5 min,最远一张要 45 min;超时概率 0.103 至 0.154,事故概率按里程与降雨强度放大,单均事故风险成本 0.49 至 2.22 元。表 1 是这 18 张单的完整档案。

表 1 18 张雨天派单的距离、耗时、风险与单均期望净贡献(金额单位:元)

订单 距离 km 耗时 min 配送费 超时概率 事故概率 事故风险 单均期望 单分钟
R01 1.4 13.0 5.20 0.103 0.0019 0.49 7.46 0.574
R02 1.8 18.3 5.80 0.103 0.0024 0.62 7.92 0.433
R03 2.2 18.6 5.40 0.103 0.0029 0.76 7.38 0.398
R04 2.5 24.3 6.80 0.103 0.0033 0.87 8.68 0.358
R05 2.8 20.0 5.60 0.103 0.0037 0.97 7.37 0.369
R06 3.0 23.1 5.10 0.103 0.0040 1.04 6.80 0.294
R07 3.2 28.3 6.67 0.106 0.0043 1.11 8.30 0.294
R08 3.5 27.0 6.17 0.111 0.0047 1.21 7.69 0.285
R09 3.8 28.7 7.08 0.115 0.0051 1.32 8.48 0.296
R10 4.0 32.8 8.35 0.118 0.0053 1.39 9.67 0.295
R11 4.2 29.0 7.32 0.121 0.0056 1.46 8.56 0.296
R12 4.5 31.7 7.33 0.126 0.0060 1.56 8.45 0.267
R13 4.8 36.4 9.03 0.130 0.0064 1.66 10.04 0.276
R14 5.0 34.5 8.90 0.133 0.0067 1.73 9.84 0.285
R15 5.3 37.2 8.51 0.138 0.0071 1.84 9.32 0.250
R16 5.6 43.0 10.41 0.142 0.0075 1.94 11.11 0.259
R17 6.0 41.2 9.95 0.148 0.0080 2.08 10.50 0.255
R18 6.4 44.5 11.09 0.154 0.0085 2.22 11.49 0.258

单均期望净贡献从 6.8 元到 11.5 元,耗时却只差 32 min,跑一趟的含金量与风险完全不是一回事。全部接完要 531 min,班次只有 200 min,只能挑约 7 张——接哪几张,本身就是一道题。

1.2 为什么要优化

第一,补贴是单价、风险是尾部,两个东西不在一个量纲上。多接一单多拿 3.0 元是确定的,多接一单多担一次事故是概率的,只有把后者折成 CVaR 才能和前者同框比较。

第二,三策略不是拍脑袋选的。照常接单把时间用满、只接高价单把风险筛掉、停摆把收益归零,三者各有各的理,必须放到同一张表里比。

第三,临界补贴是唯一能拿去谈判的数。平台问“加到多少你们才愿意跑”,答案不该是情绪,而是一条曲线与零线的交点。

1.3 Gurobi 如何求解

18 个 0-1 接单变量、1 条时间约束,期望口径下就是标准 0-1 背包,毫秒级出解。风险口径要难一点:把 \(S=200\) 个情景的损失写进约束,引入 \(\eta\) 与 \(u_{s}\) 共 201 个连续变量,用 Rockafellar-Uryasev 形式把 CVaR 线性化,仍是 MILP。参数扫描共 14+ 次求解,每次限时 4 s,全部墙钟 11 s。

2 数学模型

2.1 符号说明

\(w_{i}\) 为不含补贴的配送费,\(s\) 为雨天补贴,\(d_{i}\) 为距离,\(t_{i}\) 为雨天耗时,\(q_{i}\) 为超时概率,\(f\) 为超时扣款,\(a_{i}\) 为事故概率,\(L\) 为事故自付额,\(T\) 为班次时长,\(\theta\) 为降雨强度,\(\beta_{r}\) 为 CVaR 置信水平,\(\lambda\) 为期望与风险的权重。决策变量:\(x_{i}\in\{0,1\}\) 是否接单。

2.2 目标函数

\[\max\ \mathbb{E}[\pi]=\sum_{i\in\mathcal{I}}\left[(w_{i}+s)-q_{i}f-a_{i}L\right]x_{i}\tag{1} \]

式 (1) 把每张单拆成四项:配送费、补贴、超时扣款的期望、事故成本的期望。第四项是本案例的重心——它不进目标,账面上每单都是赚的;它一进目标,长距离单立刻掉队。

2.3 约束条件

\[\sum_{i\in\mathcal{I}}t_{i}(\theta)\,x_{i}\le T\tag{2} \]

\[x_{i}=0,\qquad i\in\mathcal{I}_{\mathrm{lo}}=\{i:w_{i}<\bar{w}\}\tag{3} \]

式 (2) 是班次时间约束,耗时随降雨强度变,所以雨天不是“少跑一点”,而是“每一单都变长”。式 (3) 定义“只接高价单”这一策略:把配送费低于 \(\bar{w}=7.5\) 元的单直接禁掉,模型其余部分不变——三种策略共用一套约束,只换可行域,比较才干净。

\[t_{i}(\theta)=\omega_{i}+\frac{60\times1.55\,d_{i}}{v(\theta)},\qquad v(\theta)=v_{0}-k_{v}\theta\tag{4} \]

\[q_{i}(\theta)=\min\left\{q_{\max},\,q_{0}+\alpha\theta+\beta(d_{i}-3)^{+}\right\},\qquad a_{i}(\theta)=a_{0}(1+\gamma\theta)\frac{d_{i}}{3.5}\tag{5} \]

式 (4) 的速度线性下降是雨天最直接的物理事实,1.55 倍系数含空驶回程;式 (5) 让超时与事故都随 \(\theta\) 单调上升,事故还额外随距离放大,与雨天远单最容易出事的一线经验一致。

\[\max\ \eta-\frac{1}{(1-\beta_{r})S}\sum_{s=1}^{S}u_{s}\tag{6} \]

\[u_{s}\ge\eta-\sum_{i\in\mathcal{I}}\left[(w_{i}+s)-\xi^{Q}_{i,s}f-\xi^{A}_{i,s}L\right]x_{i},\qquad u_{s}\ge 0\tag{7} \]

式 (6)(7) 是 CVaR 的线性化:\(\xi^{Q}_{i,s}\)、\(\xi^{A}_{i,s}\) 是情景 \(s\) 下超时与事故是否发生的 0-1 实现,\(u_{s}\) 是情景 \(s\) 相对 VaR 的亏空。\(\eta\) 就是 VaR,求解器自己定。这样“最坏 10% 的平均”变成一个线性目标,可以直接和式 (1) 拼在一起:

\[\max\ \lambda\,\mathbb{E}[\pi]+(1-\lambda)\,\mathrm{CVaR}_{\beta_{r}}[\pi]\tag{8} \]

\(\lambda=1\) 是纯期望,\(\lambda=0\) 是纯 CVaR,中间是两者的折中。画前沿时用它的等价约束形式:在 \(\mathrm{CVaR}_{\beta_{r}}\ge\tau\) 下最大化式 (1),扫 \(\tau\) 就扫出一条前沿——离散问题的 \(\lambda\) 加权只会塌成几个点,约束形式才扫得动。

\[s^{*}=\min\left\{s:\ \mathrm{CVaR}_{\beta_{r}}(s)\ge 0\right\},\qquad \frac{\partial\,\mathrm{CVaR}}{\partial s}=\sum_{i\in\mathcal{I}}x_{i}\tag{9} \]

式 (9) 是临界补贴:CVaR 对 \(s\) 的偏导恰好等于接单数,所以补贴每加 1 元,CVaR 就抬 \(\sum_i x_{i}\) 元,曲线是一族斜率为接单数的折线,过零点即临界值。

2.4 规模与性质

18 个 0-1 变量、1 条时间约束;风险口径再加 1 个自由变量与 200 个非负连续变量、200 条约束。可行域是 0-1 背包,本身极简单;复杂度全在目标上——期望目标下所有单的系数都是正的,贪心按性价比排序就近似最优;CVaR 目标下系数变成情景相关的,同一张单在不同情景里贡献不同,排序失效,必须交给分支定界。

3 Gurobi 求解实现

3.1 建模要点

核心五行与式 (1)(2)(6)(7) 一一对应:

eexp = gp.quicksum((rev[i] - q[i] * FQ - a[i] * L) * x[i] for i in range(N))
m.addConstr(gp.quicksum(t[i] * x[i] for i in range(N)) <= T)
eta = m.addVar(lb=-1e4, ub=1e4)
u = m.addVars(NS, lb=0)
for k in range(NS):
    m.addConstr(u[k] - eta + gp.quicksum((rev[i] - LS[k, i]) * x[i] for i in keep) >= 0)
m.setObjective(lam * eexp + (1 - lam) * (eta - quicksum(u) / ((1 - beta) * NS)), GRB.MAXIMIZE)

一个实现细节:\(\eta\) 必须给上下界。它无界时目标在 \(\lambda=1\) 的边界上会退化,预求解能过但数值上不干净;给 \(\pm10^4\) 后一次求解稳定在 0.1 s 内。另一处:三种策略不另建模型,只把不该接的单 \(x_{i}\) 上界设 0,预求解会把它们直接消掉,比较的是同一套约束下的三个可行域,不是三个不同的模型。

3.2 求解结果

表 2 三种策略在期望与 CVaR 两种口径下的班次收益(金额单位:元)

策略 接单数 期望收益 CVaR 90% 期望最低实现 风险折价
照常接单 8 68.35 -12.92 71.6 81.27
只接高价单 5 52.98 -14.13 56.9 67.11
停摆待命 0 0.00 0.00 0.0 0.00

期望口径下最优是 照常接单,CVaR 口径下最优是 停摆待命。照常接单期望 68.35 元、CVaR -12.92 元,两者相差 81.3 元——这段差额就是雨夜事故的“风险折价”,账面上看不见,出事时一次性兑现。只接高价单接 5 单,期望比照常少 15.37 元,CVaR 比照常低 1.21 元——用 15.37 元期望换 1.21 元尾部,这笔交换在图 8 的前沿上看得最清楚。

4 结果分析

图 1 18 张单的单均期望净贡献与事故风险成本(红色为高价单)

4.1 单均含金量 图 1 按单均期望净贡献降序排开,红色是 7 张高价单。最高的 11.5 元、最低的 6.8 元,差距接近两倍,而耗时只差 32 min。右轴事故风险成本与柱高并不总同向:远单柱高、风险也高,短单柱低、风险几乎贴地。含金量最高的那几张恰好是“高单价 + 中距离”,不是最远的那几张。

图 2 雨天单均耗时—期望净贡献散点(气泡为事故风险成本)

4.2 耗时—含金量分布 图 2 横轴雨天耗时、纵轴期望净贡献、气泡为事故风险。点沿右上斜带散开,高价单(方块)集中在右上,普通单(圆点)压在左下。气泡最大的是 6 km 以上的长单,它们的柱高靠距离堆出来,扣掉风险后并不占优。只看单价接单,会系统性挑中气泡最大的那几张。

图 3 照常接单、只接高价单与停摆三种策略的双口径收益

4.3 三策略双口径 图 3 是本文的核心对比。期望口径:照常 68.35 元、高价 52.98 元、停摆 0 元,接单完胜。CVaR 口径:照常 -12.92 元、高价 -14.13 元、停摆 0 元,排名变了。同一批数据、同一套约束,只换一个风险度量,两个口径指向不同策略——这正是“接还是不接”吵不出结果的原因。

图 4 照常接单与只接高价单按单分钟收益排序的累计净收益

4.4 累计过程 图 4 把两条路线摊在时钟上。两条曲线前 60 min 几乎重合,因为最优质的那几张单双方都会接;分叉出现在中段,照常接单继续收中价短单,只接高价单则宁可空着等下一张。到 200 min 两条线分别停在 68.35 与 52.98 元。差距不在“接得快”,在“愿不愿意为空档买单”。

图 5 雨天补贴灵敏度:两种口径的最优净收益与接单数

4.5 主灵敏度:补贴额 图 5 让 \(s\) 从 0 扫到 9 元/单。期望口径近似直线,斜率 8.00 元/元,因为补贴对每张入选单都是确定的 3.0 元级别加成;CVaR 口径斜率略缓(6.47 元/元)但起点为负,随补贴上升逐级抬升,在 4.62 元处穿过零线。这条零线就是临界补贴:低于它,风险调整后停摆更划算;高于它,接单才真正“值”。 接单数呈阶梯式跳变(右轴,从 3 单直跳 8 单),补贴一过某条线,模型才敢把时间用满——时间是真约束。

图 6 补贴额 × 降雨强度的 CVaR 净收益热图

4.6 二维:补贴 × 降雨强度 图 6 是 5 行 4 列热图。沿补贴方向(行内向右)每一格都抬升;沿降雨方向(列内向下)从 -10.2 元掉到 -28.4 元。一边补一边漏:在 0.7 的雨里把补贴从 0 加到 6 元只补回 34.2 元,而把雨从 0.3 加到 1.0 就漏掉 61.3 元——补贴永远追不上雨势。 本案星标(3.0 元 / 0.70)的 CVaR 实际是 -12.9 元,落在零线之下——这解释了为什么雨天骑手群里总有人说“这价不跑”。

图 7 事故自付额灵敏度:两种口径净收益与接单数

4.7 第三维:事故自付额 图 7 换一个维度,让事故自付额 \(L\) 从 60 元扫到 420 元(相当于有无保险、保险赔付比例不同的情形)。CVaR 口径从 53.6 元一路掉到 -27.0 元,期望口径只从 74.9 元缓降。保险越好,两个口径越接近;自付越高,两个口径劈得越开——这把“买不买保险”和“接不接单”变成了同一个问题的两个面。接单数从 8 张掉到 2 张,风险越高,模型自己会往回收。

图 8 期望收益—CVaR 前沿与风险不可接受区

4.8 风险—收益平面 图 8 把 14 个候选解(不同权重、不同策略下解出的接单方案)在样本外重算后投到“CVaR—期望”平面上,气泡大小是接单数,灰区是 CVaR 小于零的风险不可接受区。所有候选解都落在灰区里:在 3.0 元补贴下,无论怎么挑单,最坏 10% 的平均收益都是负的——这就是“该停摆”最直接的证据,也是临界补贴 4.62 元的由来。非支配解只有 1 个,说明在这个参数下“多接单”与“压尾部”之间几乎没有可交换的空间。

图 9 4000 个实现情景下四种方案的净收益累计分布

4.9 实现情景分布 图 9 用 4000 组伯努利实现重算四种方案。5% 分位:照常 71.6 元、CVaR 最优 70.3 元、停摆 0 元;均值 68.2 元对 67.1 元。照常接单的曲线右端最远、左尾也最长,一条曲线横跨近 300 元——这就是“平均值不错、但一年总有几次白干”的分布形态。CVaR 最优解把左尾收窄,代价是右端也削掉一截。

图 10 照常接单入选订单的收入、补贴与两项风险成本分解

4.10 逐单结构分解 图 10 把照常接单的 8 张单拆成配送费、补贴、超时扣款与事故成本四段。补贴合计 24.0 元,超时期望吃掉 2.2 元,事故期望吃掉 8.5 元,事故一项就占配送费的 15.4%。补贴看着是加价,其实先被风险吃掉了大半——这才是“雨天加价接还是不接”的真实账本。

5 结论

  1. 期望口径下应当接单:照常接单 68.35 元 > 只接高价单 52.98 元 > 停摆 0 元,接单比停摆多 68.35 元。只看平均值,雨天出工是对的。

  2. 风险调整口径下答案翻转:CVaR 90% 上照常接单只有 -12.92 元、只接高价单 -14.13 元,最优策略是 停摆待命。期望与 CVaR 之间 81.3 元的差额,就是雨夜事故的风险折价。

  3. 临界补贴为 4.62 元/单,是平台当天实际 3.0 元的 1.5 倍,缺口 1.62 元。这个数是可谈判的:补贴补到这个位置,风险调整后的接单才不亏。

  4. 降雨强度比补贴更敏感:\(\theta\) 从 0.3 升到 1.0 净收益掉 61.3 元,而补贴从 0 加到 6 元只抬 34.2 元。同样的钱,用来补雨势不如用来补时长或补安全装备。

  5. 事故自付额是隐藏开关:\(L\) 从 60 元到 420 元,CVaR 掉 80.6 元、接单数从 8 张降到 2 张。一份几十元的意外险,抵得上每单加价一两元——风险成本降下去,临界补贴自然跟着降。

参考文献

[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)    收藏  举报