浅尝一个排程引擎OptaPlanner - 前序
这是一篇关于OptaPlanner一开篇,当时只想分享一下尝试到的求解器技术,想不到越写越多,现在所有写过的关于这个求解器及APS应用相关的文章都集成在知乎此专栏中,以便大家无需四处查找。
当码农有10多年了,由建筑行业软件,各种MIS,通用物流定制平台,CCTV客户端(是闭路电视,不是央视喔)啥都做过。最后小试一下创业,不过那都是闹着玩的,不到一年就回到码农的队列,重拾搬砖的行当。近些年一直在制造业,做过ERP,当过小组负责人。有人问为什么不转纯管理?是能力不足,气质不佳还是人品低下?我觉得都有些且不全吧。反正无论是当管理还是做技术,我还是觉得手里拿点实在的东西心里才踏实。并不是说管理不是一个好技能,而是本人遇机问题,机会不多,所以大多数时间都是在做搬砖,砖搬多了,当然想试一下,看能不能找个专门领域更学入一点的研究,总不能每天不是写CURD就是写业务逻辑。
老码农啥都搞,那也就是说没啥精的了。跟同行们说我是在制造业里做IT的,可人家习惯性地府视俺:工厂里的IT?说是ERP,不就是进销存嘛,能有啥技术含量?。嗯,觉得也是,不过要知道,当你深入到一个行业里去,无论是做什么,你都会觉得,你进的是天坑,你遇到的都是世界难题。毕竟那些说这个简单那个没技术的人,通常都只是在隔山观火走马观花而已。在企业里我做过营业模块,也做过生产模块,其实当你深入其中,去细撸各种业务逻辑细节时,你就会感觉到:妈的,今年的诺贝尔软件奖舍我其谁?其实世界上没有好做的软件,觉得好做,只是你的系统简单而已,而不是哪个行业简单。好了,既然ERP这么简单,老农我也觉得这不是我的菜呀(其实是能力不足,没办法深入到ERP的业务里罢了).好在现在整个中国都在闹智能制造, 我觉得也可以在制造业做点大家觉得有小许牛B的事了(原谅我做了点小梦)。先不说这一轮的人工智能热潮会不会如2000年的互联网热一样,火一下就没了。但有些进步是大家都能看得到的,起码谷哥他家的狗在围棋上把人类给秒了。
关于智能制造,在其中一个领域,就是让计算机程序把一些以前还是需要有经验,IQ还可以的人才能做的东西,帮忙给学着做了,而且还是学习、总结经验,越做越好;而不仅仅是通过网络控制机器手来代替人手。能被机器手代替的,更多的是重复劳动;另外就是机器手的高精度操作远超人类。但是,例如做生产计划这类需要很高“智能”才能做的事情,在人工智能的背景下,也许也会慢慢有成果出现。说到生产计划,可能大家遇到最多的都是MPS(主生产计划),它是一个很高层次相对不太细化的计划,空间维度上只能做到到车间计划,时间维度上最多只能精确到天;更多的算是企业层面的计划,对于具体的行产制造作业而言不太具有实操性。要满足智能制造中,实现对机台进行分钟级(甚至秒级)的生产指令下达。光靠MPS是不可行的,事实上MPS下达到车间后,会有相应的调度部门来对MPS进分解,形成作业调度指令,把工单对应的更细化的生产指令分配给操作班/组。这些作业指令在很多情况下,还不是精确的完全可执行的信息,很多还只是“主体信息”,到了机台的操作班/组,还需要班/组长根据机台的实际情况进行一些额外的处理,才能形成真正的操作指令。所以,一些很复杂的细节逻辑,其实是下压给了调度部门和机台班组。但要实现智能制造,要提高生产自动化程度,这一系列的复杂转换,就不可能由人逐层地下发。因为:
1. 在速度上来说,人对复杂问题的处理速度远跟不上计算机,特别是涉及大量计算、判断的信息处理时;
2. 能做出一套好的MPS就已经是不错的生产计划员了,已经需要对业务非常熟悉,对各种情况的预判准确率要达到一定的程度;这是需要丰富的经验和试错经历的。
3. 当完成了MPS要分解成调试指令甚至是操作指令时,这个过程就不可能只靠人类来实现,因为里面涉及的计算和逻辑判断太多,太复杂,远超过人类可以处理的范围。
就算花大量的人力物办做出一套可行的调试指令,但要在可行的基础上实现相对最优,那就不是人可以做到的了,这就涉及一个数学上的NPC问题,我在下一篇文章里会说明。
因此,要实现上面说的那些复杂、不可能靠人力实现的工作,就需要依赖计算机的强大运算能力。但计算机也只是按人的指令要求进行计算和判断而已,所以归根到底还是需要人的智慧。而在这个场景下,实际上是需要依赖人类对数学的运用来实现这么一些复杂的系统。Google那只会下围棋的狗(现在此狗已经站在这个星球的围棋顶端开卷孤独求败了),其实就是人类给它实现了一大堆的数学逻辑,令它具体有学习围棋能力。可我们并没有这个水平,我们怎么办呢?怎么样能完成上面看起来很牛的工作呢?其实现在业界已经在研究,并且有些比较成功的应用,那就是APS。APS的核心就是在有限的资源条件下,实现相对最优的资源配置。为什么我老是讲相对最优,而不说最优呢?这里涉及一个数学领域NPC, NP-Hard问题的概念,还得接下来文章中细说。
APS这个核心是怎么实现的呢?那就需要一个很利害的引擎。也许会有同学问,业务规则我都知道呀,条件限制我都得到了,那我自己按业务规则写出来,然后就用这个来跑,把结果跑出来,形成一系列的调试指令不就行了吧?扯什么引擎,什么相对最优呢?没错,如果是这样的话,估计这部分同学也是觉得别人的系统很简单,没啥技术含量了。事实上业务规则分两种,很多个层次。层次先不说,我们先说种类。一种是硬规则(相对应的制约,后面的篇章里会叫做硬约束,另一种是软件规则(相对应的制约,后面的篇章里会叫做软约束)。硬规则就是一些必定不能违反的规则,例如一个产品所使用的原料必然是指定范围内的,需要使用指定的机台进行生产,否则就不可能生产出来,或出来的必然是报废品。而有一些是软规则,就是一些规则老板们希望都不要违反,违反了会让他掉钱的,但客观事实出现了一些情况,没办法完全保证所有规则都 遵循,部分规则也只能放弃部分规则了,也就是相害相遇取其轻。例如:同样的产品,可以用两种机台生产,有一个机台的成本非常高,是用来生产专用产品的,普通产品在正常情况下是不会用那个机台生产的,如果普通产品放上去,必然亏本。但如果现在正是旺季,而一个很重要的客户的订单,需要一种生产普通产品,如果不用这个高成本机台生产,那铁定是无法按期交货,会影响后以后的合作。这时候老板也只能亏一次,起用这个天价机台了。但是生产得越多亏得越多,老板就要求调度员们绞尽脑汁,力求尽量少用这个高成本机台。
当每天都有天量的生产要求要处理时,你以为计划员、调度员们是神呀?所以他们会根据经验编制一个认为差不多可以了的生产方案就往上报,老板也如愿以偿地保住了客户亏了不少钱。可是过两天老板会发现,其实有更好的方案可以更少地使用高成本机台,甚至还有一个无需使用主成本机台的方案,他会去把计划员、调度员们捉来杀掉拜旗吗?(只有码农才有这个待遇吗?),计划员是不可能被问责的,因为:1、在短时间内,人类能找到这个方案吗?不一定,其实是很难,非常难。2. 计划员、调度员们找到的方案有人去挑战吗?不一定(基本上没人有这个能力),因为你也不知道他们出的方案是不是最优?甚至他们自己也不知道。除非他们把所有可能的情况都列举一次。在现实情况下,不要说他就这一个方案做到退休能不能穷举,就算全公司的人一起来列举计算,算到地球毁灭那一天,也不一定能找到。这个时候排程引擎就派上用场了。而其中的核心就是一些数学算法,具体地说是一些用于寻找最优方案的启发式算法。就如上面所说,这么多的情况,计算机也只是一个一个去试,一个一个去计算呀,那如果可能的情况足够多,你把全世界都用来挖矿(比特B)的电脑都拿来跑也不一定能跑完。引擎的作用就是当可能情况无限大的时候,并不会无序地一个一个试,而是集成一些算法,有策略地找,虽然也不一定能找到,但在相同的时间内找到相对最优方案的机会,相对人来说,还是超N个数量级的。其中就集成了一些例如Tabu search算法,遗传算法,退火算法和爬山算法等,这些被称为启发式算法。我们的主角OptaPlanner就是这么一个集成了这么多数据工具的一套开源软件。一下篇我们就开始对OptaPlanner进行学习。
如需了解更多关于OptaPlanner的应用,请发电邮致:kentbill@gmail.com
或到讨论组发表你的意见:https://groups.google.com/forum/#!forum/optaplanner-cn
若有需要可添加本人微信(13631823503)或QQ(12977379)实时沟通,但因本人日常工作繁忙,通过微信,QQ等工具可能无法深入沟通,较复杂的问题,建议以邮件或讨论组方式提出。(讨论组属于google邮件列表,国内网络可能较难访问,需自行解决)。