无论是面向销售订单的MPS,还是基于多工序制约关系的APS,还是具体车间生产中针对单一工序的任务作业调度优化,都存在基于被排程对象(例如销售订单、生产工单、工序任务)的优先级进行优化的需求场景。当我们仅在宏观、较高层次的角度考虑,任务优先级是相当简单的。无非是实现“确保高优先级的任务(以下将所有排程对象统称为任务),更优先于低优先级的任务执行,即优先级越高越早执行”这一简单的要求。
尽管上述的需求描述容易理解,且可以大概设想实现起来并不复杂。但当我们在具体的项目中遇到该需求时,则有可能需要针对该需求的不同分支情况作深入展开,并需要针对不同分支作情况作不同层次、权重分析后,才能在OptaPlanner/Timefold中更好实现。本文将归纳我们在具体项目过程中,面对任务优先级这一需求时,考虑到的情况分支与设计思想。在系统中具体实现,特别该需求OptaPlanner/TimeFold中对应的具体模型与约束实现逻辑及相应代码,则属于我们产品与项目的内容,无法在此完全公开。而在我们的《OptaPlanner/Timefold实践课程》中会提供相应的设计资料与示例代码。
优先级的简单理解 = 误解
所谓的“任务优先级”需求,我们在进行系统设计初期,对其并不太重视,因为这基本上算是一种任务排序要求,例如我们需要对一些任务进行排序,优先级越高的越靠前,反映在时间上就越早执行。在SQL或Java中仅需一个Order By子句或一个JavaStream的Collections.sort方法即可实现。但当我们细心分配用户的需求时才发现,情况远没有我们设想的那么简单。因为“通过排序来实现任务优先级”,仅局限于所有任务均处于同一任务序列内的情况,例如,对于同一个设备的待执行任务序列,通过对序列按优先级排序,即可轻松实现优先级越高,越早执行。
实际需求需要视情况按不同的分支处理
但事实是,我们真正需要面对的场景,并非如此简单,可以归纳如下:
1.多个任务序列并行,且争抢资源,甚至资源冲突
我们的排程系统面对的往往是多个序列,还是以生产设备与待加工任务序列的场景为例,有可能我们的系统面对的是多个设备,也就是存在多个并行的序列,优先级需求指的是在多个设备上实现,而非单一设备上。即需要考虑将大批量的任务分配到多个设备上时,在分配方案上如何实现跨设备的任务优先级需求。
2. 资源不足场景下的资源优先级
此外,有可能因为产能问题,并无法保证所有任务均可以分配到合理设备;即资源不足时,任务优先级的高低问题。这种情况就不再是根据优先级安排任务的执行选择次序问题,而是需要在有限制的资源条件下,尽可能保证高优先级的任务获得资源;即若资源确实不足的情况下,需要放弃部分任务的资源分配时,尽可能先放弃低优先级的任务。因此,这是一个根据任务优先级进行任务取舍问题,而不是任务的执行时间问题,与我们初始考虑的情况有本质区别。但从业务上,它仍然是任务优先级问题。
3. 若因为产能问题,有部分无法保证交付时间时,优先级的作用
当可用资源量不足,但可以通过往后延迟任务的执行时间,来将所有任务都分配到合适的资源。可以理解为,资源的空间维度(数量)不足,通过时间维度来实现分配到位。若任务均存在要求交付时间时,那么面对任务优先级需求时,则反映为,尽可能保证高优先级的任务不被延误(即保证高优先级任务在交付时间前完成)。从另一个角度看,就是若必须有部分任务无法保证交期,则优先级越低的任务越优先放弃交期保证。
4. 任务优先级与其它需求的冲突
在实际的排产项目需求中,不可能只基于优先级进行资源分配与任务时间安排,还需要考虑众多其它因素,例如:成本 - 某些生产资源尽可能满足了任务优先级要求,但该加工次序将会引起具体的换摸成本。又如:基于任务优先级排好的资源,有可能无法实现最优的“任务-资源”匹配原则。诸如此类问题,会使得整个优化模型形成一个多目标优化模型。因此,第4点不仅在任务优先级的需求中遇到。不在本文讨论重点。后续我们会针对排产及相关问题中,多目标优化的场景独立一篇出来讨论。
进行了上述分类后,因应任务优先级需求实现,即可根本不同的场景类别分别设计对应的约束来实现。例如:
-
针对多个任务序列进行排程时,通过推导出来的任务完成时间与就绪时间之差作为惩罚评分基础。
-
对于资源(设备)不足情况,当对于未被分配到设备的任务进行惩罚时,可考虑将为每个任务设定一个因素的惩罚评分值为基础。
-
对于已产生延误的任务,可以考虑将其延误程度(例如完成时间与交付时间之差)作为惩罚评分的基础。
-
对于优先级需求与其它需求的竞争冲突的情况,并非仅属于优先级方面的问题,而是优先级需求与其它需求的权重问题。可以根本实际情况综合考虑不同约束的重要程度,设定不同的额外权重来定义不同约束的重要程度,或评分层次来实现不同需求的层次隔离。
上述第1,2,3三种情况其评分逻辑各不相同,但均需要注意:必须将满足惩罚条件任务的优先级纳入评分逻辑中,作为影响评分结果的一个重要因子之一,从而实现不同场景下的任务优先级约束
关于优先级的定义
无论是MPS还是APS中,任务的优先级需要根据实际情况来实同,排程系统只能基于这些已定义好的优先级字段值,在排程过程中进行针对性的优化。而在具体项目实践中,定义任务的优先级,也有非常多的情况。例如:根本任务的紧急程度定义优先级,如: 可见以下式子定义:p = d / (t1 - max(t2, t3)),其中p为任务优先级的字段值,d为该任务的生产时长, t1为任务的交付时间,t2为任务的就绪时间,t3为当前时间.
当然也有可能根据人工对客户、质量、时间、资源等因素的综合考虑,“人工”定义的情况。对于规划系统而言,任务的优先级是一种输入,这种存在多因素扰动、且容易变更的逻辑,应该放在规划系统外实现,至少需要在规划系统的前置处理程序(例如待排数据的展开阶段)中实现。
<完>
我们提供基于OptaPlanner/Timefold的规划服务平台,可提供APS,VRP(辆车路径规划与调度),实时作业调度等供应链及生产相关的优化运算模块。与平台相关疑问,可以添加本人微信(13631823503)探讨,或关注我们的微信公众号【让APS成为可能】及时接收相关消息。