案例073 9000 元怎么拆到每天

案例073 9000 元怎么拆到每天

摘要:月净收入 9000 元、出勤 26 天,折成日均 346.15 元。以均单净收益 5.6 元、固定成本 62.60 元/天(租金 32.69 + 换电 7.65 + 餐费杂项 22.25)建目标规划模型,26 天单量上限 62 单使满格日净额只有 284.60 元,日缺口 61.55 元、月缺口 1600.4 元——纯单量路径目标不可行。本文给出三条延伸:加权偏差(工作日欠 3、周末超 4)在日分解结构下不改变日程,只在月度运力预算 1500 单的耦合模型里才改变;临界均单收益 6.59 元/单是可行的充要门槛;补贴兜底的最小月补贴为 2160.4 元。

关键词:目标规划;加权偏差;不可行性分析;日程分摊;灵敏度分析

1 问题提出

「一个月挣 9000」是一句目标,不是一句结论。把它落到日程上,先要做一次除法:9000 元除以出勤 26 天,日均 346.15 元。再往下拆,每一单净赚 5.6 元,但每天一睁眼就有 62.60 元固定成本要先摊掉——租金 850 元/月、换电 199 元/月、餐费与杂项 22.25 元/天。于是问题变成:把日目标写成一条等式约束,求每天该跑多少单,使「差多少」的总和最小。这正是目标规划(goal programming)的标准形式:目标不是被优化的对象,而是被写进约束的右端项,优化的是偏差。

表 1 基础参数

符号 含义 取值 来源
\(T\) 日净收入目标 346.15 元 9000 / 26
\(b\) 均单净收益 5.60 元 平台流水扣除抽成与油耗
\(C\) 日固定成本 62.60 元 850/26 + 199/26 + 22.25
\(\bar{n}\) 日单量上限 62 单 在线 11 小时的体力上限
\(N\) 月出勤天数 26 天 月休 4 天
\(B\) 月度运力预算 1500 单 全月总单量天花板

三个必须回答的问题:其一,欠达成与超达成的痛感不同(夜班疲劳、单量上限),加权后日程会不会变;其二,如果 62 单的天花板根本够不着 346 元,缺口有多大、补多少才够;其三,26 天里工作日与周末单产不同,偏差该往哪些天摊。

2 数学模型

2.1 日分解的目标规划

设第 \(d\) 天单量为 \(n_d\),正负偏差为 \(u_d^{+}\)(超达成)与 \(u_d^{-}\)(欠达成)。日净额等于毛收入减固定成本:

\[\pi_d = b\,n_d - C \tag{1} \]

把「日净额达到 \(T\)」写成等式,差额由一对偏差变量吸收,这就是目标规划的核心技巧:

\[b\,n_d - C + u_d^{-} - u_d^{+} = T,\qquad d = 1,\dots,26 \tag{2} \]

偏差成对出现且反号,故任一可行解中 \(u_d^{+}\) 与 \(u_d^{-}\) 至少有一个为零——若两者同为正,同时减去同一个量仍满足式 (2) 且目标更小,与最优性矛盾。因此无需额外的 0-1 变量去做互补约束,这是目标规划比「分段线性」写法更省事的地方。

\[\begin{aligned} \min_{n,u}\;&\sum_{d=1}^{26}\left(u_d^{+} + u_d^{-}\right) \\ \text{s.t.}\;&0 \le n_d \le \bar{n} = 62,\quad u_d^{+},\,u_d^{-} \ge 0 \end{aligned} \tag{3} \]

2.2 加权偏差

等权把「多跑一元的累」与「少挣一元的慌」看成一样重,现实中并非如此。引入权重 \(w_d^{-}\)、\(w_d^{+}\):

\[\min_{n,u}\;\sum_{d=1}^{26}\left(w_d^{-} u_d^{-} + w_d^{+} u_d^{+}\right) \tag{5} \]

取 \(w_d^{-} = 3\)、\(w_d^{+} = 1\) 表示欠达成更疼。这里有一个容易被忽略的结构性事实:若 26 天同质(\(b\)、\(C\)、\(\bar{n}\) 都相同)且无跨天耦合,式 (5) 的解与式 (3) 完全重合,因为每天的最优 \(n_d\) 只取决于本日参数,权重只是把同一个目标值放大了 \(3\) 倍。权重要想改变日程,必须让日子之间有差异,并有共享的稀缺资源。

2.3 日型差异与运力预算

