浅尝一个排程引擎Optaplanner - 前序

简介:   当码农有10多年了,由建筑行业软件,各种MIS,通用物流定制平台,CCTV客户端(是闭路电视,不是央视喔)啥都做过。最后小试一下创业,不过那都是闹着玩的,不到一年就回到码农的队列,重拾搬砖的行当。近些年一直在制造业,做过ERP,当过小组负责人。

  当码农有10多年了,由建筑行业软件,各种MIS,通用物流定制平台,CCTV客户端(是闭路电视,不是央视喔)啥都做过。最后小试一下创业,不过那都是闹着玩的,不到一年就回到码农的队列,重拾搬砖的行当。近些年一直在制造业,做过ERP,当过小组负责人。有人问为什么不转纯管理?是能力不足,气质不佳还是人品低下?我觉得都有些且不全吧。反正无论是当管理还是做技术,我还是觉得手里拿点实在的东西心里才踏实。并不是说管理不是一个好技能,而是本人遇机问题,机会不多,所以大多数时间都是在做搬砖,砖搬多了,当然想试一下,看能不能搞个自动化机械出来,总不能搬到退休那天吧,码农到底多少岁退休呀?看来如果再不练就点拿得出手来的东西,到时候我就只能退,无法休了。那些奋斗于500强,30岁而立之年已赚足退休资本的农场主们不在此列。

  好了,唠叨了半于,回来说说粘点边的。上面说了,老农啥都搞,那也就是说没啥精的了。跟同行们说我是在制造业里做IT的,可人家习惯性地府视俺:工厂里的IT?说是ERP,不就是进销存嘛,能有啥技术含量?。嗯,觉得也是,不过要知道,当你深入到一个行业里去,无论是做什么,你都会觉得,你进的是天坑,你遇到的都是世界难题。毕竟那些说这个简单那个没技术的人,通常都只是在隔山观火走马观花(这两成语是这么用吗?体育老师还要兼顾数学,所以本农的语文水平有限呀。)在企业里我做过营业模块,也做过生产模块,其实当你深入其中,去跟各种业务逻辑细节搏斗时,你就会感觉到:妈的,今年的诺贝尔软件奖舍我其谁?其实世界上没有好做的软件,觉得好做,只是你的系统简单而已,而不是哪个行业简单。好了,既然ERP这么简单,老农我也觉得这不是我的菜呀(其实是能力不足,没办法深入到ERP的业务里罢了).好在现在整个中国都在闹智能制造,我觉得也可以在制造业做点大家觉得有小许牛B的事了(原谅我做了点小梦)。先不说这一轮的人工智能热潮会不会如2000年的互联网热一样,火一下就没了。但有些进步是大家都能看得到的,起码谷哥他家的狗在围棋上把人类给秒了。

  关于智能制造,在其中一个环节,就是让计算机把一些以前还是需要有经验,IQ还可以的人才能做的东西,帮忙给做了;而不仅仅是通过网络控制机器手来代替人手。能被机器手代替的,更多的是重复劳动,另外就是机器手的高精度操作远超人类。但是,例如做生产计划这类需要很高“智能”才能做的事情,在人工智能的背景下,应该也会慢慢有成果出现了。说到生产计划,可能大家遇到最多的都是MPS(主生产计划),它只是一个很高层次的计划,只能计划到车间(顶多是产线),时间上最多只能精确到天;更多的算是企业层面的计划,不太具有实操性。要满足智能制造中,实现对机台进行分钟级(甚至秒级)的生产指令下达。光靠MPS肯定不可行的,事实上MPS下达到车间后,会有相应的调度部门来对MPS进分解,形成调试指令。把工单再分配给操作班/组,而这个生产指令在很多情况下,还不是精确的完全可执行的信息,很多还只是“主体信息”,到了机台的操作班/组,还需要班/组长根据机台的实际情况进行一些额外的处理,才能形成真正的操作指令。所以,一些很复杂的细节逻辑,其实是下压给了调度部门和机台班组。但要实现智能制造,要提高生产自动化程度,这一系列的复杂转换,就不可能由人逐层地下发。因为:1.在速度上来说,人对复杂问题的处理速度远跟不上计算机,特别是涉及大量计算、判断的信息处理时;2. 能做出一套好的MPS就已经是不错的生产计划员了,已经需要对业务非常熟悉,对各种情况的预判准确率要达到一定的程度;这是需要丰富的经验和试错经历的。3. 当完成了MPS要分解成调试指令甚至是操作指令时,这个过程就不可能只靠人类来实现,因为里面涉及的计算和逻辑判断太多,太复杂,远超过人类可以处理的范围。4.就算花大量的人力物办做出一套可行的调试指令,但要在可行的基础上实现相对最优,那就不是人可以做到的了,这就涉及一个数学上的NPC问题,我在下一篇文章里会说明。

  因此,要实现上面说的那些复杂、不可能靠人力实现的工作,就需要依赖计算机了。但计算机也只是按人的指令要求进行计算和判断而已呀,所以归根到底还是需要人的智慧。而在这个场景下,实际上是需要依赖人类对数学的运用来实现这么一些复杂的系统。Google那只会下围棋的狗(现在人家已经站在这个星球的围棋顶端开卷孤独求败了),其实不就是人类给它实现了一大堆的数学逻辑嘛。可我并没有这个水平,我们怎么办呢?怎么样能完成上面看起来很牛的工作呢?其实现在业界已经在研究并且有些比较成功的应用了,那就是APS,APS的核心就是在有限的资源条件下,实现相对最优的资源配置。为什么我老是讲相对最优,而不说最优呢?还是得下篇来说。APS这个核心是怎么实现的呢?那就需要一个很牛的引擎。也许会有同学问,业务规则我都知道呀,条件限制我都得到了,那我自己按业务规则写出来,然后就用这个来跑,把结果跑出来,形成一系列的调试指令不就行了吧?扯什么引擎,什么相对最优呢?没错,如果是这样的话,估计这部分同学也是觉得别人的系统很简单,没啥技术含量了。事实上业务规则分两种,很多个层次。层次先不说,我们先说种类。一种是硬规则(相对应的制约,后面的篇章里会叫做硬约束),和种是软件规则(相对应的制约,后面的篇章里会叫做软约束)。硬规则就是一些不能违反的规则,例如一个产品所使用的原料必然是指定范围内的,需要使用指定的机台进行生产,否则就不可能生产出来,或出来的必然是报废品。而有一些是软规则,就是一些规则老板们希望都不要违反,违反了会让他掉钱的,但客观事实出现了一些情况,没办法完全保证所有规则都 遵循,部分规则也只能放弃坚守了,也就是相害相遇取其轻。例如:同样的产品,可以用两种机台生产,有一个机台的成本非常高,是用来生产专用产品的,普通产品在正常情况下是不会用那个机台生产的,如果普通产品放上去,必然亏本。但如果现在正是旺季,而一个很重要的客户给订单过来,要一个生产普通产品,如果不用这个天价机台生产,那铁定是无法按期交货了,会影响后以后的合作,这时候老板也只能亏一次,起用这个天价机台了。但是生产得越多亏得越多,老板就要求调度员们绞尽脑汁,力求尽量少用这个天价机台。每天都有天量的生产要求要处理,你当计划员、调度员们是神呀?所以篇到一个认为差不多可以了的生产方案就往上报呗,老板也如愿以偿地保住了客户亏了不少钱。可是过两天老板会发现,其实有更好的方案可以更少地使用天价机台,甚至还有一个无需使用天价机台的方案,他会去把计划员、调度员们捉来杀掉拜旗吗?(只有码农才有这个待遇吗?).问题是:1、在短时间内,人类能找到这个方案吗?不一定,其实是很难,非常难。2. 计划员、调度员们找到的方案有人去挑战吗?不一定(基本上没人有这个能力),因为你也不知道他们出的方案是不是最优?甚至他们自己也不知道。除非他们把所有可能的情况都列举一次,在现实情况下,不要说他就这一个方案做到退休能不能穷举,就算全公司的人一起来列举计算,算到地球毁灭那一天,也不一定能找到。这个时候排程引擎就派上用场了。而其中的核心就是一些数学算法。就如上面所说的,这么多的情况,计算机也只是一个一个去试,一个一个去计算呀,那如果可能的情况足够多,你把全世界都用来挖矿(比特B)的电脑都拿来跑也不一定能跑完呀。这就对了,引擎的作用就是当可能情况无限大的时候,并不会无序地一个一个试,而是集成一些算法,有策略地找,虽然也不一定能找到,但在相同的时间内找到相对最优方案的机会,相对人来说,还是超N个数量级的。其中就集成了一些例如Tabu search算法,遗传算法,退火算法和爬山算法等。我们的主角Optaplanner就是这么一个集成了这么多数据工具的一套开源软件。一下篇我们就开始对Optaplanner进行学习。惊不惊喜?意不意外?:) 

  首次发文,文笔不通,有砖尽管砸,老农受得了!

