案例 079 差 2 单,加不加班
案例 079 差 2 单,加不加班
摘要:20:40,外卖小哥已经跑了 47 单,距平台的 50 单奖 120 元只差 3 单,手上还剩 40 min。夜间单量密度 2.8 单/h、均单收益 7.4 元、疲劳边际成本 2 元/h,确定性算法给出的答案是干脆别想那 120 元:0.67 h 只能出 1.876 单,\(2.8h\ge 3z\) 逼得 \(z\) 只能取 0,模型报出 11.54 元。但单量是随机的,把门槛换成 \(P(\mathrm{Pois}(2.8h)\ge 3)\) 后,40 min 的达标概率是 0.2898,加班 40 min 的期望收益 46.61 元,比"只挣加班工资"多 35.1 元。临界奖励额只要 2.46 元,现价 120 元有 48 倍安全边际;要让概率过半,得加班到 0.955 h,40 min 根本不够。10 万次蒙特卡洛给出 0.2887,与解析值差 -0.0011。
关键词:门槛奖励;泊松到达;期望值决策;临界奖励额;蒙特卡洛校验
1 问题提出
1.1 问题是什么
20:40,日累计 47 单。平台规则:当日满 50 单,一次性奖 120 元。小哥还剩 40 min 可以跑,超时就得回家。把这段时间的口径摆出来:
表 1 确定性解与概率口径的对照(金额单位:元)
| 口径 | \(z\) | 加班小时 | 期望单量 | 达标概率 | 期望收益 | 决策 |
|---|---|---|---|---|---|---|
| 确定性 MILP | 0 | 0.67 | 1.876 | 0 | 11.54 | 加班但不指望奖励 |
| 强制冲奖 MILP | 1 | — | 1.876 | 0 | — | 不可行(1.876 < 3) |
| 泊松期望 | — | 0.67 | 1.876 | 0.2898 | 46.61 | 加班并赌奖 |
| 场景 MILP | 1 | 0.67 | 1.876 | 0.2887 | 49.86 | 与解析一致 |
表 1 的第二行是本案例的"确定性答案":\(2.8\times 0.67=1.876<3\),\(z=1\) 直接不可行,模型只能把 \(z\) 压到 0,收益里一分奖励都没有。第三行是"赌"的答案:奖励按概率折算,同一份 40 min 的期望收益从 11.54 元跳到 46.61 元。
1.2 为什么要优化
第一,确定性模型把"可能"当成"不可能"。1.876 单是期望值,不是上界;实际出 3 单、4 单完全可能,概率是 0.2898,不是 0。把 0.2898 当成 0,等于白扔 34.78 元期望奖励。
第二,加班的账要分两笔算。加班本身每小时净赚 18.72 元(20.72 减 2),这笔钱与奖励无关,无论达不达标都拿得到;奖励是叠加在这上面的期权。两笔账混在一起算,就会出现"反正拿不到奖,不如回家"的错觉——回家的收益是 0,加班的保底收益就有 12.54 元。
第三,"值得赌"是一个可以算出临界值的判断。奖励低到什么程度、概率低到什么程度,赌就不划算了?这个问题有闭式解(式 6),不需要拍脑袋。
1.3 Gurobi 如何求解
确定性模型三个变量(\(h\)、\(z\)、线性化辅助变量 \(w\)),根节点收敛;随机模型把 60 个泊松场景写成 60 个 0-1 变量 \(z_s\),仍然在 0.1 s 内解完。解析概率部分不经过 Gurobi,用泊松尾概率闭式计算;扫描共 41 点奖励、41 点密度、81 点小时,全部墙钟 2 s。
2 数学模型
\(h\) 为加班小时,\(z\in\{0,1\}\) 表示是否达标,\(w\) 是 \(h(1-z)\) 的线性化替身,\(\bar{h}=1.6\) 是 \(h\) 的候选集上界(大 M 按候选集规模取)。
2.1 目标函数
式 (1) 的四项分别是:达标奖励、劳动毛收益 \(7.4\times 2.8h\)、疲劳成本 \(2h\)、以及"白跑一场"的心理折算 \(1.5h\)(只在 \(z=0\) 时发生)。最后一项是 \(h\) 与 \(z\) 的乘积,必须线性化。
2.2 约束条件
式 (2) 是题面原文:想拿奖,期望单量必须够 3 单;加班时长被 40 min 卡死。式 (3) 是 McCormick 型线性化,四条边把 \(w\) 钉在 \(h(1-z)\) 上——\(z=1\) 时 \(w\le\bar{h}(1-z)=0\),\(z=0\) 时 \(w=h\)。
2.3 概率口径
式 (4) 把"够不够 3 单"换成泊松尾概率。注意这不是把 \(z\) 换成小数,而是换掉了判据:确定性模型问"期望够不够",概率模型问"够的概率有多大、值多少钱"。式 (5) 是式 (1) 的期望形式,\(z\) 被 \(P(h)\) 取代,落空成本按 \(1-P(h)\) 加权。
2.4 临界奖励额
式 (6) 令"奖励的期望"等于"落空的期望成本",解出 \(B^{*}\)。\(B<B^{*}\) 时赌的净期望为负,不如坦然接受落空;\(B>B^{*}\) 时赌划算。本案例 \(B^{*}=2.46\) 元,而奖励是 120 元。
2.5 概率过半需要多久
式 (7) 把 \(P(h)=0.5\) 反解成 \(\mu^{*}=2.674\),对应 \(h^{*}=0.955\) h。40 min 的上限只有 0.67 h,连五成把握都够不到——这是本案例最有信息量的一句话。
3 Gurobi 求解实现
3.1 建模要点
三段核心代码:
m.addConstr(2.8 * h >= 3 * z) # 达标判据
m.addConstr(w >= h - 1.6 * z) # w = h(1-z) 的线性化
m.addConstr(w <= h); m.addConstr(w <= 1.6 * (1 - z))
m.setObjective(120 * z + 20.72 * h - 2 * h - 1.5 * w, GRB.MAXIMIZE)
第一个细节:大 M 取 1.6(\(h\) 的候选上界),不用 10 万。\(M\) 越大,LP 松弛越松,虽然本例规模小看不出差别,但这是习惯问题。第二个细节:\(-1.5(1-z)h\) 是双线性项,必须用 \(w\) 替身,否则 Gurobi 报 Q 矩阵非 PSD;这也解释了为什么题面写 3 个变量、实际实现是 4 个。第三个细节:随机模型里 \(z_s\) 是逐场景的 0-1 变量,60 个场景 60 个 \(z_s\),目标函数除以场景数取期望——这是标准的两阶段写法,第一阶段只有"加不加班"一个决策。
3.2 求解结果
表 2 概率口径下的三项灵敏度(金额单位:元)
| 项目 | 基准值 | 临界值 | 安全边际 | 结论 |
|---|---|---|---|---|
| 达标奖励额 | 120.0 | 2.46 | 48.7 倍 | 现价远高于临界 |
| 加班小时(P=50%) | 0.67 | 0.955 | 17.1 min | 40 min 内够不到五成 |
| 单量密度(P=50%) | 2.80 | 3.99 | 1.19 单/h | 密度需再涨一成半 |
4 结果分析

