• Tidak ada hasil yang ditemukan

3.2. Analisis Permasalahan

3.2.1. Analisis Algoritma Genetika Pada Penjadwalan

3.2.1.2. Evaluasi Fitness Pada Penjadwalan

Setelah kromosom terbentuk, langkah selanjutnya adalah menentukan Nilai Fitness untuk masing masing kromosom. Nilai fitness merupakan penentu

kromosom tersebut baik atau tidak. Nilai fitness didapat dari banyaknya pelanggaran Hard Constraint yang dilakukan pada 1 kromosom.

Diagram Flowchart evaluasi fitness adalah sebagai berikut :

Gambar 3. 7 Flowchart Evaluasi Fitness

Adapun aturan (constraint) dan bobot fitness yang diterapkan dalam Prodi PGSG Universitas Sanata Dharma adalah sebagai berikut :

Tabel 3. 3 Tabel Aturan Penjadwalan Matakuliah

HC Aturan Nilai Fitness

1.

Satu ruang hanya dapat

digunakan oleh satu

matakuliah di hari dan jam tertentu.

Pelanggaran = 1 jika terdapat dua matakuliah di ruang, jam, dan hari yang sama.

2. Satu dosen hanya dapat mengajar satu matakuliah di jam yang sama.

Pelanggaran = 1 jika ada dua atau lebih matakuliah dosen tersebut berada di jam yang sama.

3. Matakuliah untuk satu

semester tertentu tidak boleh berada di jam yang sama kecuali untuk matakuliah

yang sama dan dosen

berbeda.

Pelanggaran = 1 jika ada dua atau lebih matakuliah sama untuk dosen yang sama di jam yang sama.

4. Jumlah matakuliah di dalam satu semester yang sama tidak boleh lebih dari 3 di hari yang sama.

Pelanggaran = 1, jika jumlah matakuliah yang berada di hari yang sama berjumlah > 3.

5. Dosen mengajar dalam sehari tidak boleh lebih dari 3 matakuliah.

Pelanggaran = 1, jika terdapat lebih dari 3 matakuliah dalam sehari yang diampu dosen yang sama

Dalam penentuan nilai fitness, kromosom dikatakan optimal atau merupakan sebuah solusi jika nilai fitnessnya sama dengan 0 (nol). Pada flowchart akan memulai dengan mengeksekusi semua kromosom. Setiap kromosom akan dieksekusi untuk mencari nilai fitness dengan menjalankan method eksekusiAturan(). Method ini merupakan representasi dari kelima aturan Hard Constraint pada Tabel 3.7.

Algoritma Method eksekusiAturan(Kromosom x)

2. Panggil method cekDosen dengan parameter x. Hasilnya disimpan ke dalam parent.

3. Panggil method cekMatakuliah dengan parameter parent. Hasilnya disimpan ke dalam parent.

4. Panggil method cekJumlahMatakuliah dengan parameter parent. Hasilnya disimpan ke dalam parent.

5. Panggil method cekDosenMengajar dengan parameter parent. Hasilnya disimpan ke dalam parent.

6. Kembalikan nilai parent; 7. Selesai.

Gambar 3. 8 Algoritma Method eksekusiAturan

Method eksekusiAturan merupakan method yang bertujuan untuk mendapatkan nilai fitness total di setiap gen nya. Nilai fitness setiap gen akan ditambahkan berdasarkan kelima aturan hard constrans (HC). Method eksekusiAturan hanya mengecek HC 2 hingga HC 5 saja. HC 1 secara otomatis sudah dapat dipenuhi oleh program karena setiap slot gen hanya dapat berisi 0 hingga 1 kelas matakuliah.

Pada method eksekusiAturan, kromosom akan dievaluasi tiap gennya. Ada 5 method yang merepresentasikan aturan penjadwalan matakuliah yang berlaku dalam Prodi PGSD Universitas Sanata Dharma. Berikut penjelasan ke 5 method :

HC 2 : method cekDosen (parameter x bertipe kromosom)

1. Buat variabel posisi_jam bertipe array of int dengan panjangnya sesuai dengan jumlah_ruang kuliah.

2. Buat variabel hari bertipe array of String dengan input Hari Senin sampai Jumat.

3. Buat variabel jam bertipe int dengan nilai awal 1. 4. Buat variabel count bertipe int dengan nilai awal 0.

5. Untuk i sama dengan 0 hingga panjang posisi jam, lakukan langkah 6. 6. jika i sama dengan 0 maka set posisi_jam ke i sama dengan 0. Selain itu set

posisi_jam ke i bernilai posisi_jam ke [i-1] ditambah 4. 7. Ketika true, maka lakukan langkah 8.

