@@ -77,7 +77,7 @@ def read_data():
7777 print ("Data time dan routing berhasil dibaca!" )
7878
7979# 4. Prosedur Eksekusi
80- def do_genetic_algo ():
80+ def do_genetic_algo (count ):
8181 # xx. Menggunakan variabel global
8282 global MESIN , JOB_DONE , SCHEDULE , CJ , TJ , RJ , ST
8383
@@ -97,11 +97,12 @@ def do_genetic_algo():
9797 machine_list = [] # machine list
9898
9999 # Isi list dengan semua data yang ada di index_c_in_cj
100+ COPY_OF_CJ = [i for i in CJ ]
100101 for i in index_c_in_cj :
101- # temp_list.append(ST[i])
102102 machine_list .append (ST [i ][2 ])
103103
104104 for i in index_c_in_cj :
105+ print ("berapa i?" ,i )
105106 index_mac = machine_list .index (ST [i ][2 ])
106107 job = ST [i ][0 ]
107108 # Kalo mesinnya kosong, atau bisa selesai lebih cepat, masukin di
@@ -116,13 +117,40 @@ def do_genetic_algo():
116117 minimum = MESIN [0 ][j ]
117118
118119 if (MESIN [0 ][ST [i ][2 ] - 1 ] > minimum ):
120+ print ("sini1" )
119121 ST [job - 1 ] = [job , ST [job - 1 ][1 ], idx_mesin + 1 ]
120- MESIN [ 0 ][ ST [ i ][ 2 ] - 1 ] += PROCESSING_TIME [ job - 1 ][ ST [ i ][ 1 ] - 1 ]
122+ hinggap = idx_mesin + 1
121123 temp_list .append (ST [i ])
122124 else :
123- MESIN [0 ][ST [i ][2 ] - 1 ] += PROCESSING_TIME [job - 1 ][ST [i ][1 ] - 1 ]
125+ print ("sini2" )
126+ hinggap = ST [i ][2 ]
124127 temp_list .append (ST [i ])
128+
129+ # Pemrosesan mesin ?
130+ if (count > 1 ):
131+ nums1 = CJ [i ]
132+ nums2 = MESIN [0 ][hinggap - 1 ]
133+ print ("cek berapa sih?" , nums1 , nums2 )
134+ if nums1 > nums2 :
135+ MESIN [0 ][ST [i ][2 ] - 1 ] = nums1
136+ MESIN [0 ][ST [i ][2 ] - 1 ] += PROCESSING_TIME [job - 1 ][ST [i ][1 ] - 1 ]
137+ COPY_OF_CJ [i ] = nums1
138+ else :
139+ MESIN [0 ][ST [i ][2 ] - 1 ] = nums2
140+ MESIN [0 ][ST [i ][2 ] - 1 ] += PROCESSING_TIME [job - 1 ][ST [i ][1 ] - 1 ]
141+ COPY_OF_CJ [i ] = nums2
142+ else :
143+ nums1 = CJ [i ]
144+ nums2 = MESIN [0 ][hinggap - 1 ]
145+ print ("cek berapa sih init?" , nums1 , nums2 )
146+ MESIN [0 ][ST [i ][2 ] - 1 ] += PROCESSING_TIME [job - 1 ][ST [i ][1 ] - 1 ]
147+ if nums1 < nums2 :
148+ COPY_OF_CJ [i ] = nums1
149+ else :
150+ COPY_OF_CJ [i ] = nums2
151+
125152 print ("ST, MESIN" , ST , MESIN )
153+ print ("COPY CJ" , COPY_OF_CJ )
126154
127155 elif (ST [i ][2 ] >= 5 and ST [i ][2 ] <= 6 ):
128156 minimum = MESIN [0 ][4 ]
@@ -133,21 +161,59 @@ def do_genetic_algo():
133161 minimum = MESIN [0 ][j ]
134162
135163 if (MESIN [0 ][ST [i ][2 ] - 1 ] > minimum ):
164+ print ("sini3" )
136165 ST [i ] = [job , ST [i ][1 ], idx_mesin + 1 ]
137- MESIN [ 0 ][ ST [ i ][ 2 ] - 1 ] += PROCESSING_TIME [ job - 1 ][ ST [ i ][ 1 ] - 1 ]
166+ hinggap = idx_mesin + 1
138167 temp_list .append (ST [i ])
139168 else :
140- MESIN [0 ][ST [i ][2 ] - 1 ] += PROCESSING_TIME [job - 1 ][ST [i ][1 ] - 1 ]
169+ print ("sini4" )
170+ hinggap = ST [i ][2 ]
141171 temp_list .append (ST [i ])
172+
173+ # Pemrosesan mesin ?
174+ # nums1 = PROCESSING_TIME[job - 1][ST[i][1] - 1]
175+ """ nums1 = CJ[i]
176+ # nums2 = RJ[i] nums2 harusnya diisi waktu finish dari mesin sebelumnya
177+ nums2 = MESIN[0][hinggap] # waktu mesin sebelumnya yang mau dihinggapin
178+ if nums1 > nums2:
179+ MESIN[0][ST[i][2] - 1] += nums1
180+ else :
181+ MESIN[0][ST[i][2] - 1] += nums2 """
182+
183+ if (count > 1 ):
184+ nums1 = CJ [i ]
185+ nums2 = MESIN [0 ][hinggap - 1 ]
186+ print ("cek berapa sih?" , nums1 , nums2 )
187+ if nums1 > nums2 :
188+ MESIN [0 ][ST [i ][2 ] - 1 ] = nums1
189+ MESIN [0 ][ST [i ][2 ] - 1 ] += PROCESSING_TIME [job - 1 ][ST [i ][1 ] - 1 ]
190+ COPY_OF_CJ [i ] = nums1
191+ else :
192+ MESIN [0 ][ST [i ][2 ] - 1 ] = nums2
193+ MESIN [0 ][ST [i ][2 ] - 1 ] += PROCESSING_TIME [job - 1 ][ST [i ][1 ] - 1 ]
194+ COPY_OF_CJ [i ] = nums2
195+ else :
196+ nums1 = CJ [i ]
197+ nums2 = MESIN [0 ][hinggap - 1 ]
198+ print ("cek berapa sih init?" , nums1 , nums2 )
199+ MESIN [0 ][ST [i ][2 ] - 1 ] += PROCESSING_TIME [job - 1 ][ST [i ][1 ] - 1 ]
200+ if nums1 < nums2 :
201+ COPY_OF_CJ [i ] = nums1
202+ else :
203+ COPY_OF_CJ [i ] = nums2
204+
142205 print ("ST, MESIN" , ST , MESIN )
206+ print ("COPY CJ" , COPY_OF_CJ )
143207
144208 else :
145- # Prioritas nilai rj
209+ """ # Prioritas nilai rj
146210 if (RJ[i] < RJ[ST.index(temp_list[index_mac])]):
147211 temp_list[index_mac] = ST[i]
148212 # Prioritas jumlah operasi
149213 elif ST[i][1] < temp_list[index_mac][1]:
150- temp_list [index_mac ] = ST [i ]
214+ temp_list[index_mac] = ST[i] """
215+
216+ temp_list .append (ST [i ])
151217
152218 # Sekarang temp_list isinya job yang mau dijalankan (dalam sebuah list)
153219 retval = temp_list
@@ -158,7 +224,7 @@ def do_genetic_algo():
158224
159225 # d. Melakukan indexing terhadap jadwal yang ada dan telah selesai
160226 print ("retval?" , retval )
161- print ("cek cj st 1" , CJ , ST )
227+ print ("cek cj st 1" , CJ , COPY_OF_CJ , ST )
162228 job = []
163229 instance = []
164230 machine = []
@@ -172,53 +238,111 @@ def do_genetic_algo():
172238 # print("ST", ST)
173239 for i in range (len (ST )):
174240 job_on_ST .append (ST [i ][0 ])
241+
242+ # e. Lanjutan pemrosesan indexing untuk dikemas dalam senarai job dan machine
243+ index_job = [job_on_ST .index (value ) for value in job ]
244+ index_mac = machine
245+
246+ # ngubah nilai copynya dulu
247+ """ for i in range(len(ST)):
248+ try:
249+ # Jika nilai iterator berada pada index_job,
250+ # maka update dengan nilai data proses selanjutnya, lakukan perbandingan dengan
251+ # nilai proses pada mesin
252+ if i in index_job:
253+ ready_time = MESIN[0][ST[i][2] - 1]
254+ recent_cj = CJ[i]
255+ # if ST[i][1] != len(ROUTING[ST[i][0] - 1]):
256+ if ready_time > recent_cj:
257+ COPY_OF_CJ[i] = ready_time
258+ else :
259+ COPY_OF_CJ[i] = recent_cj
260+ except:
261+ # Exception handling, skip jika tidak memenuhi kondisi diatas
262+ continue """
263+
264+ # ngubah nilai cj
265+ for i in range (len (ST )):
266+ try :
267+ # Jika nilai iterator berada pada index_job,
268+ # maka update dengan nilai data proses selanjutnya, lakukan perbandingan dengan
269+ # nilai proses pada mesin
270+ if i in index_job :
271+ ready_time = MESIN [0 ][ST [i ][2 ] - 1 ]
272+ recent_rjx = RJ [i ]
273+ # if ST[i][1] != len(ROUTING[ST[i][0] - 1]):
274+ """ if (count > 1):
275+ if ready_time > recent_rjx:
276+ CJ[i] = ready_time
277+ else :
278+ CJ[i] = recent_rjx
279+ else : """
280+ CJ [i ] = COPY_OF_CJ [i ] + TJ [i ]
281+ # Jika tidak ada, lakukan pembaharuan dengan nilai yang ada di mesin
282+ # Mengingat tidak ada job yang saling overlap
283+ else :
284+ if (CJ [i ] <= MESIN [0 ][ST [i ][2 ] - 1 ]):
285+ CJ [i ] = MESIN [0 ][ST [i ][2 ] - 1 ]
286+ except :
287+ # Exception handling, skip jika tidak memenuhi kondisi diatas
288+ continue
175289
176290 print ("job_on_st" , job_on_ST )
291+ print ("cek cj st 2" , CJ , COPY_OF_CJ , ST )
177292 for value in job :
178293 i = job_on_ST .index (value )
179294 # print("i", i)
180- SCHEDULE .append ([ST [i ][0 ], ST [i ][1 ], ST [i ][2 ], CJ [i ], RJ [i ]])
295+ SCHEDULE .append ([ST [i ][0 ], ST [i ][1 ], ST [i ][2 ], COPY_OF_CJ [i ], CJ [i ]])
181296 if ST [i ][1 ] == len (ROUTING [ST [i ][0 ] - 1 ]):
182297 JOB_DONE .append ([ST [i ][0 ], RJ [i ]])
298+
299+ print ("intip sched" , SCHEDULE )
183300
184301 # e. Lanjutan pemrosesan indexing untuk dikemas dalam senarai job dan machine
185- index_job = [job_on_ST .index (value ) for value in job ]
186- index_mac = machine
302+ """ index_job = [job_on_ST.index(value) for value in job]
303+ index_mac = machine """
187304
188305 print ("idx_job" , index_job )
189- print ("cek cj st 2" , CJ , ST )
190306
191307 # f. Melakukan penyalinan nilai st dan cj untuk digunakan lebih lanjut pada bagian bawah
192308 COPY_OF_ST = [i for i in ST ]
193- COPY_OF_CJ = [i for i in CJ ]
309+ # COPY_OF_CJ = [i for i in CJ]
194310
195311 # g. Melakukan perubahan terhadap nilai isi mesin, tj dan st
196312 # bias untuk membantu skema penghapusan berdasar indeks
197- bias = 0
198- for i in range (len (index_job )):
199- k = index_job [i ]
200- print (k )
313+ list_ga_lewat = []
314+ for i in index_job :
315+ print (i )
201316 # Memperbaharui nilai MESIN
202317 # MESIN[0][j] = RJ[i]
203- try :
204- # Memperbaharui nilai tj
205- print ("untuk index i" , k , ST [k ][0 ] - 1 , ST [k ][1 ])
206- TJ [k ] = PROCESSING_TIME [ST [k ][0 ] - 1 ][ST [k ][1 ] - 1 ]
318+ # try:
319+ # Memperbaharui nilai tj
320+ print ("untuk index i" , i , ST [i ][0 ] - 1 , ST [i ][1 ])
321+ if (ST [i ][1 ] < len (PROCESSING_TIME [ST [i ][0 ] - 1 ])) :
322+ TJ [i ] = PROCESSING_TIME [ST [i ][0 ] - 1 ][ST [i ][1 ]]
207323 print ("TJ" , TJ )
208- # Memperbaharui nilai st
209- ST [k ] = [ST [k ][0 ], ST [k ][1 ] + 1 , ROUTING [ST [k ][0 ] - 1 ][ST [k ][1 ]]]
324+ else :
325+ list_ga_lewat .append (i )
326+ print ("galewatt" )
327+ # Memperbaharui nilai st
328+ if (ST [i ][1 ] < len (ROUTING [ST [i ][0 ] - 1 ])) :
329+ ST [i ] = [ST [i ][0 ], ST [i ][1 ] + 1 , ROUTING [ST [i ][0 ] - 1 ][ST [i ][1 ]]]
210330 print ("ST" , ST )
211- print (k , "LEWAT" )
212- except :
213- # Exception handling jika tidak ada, maka saatnya dihapus
214- TJ .pop (k - bias )
215- ST .pop (k - bias )
216- CJ .pop (k - bias )
217- bias += 1
331+ else :
332+ print ("galewatt" )
333+ print (i , "LEWAT" )
334+
335+ bias = 0
336+ for i in list_ga_lewat :
337+ print (i )
338+ TJ .pop (i - bias )
339+ ST .pop (i - bias )
340+ CJ .pop (i - bias )
341+ bias += 1
218342
219343 print ("cek cj st 3" , CJ , COPY_OF_CJ , ST )
220344 # h. Memperbaharui nilai cj pada COPY_OF_CJ (salinan cj)
221- for i in range (len (COPY_OF_ST )):
345+ """ for i in range(len(COPY_OF_ST)):
222346 try:
223347 # Jika nilai iterator berada pada index_job,
224348 # maka update dengan nilai data proses selanjutnya, lakukan perbandingan dengan
@@ -238,7 +362,7 @@ def do_genetic_algo():
238362 COPY_OF_CJ[i] = MESIN[0][COPY_OF_ST[i][2] - 1]
239363 except:
240364 # Exception handling, skip jika tidak memenuhi kondisi diatas
241- continue
365+ continue """
242366
243367 print ("cek cj st 4" , CJ , COPY_OF_CJ , ST )
244368
@@ -255,7 +379,7 @@ def do_genetic_algo():
255379 print ("cek cj st 5" , CJ , COPY_OF_CJ , ST )
256380
257381 # Penyalinan kembali nilai cj yang telah diperbaharui
258- CJ = COPY_OF_CJ
382+ # CJ = COPY_OF_CJ
259383
260384 print ("fin cj" , CJ )
261385
@@ -312,7 +436,8 @@ def print_schedule(schedule=SCHEDULE, lateness=None):
312436 print ("RJ" , RJ )
313437 print ("ST" , ST )
314438 print ("----lesgo-----" )
315- while do_genetic_algo () != []:
439+ count = 1
440+ while do_genetic_algo (count ) != []:
316441 print ("===== initial check ======" )
317442 print ("mesin " , MESIN )
318443 print ("processing_time " , PROCESSING_TIME )
@@ -321,6 +446,7 @@ def print_schedule(schedule=SCHEDULE, lateness=None):
321446 print ("TJ" , TJ )
322447 print ("RJ" , RJ )
323448 print ("ST" , ST )
449+ count += 1
324450 print ("----lesgo-----" )
325451 pass
326452
0 commit comments