图 1 达标门槛的收益台阶:47 单在台下,50 单起一次拿 120 元
4.1 结构:门槛的台阶形状 图 1 把奖励画成单量的函数:44—49 单全是灰棒(奖励 0),50 单起跳到 120 元。这种"零或全有"的台阶是所有门槛型激励的共同形状,也是它为什么必须用 0-1 变量而不是线性折算的原因。小哥站在 47 单,距台阶还有 3 格,而 40 min 平均只能走 1.876 格——他站在台阶下面,不是台阶上。

图 2 加班小时与期望收益:两条口径的差距就是被确定性抹掉的概率价值
4.2 小时—期望收益:两条口径的分叉 图 2 的两条线在原点重合,越往右分得越开:灰虚线(确定性口径)是纯劳动收入,红色实线(概率口径)在它上方多出一块期望奖励。气泡大小是 \(P(h)\),可以看到概率涨得比时长慢——从 0.67 h 加到 1.6 h,时长翻一倍多,期望奖励却只从 34.78 元涨到九成把握的水平。奖励的边际价值随 \(h\) 递减,因为泊松尾概率是凸的。

图 3 三种处置的对比:放弃 0 元、确定性口径 11.54 元、概率决策 46.61 元
4.3 三方案对比:35.1 元的期权价值 图 3 四根柱:放弃 0.0 元、确定性口径(\(z=0\))11.54 元、概率决策 46.61 元、真达标实现值 132.54 元。确定性口径与概率决策之间那 35.1 元的落差,就是把 0.2898 的概率当成 0 的代价,占期望收益的 75.2%。注意第三根柱是期望值、第四根柱是"赌中了"的实现值,两者差 85.9 元——这正是"没中"的那 0.2898 概率要承受的落差。决策看第三根柱,日子过成第四根柱或第一根柱。

图 4 20:40 起的累计单量轨迹:期望轨迹贴着 50 线下方走,40 min 只到 48.88 单
4.4 时序:贴着 50 线下方走 图 4 是 20:40 之后的累计单量。期望轨迹从 47 起步,40 min 走到 1.876 单,落在 50 线下方的 1.124 单处;±1 标准差带在终点宽约 $\pm$1.4 单,90% 分位轨迹才刚刚摸到 50 线。这张图解释了一个直觉为什么是错的:很多人觉得"就差 3 单,跑快点就有了",但 3 单对应 1.07 h 的期望时长,40 min 连期望都填不满,只有 0.2898 的机会靠运气补上。

