最近群里的小伙伴就动态调度问题进行了激烈的讨论,这个过程当中大家也存在一些疑问,最主要的还是一些概念的辨析。希望今天可以通过这篇文章让大家对动态调度更加了解。
静态调度与动态调度
动态调度相对静态调度而言的,首先搞明白静态调度是什么。静态调度通常具有以下特征:
- 「被调度的工件集合是确定的,不考虑订单插单或取消的情况」
- 「工件的加工时间是确定的,并且在安排计划时全部工件都已到达,不考虑动态抵达;」
也就是说,在静态调度问题中,所有条件都是已知确定的,是在所有因素不改变的前提下得到的方案,但是在实际生产环境中,这几乎是无法保证的,因为「动态是绝对的,静态是相对的」,车间中总有一些不可预知的事件发生,导致静态调度得到的计划方案丧失可执行性,这时就不得不针对异常因素进行动态调度,以适应环境变化后的车间现场。
动态事件
引起调度环境变化从而需要进行动态调度的事件称为动态事件。动态事件可以根据动态因素的来源分为以下几类:
动态调度分类
关于动态调度类型大致可以归纳为以下三类:「完全反应式调度」、「预-反应式调度」和「鲁棒调度」。还有学者将预-反应式调度细分为「预-反应式调度」和「鲁棒预-反应调度」。
- 「完全反应式调度」。完全反应式调度是根据车间当前的实际情形做出的实时调度,在这种调度方式下,车间并没有预先设置的调度方案,因此,完全反应式调度也称为「实时调度」或者「在线调度」。已有研究表明,完全反应调度在动态事件发生频繁、不确定性程度高的生产环境中,具有很好的实用性,快速、容易实现。由于决策信息源于局部实时信息,该方法很难预测系统性能,从而忽略了全局调度的性能,完全反应式调度方法以规则调度为代表。
- 「预-反应式调度」。预-反应式调度是目前制造系统中最常用的一种动态调度方法,它其实就是为了响应各种动态事件影响的车间调度/重调度的过程。预反应调度一般可分为两步,首先,车间在没有考虑各种干扰的情况下制定一个预调度方案,其次,动态事件发生后,对预调度方案进行修改得到新的调度方案。预-反应调度原理简单,操作可行,已有相关研究表明,在车间生产环境比较稳定的环境中具有良好的适用性。但是,大部分的预-反应式调度方案都只是在考虑车间生产效率前提下的得到的调整方案,而忽视了新的调度方案偏离原计划方案的程度,容易导致转换成本增加,增加车间生产活动的不稳定性。因此,有相关学者提出了「鲁棒预-反应调度」,以克服预-反应式调度的缺陷,强调车间在进行重调度时要同时考虑车间的生产效率和「稳定性」,并强调生成具有鲁棒性的调度方案。其中,车间的稳定性是一般指新的调度方案偏离预调度方案的程度。相比于预-反应式调度,鲁棒预-反应式调度不仅仅是考虑车间生产效率的调度方案再调整,而是综合考虑重调度方案对车间生产活动影响的重调度方案制定方法。
- 「鲁棒调度」:鲁棒调度是指在进行调度的时候充分考虑车间生产过程中可能发生的各种动态事件,根据现有或未来的信息预先生成一个调度方案,并保证该调度方案能在各种动态事件发生时不至于过分降低性能。鲁棒调度强调在动态事件发生之前便采取了一定的预防措施,例如在设备上插入一定的空闲时间,以减少调度执行过程中的频繁修复和重调度,因此,鲁棒调度方案一般具有较高的鲁棒性,可容纳一定的动态事件影响,也别被称为主动(proactive)调度。
综上,各种类型的动态调度对于动态事件的处理可以表示为下图:
重调度策略
在以上三种动态调度方法中,预-反应式调度既避免了完全反应式调度容易陷于局部最优的不足,又避免了鲁棒调度中冗余时间造成的性能浪费,是一种兼顾全局和效率的调度策略。因此,预-反应式调度成为了目前实际生产中应用最广泛的一种动态调度方法。
那么在预-反应式调度方法中,需要考虑的两类问题是:「何时重调度」和「怎样重调度」。
对于何时重调度,最常用的三种重调度策略是:周期性重调度、事件驱动重调度和混合重调度三类调度方式。
- 「周期性重调度」。周期性重调度以滚动时域为基础,以一定的时间间隔为周期,对剩余资源进行重调度。
- 「事件驱动重调度」。事件驱动重调度根据动态事件对调度方法进行重新安排。
- 「混合重调度」。混合重调度将结合周期重调度和事件驱动重调度,周期地进行重调度,且当特定事件发生时进行重调度。
确定何时重调度后,紧接着的任务就是确定怎样进行重调度,一般怎样重调度可以分为三类:「右移重调度、完全重调度和部分重调度」。
- 「右移重调度」。右移重调度保持调度工件的顺序不变,延长工件的开始加工时间。
- 「完全重调度」。完全重调度是对所有未加工工件集和新工件集进行重调度,具有较好全局性,但计算量大,对干扰响应速度慢。
- 「部分重调度」。部分重调度仅对直接或间接受干扰的工件集进行重调度,这种方法尽可能的保持原有调度,具有较好的稳定性。