@@ -82,84 +82,82 @@ def do_genetic_algo():
82
82
global MESIN , JOB_DONE , SCHEDULE , CJ , TJ , RJ , ST
83
83
84
84
# 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)
86
86
87
87
# b. Inisiasi senarai temporari
88
88
temp_list = []
89
89
90
90
# 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 ))]
94
94
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
98
98
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 ]
131
117
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 ]
153
134
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
156
153
157
154
# 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)]] """
160
157
161
158
# d. Melakukan indexing terhadap jadwal yang ada dan telah selesai
162
159
print ("retval?" , retval )
160
+ print ("cek cj st 1" , CJ , ST )
163
161
job = []
164
162
instance = []
165
163
machine = []
@@ -177,7 +175,7 @@ def do_genetic_algo():
177
175
print ("job_on_st" , job_on_ST )
178
176
for value in job :
179
177
i = job_on_ST .index (value )
180
- print ("i" , i )
178
+ # print("i", i)
181
179
SCHEDULE .append ([ST [i ][0 ], ST [i ][1 ], ST [i ][2 ], CJ [i ], RJ [i ]])
182
180
if ST [i ][1 ] == len (ROUTING [ST [i ][0 ] - 1 ]):
183
181
JOB_DONE .append ([ST [i ][0 ], RJ [i ]])
@@ -186,28 +184,38 @@ def do_genetic_algo():
186
184
index_job = [job_on_ST .index (value ) for value in job ]
187
185
index_mac = machine
188
186
187
+ print ("idx_job" , index_job )
188
+ print ("cek cj st 2" , CJ , ST )
189
+
189
190
# f. Melakukan penyalinan nilai st dan cj untuk digunakan lebih lanjut pada bagian bawah
190
191
COPY_OF_ST = [i for i in ST ]
191
192
COPY_OF_CJ = [i for i in CJ ]
192
193
193
194
# g. Melakukan perubahan terhadap nilai isi mesin, tj dan st
194
195
# bias untuk membantu skema penghapusan berdasar indeks
195
196
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 )
197
200
# Memperbaharui nilai MESIN
198
201
# MESIN[0][j] = RJ[i]
199
202
try :
200
203
# 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 )
202
207
# 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" )
204
211
except :
205
212
# 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 )
209
216
bias += 1
210
217
218
+ print ("cek cj st 3" , CJ , COPY_OF_CJ , ST )
211
219
# h. Memperbaharui nilai cj pada COPY_OF_CJ (salinan cj)
212
220
for i in range (len (COPY_OF_ST )):
213
221
try :
@@ -231,6 +239,8 @@ def do_genetic_algo():
231
239
# Exception handling, skip jika tidak memenuhi kondisi diatas
232
240
continue
233
241
242
+ print ("cek cj st 4" , CJ , COPY_OF_CJ , ST )
243
+
234
244
# i. Pembahruan terhadap nilai cj berdasar pemrosesan COPY_OF_CJ dan COPY_OF_ST
235
245
# dilakukan hanya jika panjang keduanya sudah beda (akibat proses penghapusan)
236
246
if (len (CJ ) < len (COPY_OF_CJ )):
@@ -240,6 +250,8 @@ def do_genetic_algo():
240
250
COPY_OF_CJ .pop (i )
241
251
else :
242
252
continue
253
+
254
+ print ("cek cj st 5" , CJ , COPY_OF_CJ , ST )
243
255
244
256
# Penyalinan kembali nilai cj yang telah diperbaharui
245
257
CJ = COPY_OF_CJ
0 commit comments