• Tidak ada hasil yang ditemukan

Urutan Proses dan Algoritma Penjadwalan Asisten

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

Dokumen terkait