@@ -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