Skip to content

Commit 84b5fb6

Browse files
committed
Genetic Algorithm selesai puji Tuhan
Genetic Algorithm selesai puji Tuhan
1 parent 7b615e4 commit 84b5fb6

File tree

1 file changed

+161
-35
lines changed

1 file changed

+161
-35
lines changed

src/Genetic_Algorithm.py

+161-35
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)