一个IT老农,先尽力好当儿子、丈夫和父亲的责任,然后做点有趣的事。
目录
相关文章
|
1天前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
3月前
|
监控 Java 测试技术
技术分享:设计依赖双父任务的子任务执行流程
在复杂的工作流和项目管理中,任务之间的依赖关系至关重要。当一个子任务需要等待两个或多个父任务同时完成后才能执行时,合理的设计和实现这一流程对于确保项目顺利推进至关重要。以下,我将从设计思路、技术实现、以及优化策略三个方面,分享如何在工作学习中有效处理这种依赖关系。
57 2
|
4月前
|
C++ 容器
【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——AVL树
【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——AVL树
34 5
|
4月前
|
开发者 Ruby
【绝技揭秘】Rails应用如何借助状态机巧化繁为简?一文带你走出复杂逻辑的迷宫!
【8月更文挑战第31天】状态机是简化复杂业务流程的强大工具,尤其适用于需遵循特定转换规则的对象,如订单系统。本文通过技术博客形式,介绍如何在Rails应用中利用`state_machine`这一流行gem实现状态机,通过具体示例代码展示其定义与使用方法,帮助你更清晰、高效地管理订单状态转换等业务逻辑。
30 0
|
5月前
|
存储 算法 索引
深度挖掘:Python并查集背后的秘密,让你的代码逻辑清晰如水晶!
【7月更文挑战第17天】并查集,一种高效处理集合合并与查询的数据结构,常用于图论、社交网络分析等。Python中的实现利用数组存储元素的父节点,通过路径压缩和按秩合并优化查找和合并操作。简单代码示例展示了查找和合并方法,以及应用在检测无向图环路。并查集以其优雅的解决方案在算法世界中闪耀,提升代码的清晰度和效率。
54 5
|
7月前
|
分布式计算 Java 测试技术
肝Spark源码的若干骚操作
肝Spark源码的若干骚操作
49 0
|
7月前
|
算法
【数据结构入门精讲 | 第十七篇】一文讲清图及各类图算法
【数据结构入门精讲 | 第十七篇】一文讲清图及各类图算法
66 0
|
XML 存储 Java
万字+40张图带你探秘小而美的规则引擎框架LiteFlow
在每个公司的系统中,总有一些拥有复杂业务逻辑的系统,这些系统承载着核心业务逻辑,几乎每个需求都和这些核心业务有关,这些核心业务业务逻辑冗长,涉及内部逻辑运算,缓存操作,持久化操作,外部资源调取,内部其他系统RPC调用等等。时间一长,项目几经易手,维护的成本就会越来越高。各种硬代码判断,分支条件越来越多。代码的抽象,复用率也越来越低,各个模块之间的耦合度很高。一小段逻辑的变动,会影响到其他模块,需要进行完整回归测试来验证。如要灵活改变业务流程的顺序,则要进行代码大改动进行抽象,重新写方法。实时热变更业务流程,几乎很难实现。
|
算法 C++
<<算法很美>>——(五)——回溯算法核心框架(上)
<<算法很美>>——(五)——回溯算法核心框架(上)
<<算法很美>>——(五)——回溯算法核心框架(上)
|
Java API Apache
求求你了,不要再自己实现这些逻辑了,开源工具类不香吗?(一)
最近公司来了一批实习生,阿粉负责带一个。这位小师弟说实话,基本功很扎实,做事也非常靠谱,深得阿粉真传。
求求你了,不要再自己实现这些逻辑了,开源工具类不香吗?(一)