在生产排程过程中,除了可以借助强大的算法,与优质的规划模型对待排任务进行排产优化外,还会遇到一些需要人为锁定部分任务的情况。无论是APS系统开发人员,还是排产作业人员,在常见的认识中,对于“锁定”概念的理解,第一反应就是把任务固定到某个资源(例如机台)上生产,也就是锁定任务的分配空间;更进一步就是固定任务的时间,也就是固定任务什么时候开始,什么时候结束。但在经历了易排平台作业调度模块的锁定功能设计开发后,发现就“锁定任务”此一概念,蕴含了远比我们象想中多得多的因素需要考虑。今天我将这其中的内容拿出来跟大家讨论一下。所谓魔鬼往往藏在细节中,经历过对系统功能的各种细节琢磨、反复推敲后,才生成,同一个锁定任务概念或功能,表示看是一个世界,深入分析又是另外一个世界。本文针对"锁定任务"两个不同方向分享一下我在设计这个功能时,处理细节问题时总结出来的一些看法。我把它划分为两个方向:
-
对任务锁定的不同情况与程度,我们把它称为“任务锁定”概念的外延
-
对任务锁定过程中涉及到的一些我们当初设想中往往没有意料到的、但必须面对并解决的问题,我们把它称为“任务锁定”概念的内涵(或称任务锁定的本质)。
任务锁定的外延
对生产排程、或生产计划部门的小伙伴,不管是PMC的重要角色、经验丰富的排产师,还是负责生产企业ERP生产计划模块的IT大牛,对于锁定任务第一反应就是:这不简单嘛,就是编制计划过程中,部分任务因为情况特殊,把它的生产机台、开始时间固定好;即固定一些任务的时空(时间 - 何时开始、何时结束;空间 - 在哪个设备、安排哪人员、使用哪些物料执行生产操作)。但实际上,我们把这种需求延展开来,就会发现有很多种衍生情况,上述固定时空(时:起止时间,空:用哪台设备)只是一个比较虚泛的说明。根据实际情况下,锁定可以衍变出很多种情况:-
只限定时间,不限定空间;
-
只限定空间,不限定时间;
-
固定精确的开始时间,限定时间区间内开始(或结束);
-
固定精确的资源,和限定指定的资源范围。
下面对上述4种情况作深入分析,看看在我们在设计系统过程中,有哪些值得注意的。
仅锁定时间
锁定任务的开始(或完成)时间为某一时间点
要求一个任务必须在某个时间点开始(或结束),但资源不固定,可以根据该任务对应的工序设置在指定的资源可选范围内,由引擎通过规划运算确定最终的加工资源(包含加工机台、辅助设备、操作人员及消耗物料等)。因此,该需求的实现方式较为简单,可以将任务的开始(或结束)时间作为一个硬约束,让引擎固定任务在该时间点开始。事实上基于这种时间上的锁定,还需要考虑空间(即资源)锁定的需求,若同时具备时间与空间锁定的需求,则有更好的处理方式,易排平台通过实践,使用的就是这种方式,可以尽可能减少规划运算,并确保锁定要求得到满足。限制时间的开始(或完成)时间为某一时间段
相对于固定任务开始(或完成)时间为一个时间点,要求一个任务必须在某个时间范围内开始(或完成),但不资源不固定到一个时间点,通俗一点理解就是时间固定得不太死,需要在某个时间区间内开始(或完成)。关于锁定任务的时长,我们在设计系统时,需要考虑到实际情况,同一个任务在不同的环境下(例如使用不同的生产设备与材料)其加工时长有可能不相同。因此,在提供锁定任务的信息过程中,应该遵循开区间原则,即只确定开始时间,结束时间应该由系统计算任务的实际加工时长后,自动推算得出。否则很可能人为计算时长过程中,可能考虑不周而提供了错误信息,从而导致锁定操作产生冲突。对于锁定时间段的要求,其实现同样也是通过约束实现,这种锁定时间段需求的实现,有可能会与其它约束产生冲突,需要细心处理。例如需要考虑任务分配资源的资源日历,从而确保任务不会被分布到日历的非工作时间。
仅锁定空间
锁定任务在一个资源生产
指定使用某个资源,是指任务任务必须固定在某一个资源加工,例如:某些任务存在特别的工艺需求,仅有一个资源才能加工处理。该功能实同与下文的“限定在几个资源”的约束重叠,具体实现由介绍见下文。限制任务在几个资源生产(即限制选择范围)
限制任务在某几个资源(或一定范围)生产,事实上就是最常见的情况,与任务与资源的匹配关系。某一个任务源自某个工序,该工序具体有哪些资源作为可选项,通常由工艺系统维护。易排平台上所有模块中的工单、工序、任务等排程对象的“资源需求”列表,其本质就是限制某一任务在指定范围的资源生产。对于资源范围限制(无论是锁定单一资源还是限制资源可选范围),都可能通过任务与资源的匹配来实现。只是锁定单一资源,是一种特殊情况 - 某个任务可选资源只有一个。时空均锁定(或限制某个范围)
时空均锁定(或限定)就很好理解了,从业务上看,就是上述“仅锁定时间”与“仅锁定空间”两个需求的组合。原则上我们也应该按该需求的思路设计。但是,大多数情况,可以由上述两个维度锁定的功能结合来达到要求。但实际设计过程中,还会有非常多的细节需要处理。在易排平台中,经过项目实践,发现前两个需求并不能简单合并即可实现第三个需求。有一些特殊的情况,还需要设计出特殊分支处理,才能得到更好的效果。这种情况
以上是对“锁定任务”的外延的一些见解,下面我们再看看其内涵(或本质)是什么。
任务锁定的内涵
我们在对任务进行锁定操作,其真实的本质,以及基于这个本质,会涉及到哪些细节需要考虑呢?上面已经提出,所谓的锁定,就是固定任务的时空,那么在实现锁定时空的过程,对其它任务、对资源、对计划周期中的时间区间都会产生什么影响呢?锁定任务对计划的空间维度影响
锁定资源 - 锁定一个资源,那么该资源在排产过程中,其它任务就不能使用,这仅是对于主资源而言,一个任务占用的资源可能不止一个,或不止一种。例如一个金属加工任务,可能需要1台CNC,1个夹具,1块胚料以及1位操作人员共4个资源。其中对于这4个资源,我们作深入分析:-
CNC通常是固定在车间或某产线上,且在加工任务时会被独占,我们把它定义为主资源。
-
夹具通常在加工任务时会被独占,但它可以根据任务所处的机台进行位置变更,我们把它定义为辅助资源;
-
操作人员与夹具类似,我们把它定义为辅助资源,但他对任务而言不一定是独占的,例如:一个操作人员可能同时跟进邻近的两台数控机床上的任务。
-
胚料是消耗性物料,即一些APS产品上所讲的非可再生资源,这种物料资源既然是非可再生的,其意思是一个资源在一个计划周期内,前一天消耗掉了一些资源量,到了第二天需要扣减掉这些消耗量。
锁定任务对资源的影响形成后,有以下两种情况需要考虑:
需要考虑其它锁定任务的资源可用情况
因为我们一个波次的计划,有可能存在多个需要锁定的任务,在锁定这些任务时,就需要考虑它们的资源可用情况。例如待排任务中,同时存在两个锁定任务,指向相同的资源,且时间重叠;这种情况是不允许的。我们的引擎就需要找出这种情况,并反馈给用户,由用户作出调整。规划运算中需要考虑锁定任务后对于非锁定任务
当一个待排数据集中,存在锁定任务,并占用了一定的资源量后。将那些非锁定资源进行规划运算过程中,需要考虑那些已锁定任务的资源占用。我们需要让引擎知道,有哪些任务锁定了,这个锁定行为会造成哪些资源被占用或被消耗,从而让引擎在规划运算过程中动态地觉察这种情况,以防出现锁定任务与非锁定任务的资源冲突情况。锁定任务对整体计划的时间维度影响
上述问题计划的还只是锁定任务对资源的影响,实际上通过对资源的空间占用或消耗,会传导到时间的变更。平时我们常说的产能、资源可用量往往会默认一个固定周期,例如:一个车间的产能是多少,指的是在某一周期中,车间的产量。所以,当资源不足时,任务的开始时间就会延后,也就是以时间换空间。对寻优过程的影响
当因为锁定任务占用了一部分资源,那些非锁定任务的时间就有可能被改变,最终导致的结果就有可能计划整体效率低于全部为非锁定任务的情况。因为不可能正因锁定任务的存在,令到引擎在寻找优化方案时,因为某些锁定任务无法变更,而无法达到整体更优。例如:某个任务被锁定到周二的下午加工,但事实上若不存在这个锁定任务,引擎会把另外的任务排在这个时间加工,通过调配不同资源的组合,以及减少任务之间的换摸换型引起的时间或成本损耗,从而提到一个更优的方案。但因为锁定任务必须在周二下午加工这个硬性规定,令引擎无论如何都无法找到更好的方案。从而让整体计划的资源利用率无法达到相对最佳状态,从而引起整体任务的准时完成率下降,订单延误 - 即时间维度的影响。当然这只是一个消极方向的例子,也有可能因为锁定任务,会产生积极的影响,从而得到一个相比没有锁定任务情况下更佳的方案。无法对锁定任务作任何正面或负面的定义,锁定任务只是一种业务需求,实际效果需要视具体情况而定,再说,你总不能为了高效而放弃正确嘛。对资源可用性(或可用量)的考虑
非锁定任务被提交到引擎进行排产运算过程中,关于时间上的优化,引擎会基于Project Job Scheduling问题模型中关于资源冲突的原则,当某个时间点资源不足时,会自动提前或延后开始时间;任务加工期间遇到资源非工作时段(即加工周期横跨资源的休息时段)时,会自动延长加工周期,来推算实际完成时间。但锁定任务在规划运算过程中无法被动态地推算起止时间,因此,在进行任务锁定数据展开时,就需要考虑当这些锁定任务遇到所用资源的非工作时段,应该如何处理?易排平台会把这个选项交给用户决定。用户可以根据实际情况来决定按照资源实际工作时间来安排加工,或忽略资源的时间设定,强生使用资源的非工作时间,例如:加急订单需要取消中途休息,来达成交付任务。关于锁定任务更多的情况
锁定任务在展开到待排数据阶段已经存在大量细节问题需要处理,但事实上这还只是大量细节魔鬼的其中一个。用户设定锁定锁定的时空,是否与其它锁定任务存在冲突?同一资源时空上的锁定任务是否存在资源竞争?一个任务锁定后,下一个计划周期是否会要取消?或是否会通过实时规划的方式将期取消锁定?是否会通过实时规划的方式变更原来的锁定时空?例如要主更一下加工资源,修改一下开始时间.....诸如此类的情况,仍隐藏着巨量繁复烧脑的细节逻辑需要啃下来,才能实现一个本对可用的任务锁定功能。欢迎提出更多关于锁定任务的场景来探讨。<完>
标签:需要,固定,任务,时间,外延,内涵,锁定,资源,排程 From: https://www.cnblogs.com/kentzhang/p/18238653