调度的本质:一个多约束求解问题
先说个真事。上个月去一家做齿轮箱的厂,他们的PMC经理跟我诉苦,说数字化转型投了两百多万,上了高级计划排程(APS),结果三个月后还是老老实实退回Excel。原因很搞笑——系统排出来的计划,车间执行不了。为什么?因为系统把每台设备的加工时间设为固定值,但实际上一台用了十年的老磨床和一台进口的新磨床,加工同样齿圈的时间能差20%。这种精度,别说智能了,连基本正确都算不上。
所以,调度的本质是什么?是在有限资源上,对工序的时序和空间位置做约束求解。约束包括:工艺顺序(哪道工序先干)、资源占用(设备、工装、操作员)、时间窗(交期、批次间隔)、以及物理限制(比如两台设备之间必须留出缓存区)。用形式化的语言,你要找到一组变量S_ij(工件i的第j道工序开始时间),使得所有约束满足,并且某些目标(如总拖期、最大完工时间)最小化。这货就是个典型的NP-hard问题。
有人跟我抬杠,说你们的遗传算法不是挺好吗?我告诉你,遗传算法在这个问题上跑个两百代,可能跟随机排序没啥区别。因为搜索空间太大,交叉变异很容易早熟。真正实用的,往往是混合整数规划(MILP)加启发式分解,但建模工作量大得惊人。对于车间级调度,我更喜欢用基于瓶颈的同步排产——先找到关键资源,然后围绕它来排。

注意,这张图里瓶颈设备就是那台慢的磨床。你把不必要的小活都推到它前面,它就成了拥堵点。所以,我习惯用有穷反馈法来做瓶颈识别——计算每台设备的负荷率,找出超过90%的,然后反推哪些订单要移走。
约束建模:你别光看设备,还得看工具和人的手艺

做机械设计的都知道,图纸上一个公差标不好,整个零件就废了。调度也一样,约束漏掉一个,计划就白排。我总结过,至少要纳入下面这五类约束。
- 工艺路线——这是骨。每道工序的先后关系不能倒。比如齿轮热处理必须在齿形加工之后,否则变形没商量。
- 设备能力——同一道工序可能有多台可选设备,但精度和速度不同。你得定义一个“设备-工序”二元组,并给出加工时间矩阵。比如某轴外圆磨,在M1432上干是15分钟/件,在MG1432上干是18分钟/件,但粗糙度更稳。这种差异就得写进模型。
- 换型矩阵——从产品A切换到产品B,要换刀、对刀、调整夹具,时间可能是长的。比如一台立加加工壳体,从5系列换到6系列,需要换定位销和压板,40分钟没跑。如果调度时忽略这个,你的交付期就是假的。
- 物料齐套——毛坯、锻件、外购件能不能按时到?调度排得再好,料没到就是空谈。所以,排产前要先跑一次物料需求计划(MRP)的校验。
- 人员技能——你的车间里不是每个工人都能开所有机床。一个五轴编程师傅走了,那几台五轴机床就宕机了。所以人员排班也要跟设备调度联动。
这些约束听着简单,但把它转成结构化数据,真心费劲。我之前在项目现场,光整理一个车间的工艺数据就花了三周。老板嫌慢,我说你十年前就该做这件事。后来数据整理出来,直接用贪婪算法排,都比原来的手工计划顺眼得多。
算法选择:从最蠢的开始,别让“AI”吓住你
我知道大家喜欢听“深度学习”之类的新词。但说实话,目前车间级调度能用的,还是那些老古董规则。
比如,你的问题主要是拖期,那就用EDD(最早交货期优先)。如果主要瓶颈是设备利用率,那就用SPT(最短加工时间优先),它能让单位时间的产出最大。如果你的换型成本很高,那就用按产品族分组的排程,减少切换次数。规则之间还可以组合。比如先按EDD排序,再在局部用2-opt交换降低总拖期。
我见过最成功的一个项目,是一家做工程机械结构件的厂。他们把车间分成了下料、焊接、机加、涂装几个工段。每个工段内部,用简单的优先级规则计算每一个待加工件的“延误风险因子”(当前时间+剩余加工时间-交期),然后按降序排。就这么个初级方法,让他们把月度拖期率从25%降到了9%。你说这跟智能有什么关系?关系大了——能把原理用到极致的,才叫智能。
这里要提醒一句:别上太花哨的算法,如果你没有足够的计算资源和容错机制。有一次我试了一个商用APS,它的引擎基于约束编程,模型求解时间动辄几个小时。结果生产计划还没出来,现场已经干完一批货了。所以,调度算法必须响应快。我的标准是:10台设备、100个工序的规模,求解时间不要超过60秒。超过这个数,就跟不上节拍。

落地实施:先模拟仿真,再逐步嵌入

最好的落地方式,是先用离散事件仿真(DES)验证你的排产规则。我通常的做法是:在Plant Simulation或Flexsim里搭一个车间三维模型,把设备布局、工艺参数、物流路径放进去,然后跑几个月的生产数据。你会惊讶地发现,仿真结果跟实际偏差在5%以内。这时候把调度算法挂在仿真模型上做“前向测试”,看看不同规则下设备等待时间和在制品数量。等你觉得靠谱了,再让调度算法直接生成计划,但先离线跑一周,跟老师傅的计划对比。
另一个关键点是滚动重排。车间里随时可能出现突发情况——刀具崩了、来料晚了两小时、工人请假。你不可能让一个静态计划一直有效。我建议是设置一个重排周期,比如每2小时或每班次开始,重新读一次实时状态(包括设备是否完好、各工序完工百分比),然后对剩余未执行的工序重新优化。这叫做“重调度”,是智能生产调度的核心操作。
我在这顺便提个反直觉的发现:如果你把车间所有设备都排得满满当当,反而是最不有效的。因为波动会传导,一台设备晚半小时,后面的工序全都堵上。我一般会把关键设备利用率控制在85%以下。这个数字不是拍脑袋,是根据排队论M/M/1模型算出来的——当利用率接近100%,队列长度会指数级爆炸。
最后说点实在的

好了,写到这里,估计你也有点体会了。智能生产调度这件事,二十年前叫“生产计划与控制”,十年前叫“高级排程APS”,现在叫“AI智能调度”。名字变了,内核没变:把正确的东西,在正确的时间,放到正确的机器上。算法只是其中一个零件,更多功夫在于数据和人的经验。
如果你现在正要启动这类项目,我只有一句劝告:不要一开始就追求全自动。先做离线排产,让计划员使用,慢慢积累反馈,再逐步增加自动化的程度。就像咱们调机床,先手动走一遍,确认没有干涉了,再开自动循环。
就这样。有事欢迎留言,下次聊点别的。