为什么约翰逊算法给出了最佳序列

时间:2013-03-05 22:17:32

标签: algorithm optimization

Job Shop调度的约翰逊算法解决了2台机器和N个工作的情况

Job Pi有两个操作,持续时间为Pi1,Pi2,在机器M1,M2上完成。

Step 1. List A = { 1, 2, …, N }, List L1 = {}, List L2 = {}.
Step 2. From all available operation durations, pick the minimum.
If the minimum belongs to Pk1,
Remove K from list A; Add K to end of List L1.
If minimum belongs to Pk2,
Remove K from list A; Add K to beginning of List L2.
Step 3. Repeat Step 2 until List A is empty.
Step 4. Join List L1, List L2. This is the optimum sequence.

我不明白为什么这会给出“最佳”答案。这是wikipedia link

我认为这是一个反例:

工作集:

(2,3);(4,5);(6,7)

最终答案算法给出了机器1上的J1,J2,J3(2,4,6),而机器2始终处于空闲状态。相反,如果我们在机器1上调度J1,J2,在机器2上调度J3,那么我们可以早点完成它

任何人都可以解释我做错了什么。

1 个答案:

答案 0 :(得分:1)

  

最终答案算法给出了机器1上的J1,J2,J3(2,4,6),而机器2始终处于空闲状态。相反,如果我们在机器1上调度J1,J2,在机器2上调度J3,那么我们可以更早地完成它。

没有。关键是作业由两部分组成,第一部分必须在机器1上完成,第二部分在第一部分完成后在第二台机器上完成。

所以在你的例子中,你得到序列{ J1, J2, J3 },这是正确的,它将被执行

    M1上的
  1. J1[1]; 2分钟
  2. M1上的
  3. J2[1]和M2上的J1[2]同时启动; 4分3分钟
  4. M1上的
  5. J3[1]和M2上的J2[2]开始 - 巧合的是,J2[1] > J1[2] - 同时; 6分5分钟
  6. M2上的
  7. J3[2]; 7分钟
  8. 总而言之,你需要2 + 4 + 6 + 7 = 19分钟,这是最快的方式。

    目标是最大化M1上和M2上的活动之间的重叠。因此,如果您的第一部分工作时间较短,请先进行操作,尽快将机器2占用。如果可能的话,最后将第二部分做短的工作,这样机器1完成工作的时间很短。