Step 5 : Sistem men-generate laporan jadwal mengajar
3.10 Penerapan Algoritma Genetik Pada Otomatisasi Penjadwalan Asisten .1 Algoritma Genetik yang Digunakan
3.10.3 Urutan Proses dan Algoritma Penjadwalan Asisten
Sebuah jadwal asistensi dapat dihasilkan setelah melalui tahapan proses sebagai berikut :
1. Inisialisasi Nilai Parameter
Pada tahapan ini, sistem akan menerima parameter-parameter berupa ukuran populasi, crossover method, selection rate, dan mutation rate yang diinput user. Nilai parameter tersebut akan menentukan kinerja pencarian jadwal terbaik.
2. Inisialisasi Populasi
Inisialisasi populasi diawali dengan pembentukan jadwal yang transaksi praktikumnya diperoleh dari database. Pada jadwal yang dibentuk, belum terdapat asisten yang dialokasikan untuk mengajar transaksi praktikum. Jadwal yang dimaksud ditunjukkan pada Gambar 3.20.
Gambar 3.20 Jadwal Alokasi Ruang
Setelah jadwal di atas terbentuk, langkah selanjutnya adalah me-random asisten-asisten untuk dialokasikan pada setiap transaksi praktikum di jadwal yang telah dibentuk. Ukuran populasi bergantung pada input-an user. Saat me-random staf pengajar pada jadwal, perlu diperhatikan shift kerja asisten (shift pagi/malam) dan diusahakan bobot tiap staf pengajar merata.
Jadwal yang sudah memiliki asisten hasil random pada transaksi praktikumnya ditunjukkan pada Gambar 3.21.
Gambar 3.21 Gambar Jadwal Hasil Random
Pseudocode yang digunakan untuk membentuk populasi awal adalah sebagai berikut :
create arraylist ast dan isi dengan data asisten idxAst = 0
while ctrAst < jumlah data pada ast
if jabatan asisten ast ctrAst = asisten then jumAst + 1
else jumAI + 1 end while
while ctrFile < MAX_JADWAL
bobotPerAst = jdwl.Bobot / (jumAst + (jumAI / 4)) bobotTempAstInti = bobotPerAst / 4
while counter < jumlah data pada ast
if jabatan ast counter = asisten then bobot asisten ast count = bobotPerAst
else bobot asisten ast count = bobotTempAstInti end while
while jumlah asisten < kapasitas pada jadwal random hari
random shift berdasarkan shift kerja asisten random cell
if jumlah asisten < kapasitas pada jadwal hari,shift,cell dan inisial asisten ast idxAst tidak mengajar pada jadwal hari,shift then
cek apakah dalam 1 transaksi ada asisten yang sama inisialnya
if tidak ada inisial asisten yang sama pada 1 cell then
add inisial asisten ast idxAst ke Ast jadwal,hari,shift,cell
bobotTempAst = bobotTempAst + Bobot cell
BobotPerSemester asisten ast idxAst + bobotTempAst
end if
if bobotTempAst >= Bobot ast idxAst – 0.75 then bobotTempAst = 0 idxAst = idxAst + 1 end if end if end while end while 3. Evaluasi Fitness
Setelah populasi terbentuk, setiap kromosom pada populasi tersebut akan diberikan nilai fitness berdasarkan kesesuaiannya dengan constraint-constraint dalam penjadwalan asistensi.
Constraint dalam penjadwalan dapat dibedakan menjadi hard constraint dan soft constraint. Apabila hard constraint dilanggar, maka akan
berakibat fatal karena jadwal yang dihasilkan tidak dapat digunakan. Pelanggaran terhadap soft constraint masih dapat ditolerir sehingga jadwal yang dihasilkan masih dapat digunakan. Pelanggaran hard constraint diberi nilai 10000, sedangkan pelanggaran soft constraint hanya diberi nilai 2. Hal ini dimaksudkan agar meskipun semua soft constraint dilanggar, nilai fitness-nya tidak akan sama dengan nilai fitness apabila 1 hard constraint dilanggar.
Daftar hard constraint dan soft constraint yang digunakan dalam penjadwalan asistensi ditunjukkan pada Tabel 3.25.
Tabel 3.25 Hard Constraint dan Soft Constraint
Hard Constraints Soft Constraints
Seorang asisten hanya dapat mengajar satu materi praktikum pada satu tempat dan pada satu waktu.
Asisten mengajar maksimum 3 shift dalam 1 hari.
Asisten hanya dapat mengajar suatu mata kuliah jika ia telah lulus training untuk mata kuliah tersebut atau jika ia memenuhi kualifikasi/syarat mengajar berupa grade minimum untuk mata kuliah tersebut.
Asisten diusahakan tidak mengajar 3 shift berturut-turut.
Jadwal mengajar asisten tidak bentrok dengan jadwal kuliahnya.
Dalam satu transaksi praktikum, asisten yang mengajar bukan asisten junior semuanya, tetapi juga didampingi oleh asisten senior.
Variasi mengajar asisten diperkecil (asisten mengajar mata kuliah-mata kuliah dalam variasi yang sama).
Asisten tidak mengajar pada shift tepat setelah shift ia kuliah.
Bobot mengajar seluruh asisten merata. Rentang bobot yang masih ditoleransi adalah 0.5.
Asisten tidak ada kuliah praktikum pada shift tepat setelah ia mengajar.
Asisten mengajar sesuai
dengan prioritas/minat ajar yang sebelumnya diisi oleh Asisten tersebut.
Pseudocode untuk mengevaluasi constraint 1 (seorang asisten hanya dapat mengajar satu materi praktikum pada satu tempat dan pada satu waktu) adalah sebagai berikut :
while hari < jumlah hari pada jadwal
while shift < jumlah shift pada jadwal hari create arraylist astCell
while cell < jumlah transaksi praktikum pada jadwal hari,shift
while ctrAst < jumlah asisten mengajar pada jadwal hari,shift,cell
flag = true
while ctr < jumlah data pada astCell
if inisial asisten pada astCell ctr = inisial asisten pada jadwal hari,shift,cell,ctrAst then
nilai asisten astCell ctr + 1 flag = false
break end if end while
if flag = true then add objek asisten ke astCell
end while end while
while ctr < jumlah data pada astCell
jika nilai asisten astCell ctr >= 2 then fitness = fitness + 10000
end while end while end while
Pseudocode untuk mengevaluasi constraint 2 (asisten hanya dapat mengajar suatu mata kuliah jika ia telah lulus training untuk mata kuliah tersebut atau jika ia memenuhi kualifikasi/syarat mengajar berupa grade minimum untuk mata kuliah tersebut) adalah sebagai berikut :
create arraylist ast
create arraylist astBanding
while hari < jumlah hari pada jadwal
while shift < jumlah shift pada jadwal hari
while cell < jumlah transaksi praktikum pada jadwal hari,shift
while ctrAst < jumlah asisten mengajar pada jadwal hari,shift,cell
flag = true
while ctr < jumlah data pada ast
if inisial asisten ast ctr = inisial asisten pada jadwal hari,shift,cell,ctrAst then
if MtkTraining dan MtkQualified asisten ast ctr tidak mengandung Kdmtk pada jadwal hari,shift,cell then
fitness = fitness + 10000 end if flag = false break end if end while
if flag = true then
create asisten tempAst
inisial tempAst = inisial asisten pada jadwal hari,shift,cell,ctrAst
kdHari tempAst = kdHari pada jadwal hari
kdShift tempAst = Id pada jadwal hari,shift
while counter < jumlah data pada astBanding
if inisial tempAst = inisial asisten astBanding counter then
MtkTraining tempAst = MtkTraining asisten astBanding counter
MtkQualified tempAst = MtkQualified asisten astBanding counter
end if end while
add tempAst ke ast end if
end while end while end while end while
Pseudocode untuk mengevaluasi constraint 3 (jadwal mengajar asisten tidak bentrok dengan jadwal kuliahnya) adalah sebagai berikut :
create arraylist ast create arraylist kuliah
isi kuliah dengan data kuliah asisten
while hari < jumlah hari pada jadwal
while shift < jumlah shift pada jadwal hari
while cell < jumlah transaksi praktikum pada jadwal hari,shift
while ctrAst < jumlah asisten mengajar pada jadwal hari,shift,cell
flag = true
while ctr < jumlah data pada ast
if inisial asisten ast ctr = inisial asisten pada jadwal hari,shift,cell,ctrAst then
KdHari asisten ast ctr + KdHari pada jadwal hari
KdShift asisten ast ctr + Id pada jadwal hari,shift
end if end while
if flag = true then
create asisten tempAst
inisial tempAst = inisial asisten pada jadwal hari,shift,cell,ctrAst
add tempAst ke ast end if
end while end while end while end while
while counter < jumlah data pada ast
while ctrShift < panjang string KdHari pada asisten ast ctr
kodehari = KdHari(ctrShift) asisten ast ctr kodeshift = KdShift(ctrShift) asisten ast ctr
while ctrKul < jumlah data pada kuliah
if inisial asisten ast ctr = inisial KuliahAst kuliah ctrkul dan kodehari = KdHari KuliahAst kuliah ctrkul dan kodeshift = KdShift KuliahAst kuliah ctrkul then
fitness = fitness + 10000
end while end while end while
Pseudocode untuk mengevaluasi constraint 4 (variasi mengajar asisten diperkecil) adalah sebagai berikut :
create arraylist ast
create arraylist astBanding dan isi dengan data semua asisten
create arraylist matkul dan isi dengan data mata kuliah
while hari < jumlah hari pada jadwal
while shift < jumlah shift pada jadwal hari
while cell < jumlah transaksi praktikum pada jadwal hari,shift
while ctrAst < jumlah asisten mengajar pada jadwal hari,shift,cell
flag = true
while ctr < jumlah data pada ast
if inisial asisten ast ctr = inisial asisten pada jadwal hari,shift,cell,ctrAst then
tempJenisVariasi = ””
while ctrVariasi < jumlah data pada matkul
if KdMtk pada jadwal hari,shift,cell = kdmtk matkul ctrVariasi then
tempJenisVariasi = JenisVariasi matkul ctrVariasi
break end if end while
if JenisVariasi asisten ast ctr tidak mengandung tempJenisVariasi then
gabung JenisVariasi asisten ast ctr dengan tempJenisVariasi
BanyakVariasi asisten ast ctr + 1 end if
flag = false break
end if end while
if flag = true then
create arraylist tempAst tempJenisVariasi = ””
while ctrVariasi < jumlah data pada matkul if KdMtk pada jadwal hari,shift,cell = kdmtk matkul ctrVariasi then
tempJenisVariasi = JenisVariasi matkul ctrVariasi break end if end while JenisVariasi tempAsisten = tempJenisVariasi
inisial tempAsisten = inisial asisten pada jadwal hari,shift,cell,ctrAst
add tempAst ke ast end if
end while end while end while end while
while counter < jumlah data pada ast
if BanyakVariasi asisten ast counter > MAX_VARIASI then
fitness = fitness + ((BanyakVariasi asisten ast
counter – MAX_VARIASI) * 10000) end if
end while
Pseudocode untuk mengevaluasi constraint 5 (bobot mengajar seluruh asisten merata) adalah sebagai berikut :
asisten ast() = data semua asisten
asisten astBobot() = data semua asisten dengan bobot per semesternya
retval = 0
while ctr < jumlah asisten pada ast
if jabatan ast ctr = asisten dan selisih BobotPerSemester astBobot ctr dengan bobotPerAst lebih/kurang dari 0.5 then
else if jabatan ast ctr = asisten inti dan selisih BobotPerSemester astBobot ctr dengan bobotTempAstInti lebih/kurang dari 0.5 then
retval = retval + 10000 end if
end while
if jumlah asisten yang dialokasikan < jumlah asisten yang seharusnya mengajar pada jadwal hari,shift,cell then
return retval else
return 0 end if
Pseudocode untuk mengevaluasi constraint 6 (asisten mengajar maksimum 3 shift dalam 1 hari) adalah sebagai berikut :
while hari < jumlah hari pada jadwal create arraylist ast
while shift < jumlah shift pada jadwal hari
while cell < jumlah transaksi praktikum pada jadwal hari,shift
while ctrAst < jumlah asisten mengajar pada jadwal hari,shift,cell
while ctr < jumlah data pada ast
if inisial asisten pada ast ctr = inisial asisten pada jadwal hari,shift,cell,ctrAst then
nilai asisten ast ctr + 1 flag = false
break end if end while
if flag = true then add objek asisten ke ast end while
end while end while
while ctr < jumlah data pada ast
if nilai asisten ast ctr >= 3 then fitness =
fitness + 2
end while end while
Pseudocode untuk mengevaluasi constraint 7 (asisten diusahakan tidak mengajar 3 shift berturut-turut) adalah sebagai berikut :
while hari < jumlah hari pada jadwal create arraylist ast
while shift < jumlah shift pada jadwal hari
while cell < jumlah transaksi praktikum pada jadwal hari,shift
while ctrAst < jumlah asisten mengajar pada jadwal hari,shift,cell
while ctr < jumlah data pada ast
if inisial asisten pada ast ctr = inisial asisten pada jadwal hari,shift,cell,ctrAst then
shift mengajar asisten ast ctr + 1 + shift
flag = false break
end if end while
if flag = true then add objek asisten ke ast end while
end while end while
while ctr < jumlah data pada ast
if shift mengajar asisten ast ctr mengandung shift yang berurutan then
fitness = fitness + 2
end if end while end while
Pseudocode untuk mengevaluasi constraint 8 (dalam satu transaksi praktikum, asisten yang mengajar bukan asisten junior semuanya, tetapi juga didampingi oleh asisten senior) adalah sebagai berikut :
while hari < jumlah hari pada jadwal
while shift < jumlah shift pada jadwal hari
while cell < jumlah transaksi praktikum pada jadwal hari,shift
while ctrAst < jumlah asisten mengajar pada jadwal hari,shift,cell
if angkatan asisten pada jadwal hari,shift,cell,ctrAst junior then isJunior + 1
end while
if isJunior = jumlah asisten mengajar pada jadwal hari,shift,cell then fitness = fitness + 2
end while end while end while
Pseudocode untuk mengevaluasi constraint 9 (asisten tidak mengajar pada shift tepat setelah shift ia kuliah) adalah sebagai berikut :
create arraylist ast create arraylist kuliah
isi kuliah dengan data kuliah asisten
while hari < jumlah hari pada jadwal
while shift < jumlah shift pada jadwal hari
while cell < jumlah transaksi praktikum pada jadwal hari,shift
while ctrAst < jumlah asisten mengajar pada jadwal hari,shift,cell
flag = true
while ctr < jumlah data pada ast
if inisial asisten ast ctr = inisial asisten pada jadwal hari,shift,cell,ctrAst then
KdHari asisten ast ctr + KdHari pada jadwal hari
KdShift asisten ast ctr + Id pada jadwal hari,shift
end if end while
if flag = true then
create asisten tempAst
inisial tempAst = inisial asisten pada jadwal hari,shift,cell,ctrAst
add tempAst ke ast end if
end while end while
end while end while
while counter < jumlah data pada ast
while ctrShift < panjang string KdHari pada asisten ast ctr
kodehari = KdHari(ctrShift) asisten ast ctr kodeshift = KdShift(ctrShift) asisten ast ctr
while ctrKul < jumlah data pada kuliah
if inisial asisten ast ctr = inisial KuliahAst kuliah ctrkul dan kodehari = KdHari KuliahAst kuliah ctrkul dan kodeshift - 1 = KdShift KuliahAst kuliah ctrkul dan isMtkPrk KuliahAst kuliah ctrkul = false then
fitness = fitness + 2
end if end while end while end while
Pseudocode untuk mengevaluasi constraint 10 (asisten tidak ada kuliah praktikum pada shift tepat setelah ia mengajar) adalah sebagai berikut : create arraylist ast
create arraylist kuliah
isi kuliah dengan data kuliah asisten
while hari < jumlah hari pada jadwal
while shift < jumlah shift pada jadwal hari
while cell < jumlah transaksi praktikum pada jadwal hari,shift
while ctrAst < jumlah asisten mengajar pada jadwal hari,shift,cell
flag = true
while ctr < jumlah data pada ast
if inisial asisten ast ctr = inisial asisten pada jadwal hari,shift,cell,ctrAst then
KdHari asisten ast ctr + KdHari pada jadwal hari
KdShift asisten ast ctr + Id pada jadwal hari,shift
end if end while
create asisten tempAst
inisial tempAst = inisial asisten pada jadwal hari,shift,cell,ctrAst
add tempAst ke ast end if
end while end while end while end while
while counter < jumlah data pada ast
while ctrShift < panjang string KdHari pada asisten ast ctr
kodehari = KdHari(ctrShift) asisten ast ctr kodeshift = KdShift(ctrShift) asisten ast ctr
while ctrKul < jumlah data pada kuliah
if inisial asisten ast ctr = inisial KuliahAst kuliah ctrkul dan kodehari = KdHari KuliahAst kuliah ctrkul dan kodeshift + 1 = KdShift KuliahAst kuliah ctrkul dan isMtkPrk KuliahAst kuliah ctrkul = true then
fitness = fitness + 2
end if end while end while end while
Pseudocode untuk mengevaluasi constraint 11 (asisten mengajar sesuai dengan prioritas/minat ajar yang sebelumnya diisi oleh asisten tersebut) adalah sebagai berikut :
create arraylist ast
while hari < jumlah hari pada jadwal
while shift < jumlah shift pada jadwal hari
while cell < jumlah transaksi praktikum pada jadwal hari,shift
while ctrAst < jumlah asisten mengajar pada jadwal hari,shift,cell
if prioritas ast ctr < 15 and (not contains
mtkqualified or not contains mtklulustraining) then
fitness = fitness + 2 end if
end while end while end while
4. Mate
Setelah populasi awal terbentuk, selanjutnya akan dikerjakan proses mate yang mencakup seleksi, crossover, dan mutasi. Proses-proses tersebut akan dikerjakan terus-menerus hingga diperoleh jadwal solusi yang terbaik.
Adapun kondisi-kondisi yang dapat menyebabkan iterasi terhenti adalah : solusi dengan nilai fitness terbaik (paling minimum) telah diperoleh, iterasi selanjutnya sudah tidak memungkinkan diperolehnya solusi dengan nilai fitness yang lebih baik, atau jumlah iterasi telah mencapai nilai batas yang ditentukan.
Berikut ini adalah penjelasan dan pseudocode dari proses-proses yang dikerjakan dalam proses mate.
a. Seleksi
Pada proses seleksi, sebagian kromosom yang terbaik dari populasi akan dipilih untuk membentuk generasi selanjutnya. Jumlah kromosom yang dipilih bergantung pada nilai parameter selection rate yang di-input user.
Pseudocode untuk proses seleksi (elitism) adalah sebagai berikut : esize = popSize * selection rate
while ctr < esize
isi buffer ctr dengan population ctr end while
b. Crossover
Crossover adalah proses pertukaran satu atau lebih gen antara suatu kromosom dengan kromosom lain sehingga dihasilkan dua kromosom baru. Metode crossover yang digunakan bergantung pada input user, dapat berupa one-point crossover maupun two-point crossover.
Setelah sebagian kromosom terbaik dari populasi sekarang disalin langsung ke generasi selanjutnya melalui proses elitism, akan dilakukan crossover untuk menghasilkan individu baru sebanyak ukuran populasi dikurangi jumlah individu hasil elitism. Hal ini dilakukan dengan memilih dua individu dari populasi sekarang secara acak dengan interval pemilihan sebesar selection rate.
Berikut ini adalah pseudocode untuk one-point crossover : random jadwal untuk dijadikan parent1
random jadwal lain untuk dijadikan parent2
idxHari = hasil random hari titik potong crossover idxShift = hasil random shift titik potong crossover flagParent = true
while ctrHari < jumlah hari pada jadwal
while shift < jumlah shift pada jadwal hari
while cell < jumlah transaksi praktikum pada jadwal hari,shift
if ctrHari = idxHari dan ctrShift = idxShift then flagParent = false
if flagParent = true then
copy inisial asisten dari parent1 pada posisi sebelum titik potong crossover ke jadwal
else
copy inisial asisten dari parent2 pada posisi setelah titik potong crossover ke jadwal
end if end while end while end while
Berikut ini adalah pseudocode untuk two-point crossover : random jadwal untuk dijadikan parent1
random jadwal lain untuk dijadikan parent2
idxHari1 = hasil random hari titik potong 1 crossover idxShift1 = hasil random shift titik potong 1 crossover idxHari2 = hasil random hari titik potong 2 crossover idxShift2 = hasil random shift titik potong 2 crossover flagParent = true
while ctrHari < jumlah hari pada jadwal
while shift < jumlah shift pada jadwal hari
while cell < jumlah transaksi praktikum pada jadwal hari,shift
if ctrHari = idxHari1 dan ctrShift = idxShift1
then flagParent = false
if ctrHari = idxHari2 dan ctrShift = idxShift2
then flagParent = true
if flagParent = true then
copy inisial asisten dari parent1 pada posisi sebelum titik potong crossover ke jadwal
else
copy inisial asisten dari parent2 pada posisi setelah titik potong crossover ke jadwal
end if end while end while end while
c. Mutasi
Mutasi adalah proses perubahan satu atau lebih gen dalam suatu kromosom untuk memperbaiki gen yang salah. Mutasi yang digunakan adalah mutasi random, dimana gen yang tidak tepat akan digantikan dengan gen lain secara acak namun terarah.
Pseudocode untuk proses mutasi adalah sebagai berikut :
idxAst = hasil random indeks asisten yang dimutate pada jadwal hari,shift,cell
asisten astBobot() = data semua asisten dengan bobot per semesternya
kdmtkDiajar = KdMtk pada jadwal hari,shift,cell
shiftRandom = shift dimana transaksi praktikum pada shift tersebut dapat diajar oleh asisten yang shift kerjanya apa saja (pagi, pagi/malam, malam)
kdStatus = status praktikum (minggu ganjil, genap, before mid, after mid, atau full semester)
allTeacher = inisial asisten yang mengajar pada jadwal hari,shift,cell disesuaikan dengan status praktikum
isShiftSame = true
while isShiftSame = true
rndAst = indeks asisten yang dirandom untuk menggantikan asisten yang dimutate
if shiftRandom mengandung Shift asisten ast rndAst dan allTeacher tidak mengandung inisial asisten ast rndAst then
if asisten ast rndAst qualified untuk mengajar kdmtkDiajar atau asisten ast rndAst telah lulus training kdmtkDiajar then
while ctr < jumlah data pada astBobot
if inisial ast rndAst = inisial astBobot ctr dan jabatan ast rndAst = asisten dan bobotPerSemester astBobot ctr < bobotPerAst – 0.5 then isShiftSame = false
if inisial ast rndAst = inisial astBobot ctr dan jabatan ast rndAst = asisten inti dan bobotPerSemester astBobot ctr < bobotTempAstInti – 0.5 then isShiftSame = false
end while end if
end if