Algorithm 约翰逊算法给出最优序列的原因

Algorithm 约翰逊算法给出最优序列的原因,algorithm,optimization,Algorithm,Optimization,jobshop调度的Johnson算法解决了2台机器和N个作业的情况 作业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

jobshop调度的Johnson算法解决了2台机器和N个作业的情况

作业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.
我不明白为什么这会给出“最佳”答案。这是你的电话号码

我认为这是一个反例:

作业集:

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

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

谁能解释我做错了什么

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

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

因此,在您的示例中,您将获得序列
{J1,J2,J3}
,这是正确的,它将被执行

  • M1上的J1[1];2分钟
  • M1上的
    J2[1]
    和M2上的
    J1[2]
    同时启动;4分钟3分钟
  • M1上的J3[1]和M2上的J2[2]同时启动,因为同时启动了J1[2];6分钟5分钟
  • M2上的J3[2];7分钟
  • 因此,您总共需要
    2+4+6+7=19
    分钟,这是最快的方式


    目标是最大化M1和M2上的活动重叠。所以,如果你有第一个零件很短的工作,那么先做这些工作,让机器2尽快被占用。如果可能的话,让第二部分较短的作业排在最后,这样当机器1已经完成时,机器2可以工作的时间很短。

    @downvoter:我怀疑我问过这个问题。我举了一个反例,所以我做了一些家庭作业。我知道我可能错了。如果您有信心,请提供答案。我不喜欢我的坏习惯。把它当作我可以在任何一台机器上执行并完成的工作。