Research Article

Hybrid Algorithm Based on Genetic Simulated Annealing Algorithm for Complex Multiproduct Scheduling Problem with Zero-Wait Constraint

Algorithm 1

Decoding.
Input: Operation chromosome, Process time chromosome, Machine chromosome;
Output: Makespan;
(1)   for (i ← 1; i ≤ length of operation chromosome; i++)
(2)    Case 1 (Oi belongs to O_leaf)
(3)     if (O_counter = 1)
(4)      if (M_counter = 1)//Figure 8-①
(5)       Si = 0;
(6)      else//Figure 8-②
(7)       Si = E_mb;
(8)      end if
(9)     else
(10)      if (M_counter = 1)//Figure 8-③
(11)       Si = E_ob;
(12)      else//Figure 8-④
(13)       Si = max (E_mb, E_ob)
(14)      end if
(15)     end if
(16)     Ei = Si + Pi;
(17)    Case 2 (Oi does not belong to O_leaf)
(18)     if (O_counter = 1)
(19)      if (M_counter = 1)
(20)       if (Oi does not has immediate predecessor operation)//Figure 8-⑤-1
(21)      Si = 0;
(22)      else//Figure 8-⑤-2
(23)       Si = E_opre;
(24)      end if
(25)     else
(26)      if (Oi does not has immediate predecessor operation)
(27)       if (Oi cannot be inserted forward)//Figure 8-⑥-1, Figure 8-⑥-2
(28)        Si = E_mb;
(29)       else//Figure 8-⑥-3
(30)        Si = the starting point of the idle time that can be inserted;
(31)       end if
(32)      else//Figure 8-⑥-4
(33)       Si = max (E_mb, E_opre);
(34)      end if
(35)    end if
(36)   else
(37)     if (Oi does not belong to No-wait)
(38)      if (M_counter = 1)//Figure 8-⑦
(39)      Si = E_ob (or E_opre);
(40)     else//Figure 8-⑧
(41)      Si = max (E_mb, E_ob (or E_opre));
(42)       end if
(43)     else
(44)      if (Oi belongs to uniline No-wait)
(45)       if (M_counter = 1)//Figure 8-⑨-1
(46)        Si = E_ob (or E_opre);
(47)      else//Figure 8-⑨-2
(48)        Si = max (E_mb, E_ob (or E_opre));
(49)        Ei−1 = Si;
(50)        Si−1 = Ei−1 − Pi−1;
(51)       end if
(52)      else
(53)       if (M_counter = 1)//Figure 8-⑩-1
(54)        Si = max (E_ob, E_opre);
(55)        if (E_ob < E_opre)
(56)         Ei−1 = Si;
(57)         Si−1 = Ei−1 − Pi−1;
(58)       end if
(59)      else//Figure 8-⑩-2
(60)         Si = max (E_mb, E_ob, E_opre);
(61)         if (E_ob < E_opre ||E_ob < E_opre)
(62)          Ei−1 = Si;
(63)          Si−1 = Ei−1 − Pi−1;
(64)         end if
(65)        end if
(66)       end if
(67)     end if
(68)   end if
(69)   Ei = Si + Pi;
(70)end for
(71)