8. Jika Gen ke count pada kromosom x harinya sama dengan hari yang ke 0 (senin), maka menambahkan nilai count dengan 1. Selain itu hentikan looping.

9. Untuk i = 1 hingga panjang hari, lakukan langkah 10-22. 10.Untuk b = 0 sampai kurang dari 4 lakukan langkah 11-19.

11.Untuk j = 0 sampai kurang dari jumlah ruang, lakukan langkah 12-17. 12.Untuk k = j +1 hingga jumlah ruang, lakukan langkah 13-17.

13.Buat variabel banding1 dan banding2 bertipe String. Dimana banding1 menyimpan idDosen dari gen ke posisi_jam ke j dan banding 2 menyimpan idDosen dari gen ke posisi_jam ke k.

14.Cek apakah banding1 sama dengan “-”. Jika ya maka program tidak melakukan apapun. jika tidak, lakukan langkah 15.

15.Cek apakah banding1 sama dengan banding2. Jika ya maka lakukan langkah 16-17.

16.Buat variabel fitness_awal bertipe int yang berisi nilai fitness dari data gen ke posisi_jam ke k.

17.Set nilai fitness gen ke posisi)jam ke k dengan fitness_awal +1; 18.Untuk l = 0 hingga panjang posisi_jam, lakukan langkah 19. 19.Set posisi_jam ke l sama dengan posisi_jam ke l +1.

20.Untuk l = 0 hingga panjang posisi_jam, lakukan langkah 21.

21.Cek apakah l sama dengan 0. Jika ya makan posisi_jam ke l = count. jika tidak maka posisi_jam ke l sama dengan posisi_jam ke l-1 ditambah 4. 22.Set count sama dengan count + count;

24.Selesai.

Gambar 3. 9 Algoritma HC2 (cekDosen)

HC 3 : method cekMatakuliah (parameter x bertipe kromosom) 1. Buat variabel array of int posisi_jam sepanjang jumlah_ruang.

2. Buat variabel hari bertipe array of String dengan isian adalah Hari kuliah (senin-jumat)

3. Buat variabel jam bertipe int set dengan nilai 1. 4. Buat variabel count bertipe int set dengan 0;

5. Untuk i sama dengan 0 hingga panjang posisi jam lakukan langkah 6

6. Cek apakah i sama dengan 0, Jika ya maka set posisi_jam ke i sama dengan 0.Jika tidak maka set posisi_jam ke i sama dengan posisi jam ke i-1 ditambah 4.

7. Ketika true, maka lakukan langkah 8.

8. Cek apakah Hari gen kromosom x ke count sama dengan hari ke 0 (hari senin). Jika ya maka count ditambah 1. Jika tidak maka berhenti looping. 9. Untuk i = 1 hingga panjang hari lakukan langkah 10-27

10.Untuk b = 0 hingga 4 lakukan langkah 11-24

11.Untuk j = 0 hingga jumlah_ruang, lakukan langkah 12-21 12.Untuk k = j +1 hingga jumlah_ruang, lakukan langkah 13-21

13.Buat variabel banding1 bertipe String set dengan idMk kromosom x gen ke posisi_jam ke j.

14.Buat variabel banding2 bertipe String set dengan idMk kromosom x gen ke posisi_jam ke k.

15.Buat variabel banding3 bertipe String set dengan semester kromosom x gen ke posisi_jam ke j.

16.Buat variabel banding4 bertipe String set dengan semester kromosom x gen ke posisi_jam ke k.

posisi_jam ke j.

18.Buat variabel banding8 bertipe String set dengan kelas kromosom x gen ke posisi_jam ke k.

19.Cek apakah banding1 sama dengan “-”. Jika ya, maka tidak menjalankan apapun. Jika tidak, lakukan langkah 20-21.

20.Cek apakah banding3 sama dengan banding4, Jika ya cek juga apakah banding7 sama dengan banding8, jika ya maka buat variabel fitness_awal set dengan nilai fitness kromosom x gen ke posisi_jam ke k.

21.Set gen kromosom x data ke posisi_jam ke k dengan nilai_fitness +1. 22.Untuk l = 0 hingga panjang posisi_jam, lakukan langkah 22.

23.Cek apakah l sama dengan 0. Jika ya makan posisi_jam ke l = count. jika tidak maka posisi_jam ke l sama dengan posisi_jam ke l-1 ditambah 4. 24.Set count sama dengan count + count.

25.Untuk l = 0 hingga posisi_jam lakukan langkah 26.

26.Cek apakah l sama dengan 0, jika ya maka posisi_jam ke l sama dengan count. Jika tidak maka posisi_jam ke l sama dengan posisi jam ke l+1 ditambah 4.

