叙事📖 故事版🎞 电影版🎬 ELI5文档🎯 蓝图📋 纪要⚙️ 引擎设计🏗 框架图🔁 时序图Demo🖱 交互v1▶️ 动画v1💥 场景v2📦 三阶段v3📅 日历v4
Tony He / Research / 重排 Demo / 方案蓝图
第一阶段 · 对齐生产方真实场景

第一阶段方案蓝图:MES 内一键排产 + 灵活调整

基于与生产总监、排产经理的对齐访谈 · 2026-09 · 目标:让排产经理不再需要 Excel · 调试/装机共用人员池已建模

业务全景与范围界定

范围外
月中 · MES 之外
预排产
只排机房,不排人。基于销售预测的机型/数量/交期。
月初
订单替换 + PO
真实订单替换预排产占位,生成 PO。
PO 后
物料确认
排产经理 × resource 计划确认物料齐套,齐套才拉进 MES。
第一阶段
MES 内 · 月初
一键排产
机房 + 人员 + 工作日历,联合求解。
第一阶段
MES 内 · 全月
扰动调整
五类扰动,增量重排,不动已确认部分。
第一阶段从 MES 拉单之后开始——预排产、PO、物料确认流程不动。物料齐套 = 排产引擎的 ready 约束(未齐套不出现)。排产后生产订单下发:下发一批、确定一批(无特殊情况不动);特殊订单重发 = 增量重排,已下发部分自动进冻结区。
关键模型洞察:机房预占是输入,不是变量。预排产只排机房不排人,意味着正式排产进 MES 时机房分配已带预占(至少是强先验)。一键排产的真实决策空间主要是人员分配 + 时间安排;「调整机房」是例外操作(预排产错了/专用机房冲突),不是常规自由度。引擎设计据此区分:机房 = 软先验(默认跟随预排产,可解锁),人员 + 时间 = 求解变量。
跨厂共享人员:调试与装机是同一拨人。机器调试完即发现场:海外=客户自装(不占人),国内=我们的装机厂派人装。现状流程:PO 驱动先排调试 → 装机厂排产员再捡剩排装机,且装机只排 2~3 周滚动窗、不排满整月——这实际上是一道第二冻结线:装机厂只对近窗承诺,远期是意向。
风险在于顺序决策 + 零缓冲衔接:模拟数据里 20 人次装机任务紧贴调试结束(缓冲 ≤2 天),一旦调试 troubleshooting 延期,已被派出装机(或在客户现场)的工程师物理上不可召回——O003 调试 +2 天即顶飞 2 张装机计划,触发 调试排产员↔装机厂排产员↔现场工程师↔客户 四方沟通。
引擎级解法:双层输出 + 衔接缓冲。引擎排整月(排产经理看全月趋势与资源冲突),但装机阶段只在滚动承诺窗内生效(如 2~3 周,参数化)——与装机厂现有习惯对齐,不需要他们改变节奏;缓冲参数(装机承诺日 = 调试完工日 + buffer)同样可调,实测曲线:buffer 0/1/2 天 → 总延期 2/3/13 天。承诺窗外 + 缓冲内的装机需求只做资源预占(人别被排走),不做承诺——缓冲买的是「装机计划不被调试波动打断」,代价透明,定值权在生产总监。

五类扰动 × 解法 × 已验证证据