图 5 奖励额扫描:期望收益是斜率为 P 的直线,临界奖励只要 2.46 元
4.5 主灵敏度:奖励额 图 5 左轴是期望净收益,随奖励额线性上升,斜率就是 \(P=0.2898\)——每多 1 元奖励,期望只多 0.2898 元。右轴是净赌注期望 \(BP-1.5h(1-P)\),在 2.46 元处穿零。现价 120 元时净赌注期望 34.06 元,安全边际 48 倍。这个结论很硬:哪怕平台把奖励砍到 3 元,赌仍然划算,因为加班本身的劳动边际收益是正的,赌注几乎是白送的期权。

图 6 加班小时与单量密度的达标概率场:五成线在 0.67 h 之外
4.6 二维:加班小时与单量密度 图 6 是 81x41 的概率场,五成等值线从左上斜到右下。本案参数(★)落在 0.22 的概率带上,离五成线还差一截。读这张图的正确方式是横着读:固定 \(h=0.67\),密度要从 2.8 涨到 3.99 单/h 才有五成把握;竖着读,密度固定 2.8,\(h\) 要从 0.67 加到 0.955 h。

图 7 单量密度扫描:密度到 2.8 以上,期望收益随概率加速上抬
4.7 第三维:单量密度 图 7 把密度从 1 扫到 5。左轴期望收益是条上凸曲线(概率加速),右轴达标概率从 4% 一路爬到 97%。密度每涨 1 单/h,期望收益多涨的不止 7.4 元:一部分来自劳动收入,一部分来自概率跃升。这在雨雪天、周五夜这些"密度突变"的场景里有直接的操作含义——同样的 40 min,密度 3.5 时值得赌的把握已经是 47%。

图 8 概率—收益前沿:40 min 的可达点与 50% 把握点隔着一段加班时间
4.8 前沿与不可达区 图 8 横轴换成达标概率,把 \(h\) 参数化的前沿画出来。灰区是"40 min 以内到不了"的部分:\(P>P(0.67)=0.2898\) 的每一个点都需要更多加班。图上三个标记点分别是确定性解(\(P\) 记 0,11.54 元)、40 min 可达点(46.61 元)与五成把握点(需 0.955 h)。前沿是单调的,但斜率递减——前半段每小时买的概率多,后半段买的少。

图 9 泊松解析与 10 万次蒙特卡洛的单量分布:两者差 -0.0011
4.9 分布:解析与蒙特卡洛 图 9 把 10 万次模拟的单量直方图与泊松解析 pmf 并排。两者几乎完全重合:解析 \(P=0.2898\),模拟 0.2887,绝对误差 -0.0011,相对误差 -0.39%,而模拟本身的标准误是 0.00143——误差在 1 个标准误以内,可以认为两个口径一致。\(k=0\) 的概率高达 15%,\(k=1\) 约 29%,也就是说"跑满 40 min 一单没多"的概率比"达标"的一半还高,这是"差 3 单"这件事的真实难度。

图 10 期望收益分解:奖励贡献 34.78 元,落空成本只扣 0.71 元
4.10 期望收益分解 图 10 把 46.61 元拆成四块:劳动净收入 12.54 元、期望奖励 34.78 元、疲劳成本 −1.34 元、落空成本 −0.71 元。奖励贡献了七成,但它是一个 0.2898 概率才兑现的七成;落空成本只有 0.71 元,因为"没达标"的心理折算 1.5 元/h 本来就不高。如果这个系数涨到 8 元/h(很在意白跑一趟的人),落空成本会变成 3.81 元,仍不足以推翻决策——决定权在奖励的期望值,不在情绪成本。
5 结论
- 确定性模型会说"别去",这句话在数学上没错、在决策上错了。 \(2.8\times 0.67=1.876<3\),\(z\) 只能取 0,最优值 11.54 元;但它把 0.2898 的概率当成了 0,少算 34.78 元期望奖励。
- 概率口径下的答案是"加班,并且赌"。 期望收益 46.61 元,比确定性口径多 35.1 元,比直接回家多 46.61 元;真达标时到手 132.54 元,没达标时仍有 11.83 元保底。
- 临界奖励额只要 2.46 元。 现价 120 元的安全边际是 48 倍,奖励砍到 3 元赌仍然划算——因为加班本身的劳动边际收益 18.72 元/h 是正的,赌注是白送的期权而不是风险下注。
- 五成把握要 0.955 h,40 min 给不了。 \(P=0.5\) 对应 \(\mu^{*}=2.674\),反解时长 0.955 h;密度侧要涨到 3.99 单/h。"差 3 单"在 40 min 里从来不是大概率事件,最高只有 0.2898。
- 解析与模拟可以互相背书。 10 万次蒙特卡洛给 0.2887,解析给 0.2898,差 -0.0011(-0.39%),小于 1 个标准误 0.00143;场景 MILP 给 49.86 元,与解析 46.61 元同量级。三条独立路径指向同一个决策。
参考文献
[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.

浙公网安备 33010602011771号