@@ -77,7 +77,7 @@ def read_data():
77
77
print ("Data time dan routing berhasil dibaca!" )
78
78
79
79
# 4. Prosedur Eksekusi
80
- def do_genetic_algo ():
80
+ def do_genetic_algo (count ):
81
81
# xx. Menggunakan variabel global
82
82
global MESIN , JOB_DONE , SCHEDULE , CJ , TJ , RJ , ST
83
83
@@ -97,11 +97,12 @@ def do_genetic_algo():
97
97
machine_list = [] # machine list
98
98
99
99
# Isi list dengan semua data yang ada di index_c_in_cj
100
+ COPY_OF_CJ = [i for i in CJ ]
100
101
for i in index_c_in_cj :
101
- # temp_list.append(ST[i])
102
102
machine_list .append (ST [i ][2 ])
103
103
104
104
for i in index_c_in_cj :
105
+ print ("berapa i?" ,i )
105
106
index_mac = machine_list .index (ST [i ][2 ])
106
107
job = ST [i ][0 ]
107
108
# Kalo mesinnya kosong, atau bisa selesai lebih cepat, masukin di
@@ -116,13 +117,40 @@ def do_genetic_algo():
116
117
minimum = MESIN [0 ][j ]
117
118
118
119
if (MESIN [0 ][ST [i ][2 ] - 1 ] > minimum ):
120
+ print ("sini1" )
119
121
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
121
123
temp_list .append (ST [i ])
122
124
else :
123
- MESIN [0 ][ST [i ][2 ] - 1 ] += PROCESSING_TIME [job - 1 ][ST [i ][1 ] - 1 ]
125
+ print ("sini2" )
126
+ hinggap = ST [i ][2 ]
124
127
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
+
125
152
print ("ST, MESIN" , ST , MESIN )
153
+ print ("COPY CJ" , COPY_OF_CJ )
126
154
127
155
elif (ST [i ][2 ] >= 5 and ST [i ][2 ] <= 6 ):
128
156
minimum = MESIN [0 ][4 ]
@@ -133,21 +161,59 @@ def do_genetic_algo():
133
161
minimum = MESIN [0 ][j ]
134
162
135
163
if (MESIN [0 ][ST [i ][2 ] - 1 ] > minimum ):
164
+ print ("sini3" )
136
165
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
138
167
temp_list .append (ST [i ])
139
168
else :
140
- MESIN [0 ][ST [i ][2 ] - 1 ] += PROCESSING_TIME [job - 1 ][ST [i ][1 ] - 1 ]
169
+ print ("sini4" )
170
+ hinggap = ST [i ][2 ]
141
171
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
+
142
205
print ("ST, MESIN" , ST , MESIN )
206
+ print ("COPY CJ" , COPY_OF_CJ )
143
207
144
208
else :
145
- # Prioritas nilai rj
209
+ """ # Prioritas nilai rj
146
210
if (RJ[i] < RJ[ST.index(temp_list[index_mac])]):
147
211
temp_list[index_mac] = ST[i]
148
212
# Prioritas jumlah operasi
149
213
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 ])
151
217
152
218
# Sekarang temp_list isinya job yang mau dijalankan (dalam sebuah list)
153
219
retval = temp_list
@@ -158,7 +224,7 @@ def do_genetic_algo():
158
224
159
225
# d. Melakukan indexing terhadap jadwal yang ada dan telah selesai
160
226
print ("retval?" , retval )
161
- print ("cek cj st 1" , CJ , ST )
227
+ print ("cek cj st 1" , CJ , COPY_OF_CJ , ST )
162
228
job = []
163
229
instance = []
164
230
machine = []
@@ -172,53 +238,111 @@ def do_genetic_algo():
172
238
# print("ST", ST)
173
239
for i in range (len (ST )):
174
240
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
175
289
176
290
print ("job_on_st" , job_on_ST )
291
+ print ("cek cj st 2" , CJ , COPY_OF_CJ , ST )
177
292
for value in job :
178
293
i = job_on_ST .index (value )
179
294
# 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 ]])
181
296
if ST [i ][1 ] == len (ROUTING [ST [i ][0 ] - 1 ]):
182
297
JOB_DONE .append ([ST [i ][0 ], RJ [i ]])
298
+
299
+ print ("intip sched" , SCHEDULE )
183
300
184
301
# 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 """
187
304
188
305
print ("idx_job" , index_job )
189
- print ("cek cj st 2" , CJ , ST )
190
306
191
307
# f. Melakukan penyalinan nilai st dan cj untuk digunakan lebih lanjut pada bagian bawah
192
308
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]
194
310
195
311
# g. Melakukan perubahan terhadap nilai isi mesin, tj dan st
196
312
# 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 )
201
316
# Memperbaharui nilai MESIN
202
317
# 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 ]]
207
323
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 ]]]
210
330
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
218
342
219
343
print ("cek cj st 3" , CJ , COPY_OF_CJ , ST )
220
344
# 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)):
222
346
try:
223
347
# Jika nilai iterator berada pada index_job,
224
348
# maka update dengan nilai data proses selanjutnya, lakukan perbandingan dengan
@@ -238,7 +362,7 @@ def do_genetic_algo():
238
362
COPY_OF_CJ[i] = MESIN[0][COPY_OF_ST[i][2] - 1]
239
363
except:
240
364
# Exception handling, skip jika tidak memenuhi kondisi diatas
241
- continue
365
+ continue """
242
366
243
367
print ("cek cj st 4" , CJ , COPY_OF_CJ , ST )
244
368
@@ -255,7 +379,7 @@ def do_genetic_algo():
255
379
print ("cek cj st 5" , CJ , COPY_OF_CJ , ST )
256
380
257
381
# Penyalinan kembali nilai cj yang telah diperbaharui
258
- CJ = COPY_OF_CJ
382
+ # CJ = COPY_OF_CJ
259
383
260
384
print ("fin cj" , CJ )
261
385
@@ -312,7 +436,8 @@ def print_schedule(schedule=SCHEDULE, lateness=None):
312
436
print ("RJ" , RJ )
313
437
print ("ST" , ST )
314
438
print ("----lesgo-----" )
315
- while do_genetic_algo () != []:
439
+ count = 1
440
+ while do_genetic_algo (count ) != []:
316
441
print ("===== initial check ======" )
317
442
print ("mesin " , MESIN )
318
443
print ("processing_time " , PROCESSING_TIME )
@@ -321,6 +446,7 @@ def print_schedule(schedule=SCHEDULE, lateness=None):
321
446
print ("TJ" , TJ )
322
447
print ("RJ" , RJ )
323
448
print ("ST" , ST )
449
+ count += 1
324
450
print ("----lesgo-----" )
325
451
pass
326
452
0 commit comments