Skip to content

Commit 7758901

Browse files
committed
Hampir kelar
Hampir kelar
1 parent 4b139f1 commit 7758901

File tree

1 file changed

+83
-71
lines changed

1 file changed

+83
-71
lines changed

src/Genetic_Algorithm.py

Lines changed: 83 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -82,84 +82,82 @@ def do_genetic_algo():
8282
global MESIN, JOB_DONE, SCHEDULE, CJ, TJ, RJ, ST
8383

8484
# a. Mengambil nilai cj terkecil dari data masukan, job dengan cj terkecil akan diproses duluan
85-
min_c = min(CJ)
85+
# min_c = min(CJ)
8686

8787
# b. Inisiasi senarai temporari
8888
temp_list = []
8989

9090
# c. Kalau misal ada lebih dari 1 yang punya nilai minimum, digunakan skema penanganan
91-
if CJ.count(min_c) > 1:
92-
# Inisiasi senarai yang berisi semua job dengan nilai min_c
93-
index_c_in_cj = [i for i in range(len(CJ)) if CJ[i] == min_c]
91+
# if CJ.count(min_c) > 1:
92+
# Inisiasi senarai yang berisi semua job dengan nilai min_c
93+
index_c_in_cj = [i for i in range(len(CJ))]
9494

95-
# Cek nilai rj dan pilih yang mempunyai nilai rj terkecil
96-
# Prioritaskan yang jumlah operasinya masih banyak
97-
machine_list = [] # machine list
95+
# Cek nilai rj dan pilih yang mempunyai nilai rj terkecil
96+
# Prioritaskan yang jumlah operasinya masih banyak
97+
machine_list = [] # machine list
9898

99-
# Isi list dengan semua data yang ada di index_c_in_cj
100-
for i in index_c_in_cj:
101-
# Kalau belum ada di machine list, tambahkan
102-
if len(temp_list) == 0 or ST[i][2] not in machine_list:
103-
temp_list.append(ST[i])
104-
machine_list.append(ST[i][2])
105-
# print("masuk sini?", ST[i][2])
106-
print("i, stvals", i, ST[i][2])
107-
mach_on_ST = []
108-
# print("ST", ST)
109-
for k in range (len(ST)):
110-
mach_on_ST.append(ST[k][2])
111-
k = mach_on_ST.index(ST[i][2])
112-
MESIN[0][ST[i][2] - 1] = RJ[k]
113-
print("ST", ST)
114-
# Kalau sudah ada, lakukan filtering sesuai kriteria diatas
115-
elif ST[i][2] in machine_list:
116-
index_mac = machine_list.index(ST[i][2])
117-
job = ST[i][0]
118-
# Kalo mesinnya kosong, atau bisa selesai lebih cepat, masukin di
119-
# tempat yang memungkinkan, proses genetikasi
120-
if (ST[i][2] >= 1 and ST[i][2] <= 4):
121-
minimum = MESIN[0][0]
122-
idx_mesin = 0
123-
for j in range (4):
124-
if (minimum > MESIN[0][j]):
125-
idx_mesin = j
126-
minimum = MESIN[0][j]
127-
128-
if (MESIN[0][ST[i][2] - 1] > minimum):
129-
ST[job-1] = [job, ST[job-1][1], idx_mesin + 1]
130-
temp_list.append(ST[job-1])
99+
# Isi list dengan semua data yang ada di index_c_in_cj
100+
for i in index_c_in_cj :
101+
# temp_list.append(ST[i])
102+
machine_list.append(ST[i][2])
103+
104+
for i in index_c_in_cj:
105+
index_mac = machine_list.index(ST[i][2])
106+
job = ST[i][0]
107+
# Kalo mesinnya kosong, atau bisa selesai lebih cepat, masukin di
108+
# tempat yang memungkinkan, proses genetikasi
109+
if (ST[i][2] >= 1 and ST[i][2] <= 4):
110+
# print("ehsini1")
111+
minimum = MESIN[0][0]
112+
idx_mesin = 0
113+
for j in range (4):
114+
if (minimum > MESIN[0][j]):
115+
idx_mesin = j
116+
minimum = MESIN[0][j]
131117

132-
print ("ST", ST)
133-
elif (ST[i][2] >= 5 and ST[i][2] <= 6):
134-
minimum = MESIN[0][4]
135-
idx_mesin = 0
136-
for j in range (4, 5):
137-
if (minimum > MESIN[0][j]):
138-
idx_mesin = j
139-
minimum = MESIN[0][j]
140-
141-
if (MESIN[0][ST[i][2] - 1] > minimum):
142-
ST[i] = [job, ST[i][1], idx_mesin + 1]
143-
temp_list.append(ST[i])
144-
else :
145-
# Prioritas nilai rj
146-
if (RJ[i] < RJ[ST.index(temp_list[index_mac])]):
147-
temp_list[index_mac] = ST[i]
148-
# Prioritas jumlah operasi
149-
elif ST[i][1] < temp_list[index_mac][1]:
150-
temp_list[index_mac] = ST[i]
151-
152-
MESIN[0][ST[i][2] - 1] = RJ[ST[i][2] - 1]
118+
if (MESIN[0][ST[i][2] - 1] > minimum):
119+
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]
121+
temp_list.append(ST[i])
122+
else :
123+
MESIN[0][ST[i][2] - 1] += PROCESSING_TIME[job - 1][ST[i][1] - 1]
124+
temp_list.append(ST[i])
125+
print ("ST, MESIN", ST, MESIN)
126+
elif (ST[i][2] >= 5 and ST[i][2] <= 6):
127+
print("ehsini1")
128+
minimum = MESIN[0][4]
129+
idx_mesin = 4
130+
for j in range (4, 5):
131+
if (minimum > MESIN[0][j]):
132+
idx_mesin = j
133+
minimum = MESIN[0][j]
153134

