案例088 汤洒了赔 15
案例088 汤洒了赔 15
摘要:一次洒漏赔 15 元,加固包装 1.5 元/单可把洒漏率从 18% 降到 5%,专箱 380 元可用 2 年可降到 2%。以 \(z_1,z_2\) 与接单变量 \(x_i\) 建 16 变量 MILP,目标为毛利减赔偿期望、加固费与专箱摊销,组合项 \(z_1z_2\) 与 \(z\cdot\sum x_i\) 全部线性化。求得日 10 单时最优为专箱、不加固,日净收益 52.48 元、年 19155 元,比加固多 6928 元、比无措施多 8570 元、比"全部不接"多 19155 元。核心是固定成本折单均:专箱 0.52 元/天在日 0.267 单(97 单/年、约 8 单/月)处与加固持平,之上的量全归专箱;加固对无措施是严格支配(省 0.45 元/单),故"不投入"段被压成一点,只在洒漏率低于 15% 时重新张开。赔偿额涨到 30 元,门限降到 0.217 单/天。
关键词:固定成本摊销;盈亏平衡单量;措施组合;0-1 线性化;洒漏风险定价
1 问题提出
1.1 问题是什么
一单汤,洒了赔 15 元。骑手有两条路:花 1.5 元加一层防洒包装(洒漏率 18% 降到 5%),或者一次性花 380 元买一个专用汤箱(洒漏率降到 2%,可用 2 年)。也可以什么都不做,承担 18% 的洒漏;还可以干脆不接汤品单。
数字先摆出来。一个骑手一天能接到 10 单汤品(数据表按距离 1.2—7.4 km 排列,单均净收益 4.2—8.0 元,均值 5.6 元),一天的账是:不接 0 元;无措施 56.0 − 27.0(赔偿期望)=29.0 元;加固 56.0 − 7.5 − 15.0(加固费)=33.5 元;专箱 56.0 − 3.0 − 0.52(日摊)=52.48 元。一年放大到 6928 元的差距(专箱比加固多赚的),这不是"要不要讲究"的问题。
难的地方不在算账,在两种成本的性质不同。加固费 1.5 元是变动成本:接一单付一单,不接就不付。专箱 380 元是固定成本:一次付清、摊 730 天,日均 0.52 元,接的单越多越便宜。固定成本只有折成"单均"才和变动成本可比——这就是本案的全部内容。
1.2 为什么要优化
三条理由。其一,两种成本不可直接相加:1.5 元/单是变动、380 元是固定,不折成同一口径就没法比,折错方向(把专箱按"每次用都花 380 元"算)会把结论从"买"翻成"不买"。其二,"不接"是隐性成本最高的一项:表面 0 支出,实际扔掉 20440 元/年毛利。其三,洒漏率与赔偿额共同决定措施:18% 的基准率在 15 元赔偿下让加固只赚 0.45 元/单,赔偿涨到 30 元结论就变。
1.3 Gurobi 如何求解
建模(16 变量、13 约束),预处理用候选集规模 \(n=10\) 收紧三个乘积变量的界;分支定界在根节点即得整数解(0-1 变量仅 4 个);对偶价从 LP 松弛读措施的单均影子价;参数扫描在 \(N\)、\(f\)、\(p_0\) 三维网格上做,切换点用年成本曲线的解析解与数值扫描双保险。
2 数学模型
2.1 符号说明
符号:汤品日单量 \(N\)(基准 10 单/天,行业常见 3 单/天);第 \(i\) 单净收益 \(\bar w_i\)(4.2—8.0 元,均值 5.6 元);一次洒漏赔偿 \(f=15\) 元;三档洒漏率 \(p_0=0.18,p_1=0.05,p_2=0.02\);加固费 \(c_1=1.5\) 元/单;专箱价格 \(B=380\) 元、寿命 \(T=2\) 年、年摊 \(B/T=190\) 元;0-1 变量 \(z_1,z_2\)(加固、专箱)与 \(x_i\)(接第 \(i\) 单)。
2.2 目标函数与约束条件
设汤品日单量为 \(N\),单均净收益 \(\bar w=5.6\) 元;一次洒漏赔 \(f=15\) 元;加固 \(c_1=1.5\) 元/单;专箱 \(B=380\) 元、寿命 \(T=2\) 年、年摊 \(B/T=190\) 元。三档洒漏率 \(p_0=0.18\)、\(p_1=0.05\)、\(p_2=0.02\)。
措施组合与洒漏率。 令 \(z_1,z_2\in\{0,1\}\) 分别为加固、专箱,组合效应写成双线性式:
式 (1) 的三个系数都有含义:单独加固省 \(p_0-p_1=0.13\)、单独专箱省 \(p_0-p_2=0.16\),两者同开时回到 \(p_2\)(专箱已是 2%,加固叠上去不再降),这就是 \(+0.13z_1z_2\) 这一项的存在理由。
年成本曲线。 一年 \(365N\) 单,三种措施的年成本是三条射线,只有专箱带截距:
代入数值:\(C_{\mathrm{no}}=985.5N\)、\(C_{\mathrm{add}}=821.2N\)、\(C_{\mathrm{box}}=109.5N+190\)。只有第三条有截距,所以只有涉及专箱的比较才有非零的盈亏平衡量——这是本案与"两个变动成本比大小"最根本的区别。
目标。 接单 \(x_i\in\{0,1\}\),一天 10 个候选单:
\(\sum x_i=0\) 就是"全部不接",此时 \(Z=0\)——这个选项一直在可行域里,不需要额外约束,模型自然会拿它和其他三项比。
线性化。 式 (3) 有两处乘积。\(z_1z_2\) 用 \(w\le z_1\)、\(w\le z_2\)、\(w\ge z_1+z_2-1\) 处理;\(z\cdot S\)(\(S=\sum x_i\))用
\(n=10\) 取候选集规模,不用 \(10^6\)。展开后目标对 \(g_1,g_2\) 的系数为负、对 \(g_w\) 为正,最小化时三个乘积变量自动落到端点,\(g\equiv Sz\) 精确成立。
2.3 规模与性质
16 个变量(10 个 \(x_i\) + 3 个措施 0-1 + 3 个乘积辅助)、13 条约束,纯 MILP、无连续决策。措施只有 4 种组合,故最优解可由"逐单阈值 + 四组合枚举"闭式复核,与 Gurobi 相差 0(数值零)。
3 Gurobi 求解实现
3.1 建模要点
模型 10 个 \(x_i\)、\(z_1,z_2,w\) 三个 0-1、\(g_1,g_2,g_w\) 三个连续辅助,共 16 个变量、13 条约束,单次求解 0.001 秒。
loss = F*P0*S + (c1 - F*(P0-P1))*g1 - F*(P0-P2)*g2 + F*(P0-P1)*gw
m.setObjective(-(rev - loss - fix*z2), GRB.MINIMIZE)
for g, z in ((g1, z1), (g2, z2), (gw, ww)):
m.addConstr(g <= n*z); m.addConstr(g <= S); m.addConstr(g >= S - n*(1-z))
三个系数一次写清:\(c_1-f(p_0-p_1)=-0.45\)(加固的净单价)、\(-f(p_0-p_2)=-2.40\)(专箱的变动节省)、\(+f(p_0-p_1)=1.95\)(组合项回收)。第一个系数是负的、第二个更负:专箱每单比无措施省 2.40 元,加固只省 0.45 元,这就是胜负手。
校验。 措施只有四种组合,每种组合下的最优接单策略是解析的——接当且仅当 \(\bar w_i>f p(z)+c_1z_1\)。四种组合各算一遍取最大得 52.48 元,与 Gurobi 的 52.48 元相差 0(数值零)(数值零)。
表 1 四种措施组合的日成本与年净收益(日 10 单)
| 措施 | z1,z2 | 洒漏率 | 单均成本 / 元 | 年措施成本 / 元 | 年净收益 / 元 |
|---|---|---|---|---|---|
| 全部不接 | — | — | 0 | 0 | 0 |
| 无措施 | 0,0 | 18% | 2.70 | 9855 | 10585 |
| 加固 | 1,0 | 5% | 2.25 | 8212 | 12227 |
| 专箱 | 0,1 | 2% | 0.35 | 1285 | 19155 |
| 加固+专箱 | 1,1 | 2% | 1.85 | 6760 | 13680 |
表 1 最后一行是"多此一举"的量化版:专箱已把洒漏率压到 2%,再加固一分钱也降不下来,1.5 元/单纯属白花,一年白扔 5475 元。
3.2 求解结果
Gurobi 在根节点即收敛:\(z_1=0,z_2=1\),10 单全接,日净收益 52.48 元、年 19155 元,与四组合枚举的 52.48 元完全一致。最优解的结构很干脆——买箱子、不加固、单照接,三项决策互不纠缠。
4 结果分析
4.1 结构:三档洒漏率与单均成本

