多工序、多机台(产线)环境下的排程要点

关于生产计划排程的种类及其特性

释义:文中提到的资源,是指需要完成一个生产作业所需的生产条件,例如机台、原料等,称为广义资源。 

对于生产计划,常见有以下四种类型:

  • 单一工序,单一资源种类.
  • 单一工序,多资源种类.
  • 多工序,单一资源种类(较少见).
  • 多工序,多资源种类.

下面对上述四种生产计划进行逐一分析,本文的分析,着重于计划的优化实现,而不是硬性规则的实现,例如通过工序的就绪情况来确定资源的就绪要求,例如MRP等,这些硬性的约束可以通过规则引擎(例如Drools)来确保在生成计划过程中,计划的安排情况满足各种业务规则;而无需通过规划引擎(例如Optaplanner),在满足了硬性业务规则的基础上进一步优化。

 单一工序,单一资源种类

对于单一工序,单一种类资源的情况,是最简单的一种排程场景。即一个产品的生产过程只需使用同一种资源,进行一次加工即完成了生产过程。这种情况下,既然是单一工序,那也就没有了工序的先后资源的限制;单一种类资源,即表示没有了资源的选择优化。在现实实践中,此类生产计划通常是对产品工序路线中,众多工序中的一个较重要的工序进行计划时使用。需要进行优化的主要是对资源的使用分配,例如各机之间实现负荷平衡等需求。我们在实现这类计划时,需要通过设定机台平台的约束,让引擎在为工序分配任务时,尽可能地实现同一类机的负荷平衡。例如在印刷生产中,对最后的手工工序制定生产计划时,需要实现根据各个产线的人力安排情况,按比例地安排定额任务;即可使用“单一工序、单一种类”资源计划。

 单一工序,多资源种类

单一工序 ,多种类资源情况,是指仅对产品的一个工序进行排产,仅可用于这个工序的资源是多种多样的,并且各种资源之间可以互换的。此类计划主要是为了实现资源的优化分配。即按照一定的原则来对各个工序进行资源安排。例如:各种资源使用成本各不相同,在制定计划时,为了降低生产成本,应该在确保其它更高优先级的约束或硬性约束的前提下,尽量使用低成本的资源进行生产。举个实际的例子,在印刷行业中,对于对印张进行印刷的工序,有些印张可以通过CMYK四色印制,也可以通过调配特殊色,通过专色印制;但前者的成本相比后者更低,前后两种印刷方式就表示两种资源。在对印刷工序定制生产计划时,就会优先使用CMYK印刷,但这个也不是绝对的,例如如果CMYK资源已经超出负荷时,不动用专色印刷就无法实现按时交货时,还是会放弃成本这个约束,来迁就交期这个更高优先级的约束的。

多工序,单一资源种类

多个工序,单一种类资源的情况,则相对较少见。即计划中需要制定整个产品工序路线中的所有工序的资源和时间,其中资源只需要只有一种可选。那么可以理解到,这种情况对资源分配的要求就较低了,计划着重于对工序的前后关系制约了。即是在资源分配上,如第一种情况:“单一资源、单一任务”一样,基于资源利用的一些原则进行资源分配。而在安排工序的加工时间问题上,则需要根据产品的工序路线,实现对前后工序在时间上的次序关系;而这种次序又受到资源分配的限制。例如:如果印刷的第二工序中(有些企业称作印后加工),有过油、过胶、过UV三个工序,如果有一种机台同时可以实现这三种工序的,那么就满足了“多个工序、单一资源种类”的场景。这时候关于工序的资源分配,会有相应的资源使用约束。但更重要的约束是:一个产品的多个工序的处理次序上,这个次序必然是根据产品的工序路线设定的资源来执行的,否则就违反了硬性约束。所以,综合上述的资源分配和工序资源两种要求,我们需要面对的是两上互相矛盾的问题:1. 对于同一个产品需要确保其执行的工序与工序路线上设定的一致, 2. 对于一个资源(例如机台)上的生产效率而言,如何可以实现更多的同工序连接生产,因为即使是使用同一资源,通常在该资源上,不同工序的生产任务之间的切换,会产生成本的,有可能是时间成本,也有可能是真真正正的货币成本。所以,难点就在于如何平衡上面两个问题,从而实现资源利用率最大化和工序资源不被违反。