154-
# Sekarang temp_list isinya job yang mau dijalankan (dalam sebuah list)
155-
retval = temp_list
135+
if (MESIN[0][ST[i][2] - 1] > minimum):
136+
ST[i] = [job, ST[i][1], idx_mesin + 1]
137+
MESIN[0][ST[i][2] - 1] += PROCESSING_TIME[job - 1][ST[i][1] - 1]
138+
temp_list.append(ST[i])
139+
else :
140+
MESIN[0][ST[i][2] - 1] += PROCESSING_TIME[job - 1][ST[i][1] - 1]
141+
temp_list.append(ST[i])
142+
print ("ST, MESIN", ST, MESIN)
143+
else :
144+
# Prioritas nilai rj
145+
if (RJ[i] < RJ[ST.index(temp_list[index_mac])]):
146+
temp_list[index_mac] = ST[i]
147+
# Prioritas jumlah operasi
148+
elif ST[i][1] < temp_list[index_mac][1]:
149+
temp_list[index_mac] = ST[i]
150+
151+
# Sekarang temp_list isinya job yang mau dijalankan (dalam sebuah list)
152+
retval = temp_list
156153

157154
# Kalau tidak, kembalikan saja nilai st dari cj tersebut dalam sebuah list
158-
else:
159-
retval = [ST[CJ.index(min_c)]]
155+
""" else:
156+
retval = [ST[CJ.index(min_c)]] """
160157

161158
# d. Melakukan indexing terhadap jadwal yang ada dan telah selesai
162159
print("retval?", retval)
160+
print("cek cj st 1", CJ, ST)
163161
job = []
164162
instance = []
165163
machine = []
@@ -177,7 +175,7 @@ def do_genetic_algo():
177175
print("job_on_st", job_on_ST)
178176
for value in job:
179177
i = job_on_ST.index(value)
180-
print("i", i)
178+
# print("i", i)
181179
SCHEDULE.append([ST[i][0], ST[i][1], ST[i][2], CJ[i], RJ[i]])
182180
if ST[i][1] == len(ROUTING[ST[i][0] - 1]):
183181
JOB_DONE.append([ST[i][0], RJ[i]])
@@ -186,28 +184,38 @@ def do_genetic_algo():
186184
index_job = [job_on_ST.index(value) for value in job]
187185
index_mac = machine
188186

187+
print("idx_job", index_job)
188+
print("cek cj st 2", CJ, ST)
189+
189190
# f. Melakukan penyalinan nilai st dan cj untuk digunakan lebih lanjut pada bagian bawah
190191
COPY_OF_ST = [i for i in ST]
191192
COPY_OF_CJ = [i for i in CJ]
192193

193194
# g. Melakukan perubahan terhadap nilai isi mesin, tj dan st
194195
# bias untuk membantu skema penghapusan berdasar indeks
195196
bias = 0
196-
for i, j in zip(index_job, index_mac):
197+
for i in range (len(index_job)):
198+
k = index_job[i]
199+
print(k)
197200
# Memperbaharui nilai MESIN
198201
# MESIN[0][j] = RJ[i]
199202
try:
200203
# Memperbaharui nilai tj
201-
TJ[i] = PROCESSING_TIME[ST[i][0] - 1][ST[i][1]]
204+
print("untuk index i", k, ST[k][0] - 1, ST[k][1])
205+
TJ[k] = PROCESSING_TIME[ST[k][0] - 1][ST[k][1] - 1]
206+
print("TJ", TJ)
202207
# Memperbaharui nilai st
203-
ST[i] = [ST[i][0], ST[i][1] + 1, ROUTING[ST[i][0] - 1][ST[i][1]]]
208+
ST[k] = [ST[k][0], ST[k][1] + 1, ROUTING[ST[k][0] - 1][ST[k][1]]]
209+
print("ST", ST)
210+
print(k, "LEWAT")
204211
except:
205212
# Exception handling jika tidak ada, maka saatnya dihapus
206-
TJ.pop(i - bias)
207-
ST.pop(i - bias)
208-
CJ.pop(i - bias)
213+
TJ.pop(k - bias)
214+
ST.pop(k - bias)
215+
CJ.pop(k - bias)
209216
bias += 1
210217

218+
print("cek cj st 3", CJ, COPY_OF_CJ, ST)
211219
# h. Memperbaharui nilai cj pada COPY_OF_CJ (salinan cj)
212220
for i in range(len(COPY_OF_ST)):
213221
try:
@@ -231,6 +239,8 @@ def do_genetic_algo():
231239
# Exception handling, skip jika tidak memenuhi kondisi diatas
232240
continue
233241

242+
print("cek cj st 4", CJ, COPY_OF_CJ, ST)
243+
234244
# i. Pembahruan terhadap nilai cj berdasar pemrosesan COPY_OF_CJ dan COPY_OF_ST
235245
# dilakukan hanya jika panjang keduanya sudah beda (akibat proses penghapusan)
236246
if (len(CJ) < len(COPY_OF_CJ)):
@@ -240,6 +250,8 @@ def do_genetic_algo():
240250
COPY_OF_CJ.pop(i)
241251
else :
242252
continue
253+
254+
print("cek cj st 5", CJ, COPY_OF_CJ, ST)
243255

244256
# Penyalinan kembali nilai cj yang telah diperbaharui
245257
CJ = COPY_OF_CJ

0 commit comments

Comments
 (0)