图 1 三档措施的洒漏率(柱)与单均总成本(菱形,右轴,日 10 单口径)
图 1 把两条量纲不同的曲线放在一起:柱是洒漏率 18%/5%/2%,菱形是折算到单均的总成本 2.70/2.25/0.35 元。柱高与成本不同序——洒漏率不是目标,率乘 \(f\) 再加措施费才是。加固的柱只降到 5%,成本却几乎贴着无措施,差 0.45 元,正是"1.5 元买 1.95 元"的结果。

图 2 汤品日均单量—年措施成本的三条曲线(气泡大小反映年单量)
图 2 是结构图里最关键的一张:三条线都是直线,但只有专箱那条有截距 190 元。横轴左端(日 0.1 单)专箱贵得离谱,右端(日 30 单)几乎贴着横轴。两个交点就是后文的两个盈亏平衡量:79 单/年与 97 单/年。加固线与无措施线永不相交(斜率 2.25 对 2.70,后者处处在上),这是纯变动成本的必然结果。
4.2 三个盈亏平衡量与分段结论

图 3 四种方案的年净收益对比(柱=毛利与措施成本,菱形=净收益)
图 3 是结论图。日 10 单:不接 0 元、无措施 10585 元、加固 12227 元、专箱 19155 元。专箱比加固多 6928 元/年、比无措施多 8570 元/年。"全部不接"这一档的代价是 19155 元/年——它并没有省下 0.52 元/天的摊销,而是扔掉了 20440 元毛利。这就是"最省事的选项最贵"的算术版。
三个盈亏平衡量由式 (2) 解出,与图 2 的交点逐位一致:
表 2 三个盈亏平衡汤品单量
| 比较 | 单/天 | 单/年 | 单/月 | 判别 |
|---|---|---|---|---|
| 加固 vs 专箱 | 0.267 | 97 | 8 | 低于加固、高于专箱 |
| 无措施 vs 专箱 | 0.217 | 79 | 7 | 专箱固定成本摊平点 |
| 无措施 vs 加固 | 0 | 0 | 0 | 无内部交点,恒省 0.45 元/单 |
前两个是单量、第三个退化成一个点,原因写在式 (2):\(C_{\mathrm{no}}\) 与 \(C_{\mathrm{add}}\) 都过原点,斜率 2.70 对 2.25,平行即支配,加固从第 1 单起就赢。所以本案"最优措施随单量变化"只有两段:\(N<0.267\) 单/天(约 8 单/月)加固,\(N>0.267\) 专箱;"不投入"那一段被压成 \(N=0\) 一个点。
分段结论的完整形态要看的不是 \(N\) 一条轴,而是 \((N,p_0)\) 平面(图 7):不投入/加固/专箱三块由两条线划开——洒漏率门槛 \(p^{*}=c_1/f+p_1=15\%\)(与单量无关),单量门槛 \(N^{*}=0.267\)(与洒漏率无关)。本案 \(p_0=18\%>15\%\),站在门槛右侧,所以只看到后两段。行业常见量日均 3 单:专箱年净 5613 元 > 加固 3668 元 > 无措施 3175 元,仍选专箱——门槛只有 97 单/年(约 8 单/月),低到几乎是"只要长期做,就买"。
4.3 累计过程:380 元多久摊平