把 26 天分成工作日 18 天与周末 8 天:周末有冲单奖与溢价,均单净收益从 5.0 元升到 6.95 元,按出勤天数加权后仍等于 5.6 元;同时全月在线时长有上限,等价于单量预算 \(B = 1500\) 单。式 (2) 的 \(b\) 换成 \(b_d\),并增加

\[\sum_{d=1}^{26} n_d \le B = 1500 \tag{6} \]

此时「多跑哪一天」才成为真正的选择。

2.4 可行性与最小补贴

式 (4) 给出单日可达净额的上界,把它与目标相减即得结构性缺口:

\[\Delta = T - \left(b\bar{n} - C\right) = 346.15 - 284.60 = 61.55 \;\text{元/天} \tag{7} \]

只要 \(\Delta > 0\),无论怎么排日程,式 (2) 都无法让全部偏差为零。补一条「兜底」变量 \(S\)(月度补贴):

\[\min S \quad \text{s.t.}\quad \sum_{d=1}^{26}\left(b_d n_d - C\right) + S \ge 9000,\;\; \sum_d n_d \le 1500 \tag{8} \]

\(S^{*}\) 就是月缺口的下界,也是「换电折扣 / 平台补贴 / 少休一天」这类松弛手段的定价基准。把式 (7) 反解,得到目标可行的临界单产:

\[b^{\ast} = \frac{T + C}{\bar{n}} = \frac{408.75}{62} \approx 6.59 \;\text{元/单} \tag{9} \]

3 Gurobi 求解实现

模型全部是线性规划:变量 \(26\times 3 = 78\) 个,约束 \(26\times 2 = 52\) 条(加运力预算),单次求解在 0.01 秒量级,全部扫描(含 20 点热图)总耗时 2.6 秒。核心代码只有五句:

n, up, um = m.addVars(k, lb=0.0), m.addVars(k, lb=0.0), m.addVars(k, lb=0.0)
for i in range(k):
    m.addConstr(b[i]*n[i] - CFIX + um[i] - up[i] == T)   # 目标进约束
    m.addConstr(n[i] <= cap[i])
m.setObjective(gp.quicksum(wm[i]*um[i] + wp[i]*up[i] for i in range(k)))

求解结果如表 2。基准模型(等权、均单 5.6 元)的最优日程是 26 天全部顶到 62 单,偏差和为 1600.40 元;加权 3 : 1 后目标值变为 4801.21 元,而每天的单量仍是 62.00 单——一个数字变了,日程一个字没动,印证了 2.2 节的可分性判断。

表 2 三种排班方案对比

方案 月总单量 月净额 / 元 目标值 / 元 距 9000 元
等权偏差(日分解) 1612 7399.6 1600.4 1600.4
加权 3 : 1(日分解) 1612 7399.6 4801.2 1600.4
等权 + 运力预算 1500 6789.9 2210.1 2210.1
加权 + 运力预算 1500 6621.2 2378.8 2378.8
补贴兜底(最大净额) 1500 6839.6 2160.4 2160.4

4 结果分析

4.1 一天的结构:347.2 元怎么变成 284.6 元

图 1 单日收支结构:毛收入、固定成本、净额、目标与缺口

图 1 把一天的钱拆成五根柱子。62 单的毛收入 347.2 元,扣掉 62.60 元固定成本,落在 284.6 元;目标线 346.15 元在它上方 61.55 元处。这个缺口不是排班不努力,而是**参数决定的天花板**:单量上限每加一单只多 5.6 元,想把 61.55 元的缺口填平需要再跑 11 单,可上限已经没有余量。

图 2 日单量—日净额散点(气泡=单产),目标线与单量上限

图 2 里两条斜线的斜率就是单产:周末 6.95、工作日 5.0。工作日线在 $n = 62$ 处才到 247.4 元,离目标还差 98.8 元;周末线在 $n = 58.8$ 单就穿过目标线——**同样 62 单,周末能过线,工作日不能**。这是把偏差往周末摊的全部理由。

4.2 三方案:等权、加权与兜底

图 3 等权 / 加权 / 补贴兜底三方案的月净额与缺口

图 3 的三个方案落在 6621~6840 元之间,都够不着 9000。等权方案月净额 6790 元,缺口 2210 元;加权方案反而低到 6621 元,因为工作日欠达成被记 3 倍疼,单量先紧着工作日顶格,周末只剩 48.0 单,用「少挣」换「少累」;补贴兜底方案按最大净额排,月净额 6840 元,缺口 2160 元由外部补上。

