180 吨的产能,
排进了 190 吨

这不是参数没调好。按重量排产的系统,算不出一个班次到底装得下多少。三个缺陷都是模型问题。

单日排程结果

有效工时 10.5h / 班 21h / 日
设备日产能 180t实际排入 190.73t
103.2白班
87.53晚班
产能上限 180t
超出 10.73t

按吨位实际比例绘制。白班 103.2t + 晚班 87.53t = 190.73t,超出设备日产能 10.73t。数据为立邦 APS 演示会现场实测。

三个缺陷,都是模型问题

客户原话是「困扰我们好多年了」。这三条不是调参数能修的,因为它们分别来自产能单位用错、目标函数缺项、初值参数缺失。

产能单位

按重量排产,不按工时

证据:设备产能 180t,实际排了 190t

重量不是产能单位。不同 SKU 的吨每小时差异巨大,用吨当产能必然超载或欠载。标准做法是给每个「产品 × 产线」定义速率加固定换产时间,把产能从重量翻译成时间。

目标函数

洗机不内生于优化

证据:排序 → 洗机分析 → 插入洗机工单,三步手工

切换时间不进目标函数,排序就不会为省洗机而调整。事后插入永远得不到最优序,因为排序决策做完的那一刻,省洗机的机会已经错过了。

初值参数

不考虑上一班次结束状态

证据:「他一定要知道上一缸是什么」

首尾不相连,砂型排序的价值被削掉一半。文献里这叫 initial setup state,是优化模型的初值参数,决定第一个作业的换产时间从矩阵哪一行取。

改造方向是行业标准,
不是我方发明

这一点值得在售前讲清楚:我们不是提出新概念,是把标杆系统二十年前就有的能力补齐。

把产能从重量翻译成时间

Product Wheel 十步法的第 4 步就是「按可用换产时间倒推最短轮周期」。标杆 APS 的通用建模是给每个产品与产线定义吨每小时加固定 setup 时间,而不是直接用重量当产能单位。

King (2009), Product Wheel Design
SAP PP/DS 与 Siemens Opcenter APS 的通用建模方式

把换产次数本身当优化目标

涂料行业的标杆论文说得很直接:设备清洗是涂料生产废物的主要来源,换产必须清洗,因此换产次数本身就是要最小化的目标,不是排完之后再统计的指标。

Adonyi et al. (2008), J. Cleaner Production 16(2)
DOI 10.1016/j.jclepro.2006.08.021

把上一班次状态作为模型初值

SAP PP/DS 的做法是把 Setup Group 挂在 Resource 上,资源上最后一个已排活动的 setup key 直接决定下一个活动的换产时间。文献里对应 setup carryover 与 setup crossover 两个概念。

Suerie & Stadtler (2003), Management Science 49(8)
Allahverdi (2015), EJOR 246(2), 345 至 378

不相关并行机上的整体求解

与本项目痛点匹配度最高的一篇:不相关并行机对应跨产线自动选线,加产能受限、序列相关 setup 时间与成本、仓容受限,用 relax-and-fix 启发式求解 MILP。

Araujo, Birgin, Kawamura & Ronconi (2021)
arXiv:2107.10738

我们最没把握的一件事

如果深色换浅色需要深度洗机,而中间插一个中间色反而更快,那么最优解可能包含纯粹为省洗机而插入的过渡批次。标准模型只在订单集合内排序,会直接漏掉这类解。

立邦有石膏、腻子、粉料等多种切换分类,很可能存在这种结构。它成立与否,决定求解器要不要支持插入非订单批次,也就决定了工期。

所以拿到切换矩阵后我们做的第一件事不是建模,是检测三角不等式。在那之前,任何工期承诺都是猜的。

切换时间矩阵(示意)

行为换出分类,列为换入分类,单位小时。