图 4 两年 730 天的累计措施成本(专箱在第 0 天一次性付 380 元)
图 4 把固定成本摊开的过程画出来:专箱那条线在第 0 天跳到 380 元,之后斜率 3.0 元/天;加固是斜率 22.5 元/天的直线。两线在第 19 天相交(0.6 个月),此后专箱永远在下。两年累计专箱 2570 元、加固 16425 元,差 13855 元——380 元的"重投入" 19 天就回本。右轴虚线是累计均摊,从 380 元/天降到 1.04 元/天。
4.4 灵敏度:赔偿额 15 元→30 元与洒漏率

图 5 赔偿额对最优年净收益(左轴)与加固/专箱分界单量(右轴)的影响
图 5 的右轴就是本案要的答案:赔偿额从 15 涨到 30 元,加固/专箱的分界单量从 0.267 掉到 0.217 单/天,门槛下移 23%。赔偿越贵,固定投入越该早花,最优措施整体上移一档。左轴两条:赔偿翻倍,日 10 单的年净收益从 19958 掉到 17038 元(−15%),日 3 单从 5854 掉到 4978 元(−15%)——小单量更脆,因为摊销占比高。

图 6 赔偿额 × 日均单量 的最优措施分区(星号为本案 10 单、15 元)
图 6 是二维分区:横轴单量(对数)、纵轴赔偿额,灰是无措施、橙是加固、绿是专箱。分界线是斜的——赔偿额涨,绿色向左扩;单量涨,绿色向下扩。星标 \((10,15)\) 落在绿区中央,说明本案结论对参数不敏感。