多工序,多资源种类

多个工序,多资源种类的和产计划,也是目前最为常见,也是最为复杂的生产计划;是本文讨论的重点。多工序与前一个问题一样,是针对整个产品的工序路线进行排产。而且生产各个工序抽用的资源是不同种类的。因此,这种情况我们面对了两个相对零散也有交互的矛盾:1. 对于一个产品而言,其多个工序是依据工序路线形成生产资源的; 2. 多种资源就表示各个生产工序所使用的资源有可能不一样,也有可能一样的。因为工序的前后次序的限制原因,当引擎在对一个工序完成了资源分配后,进一步进行生产时间的分配,但因为同一产品的工序执行次序,是需要按照工序路线的先后次序来执行的,也就是说计划中,除了需要分配好的资源外,还要确保这个资源在指定的时间段内,没有被其它产品的生产任务占用。那么当同时对多个产品进行排产时,各个产品的工序路线形成的工序生产序列和资源分配方案,很容易就形成了胶着状态,甚至在多个资源之间会出现死锁状态。

 下面,我们以多个不同种类的机台,处理工序路线上多个工序的案例,来计划“多工序、多资源种类”的情况,并分析需要实现这种计划,所需的技巧、技术难点和可能出现的情况,及其应对方法.

多工序与多机台的场景描述

规划过程中用到的概念

  为了便于描述规划过程中的各种情况,现先定义以下概念:

  任务或生产任务:一个工序的处理称作一个任务,例如印刷后加工有:过胶 -> 烫金 -> 丝印,则表示这个产品的后加工中有三个任务,分别是过胶任务, 烫金任务和丝印任务。

  工序路线任务链:一个产品中,由其工序路线确定的,存在指定次序的任务序列,称为工序路线任务链.

  机台任务链:多个任务被分配在一个机台上时,这些同在一机台上开成的任务序列,称为机台任务链接.

  前置任务,后置任务:同一产品上多个任务,根据工序路线的规定形成与工序次序一次的生产任务次序。在此序列中相邻两个任务,前者称作后者的前置任务;后者称作前者的后置任务。

  前一任务,后一任务:分布于同一机台上的多个工序任务,因机台在同一时间只能处理一个任务而形成的任务序列。在序列中相个相邻的任务;前者称为后者的前一任务,后者称作前者的前一任务。

  多工序、多机台排程里的限制

  我们来针对实用性最强,制造业面对最多的场景 :多工序、多台机场。在此场景下,有以两个因素处理起来比较麻烦。

  多任务与多机台的匹配,因为在待排的计划要素中,任务与机台的种类都存在多样性,且可能存一种任务可分配到多种机台,一种机台可以做多种任务的情况,因此,任务与机台的匹配问题会相对其它三种生产计划复杂一些。但往往这也是体现出Optaplanner价值的其中一个要点。

  另外一个更为难以处理的问题,就是工序路线任务链与机台任务链之间存在胶着关系,即一个产品的工序中线确定的任务序列,与分配于同一机台上的任务序列,在加工次序上存在互相制约,加工次序体现在加工的时间先后。即一个产品的任务序列,必然按其工序路线,存在一定的先后次序;而当个产品被分配到各个机台上生产时,正因为是生产路线上的时间先后次序制约,会令到一个机台上多个任务在按次序生产时,时间上可能并不是连续的,因为准备在机台上启动一个任务时,这个任务所在产品的前工序尚未完成,因此,从而令到一该任务在当前机台上已经达开始条件(其前一任务已完成,机台已为该任务就绪),但因为它的前置工序还没完成,导致它无法开始,从而令到在该机台上排在它后面的其它后任务都要推迟,而这些任务被推迟,又有可能导致它们的后置任务需要推迟,从而会出现机台任务链和工序路线任务链互相影响。我们称这种情况为“连锁反应”,解决好这种连锁反应,是解决排程的关键。

  因为上述描述的连锁反应的情况出现,有可能令出现环状影响的情况。因为和产计划存在时间与空间两个主要维度,其中的空间维度在这个案例中就是机台,表示为一个任务审被分配到了哪个机台。而时间维度则体现为任务的开始时间,即一个任务计划在什么哪个时刻开始。那么就需要有一个过程对各个已分配好机台的任务进行时间推导。任务的时间推导我们需要通过Optaplanner的afterEntityChanged事件来进行,而推导的起源我们通常是以当前Move(Move是Optaplanner的最小作业单位)所处理的任务开始,这个任务我们称为震动源。经过它的工序路线任务链传递到机台任务锁,再由机台任务链的影响回工序路线任务链,当这种环状的影响路径,经过一系列的连锁反应,正好返回来产生对震动源产生影响时, 震动源再次被其它任务影响,那么就会产生下一次的推导,就会无限推导下去,死循环就产生了。我们需要准确识别这种连锁反应是否会产生死循环,并当确实产生死循环时,在进行时间推导之前,通过Optaplanner的Move Selection Filter将当前的move取消,从而避免产生程序溢出,从而令系统崩溃。下面会举实际的死循环例子说明这种情况。

   下面我们先列出多任务多机台生产计划的基础约束