A 深色B 中间色C 浅色
A 深色01.54.0
B 中间色2.001.0
C 浅色0.50.80
直接换 A → C = 4.0h
绕一步 A → B → C = 1.5 + 1.0 = 2.5h
插入一个 B 批次反而省 1.5h

矩阵数值为示意。真实矩阵尚未拿到,这正是我们要向客户索取的第一份数据。

这个场景在国内
没有对标产品

国产 APS 的能力分布高度分化:离散有一堆产品,流程侧被石化与钢铁两个行业绑定。涂料这类中型批次流程场景落在中间。

阵营代表覆盖情况
离散排程 鼎捷 sAPS、汉得 HCMp、上海永凯、安达发 产品很多。鼎捷官网列的场景全是五金机加、注塑、电子零组件、汽配,明确只做离散
石化系流程 中控 InPlant APS、石化盈科 ProMACE 面向炼厂与大型能源化工,模块是月度计划、原油数据库、装置停工检修。行业绑定极深
钢铁系 宝信 MES 作业计划管理 背靠宝武,炼钢与热轧冷轧机组作业排序
涂料这类中型流程 摩尔元数是唯一在官网列出「化工涂料」的 但它的排产产品是甘特图拖拽式人工排产加物料齐套分析,官网未提任何自动优化算法。有人做 MES,没人做优化排程

这既是机会也是风险。没有对标产品,意味着没有现成的功能基线可抄,客户也没有参照系去判断我们做得好不好。 所以验收锚点必须是那三个可量化的缺陷:班次不再超载、洗机时间下降、首尾相连生效。不能用模糊的「排得更好」。

核心求解不是大模型

会上双方已经达成过共识:排产本体理论上不用 AI。这个判断有公开评测数据支撑。

15.2%

13 个前沿模型在 1132 个排产实例上的平均可行率。连产出一个满足硬约束的解都做不到。

SCHEDBench, EMNLP 2026 Findings

54%

在本身无解的实例中,模型有 54% 的情况编造出根本不可能的计划。产能不足时它会给你一个假的可行方案。

PlanBench, arXiv:2409.13373

21%

专门微调过的模型,距最优解仍差 21% 到 22%。而它的训练标签正是运筹求解器生成的。

Starjob, arXiv:2503.01877

历史开单修改记录 大模型:习惯挖掘与开单量推荐 CP-SAT 排程求解 独立可行性校验 大模型:洗机原因解释 人工确认后回写 SAP

大模型在本项目里只做两件事:从历史修改记录中归纳计划员的开单习惯,以及解释「这次洗机是因为什么」。排程本体用 OR-Tools CP-SAT,序列相关切换时间用 AddCircuit 加 only_enforce_if 建模,是标准写法。这两条旁路断了,排产照常运行。

我们现在还不知道什么

到目前为止的全部结论,来自一场演示会的观察加行业文献推断。没有一条是在你们的真实数据上验证过的。把这个讲清楚,比多列几个功能有用。

阻塞

切换分类矩阵。洗机内生优化的全部基础,也是三角不等式检测的输入。拿不到就无法建模。

阻塞

SKU 小时产能表。按工时排产的基础。数据稀疏的话会退化回按吨排,等于没改造。

阻塞

排产全栏表的完整字段。数据模型无法定稿。

阻塞

一次正式需求访谈。演示会不是需求访谈,目前所有需求都是从现象推断的。

待定

现有第三方 APS 是替代还是并存。这决定接口对象是 SAP 还是现有 APS,也决定商务模式。

待定

试点范围只做泉州工厂,还是要考虑多工厂差异

待定

开单量 1 的计算异常(演示中出现开单量 1 大于开单量 2)由谁修

待定

验收口径。本项目可以谈解质量改善,但在拿到数据前不承诺任何数字。

先给我们切换矩阵和产能表

拿到当天我们做两件事:检测三角不等式是否成立,以及复现「190 吨排进 180 吨」这个缺陷并算出按工时排能改善多少。用你们自己的数据,不用我们的假设。