问题背景
流水线作业调度问题(Flow Shop Scheduling Problem)是指多个作业需在多台机器上按固定顺序加工,目标是确定作业的加工顺序,使得所有作业的总完成时间(makespan)最小。Johnson算法是解决两机器流水车间调度问题(即所有作业需先经过机器1,再经过机器2)的经典方法。
Johnson算法的核心思想
Johnson算法通过动态排序作业,使得机器2的空闲时间尽可能减少,从而最小化总完成时间。其核心逻辑是:
将作业分为两类,按不同规则排序后合并,以平衡两台机器的负载。
Johnson算法的步骤
-
分类作业:
将作业分为两类:- 类别A:作业在机器1上的加工时间 ≤ 机器2上的加工时间(即 aj≤bj)。
- 类别B:作业在机器1上的加工时间 > 机器2上的加工时间(即 aj>bj)。
-
排序规则:
- 类别A的作业:按机器1的加工时间 aj 升序排列(即从短到长)。
- 类别B的作业:按机器2的加工时间 bj 降序排列(即从长到短)。
-
合并序列:
将排序后的类别A放在类别B之前,形成最终加工顺序。
算法思想的直观解释
-
减少机器2的等待时间:
- 类别A的作业(aj≤bj)在机器1上加工时间短,尽早完成机器1的加工后,机器2可以尽快开始工作。
- 类别B的作业(aj>bj)在机器2上加工时间长,将其排在后面,避免机器2因长时间等待而产生空闲。
-
平衡两台机器的负载:
- 优先加工机器1时间短的作业(类别A),让机器2尽早启动。
- 后加工机器2时间长的作业(类别B),避免机器2因前序作业过长而空闲。
示例说明
假设有4个作业,加工时间如下:
作业 | 机器1时间 aj | 机器2时间 bj |
---|---|---|
J1 | 5 | 2 |
J2 | 1 | 6 |
J3 | 8 | 4 |
J4 | 3 | 7 |
-
分类:
- 类别A(aj≤bj):J2(1 ≤ 6)、J4(3 ≤ 7)。
- 类别B(aj>bj):J1(5 > 2)、J3(8 > 4)。
-
排序:
- 类别A按 aj 升序:J2 → J4。
- 类别B按 bj 降序:J3(bj=4)→ J1(bj=2)。
-
合并序列:J2 → J4 → J3 → J1。
-
计算总完成时间:
- 机器1:J2(1)→ J4(3)→ J3(8)→ J1(5)。总时间 = 1 + 3 + 8 + 5 = 17。
- 机器2:需等待机器1完成J2后开始,总时间需考虑流水衔接,最终makespan为20(优于其他顺序)。
Johnson算法的适用条件
- 仅适用于两机器流水车间问题,多机器问题需其他方法(如启发式算法)。
- 所有作业的加工顺序必须一致(即先机器1,后机器2)。
- 允许作业在两台机器上的加工时间不同,但顺序固定。
总结
Johnson算法的核心是通过分类排序平衡两台机器的负载:
- 优先处理机器1时间短的作业,让机器2尽早启动。
- 后处理机器2时间长的作业,减少机器2的空闲等待。
这一策略保证了总完成时间的最小化,是两机器流水车间调度问题的最优解方法。