图 7 无措施洒漏率 × 日均单量 的三区图(虚线为 15% 加固门槛)
图 7 补上第三维:洒漏率。水平虚线 \(p_0=15\%\) 以上加固才值得(\(c_1/f+p_1\)),以下无措施更省;右侧全归专箱。三个区第一次同框:左下无措施、左上加固、右侧专箱。本案 18% 只比门槛高 3 个百分点,加固的净赚只有 0.45 元/单——薄,这解释了"加固好像没什么用"的直觉:一旦洒漏率降到 15% 以下,加固立刻变成亏本买卖。
4.5 前沿、分布、分解与"不接"的代价

图 8 年单量—单均措施成本的下包络(阴影为 2% 洒漏的不可行区)
图 8 把纵轴换成单均成本,固定成本的形状才显出来:无措施 2.70、加固 2.25 是两条水平线,专箱是 \(190/N+0.30\) 的双曲线,单量越大越贴 0.30 元的下界。包络在 97 单/年处从加固切到专箱,之后一路下滑并无限逼近阴影上边界——那条缝就是 190 元/年的摊销。阴影是不可行区:任何措施都做不到低于 2% 洒漏,单均成本不可能低于 0.30 元。规模越大越贴极限,尾巴上唯一还能再降的手段是换更低的 \(p_2\),不是省钱。

图 9 每 30 单洒漏次数的分布(柱)与累计概率(线,右轴)
图 9 用 6000 次二项抽样:无措施平均 5.4 次/30 单、加固 1.5 次、专箱 0.6 次(比值 9:1)。但"一次都不洒"的概率差得更狠:专箱 55%、加固 22%、无措施 0.2%。期望值决策买的是均值,骑手真正怕的是"这个月别出事"——图 9 就是这个差别的可视化。

图 10 单均措施成本的分解:赔偿期望、加固费、专箱摊销
图 10 把单均成本拆成三块。无措施 2.70 元全是赔偿期望;加固 2.25 元=0.75 赔偿 + 1.5 加固费;专箱日 10 单只有 0.35 元、日 3 单涨到 0.47 元。同一只箱子,单量差 3 倍,摊销差 0.12 元/单——这就是固定成本的全部脾气:它不随单量变,只随单量被摊薄。
单均净收益 5.6 元、无措施的期望赔偿 2.70 元,前者是后者的 2.1 倍。只要这个比值大于 1,接单就一定优于不接——洒漏是概率事件,赔的是 15 元、赚的是 5.6 元,接 3 单的毛利就够赔 1 次。所以"怕洒就不接汤品"是把 2.70 元的概率风险当成 15 元的确定损失来定价。要让"不接"翻身,赔偿额得涨到 \(f^{*}=(\bar w-c_1)/p_1=82\) 元,是现在的 5.5 倍。真正该优化的不是"接不接",而是"用什么接":19155 元/年已是这条曲线的上界,再往下只有两条路——把 \(p_2\) 压得更低,或把 \(N\) 做大。
5 结论
(1)固定成本要折成单均才能比:专箱 380 元摊 730 天=0.52 元/天,日 10 单时折 0.052 元/单,日 3 单时折 0.17 元/单。同一只箱子,单量一变,结论就变;把 380 元按"每次用都花"计,会把答案从"买"翻成"不买"。
(2)三个盈亏平衡量:加固↔专箱 0.267 单/天(97 单/年、8 单/月);无措施↔专箱 0.217 单/天(79 单/年);无措施↔加固无内部交点,加固从第 1 单起就省 0.45 元/单,等价临界赔偿额 11.54 元。
(3)分段结论:\(N<0.267\) 加固、\(N>0.267\) 专箱;"不投入"段只在 \(p_0<15\%\) 时张开(图 7)。本案日 10 单选专箱、不加固,年净收益 19155 元;行业常见日 3 单同样选专箱,年净 5613 元。
(4)"全部不接"是最贵的选项:它省下 0.52 元/天,却扔掉 20440 元/年毛利;单均收益 5.6 元是无措施期望赔偿 2.70 元的 2.1 倍,"怕赔 15 元就不接 5.6 元的单"在算术上不成立,除非赔偿额涨到 82 元。
(5)赔偿额上移措施:\(f\) 从 15 涨到 30 元,加固/专箱门限从 0.267 降到 0.217 单/天(图 5),降幅 23%。赔偿越贵越该提前花固定投入;洒漏率越低(图 7)越该退回变动成本的加固——两个方向相反,门限就是它们的交点。
参考文献
[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_088.py;数据与结果见同目录 .csv / .json,图见 figs/

浙公网安备 33010602011771号