@@ -81,7 +81,49 @@ def solve_johnson(self):
8181 return seq , [jobs_m1 , jobs_m2 ], optim_makespan
8282
8383 def cds (self , parameter_list ):
84- pass
84+ raise NotImplementedError
85+ 86+ def palmer_heuristic (self ):
87+ def palmer_f (x ): return - (self .nb_machines - (2 * x - 1 ))
88+ weights = list (map (palmer_f , range (1 , self .nb_machines + 1 )))
89+ ws = []
90+ print (weights )
91+ print (self .data )
92+ for job_id in range (self .nb_jobs ):
93+ p_ij = sum ([self .data [j ][job_id ]* weights [j ]
94+ for j in range (self .nb_machines )])
95+ ws .append ((job_id , p_ij ))
96+ ws .sort (key = lambda x : x [1 ], reverse = True )
97+ h_seq = [x [0 ] for x in ws ]
98+ print (h_seq )
99+ schedules = np .zeros ((self .nb_machines , self .nb_jobs ), dtype = dict )
100+ # schedule first job alone first
101+ task = {"name" : "job_{}" .format (
102+ h_seq [0 ]), "start_time" : 0 , "end_time" : self .data [0 ][h_seq [0 ]]}
103+ schedules [0 ][0 ] = task
104+ for m_id in range (1 , self .nb_machines ):
105+ start_t = schedules [m_id - 1 ][0 ]["end_time" ]
106+ end_t = start_t + self .data [m_id ][0 ]
107+ task = {"name" : "job_{}" .format (
108+ h_seq [0 ]), "start_time" : start_t , "end_time" : end_t }
109+ schedules [m_id ][0 ] = task
110+ 111+ for index , job_id in enumerate (h_seq [1 ::]):
112+ start_t = schedules [0 ][index ]["end_time" ]
113+ end_t = start_t + self .data [0 ][job_id ]
114+ task = {"name" : "job_{}" .format (
115+ job_id ), "start_time" : start_t , "end_time" : end_t }
116+ schedules [0 ][index + 1 ] = task
117+ for m_id in range (1 , self .nb_machines ):
118+ start_t = max (schedules [m_id ][index ]["end_time" ],
119+ schedules [m_id - 1 ][index + 1 ]["end_time" ])
120+ end_t = start_t + self .data [m_id ][job_id ]
121+ task = {"name" : "job_{}" .format (
122+ job_id ), "start_time" : start_t , "end_time" : end_t }
123+ schedules [m_id ][index + 1 ] = task
124+ opt_makespan = int (schedules [self .nb_machines - 1 ][- 1 ]["end_time" ])
125+ return h_seq , schedules , opt_makespan
126+ 85127
86128class RandomFlowshop :
87129 """This module makes an instance of random flowshop problem,
@@ -152,8 +194,10 @@ def get_problem_instance(self):
152194
153195
154196if __name__ == "__main__" :
155- random_problem = RandomFlowshop (2 , 6 )
197+ random_problem = RandomFlowshop (3 , 3 )
156198 random_problem_instance = random_problem .get_problem_instance ()
157- seq , jobs = random_problem_instance .solve_johnson ()
158- print ("Sequence: {} \n Jobs on Machine 1: \n {} \n Jobs on machine 2:\n {} \n " .format (
159- seq , jobs [0 ], jobs [1 ]))
199+ seq , scheds = random_problem_instance .palmer_heuristic ()
200+ print (scheds )
201+ #seq, jobs, opt_makespan = random_problem_instance.solve_johnson()
202+ # print("Sequence: {} \nJobs on Machine 1: \n {} \n Jobs on machine 2:\n {} \n".format(
203+ # seq, jobs[0], jobs[1]))
0 commit comments