扰动现状痛点解法已验证证据
① 机房调试时间troubleshooting 4天 → 6天,顶开后续机房排产和交期 MES 里调整 = 删掉后面全部重排 → 只能去 Excel 冻结区 + 最小扰动重排:已开工/已确认的不动,只重排受影响链路,输出 diff 供审批 故障场景动画:调试 +1 天被完全吸收,冻结区 24 单纹丝不动,仅动 5 单,0 延期
② 视图与人员机房/人员视图分离,调机房后找有空档的人极难 一大版甘特图肉眼找人 → Excel 双表同页反而高效 双视图联动 + 资质过滤:机房视图 ⇄ 人员视图同步高亮,点格子只显示持证且有空档的人,一键换人+冲突校验 完整模型页:机房表+人员表同屏联动,资质(专/多能)标注,悬停看 PO 元数据
③ 订单变化订单提前 / 取消,计划重排;特殊订单导致生产订单重发 同样面临 MES 里「重来一遍」 增量重排:插单=新单进入求解、撤单=释放资源,其余计划保持连续性 插单/撤单动画:插紧急单+撤 2 单,冻结区不动,只动 9 单,<1 秒
④ 人员请假休假/病假与排产冲突 双向不透明:人不知道自己下月哪天空 → 不敢订假期;请假了经理才发现顶飞工单 资源不可用窗口(与节假日同族约束)+ 请假 what-if 预览:员工先看影响再提请假——「我请这 3 天会顶飞哪几张单、谁可替」 约束机制已被工作日历版本验证(国庆 7 天=全员不可用窗口);what-if=同引擎 <1s
⑤ 机房检修机房维修/保养导致整段时间不可用 检修撞上排产 → 机房内所有工单被迫重排 机房不可用窗口:与人员请假同一建模(资源维度换成机房),提前排入则计划自动绕开;临时检修=增量重排 同上——单一「资源不可用」机制覆盖人员+机房两个维度

五类扰动共用同一个机制:冻结区 + 最小扰动目标函数 + diff 输出。区别只是触发事件不同(工期变 / 手动调整 / 订单变 / 人不可用 / 机房不可用)——④⑤ 与节假日是同一约束族,引擎成本近零。

双向透明(第二阶段主线,第一阶段给只读版)
排产后每位工程师可查自己的工作日历与空档期,据此自主选择休假时段——请假不再是黑盒扰动,而是带着空档信息的有计划行为。机房检修计划同样提前可见。第一阶段先上只读个人日历(同一份排产数据的过滤器,开发量薄);请假审批流 + 影响预览入口进第二阶段。生产订单下发:下发一批确定一批——下发即 F0 硬冻结的判定条件;特殊订单重发 = cancel+insert 增量重排,机制已有。

第一阶段交付物

MES UIIT 负责
双视图联动甘特图
拖拽调整 + 冲突红框
视觉必须打赢 Excel
⇄
排产引擎(黑盒)CP-SAT · Python 模块
JSON in / JSON out
一键排产 + 5 种调整操作
Apache 2.0 免费商用
⇄
数据工单(PO/物料号/序列号/配置/出货)
机房-机型兼容
人员资质
工作日历(周末/节假日/调休)

引擎操作集(引擎 API 的最小闭环)

操作输入引擎行为输出
一键排产当月工单集(齐套后)+ 预排产机房预占 + 日历全量联合求解(机房软先验 + 人员资质 + 三阶段链)完整计划
改工期工单号 + 新调试天数冻结区外增量重排变更 diff:动了哪些单、为什么、对交期影响
换机房工单号 + 目标机房校验兼容性 → 增量重排
换人工单+阶段 + 人员变更校验资质+空档 → 增量重排
插单新工单(含优先级)冻结区外找位,必要时顶出低优先级
撤单工单号释放资源,后续单前移(可选保守模式:不前移)

已在模拟数据上验证的规模与性能

10 机房(通用+专用)、34 人(专职+多能)、5 机型、35 单/月、三阶段(组装→调试→出差)、工作日历(国庆+周末+调休):一键排产 <7 秒,增量重排 <1 秒。真实规模相当,性能不构成风险;风险在数据质量(见开放问题)。

开放问题(下一步对齐)

  1. 冻结规则:什么算「不可动」——已开工?已发料?已通知人员?已通知客户?这是重排引擎最核心的业务参数,必须排产经理定义。
  2. 预排产机房预占的约束强度:正式排产默认跟随预排产机房,还是仅作参考?(影响引擎约束设计,见上方模型洞察)
  3. 目标函数权重:交期 vs 机房利用率 vs 人员均衡 vs 出差集中度——冲突时牺牲谁?需要排产经理给出优先顺序(这是他经验的精华,也是目前只存在于 Excel 里的隐性知识)。
  4. 数据就绪度:机房-机型兼容、人员资质证书、日历在 MES 里是否已结构化?还是只存在于经理的 Excel/经验中?(决定第一阶段是「接数据」还是「先建数据」)
  5. 历史数据重考:拿一个月真实历史排产(经理的 Excel)做回放——引擎排的 vs 经理排的,比交期达成率。这是立项前最有说服力的一步。

演示材料