27.Set count sama dengan count+count; 28.Kembalikan nilai x.

29.Selesai.

Gambar 3. 10 Algoritma HC3 (cekMatakuliah)

HC 4 : method cekJumlahMatakuliah(parameter x bertipe kromosom) 1. Buat variabel hari bertipe array of hari yang berisi hari senin - jumat. 2. Buat variabel jam bertipe int set dengan nilai 0.

3. Buat variabel count bertipe int set dengan nilai 0. 4. Buat variabel temp_count bertipe int set dengan nilai 0. 5. Buat variabel kel bertipe List<String> set dengan nilai null.

6. Membuat kelompok kelas dalam 1 semester kemudian masukkan kelompok kelas ke dalam kel.

7. Ketika true maka lakukan langkah 8.

8. Cek apakah hari di Gen ke count sama dengan hari ke 0 (hari senin). Jika ya maka lakukan penambahan count dengan 1. Jika tidak, maka hentikan looping.

9. Set temp_count = count.

10.Untuk i = 0 hingga panjang hari, lakukan langkah 11-24

11.Untuk jam sama dengan jam hingga temp_count, Lakukan langkah 12-20. 12.Buat variabel banding2 bertipe String set dengan semester Data ke jam. 13.Buat variabel banding3 bertipe String set dengan kelas Data ke jam. 14.Untuk j = 0 hingga panjang kel, Lakukan langkah 15-20.

15.Buat variabel banding1 bertipe array String set dengan semester dan kelas yang didapat dari kel.

16.Cek apakah banding1 ke 0 sama dengan banding2 dan banding1 ke 1 sama dengan banding3. Jika ya, maka lakukan langkah 17-20

17.Buat variabel temp bertipe int set dengan banding1 ke2. 18.Set temp sama dengan temp+1.

19.Tambahkan nilai temp dan masukkan ke dalam kel sebagai penunjik banyaknya kelas dengan semester sama dalam 1 hari.

20.Cek apakah temp lebih besar dari 3. Jika ya maka pelanggaran ditambahkan di data ke jam.

21.Untuk j sama dengan 0 hingga panjang kel. Lakukan langkah 22-23. 22.Buat variabel temp. Pisahkan semester dan Kelas yang ada di kel ke j, 23.Set kel ke j dengan temp ke 0 dan temp ke 1 beserta angka 0 sebagai

penentu matakuliah semester yang berada dalam sehari. 24.Set temp_count sama dengan temp_count ditambah count. 25.Kembalikan nilai x.

26.Selesai

Gambar 3. 11 Algoritma HC4 (cekJumlahMatakuliah)

1. Buat variabel hari ebrtippe Array String dengan inputan Hari Senin hingga Jumat.

2. Buat variabel jam bertipe int set dengan 0. 3. Buat variabel count bertipe int set dengan 0. 4. Buat variabel temp_count bertipe int set dengan 0. 5. Buat variabel kel bertipe List<String> set dengan null.

6. Set kel dengan idDosen beserta angka 0 untuk semagai penyimpan dosen mengajar dalam sehari.

7. Lakukan looping untuk mencari rentang hari Senin pada kromosom dengan menambahkan count bernilai 1 setiap kali looping.

8. Set temp_count sama dengan count.

9. Untuk i = 0 hingga panjang hari, Lakukan langkah 10-20 10.Untuk jam = jam hingga temp_count lakukan langkah 11-18

11.Buat variabel banding2 bertipe String set dengan idDosen data ke jam. 12.Untuk j = 0 hingga panjang kel Lakukan langkah 13-18

13.Pisahkan kel ke j (idDosen dan jumlah dosen mengajar) dan masukkan ke dalam variabel banding1 bertipe Array String.

14.Cek apakah banding1 ke 0 sama dengan banding2. Jika ya maka lakukan langkah 15-18

15.buat variabel temp bertipe int. Simpan banding1 ke 1. 16.set temp sama dengan temp +1.

17.Masukkan temp ke dalam kel ke j. Menandakan bahwa idDosen ke j mengajar sebanyak tenp kali dalam seminggu.

18.Cek apakah temp lebih besar dari 3. Jika ya maka tambahkan nilai Pelanggaran ke dalam data ke jam.

19.Untuk j = 0 hingga panjang kel. Lakukan set jumlah dosen mengajar menjadi 0 tiap masing - masing idDosen.

20.Set temp_count sama dengan temp_Count ditambah count yang berfungsi untuk mengecek hari lainnya.

22.Selesai.

Gambar 3. 12 Algoritma HC5 (cekDosenMengajar)

Dokumen terkait