Skip to content

Commit 93f3efc

Browse files
committed
Initial Commit
Initial Commit
1 parent 7313b55 commit 93f3efc

13 files changed

+1034
-0
lines changed

src/Job_Insertion+txt+Real_Time_Mesin(2).py

Lines changed: 483 additions & 0 deletions
Large diffs are not rendered by default.

src/Non_delay.py

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
# Implementasi algoritma Non-delay
2+
# 0.1. Impor modul eksternal
3+
from datetime import datetime
4+
import time
5+
import calendar
6+
import csv
7+
8+
# 0.2. Definisi variabel global
9+
ROUTING = []
10+
PROCESSING_TIME = []
11+
MESIN = []
12+
JOB_DONE = []
13+
SCHEDULE = []
14+
15+
# 1. Prosedur untuk melakukan pembacaan data dari file
16+
def read_data():
17+
# Menggunakan variabel global
18+
global ROUTING, PROCESSING_TIME, MESIN
19+
print("Sedang membaca data...")
20+
21+
# Pembacaan data mesin dari file
22+
# Exception handling
23+
try:
24+
mesin_file = open(f"test/Mesin.txt", "r")
25+
except:
26+
print(f"File Mesin.txt tidak ditemukan!")
27+
exit()
28+
29+
# Konversi ke tabel
30+
mesin_data = csv.reader(mesin_file)
31+
32+
# Pengolahan isi tabel
33+
for row in mesin_data:
34+
for i in range(len(row)):
35+
row[i] = float(row[i])
36+
if row[i] % 1.0 == 0:
37+
row[i] = int(row[i])
38+
MESIN.append(row)
39+
40+
print("Data mesin berhasil dibaca!")
41+
42+
# Pembacaan data job dari file
43+
n_jobs = int(input("Masukkan jumlah job: "))
44+
for j in range(n_jobs):
45+
# Exception handling
46+
try:
47+
time_file = open(f"test/Job{j + 1}_Time.txt", "r")
48+
except:
49+
print(f"File Job{j + 1}_Time.txt tidak ditemukan!")
50+
exit()
51+
52+
# Konversi ke tabel
53+
time_data = csv.reader(time_file)
54+
55+
# Pengolahan isi tabel
56+
for row in time_data:
57+
for i in range(len(row)):
58+
row[i] = float(row[i])
59+
if row[i] % 1.0 == 0:
60+
row[i] = int(row[i])
61+
PROCESSING_TIME.append(row)
62+
63+
# Exception handling
64+
try:
65+
routing_file = open(f"test/Job{j + 1}_Routing.txt", "r")
66+
except:
67+
print(f"File Job{j + 1}_Routing.txt tidak ditemukan!")
68+
exit()
69+
70+
# Konversi ke tabel
71+
routing_data = csv.reader(routing_file)
72+
73+
# Pengolahan isi tabel
74+
for row in routing_data:
75+
for i in range(len(row)):
76+
row[i] = float(row[i])
77+
if row[i] % 1.0 == 0:
78+
row[i] = int(row[i])
79+
ROUTING.append(row)
80+
81+
print("Data time dan routing berhasil dibaca!")
82+
83+
# 2. Defining ID of process
84+
def define_id(i, j, k):
85+
ID = str(i) + str(j) + str(k)
86+
return ID
87+
88+
# 3. Ekekusi time
89+
def state_check():
90+
global MESIN, JOB_DONE, SCHEDULE, CJ, TJ, RJ, ST
91+
print("cj",CJ)
92+
print("tj",TJ)
93+
print("rj",RJ)
94+
print("st",ST)
95+
96+
# e. Menentukan nilai cj terkecil, job dengan cj terkecil akan diproses duluan
97+
min_c = min(CJ)
98+
99+
# f. Kalo misal ada lebih dari 1 yang punya nilai minimum itu, kita handle
100+
if CJ.count(min_c) > 1:
101+
# Bikin list yang isinya semua job yang punya nilai min_c
102+
index_c_in_cj = [i for i in range(len(CJ)) if CJ[i] == min_c]
103+
104+
# Cek nilai rj dan pilih yang mempunyai nilai rj terkecil
105+
# Prioritasin yang jumlah operasinya masih banyak
106+
temp_list = [] # temporary list
107+
machine_list = [] # machine list
108+
109+
# Isi list dengan semua data yang ada di index_c_in_cj
110+
for i in index_c_in_cj:
111+
if len(temp_list) == 0 or ST[i][2] not in machine_list:
112+
temp_list.append(ST[i])
113+
machine_list.append(ST[i][2])
114+
elif ST[i][2] in machine_list:
115+
index_mac = machine_list.index(ST[i][2]) #i
116+
if (RJ[i] < RJ[ST.index(temp_list[index_mac])]):
117+
temp_list[index_mac] = ST[i]
118+
elif ST[i][1] < temp_list[index_mac][1]:
119+
temp_list[index_mac] = ST[i]
120+
121+
# sehkarang temp_list isinya job yang mau dijalankan
122+
retval = temp_list
123+
124+
else:
125+
retval = [ST[CJ.index(min_c)]]
126+
127+
print("retval",retval)
128+
# Index job value (?)
129+
for value in retval:
130+
i = ST.index(value)
131+
SCHEDULE.append([value[0], value[1], value[2], CJ[i], RJ[i]])
132+
if value[1] == 3:
133+
JOB_DONE.append([value[0], RJ[i]])
134+
135+
index_job = [ST.index(i) for i in retval]
136+
index_mac = [i[2] - 1 for i in retval]
137+
138+
print(index_job, index_mac)
139+
140+
COPY_OF_ST = [i for i in ST]
141+
142+
bias = 0
143+
144+
for i, j in zip(index_job, index_mac):
145+
# Updating MESIN
146+
MESIN[0][j] = RJ[i]
147+
try:
148+
# Updating tj
149+
TJ[i] = PROCESSING_TIME[ST[i][0] - 1][ST[i][1]]
150+
# Updating st
151+
ST[i] = [ST[i][0], ST[i][1] + 1, ROUTING[ST[i][0] - 1][ST[i][1]]]
152+
except:
153+
TJ.pop(i - bias)
154+
ST.pop(i - bias)
155+
CJ.pop(i - bias)
156+
bias += 1
157+
158+
# Updating cj
159+
# retval = [3, 1, 3] mewakili job3, yang1, mesin3
160+
CJ[retval[0][0] - 1] += RJ[retval[0][0] - 1]
161+
TJ[retval[0][0] - 1] = PROCESSING_TIME[retval[0][0] - 1][ST[retval[0][0] - 1][1] - 1]
162+
# ST[retval[0][0] - 1][1] += 1
163+
RJ = [0 for i in range(len(ROUTING))]
164+
for i in range (len(ROUTING)):
165+
RJ[i] = CJ[i] + TJ[i]
166+
167+
return retval
168+
169+
# Print makeform and schedule to string form in the console
170+
def print_schedule(schedule=SCHEDULE, lateness=None):
171+
global PROCESSING_TIME
172+
makespan = max(schedule, key=lambda x: x[4])[4]
173+
for i in range(len(PROCESSING_TIME)):
174+
j = max(filter(lambda a: a[0] == i + 1, schedule), key=lambda x: x[4])[4]
175+
print(f'Job {i + 1} telah selesai dengan waktu selesai {round(j,2)}')
176+
for s in sorted(schedule, key=lambda x: x[0]):
177+
if s[0] == i + 1:
178+
print(f'{s[0]}{s[1]}{s[2]}: Start {round(s[3],2)} End {round(s[4],2)}')
179+
if lateness is not None:
180+
print(f"Earliness: {round(lateness[i],2) * -1}" if lateness[i] <= 0 else f"Tardiness: {round(lateness[i],2)}")
181+
print(f'---\nmakespan: {round(makespan,2)}')
182+
183+
read_data()
184+
# a. Mendefinisikan posisi melalui routing
185+
CJ = [MESIN[0][ROUTING[i][0] - 1] for i in range(len(ROUTING))]
186+
# b. Mendefinisikan waktu pemrosesan
187+
TJ = [PROCESSING_TIME[i][0] for i in range(len(ROUTING))]
188+
# c. Mendefinisikan waktu berakhir
189+
RJ = [0 for i in range(len(ROUTING))]
190+
for i in range (len(ROUTING)):
191+
RJ[i] = CJ[i] + TJ[i]
192+
# d. Mendefinisikan id st (job, operasi, mesin)
193+
ST = [[i + 1, 1, ROUTING[i][0]] for i in range(len(ROUTING))]
194+
print("pt",PROCESSING_TIME)
195+
print("r",ROUTING)
196+
print("m",MESIN)
197+
# state_check()
198+
while state_check() != None:
199+
pass
200+
print('---- Semua job telah selesai ----')
201+
# print_schedule()
202+
# cj, tj, rj, st = state_check()
203+
""" print("Hasil state check")
204+
print("cj", cj)
205+
print("tj", tj)
206+
print("rj", rj)
207+
print("st", st) """
208+
print(SCHEDULE)
209+
print(JOB_DONE)

0 commit comments

Comments
 (0)