计划约束

  1. 每个工序只能分配到指定的机台;
  2. 除产品的首个工序外,所有任务都有一个前置任务,它的开始条件是它的前置任务已结束,即同一产品的工序根据工序路线存在FS关系。
  3. 同一机台同一时间只能处理同一任务。即分配到机台上的工序生产任务,而生产时间不能重叠。

排程过程中产生的死循环

  例如下图:红框的任务Task1, Task2, Task3表示了一个产品的工序路线上的3个工序对应的任务,即表示这三个任务形成了工序路线任务链,它们分别分布于machine1, machine2, machine3三个机台。根据工序路线任务链的次序约束,其生产次序是Task1 -> Task2 -> Task3. 而蓝色背景的两个任务则是另外一个产品的工序路线任务链,根据该产品的工序路线,它的生产门外汉是TaskA -> TaskB, 可以看到这两个工序的次序跟红框工序中的Task2, Task3的次序是倒过来的。而从机台machine2的机台任务链上,我们可以看到,存在一个这样的生产次序关系:Task B -> Task 2。那么在Optaplanner通过一个Move来产生一个可能的方案时,就有可能组合出如图中的状态,从而出现死循环,因为一个产品的工序需要按其工序号线规定的次序执行,而一个机台上生产一边串的任务的时候,也是有时序性的,一个机台在同一时间只能生产一个任务,也就有了一个机台自身的生产任务也是一个次序链的。从图中可以看出,存在了这么一个环状的生产任务次序: Task2 -> Task3 -> TaskA -> TaskB -> Task2,

  即当Task1, Task2, Task3, TaskA, TaskB中任意一个任务的开始时间被推导时,它都将成为上述死循环描述中的震动源,从而产生死循环。

  

  正确的多工序多机台计划需要遵循的约束

   在实际制造中,必然存在非常多的限制因素,来限制生产活动的执行,而这此限制需要正确地反映到生产计划中,否则最终产生的计划就无法执行。本文只列出对生成计划的正确性有影响的因素;而那些与各个企业业务相关的个性化因素,则不在本文考虑,各位在自己设计系统时考虑即可。例如:印刷行业中的印刷后加工工序,做完洒金粉工序,是需要等待一定时间令金粉固定后,才能进入下一工序的,那么也就是说这个工序与下一个工序之间存在一个最短时间限制,否则是会产生质量事故的,因此是一个硬约束。但不在本文内考虑。本文只会考虑常见的通用情况,例如一个机台在同一时间只能处理同一个工序。

 

3. 对排程的各机台的任务链建构,并归纳前后工序,机台之间的规则约束

4. 讨论任务间形成死循环的可能性

5. 死循环对排程的影响

6. 检测死循环

7. 对死循环进行过滤, 在Seletion Filter中的accept方法中实现。

8. 将排产结构归约为有向图,借助有向图进行是否死循环检测。

猜你喜欢

转载自www.cnblogs.com/kentzhang/p/9440808.html