图 4 26 天偏差分布(灰底为周末),等权与加权对比

图 4 是三种排班方式的日程差。等权方案让周末恰好踩线(58.8 单、偏差 0.0 元),工作日天天欠 122.8 元;加权方案反过来,工作日顶到 62 单、欠额降到 98.8 元,代价是周末掉到 48.0 单、欠 75.2 元。**偏差没有消失,只是换了位置**——这正是目标规划的输出:它不消除缺口,它决定缺口落在谁头上。

4.3 灵敏度:临界单产 6.59 元

图 5 均单净收益对日净额与所需单量的影响

图 5 的双轴给出两个答案。左轴:均单收益从 4.6 涨到 6.6,满格日净额从 223 元升到 347 元,在 $b = 6.59$ 元处穿过目标线;右轴:达标所需单量从 88.9 单降到 61.9 单,与 62 单上限的交点正是同一条临界线。结论很硬:均单收益只要涨 17.7%(5.6 → 6.59),9000 元就从不可行变为可行,无需多跑一单。

图 6 均单收益 × 单量上限 的日缺口热图

图 6 把两个杠杆放在一张网格上:横轴是上限(54~66 单),纵轴是单产(5.2~6.8 元)。右上一片深色为零缺口区——上限 62 单时,单产到 6.4 元仍差 12.0 元,要到 6.8 元才归零;而上限放宽到 66 单、单产 6.4 元同样能归零。两者等价:**放宽 4 单 ≡ 单产涨 0.4 元**,因为 $4\times 6.4 \approx 0.4 \times 62$ 左右。

图 7 出勤天数对日目标额与所需单量的影响

图 7 检验第三条路径:多出勤。出勤从 22 天增到 28 天,日目标额从 409 元降到 321 元,所需单量从 84.2 单降到 68.6 单,整条曲线始终压在 62 单上限之上——哪怕 28 天全勤也要 68.6 单。**「少休几天」这条路也堵死了**:分母只从 26 变到 28,降幅 7.1%,远不够填 21.6% 的缺口,要压到 62 单以内需出勤超过 28 天,一个月没有这么多天。

4.4 前沿、分布与结构

图 8 月总单量—月净额前沿与不可行阴影

图 8 的前沿是「周末优先」的包络:同样 1500 单,周末多摊一单就多 1.95 元。前沿的右端 7400 元是全域最大净额,仍低于 9000 元的横线,于是灰色区域——也就是补贴 $S$ 要填的部分——就是整个可行域的上方。三个方案点都落在前沿下方,说明它们都没有把单量用到「最值钱的日子」上。

图 9 单产波动下日净额的累积分布(400 次抽样)

图 9 把单产的日间波动(标准差 0.35 元/单,约 400 次抽样)叠进来,看日净额分布:等权方案只有 15% 的天数越过 346 元,加权 0%,补贴兜底 26%。即使按最优日程跑,达标也只是小概率事件——**目标不能靠「某几天跑猛一点」实现,只能靠参数或补贴**。

图 10 达标所需每日毛收入的构成:租金、换电、餐费、净得与缺口

图 10 把达标所需的 408.8 元毛收入按去向切片:租金 8.0%、换电 1.9%、餐费杂项 5.4%,落到口袋的净得 69.6%,缺的 15.1% 谁也没拿到。62 单实收 347.2 元,只够覆盖到净得段的右端——**缺口不在成本侧,而在单产侧**。

5 结论

(1)9000 元拆到 26 天是 346.15 元/天,而 62 单上限只给 284.60 元,结构性缺口 61.55 元/天、1600.4 元/月,这不是排班失误,是参数不可行。目标规划的价值不在「算出该跑几单」,而在把缺口显式化:等权与加权 3 : 1 在日分解结构下给出同一张日程表(26 天全 62 单),加权只改目标值(1600.4 → 4801.2);只有引入日型差异与 1500 单运力预算,权重才真正挪动日程——工作日从 57.2 单顶到 62 单,周末从 58.8 单压到 48.0 单,月净额掉到 6621 元。

(2)三条松弛路径的价格已标好:单产涨 17.7% 到 6.59 元即可归零;或多出勤两天(28 天仍需 68.6 单,堵死);或月补贴 2160 元。补贴兜底方案的 2160 元是「什么都不改」的代价上限,任何方案只要花得比它少就值得做。

参考文献

[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_073.py;数据与结果见同目录 .csv / .json,图见 figs/

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