0. 前言
本人本身是一个码农,已经服务了共和国各项事业(好像是说得有点漂,没办法段子看多了)大约一半工作时候了(按60岁退休的话),从一线的小码农,到现在成了老农,出产了不少或优或劣的各种码,几乎啥都做过。近几年慢慢沉淀到制造业信息化方面,主要是APS在生产计划方面的应用,APS - Advance Planning and Scheduling. 高级计划与排程;其实也就是做计划,只不过使用了一些优化算法,另计划的质量更高一些。从最开始被调去做ERP数据适配APS项目实施,到现在自己在为公司开发排产引擎(当然规划引擎用的是开源的,我可不是数学方面的专家)。从中也接触过不少排程产品,掉过不少坑,身上算是留下了点APS的战斗痕迹吧。下面先讲一下我在这方面的一些看法。等我有时间了,我再把这一年来,为解决APS系统的引擎问题使用optaplanner规划引擎的一些小积累分享一下,但这个时间嘛,还真的不容易挤呀,这一年来基本上每天晚上9点30前没离开过办公室,11点后跟晚班工人一起下班是常事(没错,我在一个制造企业上班,对APS有一个天然的实战环境,这是公司给我的最大条件优势)。
1. 排产的现状
关于制造业排产的系统,目前人们关注得更多的是MPS(主生产计划系统)的排期,即是公司甚至整个集团层面,根据产品的产工艺参数,结合订单的数量与交期要求,生成以生产订单为基本单位的生产计划,通常称作主生产计划(Master Planning).所谓的排期,或称排计划,更多的是对这些生产工单进行编排。例如根据这些工单的工艺要求分配到不同的生产单位(分厂、车间或承包商),并根据各个工序的生产时间需求,定出一个要求的完成日期,而这个日期其实是有水份的(下面会有解释)。但这些工单去到具体的生产单位后(特别是公司自己的车间作为生产单位时),其具体的生产计划就较少涉及了。原因有二.
a. 复杂度与可变性太高。到了车间这一层,再下一层就是产线甚至机台了,即车间的生产控制部门获得上级下发来的生产要求之后,会结合在制品、资源与工单的具体要求,向上级单作出一个反馈,即回复是否可按计划的要求完,双方讨价还价确定了一个新的计划版本之后,车间生产控制部门就会制定一个适合本车间的生产计划,再把该计划下发给生产调度部门进行生产。生产调度部门再会根据具体情况,按生产计划进行生产。无论是车间生产计划部门,还是调度部门,他们面临的都是一些涉及一些非常复杂的细节规则,例如生产工单的工艺要求,投放到车间哪个产线,例如哪种甚至哪台机器进行生产,生产过程中需要注意的具体细节等。都需要生产计划部门有所考虑,当然到了调度部门有可能还会有一些更细节的实际情况及约束进行考虑,从而在生产过程中作出临时调整。
无论是车间的生产计划部门还是生产调度部门,需要处理的逻辑细节都是很复杂繁多的。而作为人类面对种类繁多,复杂且多变的规则,各种业务制约与各种要求,是无法滴水不漏地顾及的。更多的是通过经验积累给出一些大概的,基于估量的安排。所以,车间各级部门给出的这个计划其不确定性是非常高的,甚至有些情况下,在经验老道的生产计划人员及调度人员排出来的生产计划,如果有足够多的时候去推敲,即使是按目前的生产情况不变,到最后也是不可行,或者说计划的质量要求(例如对成本、交期、产能利用率等要求)是非常低的。但往往在制定出来的初始阶段基本上是没人能推断出来的,更不用说计划推动了一段时间后,随着过程中的各种条件变更发生,越往后就越偏离原来的初充了。所以,要能最大程度上做出一个好的计划,是非常困难的,更多的是以经验生成一个初始计划,在生产过程中根据实际出现的情况,及在初始阶段未能考虑的问题慢慢明确,再持续地作出调整。所以给别人的印象就是,车间的生产计划毫无章法,质量太差,甚至有公司高层认为,车间根本无计划可言。但这是人思维的局限性,而对远超过其处理能力问题时,必然会出来的情况。因此车间层面的生产计划会面临一个严重的复杂度与可变性太高的问题。
b. 车间生产计划被视作操作细节,被人为未达到战略层次,未得到足够的重视与认识。因为作为公司级别的主生产计划,它是直接作为公司供应链的一环而存在的,这个环节的目标达成率高低是需要下面各个更细层次生产计划的支持的。但作为公司层面,往往要求的是,只要公司的主生产计划保持在一定的达成率,那么就可以满足供应链其它环境的要求了。但事实上这个达成率是需要有冗余的,也就是主生产计划给制定车间生产计划的时间,已经预计到一定的不可确定性存在,因此往往会留下一定的缓冲期。但这个缓冲期长短,是否合理,往往都是通过以往经验得出。而同样道理整个供应链对主生产计划也会留有缓冲期,那么可以想像,为了能满足要求,往往这些缓冲期加起来就会很长,往往比实际执行制造生产的CT还要长。这样就会造成极大的效率低下,及产能资源浪费。但就是因为越往明细的生产计划,不可控、不确定性越大。因此,公司通常都只能够弃小保大。久而久之,大家的焦点都只关注在MPS的层面上了。
综上所述,目前我们所说的排产,或说生产计划,更多的还只是停留在主生产计划这个层次较高,较虚泛的范畴。而真真正正到了生产控制层次的,往往关注的是MES(生产执行系统)了,而计划因为车间、产线层面的生产调度计划存在太多的难点,及很多方面技术上尚未成熟,令各大企业信息化产品对此较小涉及。大家也会留意到,无论多大、多出名的ERP系统,它关注的都是公司供应链层面的资源调配,而不会涉及具体生产环境,或者具体到库存物流,或具体的订单执行层面的内容。而目前这方面通常引入APS作为支撑慢慢有些成功可用的方案在市场上推广了。
下面就来看看APS(Advance Planning and Scheduling - 高级计划与排程)技术,在生产制造业的一些应用.
2. 什么是APS.
上面说了,APS就是一种高级计划与排程技术,那么为什么叫做高级呢?我的理解是,它是相对于以往的MPS的,它除了满足一些生产制造过程中关于工艺、交期等等的硬性要求,还要在满足这此硬性要求的基础上,根据既定的一些设定、或称策略进行不断优化,从而得出最接近策略目标的计划方案。这样说可能比较虚,下面举个例子说明一下。一个主生产计划下发到车间,当前正处于工厂的和产旺季,那么生产策略通常会被整理为"保证交期"(可能谈季的时候,因为资源相对充足,交期的保证不再是难事,策略往往会是"降低成本"。),那么车间生产计划部门收到计划,细分为各车间、产线甚至机台的计生计划时,就会把生产计划的策略大体上区分为两种,一种是保证硬性的要求不违反,例如产品质量要求、生产安全要求等。在此基础上,就会设法安排这些生产订,令其可以更快完成生产,从而可以保证产品所在订单的交期,又可以为后面更多的生产单尽早腾出资源,目标就是提高效率。对于前面的质量、安全的要求,是一些硬性的定性要求;而对于第二种效率的要求,是一种软性的定量要求。对于定性的要求,那么就会有好坏,或说能达到多好的程度评价。在人的角度上来讲,经验越丰富,他排出来的计划效率越高,越符合这个软性要求。这个就是APS的威力所在的,当然大家关注人工智能中的深度学习的信息,可能会发现,这个有一点人工智能的味道,确实是的,但目前还没有听说过这方面的研究。APS技术目前使用的还不是人工智能,而是基于有限资源、固定条件约束下的最优方案分搜寻技术。它的原理就如上面的例子,会把人们对计划的要求划会为硬性约束与软性约束。通过寻优算法(禁忌搜索、遗传算法、模拟退火等)在浩瀚的组合方案中,在有限的时间内,找出的方案,需要在满足硬性要求的前提下,最大程度上满足软性要求的方案。寻找这些方案的一些原理、算法,就涉及一些数学上的概念,例如NC问题,NPC问题等,在此就不再熬述了。如果有机会我另写一些相关的文章讲解一下。
总而言之,APS就是通过一些数学算法,在计算机的强大运算能力支持下,找出一些可能比人类排产老师傅更佳的生产调度计划。
3. APS的适用场景.
正如上面提到,现在制造业更多的关注于主生产计划,而具体明细的车间产线层面的生产计划、调度计划,还是处于放养式的存在。而主生产计划由于有足够的关注,往往有更多的投入对其进行研究,而且它面对的问题更宏观;综合来讲,相对车间层面的生产调度计划就没那么多繁杂的制约因素了。所以,目前市上各种APS产品和技术,主要还是针对车间、产线甚至机台的生产调度计划,希望在这个层面的生产计划有一些开创性的成果。但其实我们可以想象,APS可以处理车间、产线层面的生产计划,那么面对制约因素少得多,或宽松得多的主生产计划,是完全卓卓有余的。所以,虽然各大商家都把自己的APS产品瞄准车间、产线层面的生产计划,其实如果在主生产计划上面所需求,它也是可以对现有的主生产计划作出些非常大的改善的。因为尽管主生产计划比较宏观,但还是由公司计划部门的人来制定的,那么就必然有一定的局限性。例如上面提到的计划质量、缓冲期是否合理等等,APS在这方面可以作出很大的提升。当然,把APS应用于主生产计划,其实还是需要下面层面的车间、产线生产计划的支持的,毕竟在主生产计划中,对各种资源与时间的预判,都要由车间、产线层面的生产计划进行实现。而不是毫无根据地猜一个资源可用量,或完成时间的。
当然,目前在制造业里面临的最大问题还是车间、产线面层的生产调度计划,目前各个APS产品与技术,都是号称可以解决这类问题,都是冲着车间、产线这个层面去的。所以目前见得最多的APS适用场面,还是在车间、产线甚至机台层面,针对已分配的工单,对各个车间、产线甚至机台,在已有的可用资源条件下,基于具体的业务制约因素,将生产任务适当分配到合理的生产单位(车间、产线甚至机台,工位),并根据计划中各任务的关后关联关系,确定每个生产任务的具体开始与结束时间。这个也是APS的核心价值所在。因为目前在车间调度工作中,对于资源的把控也许会相对准确一些,毕竟有条件的工厂,在自身产能不足,但订单要求有硬性规定的时候,可以通过引入外发加工来解决资源不足的问题。而生产时间的安排就没那么容易了。因为这是一个运算量非常大,考虑各种综合因素,考虑工序的前后关系,还要考虑工厂实现的班次等因素,综合起来的计算结果。人类是无法快速运算、毕竟种个方案的。这样的话,APS系统就可以基于自己内核所使用的各种最优解搜寻算法,基于各种约束;再利用计算的高速运算,快速地计算出各个方案的优劣,从而在短时间内对海量组合方案进行计算对比,从而往往能找出比人类更优的生产调度计划,甚至是对于生产任务的开始结束时间,甚至是精确到分钟的。因此,针对人类这方面的不足,通过大运算量,去生成的生产调度计划,是目前APS的主要应用场景。
4. APS产品及引擎的选用
目前世界上可用的APS产品其实还是不多的,毕竟这是一个数学上都还在不断探索的问题,目前APS产品或技术,主要有偏重于MRP方面的,例如英国FastRact, 还有一些是结合规划引擎与实际排程经验的产例如日本的Asprova. 还有国内也有一些新秀产品,而这些接触不多。另外还有一种不算是产品,而是基于一些规划引擎,结合企业自身的业务场景,自身以项目形式开发的APS系统。目前我所在的企业正是处于这种APS发展状态。我们是基于Optaplanner + Drools作为规划与规则核心引擎,结合自身业务规则,将业务场景中的各类实体抽象,并将呼类繁多的业务规则抽象总结翻译为硬约束与软件约束。再通过程序使用Optaplanner中的适当模式进行生产计划的自动生成。目前我接触过Asprova与Fastract(这个只是接触过他们的顾问提供的信息,不没有进行过项目实施).觉得Asprova确定是相对比较成熟的产品,虽然它的技术已经非常老旧,但基核心价值是引擎可以根据实际的排产经验作出运算优化。如果觉得自己公司的业务相对比较复杂、奇葩,且自己公司具有一定的技术开发实力,建议还是使用Optaplanner进行定制吧。但还是要注意,在作技术选型时,还要充分了解自己业务上的情况,例如排产规则,自己业务跟各个引擎常用的模式有多大差异。这样才能选择一个真正适用的产品或技术。
上述都是自己这些年在APS上遇到各种坑后的总结,不一定对,欢迎大家拍砖。
谢谢。
End.