ABSTRAK
Pembuatan jadwal kelas matakuliah di PGSD Universitas Sanata Dharma saat ini masih menggunakan cara manual. Data-data yang dibutuhkan untuk membuat jadwal kelas matakuliah adalah data dosen, matakuliah, ruang, hari, dan waktu. Dari data ini PGSD membuat jadwal kelas matakuliah secara manual. Cara ini dapat dilakukan tetapi akan membutuhkan waktu yang lama. Dari latar belakang tersebut, maka dibuat sebuah aplikasi penjadwalan kelas matakuliah menggunakan algoritma Simulated Annealing. Semua data-data yang dibutuhkan dimasukkan kedalam aplikasi dan aplikasi akan memproses pembuatan jadwal kelas matakuliah.
ABSTRACT
Making the class schedule of the subject in the Pendidikan Guru Sekolah Dasar of Sanata Dharma University is still using manual ways. The data needs in order to make the class schedule of the subject is based on the lecturer data, the subject, the space, the day, and the time. The Pendidikan Guru Sekolah Dasar side makes the class schedule of the subjects from this data manually. This way can be done however it needs a longer time to fix it. Based on the background of the research, the researcher tries to make an application of the class schedule of the subject using the Simulated Annealing algorithm. All the necessary data put into the application and then the application will process the making of class schedule of the subject.
The problem that will be done in this research is how the Simulated Annealing algorithm effectively uses in making the class schedule of the subjects. The effectiveness is shown by the time process, the plenty space used, and the results of the level of present age. Therefore, the research method used in this research is a case study in the Pendidikan Guru Sekolah Dasar and it is using by the data of the schedule that has been created on the odd semester 2014/2015. The trial is done by decreasing the number of space.
PENJADWALAN KELAS MATA KULIAH MENGGUNAKAN ALGORITMA SIMULATED ANNEALING (SA)
Studi Kasus : Program Studi Pendidikan Guru Sekolah Dasar (PGSD) Universitas Sanata Dharma Yogyakarta.
SKRIPSI
Diajukan Untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Komputer
Program Studi teknik Informatika
Disusun oleh
Aweng
105314066
PROGRAM STUDI TEKNIK INFORMATIKA
JURUSAN TEKNIK INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
i
CLASS SCHEDULING COURSES USING SIMULATED ANNEALING ALGORITHM
Case Study at Primary School Teacher Education Study Program
Sanata Dharma University
THESIS
Presented as Partial Fulfillment of the Requirements To Obtain the Sarjana Komputer Degree
In Informatics Engineering
By :
Aweng
105314066
INFORMATION ENGINEERING STUDY PROGRAM
FACULTY OF SCIENCE AND TECHNOLOGY
DEPARTMENT OF INFORMATICS ENGINEERING
SANATA DHARMA UNIVERSITY
YOGYAKARTA
ii
iii
iv
PERNYATAAN KEASLIAN KARYA
Saya menyatakan dengan sesungguhnya bahwa dalam skripsi yang saya tulis ini
tidak memuat karya atau bagian karya orang lain, kecuali yang telah disebutkan
dalam kutipan dan daftar pustaka, sebagaimana layaknya karya ilmiah.
Yogyakarta, 14 Januari 2015
Penulis,
v
HALAMAN PERSEMBAHAN
Karya ini saya persembahkan kepada :
Tuhan Yesus Kristus, terimakasih atas semua penyertaanmu dalam hidupku sampai saat ini.
Bapak, Ibu, Abang-abangku, Adik-adikku, dan Keluarga Besar dari Kakek dan Nenekku semuanya.
vi
LEMBAR PERNYATAAN PERSETUJUAN PUBLIKASI KARYA ILMIAH UNTUK KEPENTINGAN AKADEMIS
Yang bertanda tangan dibawah ini, saya mahasiswa Universitas Sanata Dharma :
Nama : Aweng
Nim : 105314066
Demi pengembangan ilmu pengetahuan, saya memberikan kepada Perpustakaan
Universitas Sanata Dharma karya ilmiah yang berjudul :
PENJADWALAN KELAS MATA KULIAH MENGGUNAKAN ALGORITMA SIMULATED ANNEALING (SA)
Studi Kasus : Program Studi Pendidikan Guru Sekolah Dasar (PGSD)
Universitas Sanata Dharma Yogyakarta.
Beserta perangkat yang diperlukan (bila ada). Dengan demikian saya memberikan
kepada perpustakaan Universitas Sanata Dharma hak untuk menyimpan,
mengalihkan dalam bentuk media lain, mengelolanya dalam bentuk pangkalan
data mendistribusikan secara terbatas, dan mempublikasikan di Internet atau
media lain untuk kepentingan akademis tanpa perlu meminta ijin dari saya
maupun memberikan royalti kepada saya selama tetap mencantumkan nama saya
sebagai penulis.
Demikian pernyataan ini saya buat dengan semestinya.
Dibuat di Yogyakarta,
Pada tanggal : 14 Januari 2015
Yang menyatakan,
vii
LEMBAR PERNYATAAN PENGGUNAAN SOURCE CODE PROGRAM TUGAS AKHIR
Yang bertanda tangan dibawah ini, saya mahasiswa Universitas Sanata Dharma :
Nama : Aweng
Nim : 105314066
Demi pengembangan sistem informasi Universitas Sanata Dharma, saya
memberikan kepada Biro Administrasi dan Perencanaan Sistem Informasi
(BAPSI) berupa source code program hasil karya ilmiah yang berjudul :
PENJADWALAN KELAS MATA KULIAH MENGGUNAKAN ALGORITMA SIMULATED ANNEALING (SA)
Studi Kasus : Program Studi Pendidikan Guru Sekolah Dasar (PGSD)
Universitas Sanata Dharma Yogyakarta.
Beserta perangkat yang diperlukan (bila ada). Dengan demikian saya memberikan
kepada BAPSI hak untuk menggunakan dan mengembangkan untuk kepentingan
akademis tanpa perlu meminta ijin dari saya maupun memberikan royalti kepada
saya selama tetap mencantumkan nama saya sebagai penulis. Dengan ketentuan
tidak mempergunakan source code program hasil karya ilmiah ini untuk
kepentingan diluar Universitas Sanata Dharma.
Demikian pernyataan ini saya buat dengan semestinya.
Dibuat di Yogyakarta,
Pada tanggal : 14 Januari 2015
Yang menyatakan,
viii
ABSTRAK
Pembuatan jadwal kelas matakuliah di PGSD Universitas Sanata Dharma
saat ini masih menggunakan cara manual. Data-data yang dibutuhkan untuk
membuat jadwal kelas matakuliah adalah data dosen, matakuliah, ruang, hari, dan
waktu. Dari data ini PGSD membuat jadwal kelas matakuliah secara manual. Cara
ini dapat dilakukan tetapi akan membutuhkan waktu yang lama. Dari latar
belakang tersebut, maka dibuat sebuah aplikasi penjadwalan kelas matakuliah
menggunakan algoritma Simulated Annealing. Semua data-data yang dibutuhkan
dimasukkan kedalam aplikasi dan aplikasi akan memproses pembuatan jadwal
kelas matakuliah.
Permasalahan yang ingin diselesaikan disini adalah seberapa efektif
algoritma Simulated Annealing dalam membuat jadwal kelas matakuliah. Efektif
dilihat dari lama proses waktu, banyak ruang yang digunakan, dan tingkat
presentasi hasil akhir. Adapun metode penelitian yang digunakan adalah studi
kasus di PGSD dan menggunakan data jadwal yang telah dibuat pada semester
ganjil 2014/2015. Uji coba dilakukan dengan mengurangi jumlah ruang.
Hasil akhir yang diperoleh adalah sebuat jadwal kelas matakuliah dalam
satu semester tanpa terjadi pelanggaran hard constraint maupun soft constraint
yang diterapkan serta seluruh jadwal permintaan terpenuhi. Setelah dilakukan uji
coba dengan mengurangi jumlah ruang diperoleh kesimpulan bahwa penjadwalan
kelas matakuliah menggunakan algoritma SA ini mampu secara efektif waktu
membuat jadwal kelas matakuliah dalam rasio maksimal 87% dan efesien
ix
ABSTRACT
Making the class schedule of the subject in the Pendidikan Guru Sekolah
Dasar of Sanata Dharma University is still using manual ways. The data needs in
order to make the class schedule of the subject is based on the lecturer data, the
subject, the space, the day, and the time. The Pendidikan Guru Sekolah Dasar
side makes the class schedule of the subjects from this data manually. This way
can be done however it needs a longer time to fix it. Based on the background of
the research, the researcher tries to make an application of the class schedule of
the subject using the Simulated Annealing algorithm. All the necessary data put
into the application and then the application will process the making of class
schedule of the subject.
The problem that will be done in this research is how the Simulated
Annealing algorithm effectively uses in making the class schedule of the subjects.
The effectiveness is shown by the time process, the plenty space used, and the
results of the level of present age. Therefore, the research method used in this
research is a case study in the Pendidikan Guru Sekolah Dasar and it is using by
the data of the schedule that has been created on the odd semester 2014/2015. The
trial is done by decreasing the number of space.
The result is a class schedule of the subject in one semester without any
infraction happen of the hard constraint as well as the soft constraint, which
applied along the whole request schedule is complete. After the trialling is done
by decreasing the number of space, the researcher concludes that the scheduling
class of the subject using SA algorithm is able to make the class schedule of the
subject effectively used in maximum ratio of 87% and efficiently used in
x
KATA PENGANTAR
Puji dan syukur penulis panjatkan kepada Tuhan Yang Maha Esa,
sehingga penulis dapat mmenyelesaikan tugas akhir sebagai salah satu mata
kuliah wajib dan merupakan syarat akademik pada jurusan Teknik Informatika
Universitas Sanata Dharma Yogyakarta.
Pada kesempatan ini, penulis ingin mengucapkan terimakasih kepada
pihak-pihak yang telah membantu penulis baik selama penelitian maupun selama
pengerjaan tugas akhir ini. Ucapan terimakasih penulis sampaikan diantaranya
kepada :
1. Bapak Puspaningtyas Sanjoyo Adi, S.T., M.T., sebagai dosen pembimbing
Tugas Akhir.
2. Dosen-Dosen Teknik Informatika, terimakasih telah memberi ilmu
pengetahuan dan pengalaman.
3. Sekretariat PGSD Sanata Dharma, terimakasih telah memberi data untuk
penelitian dan menjadi tempat penelitian ini.
4. Orang tua, Paulus Aban dan Margareta Awi atas dukungan moral, spiritual
dan finansial dalam penyusunan skripsi.
5. Seluruh teman-teman Teknik Informatika, terutama H.Roy Wiranta, Damai
Kurnia A., Antonius R.P., Kristopel. Atas masukkan dan dukungannya.
6. Edy C., Andrianus, Sasly, Sesco, Titus, Hengky C, Ahiun, Leo, Ana, dan Uci
Wijayanti. Atas dukungannya.
xi
8. Semua pihak yang tidak yang tidak dapat disebutkan satu per satu yang telah
membantu dalam penulisan skripsi ini.
Akhirnya penulis berharap semoga skripsi ini dapat berguna bagi pembaca.
Yogyakarta, 14 Januari 2015
Penulis,
xii
DAFTAR ISI
HALAMAN PERSETUJUAN ... ii
PERNYATAAN KEASLIAN KARYA ... iv
HALAMAN PERSEMBAHAN ...v
LEMBAR PERNYATAAN PERSETUJUAN PUBLIKASI KARYA ILMIAH UNTUK KEPENTINGAN AKADEMIS ... vi
LEMBAR PERNYATAAN PENGGUNAAN SOURCE CODE PROGRAM TUGAS AKHIR ... vii
ABSTRAK ... viii
KATA PENGANTAR ... x
DAFTAR ISI ... xii
DAFTAR GAMBAR ... xv
DAFTAR TABEL... xviii
BAB I ... 1
PENDAHULUAN ... 1
1.1. Latar Belakang ... 1
1.2. Rumusan Masalah ... 2
1.3. Batasan Masalah ... 3
1.4. Tujuan Penelitian ... 3
1.5. Metodologi Penelitian ... 3
1.6. Sistematika Penulisan ... 4
BAB II ... 6
LANDASAN TEORI ... 6
2.1. Penjadwalan ... 6
2.2. Simulated Annealing (SA) ... 6
2.3. Algoritma Simulated Annealing. ... 7
2.4. Komponen Simulated Annealing. ... 9
2.4.1. Jadwal Pendingin. ... 9
2.4.1.1. Temperatur Awal. ... 10
2.4.1.2. Temperatur Akhir... 11
xiii
2.4.1.4. Jumlah Iterasi pada Setiap Temperatur. ... 13
2.4.2. Fungsi Biaya. ... 13
2.4.3. Struktur Ketetanggaan. ... 15
2.4.4. Ruang solusi. ... 16
BAB III ... 17
ANALISIS DAN PERANCANGAN SISTEM ... 17
3.1 Analisis Sistem ... 17
3.1.1. Analisis Masalah. ... 17
3.1.2. Aturan Penjadwalan ... 18
3.2 Pemodelan Simulated Annealing untuk Penjadwalan Kelas Matakuliah. ... 19
3.2.1. Menetapkan Jadwal Awal (Initial state). ... 19
3.2.2. Menetapkan Temperatur Awal, Nilai Reduksi Suhu, dan Jumlah Iterasi. .... 32
3.2.3. Proses pencarian jadwal baru ( Solusi Baru ). ... 36
3.2.4. Perhitungan Fungsi biaya (Jumlah Pelanggaran) dari Hard Constraints dan Soft Constraints.... 42
3.3 Perangkat Keras dan Perangkat Lunak ... 49
3.4 Perancangan Sistem ... 49
3.5 Perancangan Basis Data. ... 75
3.6 Perancangan Menu Antar Muka ... 95
BAB IV ... 106
IMPLEMENTASI DAN ANALISA HASIL ... 106
4.1. Implementasi. ... 106
4.1.1. Implementasi Kelas. ... 106
4.1.1.1. Implementasi Kelas Model. ... 106
4.1.1.2. Implementasi Kelas View. ... 107
4.1.1.3. Implementasi Kelas Kontrol. ... 108
4.1.2. Implementasi Algoritma Simulated Annealing (SA). ... 109
4.1.3. Implementasi User Interface. ... 114
4.1.4.1. Kelola DataBase... 114
4.1.4.2. Buat Jadwal Kuliah. ... 149
4.1.4.3. Lihat Jadwal Kuliah. ... 174
4.1.4.4. Menu Bantuan. ... 178
xiv
4.2.1. Hasil Pengujian Terhadap Penggunaan Ruang. ... 180
4.2.2. Rangkuman dari Pengujian Terhadap penggunaan Ruang. ... 183
4.2.3. Sampel Jadwal ... 185
4.3. Analisa. ... 185
BAB V ... 188
PENUTUP ... 188
5.1. Kesimpulan. ... 188
5.2. Saran. ... 188
DAFTAR PUSTAKA ... 189
xv
DAFTAR GAMBAR
Gambar 3. 1 Pemodelan Vektor untuk membuat jadwal awal ... 21
Gambar 3. 3 Diagram Use Case... 50
Gambar 3. 4 Tampilan Halaman Utama ... 95
Gambar 3. 5 Tampilan Pengelolaan Matakuliah ... 96
Gambar 3. 6 Tampilan Pengelolaan Dosen ... 97
Gambar 3. 7 Tampilan Pengelolaan Ruang ... 97
Gambar 3. 8 Tampilan Pengelolaan Waktu dan Hari ... 98
Gambar 3. 9 Tampilan Proses tahap 1 ... 99
Gambar 3. 10 Tampilan Proses tahap 2,4,6,8 ... 100
Gambar 3. 11 Tampilan tambah matakuliah ... 100
Gambar 3. 12 Tampilan konfirmasi pembagian kelas... 101
Gambar 3. 13 Tampilan Proses Tahap 3,5,7,9 ... 102
Gambar 3. 14 Tampilan memilih Dosen pegampu ... 102
Gambar 3. 15 Tampilan Proses tahap 10 ... 103
Gambar 3. 16 Tampilan Proses tahap 11 ... 104
Gambar 3. 17 Tampilan Lihat Jadwal Kuliah ... 104
Gambar 4. 1 Halaman Awal/Beranda ... 114
Gambar 4. 2 menambah matakuliah ... 115
Gambar 4. 3 pemberitahuan berhasil. ... 116
Gambar 4. 4 list matakuliah ... 117
Gambar 4. 5 update matakuliah ... 117
Gambar 4. 6 pemberitahuan ter-update ... 118
Gambar 4. 7 list matakuliah ... 119
Gambar 4. 8 hapus matakuliah ... 119
Gambar 4. 9 pemberitahuan terhapus ... 120
Gambar 4. 10 list matakuliah ... 121
Gambar 4. 11 import excel matakuliah ... 122
Gambar 4. 12 pemberitahuan berhasil di import. ... 125
Gambar 4. 13 format excel matakuliah ... 125
Gambar 4. 14 menambah dosen ... 126
Gambar 4. 15 pemberitahuan berhasil ditambah ... 127
Gambar 4. 16 list dosen ... 127
Gambar 4. 17 update dosen ... 128
Gambar 4. 18 pemberitahuan dosen ter-update ... 129
Gambar 4. 19 list dosen ... 129
Gambar 4. 20 hapus dosen ... 130
Gambar 4. 21 pemberitahuan terhapus ... 130
Gambar 4. 22 list dosen ... 131
Gambar 4. 23 import excel dosen. ... 133
Gambar 4. 24 pemberitahuan berhasil di import. ... 135
xvi
Gambar 4. 26 menambah ruang ... 136
Gambar 4. 27 pemberitahuan berhasil ditambah ... 137
Gambar 4. 28 list ruang ... 138
Gambar 4. 29 update ruang ... 138
Gambar 4. 30 pemberitahuan ter-update ... 139
Gambar 4. 31 list ruang ... 140
Gambar 4. 32 hapus ruang... 140
Gambar 4. 33 pemberitahuan terhapus ... 141
Gambar 4. 34 list ruang ... 141
Gambar 4. 35 import excel ruang ... 143
Gambar 4. 36 pemberitahuan berhasildi import ... 145
Gambar 4. 37 format excel ruang ... 146
Gambar 4. 38 waktu dan hari ... 147
Gambar 4. 39 Proses Tahap 1 ... 149
Gambar 4. 40 Proses Tahap 2 ... 150
Gambar 4. 41 penambahan matakuliah ... 151
Gambar 4. 42 konfirmasi matakuliah ... 152
Gambar 4. 43 pembagian kelas ... 152
Gambar 4. 44 konfirmasi pembagian kelas ... 154
Gambar 4. 45 Proses Tahap 3 ... 154
Gambar 4. 46 Memilih Dosen Pegampu ... 157
Gambar 4. 47 Proses Tahap 4 ... 157
Gambar 4. 48 Penambahan Matakuliah ... 158
Gambar 4. 49 Konfirmasi matakuliah ... 158
Gambar 4. 50 Pembagian Kelas ... 158
Gambar 4. 51 Konfirmasi pembagian kelas ... 159
Gambar 4. 52 Proses Tahap 5 ... 159
Gambar 4. 53 Memilih Dosen Pegampu ... 160
Gambar 4. 54 Proses Tahap 6 ... 160
Gambar 4. 55 Penambahan Matakuliah ... 161
Gambar 4. 56 Konfirmasi matakuliah ... 161
Gambar 4. 57 Pembagian Kelas ... 162
Gambar 4. 58 Konfirmasi pembagian kelas ... 162
Gambar 4. 59 Proses tahap 7 ... 163
Gambar 4. 60 Memilih Dosen Pegampu ... 163
Gambar 4. 61 Proses tahap 8 ... 164
Gambar 4. 62 Penambahan Matakuliah ... 164
Gambar 4. 63 Konfirmasi matakuliah ... 165
Gambar 4. 64 Pembagian Kelas ... 165
Gambar 4. 65 Konfirmasi pembagian kelas ... 165
Gambar 4. 66 proses tahap 9 ... 166
Gambar 4. 67 Memilih Dosen Pegampu ... 166
Gambar 4. 68 Proses tahap 10 ... 167
xvii
Gambar 4. 70 Memilih kelas matakuliah ... 169
Gambar 4. 71 Memilih waktu permintaan ... 169
Gambar 4. 72 Memilih Ruang ... 169
Gambar 4. 73 penambahan jadwal permintaan ... 170
Gambar 4. 74 Konfirmasi jadwal permintaan ... 170
Gambar 4. 75 Proses Tahap 11 ... 171
Gambar 4. 76 pemberitahuan pembuatan telah selesai ... 174
Gambar 4. 77 Jadwal Kuliah ... 174
Gambar 4. 78 menu bantuan ... 178
Gambar 4. 79 Grafik Rangkuman Pengujian rata-rata waktu ... 183
xviii
DAFTAR TABEL
Tabel 3. 1 Penjelasan model koordinat yang akan terbentuk. ... 22
Tabel 3. 2 Tabel Jadwal Awal. ... 23
Tabel 4. 1 Implementasi Kelas Model ... 106
Tabel 4. 2 Implementasi kelas View ... 107
Tabel 4. 3 Implementasi Kelas Kontrol ... 108
Tabel 4. 4 Hasil pengujian dengan 13 ruang ... 181
Tabel 4. 5 Hasil Rangkuman dari rata-rata waktu penyelesaian ... 183
Tabel 4. 6 Hasil Rangkuman dari presentasi hasil ... 184
Tabel 4. 7 Pengujian menggunakan 12 ruang ... 190
Tabel 4. 8 Pengujian menggunakan 11 ruang ... 191
Tabel 4. 9 Pengujian menggunakan 10 ruang ... 191
Tabel 4. 10 Pengujian menggunakan 9 ruang ... 192
Tabel 4. 11 Pengujian menggunakan 8 ruang ... 192
Tabel 4. 12 Pengujian menggunakan 8 ruang dengan ditambah 10 permintaan ... 193
Tabel 4. 13 Pengujian menggunakan 8 ruang dengan ditambah matakuliah ... 193
Tabel 5. 1 Hari dan Waktu. ... 194
Tabel 5. 2 Timeslot ... 194
Tabel 5. 3 Ruang Teori ... 195
Tabel 5. 4 Dosen... 196
Tabel 5. 5 Matakuliah ... 197
Tabel 5. 6 Kelas Matakuliah ... 202
1
BAB I
PENDAHULUAN
1.1. Latar Belakang
Penjadwalan kelas mata kuliah merupakan salah satu permasalahan
yang penting dalam suatu lembaga pendidikan. Karena penjadwalan
merupakan suatu sistem penempatan hari, waktu dan ruang kelas dalam
proses suatu kegiatan belajar mengajar. PGSD menyusun jadwal kelas
mata kuliah masih menggunakan cara manual. Cara manual dapat saja
dilakukan, meskipun mendapatkan hasil sesuai dengan yang diinginkan,
cara ini membutuhkan waktu yang lama dan ketelitian maksimal. Begitu
juga, jika terjadi perubahan jadwal karena hal tertentu, tentu akan
membutuhkan waktu yang lama untuk menyusun ulang penjadwalan
tersebut. Proses penjadwalan kuliah ini terdiri dari beberapa komponen
yaitu matakuliah yang ditawarkan, dosen, hari, waktu dan ruang. Hasil
yang diharapkan adalah jadwal kelas mata kuliah yang sesuai, sehingga
tidak terjadi bentrok baik antara jadwal perkuliahan tertentu maupun
jadwal bagi dosen pengajar matakuliah.
Dalam penelitian pembuatan penjadwalan kelas mata kuliah ini
digunakan algoritma Simulated Annealing (SA). Menurut [Mariana,
M.,dkk, 2013], penghapusan rumus exponen yaitu exp ((δ/t) ≤ rand [0,1]
2
optimal. Menurut [Sad H, Sugeng, 2012], penggunaan metode SA
untuk optimasi penjadwalan sangat baik, yaitu dengan parameter hasil uji
coba pengontrol jadwal temperatur (T) = 5000 dan produksi jadwal (α) =
0.9, SA dapat mengoptimalkan batasan-batasan penjadwalan sampai
dengan 100% baik itu soft constraint maupun hard constraint dan
membutuhkan waktu yang relatif lebih singkat rata-rata 00:25:00 menit
serta tingkat kesalahan 0% sebanyak 5 kali percobaan berturut-turut
sehingga dalam penyusunan jadwal lebih efektif.
Pembuatan penjadwalan kelas mata kuliah memiliki aturan-aturan
tersendiri untuk memenuhi keinginan dari pihak kampus. Aturan-aturan
tersebut antara lain ; tidak terjadi tabrakan waktu, ruang, dosen, kelas,
permintaan jadwal dosen, dan batas kuota sistem kredit semester (sks)
dosen mengajar. Oleh karena itu, dengan adanya penambahan
aturan-aturan ini dapat lebih memaksimalkan lagi dalam proses pembuatan
penjadwalan kelas mata kuliah ini.
1.2. Rumusan Masalah
1. Bagaimana menerapkan algoritma Simulated Annealing untuk
menyelesaikan masalah penjadwalan kelas mata kuliah ?
2. Seberapa efektif algoritma Simulated Annealing untuk pembuatan
3
1.3. Batasan Masalah
1. Studi kasus di program studi PGSD Universitas Sanata Dharma.
2. Informasi penjadwalan kelas mata kuliah yang dihasilkan hanya 1
semester (genap/ganjil) untuk Program Studi PGSD.
1.4. Tujuan Penelitian
1. Membuat Aplikasi Penjadwalan Kelas Mata Kuliah.
2. Menghasilkan Penjadwalan Kelas Mata Kuliah.
3. Meningkatkan kecepatan waktu proses pembuatan penjadwalan kelas
mata kuliah.
1.5. Metodologi Penelitian
Metode yang digunakan dalam menyusun jadwal mata kuliah
PGSD adalah metode Sistem Development Life Cycle (Paradigma
Waterfall). Metode ini terdiri dari berbagai tahap :
1. Analisis Kebutuhan
Pada tahap ini, akan dilakukan Identifikasi tentang kebutuhan sistem
serta pengumpulan data–data yang diperlukan dalam proses
penjadwalan.
2. Perancangan Sistem
Pada tahap ini, akan dilakukan penerjemahan rancangan sistem
Sistem, desain Basis Data, user interface dan rancangan implementasi
program.
3. Implementasi/Penulisan Program
Pada tahap ini, akan dilakukan penerjemahan dari perancangan sistem
ke dalam bahasa pemrograman.
4. Pengujian
Pada tahap ini akan dilakukan pengujian program. Pengujian bertujuan
untuk menemukan kesalahan – kesalahan hingga program dapat sesuai
dengan yang diharapkan.
1.6. Sistematika Penulisan
BAB I : PENDAHULUAN
Bab ini berisi penjelasan tentang latar belakang masalah,
rumusan masalah, batasan masalah, tujuan, metodologi
penelitian, dan sistematika penulisan.
BAB II : LANDASAN TEORI
Bab ini berisi tentang teori Algortima Simulated Annealing yang
menjadi dasar dalam pembuatan sistem penjadwalan kelas mata
kuliah di PGSD.
BAB III : ANALISA DAN PERANCANGAN SISTEM
Bab ini berisi tentang analisis dan perancangan sistem yang akan
proses penjadwalan, dan penjelasan algoritma Simulated
Annealing dalam menyelesaikan penjadwalan kelas mata kuliah.
BAB IV : IMPLEMENTASI DAN ANALISA HASIL
Bab ini berisi tentang implementasi dari perancangan pada Bab
III. Implementasi tersebut meliputi tampilan program (input dan
output) dan analisa dari progam tersebut.
BAB V : KESIMPULAN DAN SARAN
Bab ini berisi tentang kesimpulan dan saran dari sistem yang
6
BAB II
LANDASAN TEORI
2.1. Penjadwalan
Penjadwalan memiliki beberapa definisi, berikut beberapa definisi
yang dikemukakan para ahli, diantaranya:
Menurut [Setiawan, Ebta., 2012], Penjadwalan memiliki kata dasar
jadwal, yang artinya pembagian waktu berdasarkan pengaturan urutan
kerja; daftar atau tabel kegiatan atau rencana kegiatan dengan pembagian
waktu pelaksanaan yang terperinci. Sedangkan untuk penjadwalan memiliki
arti proses, cara, perbuatan menjadwalkan atau memasukkan di jadwal
Penjadwalan adalah pengambilan suatu keputusan dalam
penyesuaian aktivitas dan sumber daya untuk menyelesaikan sekumpulan
pekerjaan agar mempunyai kualitas yang diinginkan. Keputusan yang
dibuat di dalam penjadwalan adalah pengurutan pengerjaan, waktu mulai
dan waktu selesai, serta urutan operasi suatu pekerjaan.
2.2. Simulated Annealing (SA)
Menurut [Mariana, M.,dkk, 2013], Simulated Annealing (SA)
adalah teknik optimalisasi numerik dengan prinsip thermo-dynamic.
Kinerja SA sangat bergantung pada solusi awal, lingkungan pencarian dan
pada tahun 1953, dan aplikasi algoritma SA mulai dikembangkan dalam
masalah optimalisasi pada tahun 1983 oleh Kirkpatrick et al.
Dalam sistem termodinamika, SA menggunakan persamaan
Boltzman. Persamaan ini merepresentasikan probabilitas suatu new state
yang lebih buruk dari current state yang masih mungkin terpilih sebagai
next state. SA dikembangkan berdasarkan ide dari mekanisme perilaku
pendinginan dan proses kristalisasi (annealing) material panas.
Algoritma SA melakukan peningkatan iteratif untuk memperbaiki
solusi yang dihasilkan teknik-teknik penjadwalan heuristic, dalam hal ini
adalah sebuah solusi awal yang dibuat dengan teknik heuristic ataupun
random diiterasi secara berulang dengan metode annealing dengan
menggunakan perturbasi local hingga tidak ada peningkatan lagi atau
hingga jumlah iterasi yang diinginkan sudah dicapai.
Algoritma SA menerima solusi baru jika biaya baru lebih rendah
dari pada biaya solusi saat ini di setiap iterasi. Dengan kriteria tersebut, SA
memungkinkan terhindar dari jebakan minimum lokal, hali ini menjadi
salah satu kelebihan SA dibandingkan dengan metode penjadwalan lain.
2.3. Algoritma Simulated Annealing.
Menurut [Suyanto, 2010], struktur algoritma Simulated Annealing
Keterangan :
1. Evaluasi initial state. Jika state ini adalah goal state, maka
kembalikan state ini sebagai solusi dari keluar dari program. Jika
bukan, lanjutkan dengan initial state sebagai current state.
2. Inisialisasi BEST-SO-FAR dengan current state.
3. Inisialisasi T sesuai dengan annealing schedule.
4. Ulangi sampai solusi tidak ditemukan atau tidak ada lagi aturan
produksi yang bisa diaplikasikan ke current state.
a. Pilih sebuah aturan produksi yang belum pernah
diaplikasikan ke current state dan aplikasikan aturan
produksi tersebut untuk menghasilkan new state.
b. Evaluasi new state. Hitung :
∆E= f(new state)-f(current state)
Jika new state adalah goal, maka kembalikan state ini
sebagai solusi dan keluar dari program.
Jika new state ini bukan goal tetapi lebih baik dari pada
current state (∆E<0), maka set current state ke new state. Juga BEST-SO-FAR ke new state.
Jika new state tidak lebih baik daripada current state
(∆E≥0), maka set current state ke new state dengan probabilitas p(∆E)= exp(-∆E/T) > r. langkah ini biasanya diimplementasikan dengan membangkitkan sebuah
bilangan acak r dalam interval [0,1]. Jika r kurang dari p,
maka set current state ke new state. Jika r lebih besar
daripada p, maka jangan mengerjakan apapun.
c. Jika diperlukan, revisi nilai T berdasarkan annealing
schedule.
1. BEST-SO-FAR, adalah state terbaik/solusi terbaik.
2. T, adalah temperatur awal/suhu awal.
3. Pilih aturan produksi yang belum diaplikasikan ke current state untuk
menghasilkan new state, yaitu sebuah metod pencarian new state, dari
current state dengan menggunakan struktur ketetanggaan untuk
menghasilkan new state.
4. ∆E= f(new state)-f(current state)
- ∆E = delta evaluation/delta energy ( menyatakan fungsi biaya ).
- f(new state) = fungsi biaya dari new state.
- f(current state) = fungsi biaya dari current state.
5. p(∆E)= exp(-∆E/T) > r - exp = fungsi exponen.
- r = bilangan acak antara 0 dan 1.
6. Revisi nilai T, yaitu penurunan suhu awal dengan rumus (2.1).
2.4. Komponen Simulated Annealing.
Menurut [Suyanto, 2010], SA memiliki empat komponen yang
harus dirancang secara hati-hati, yaitu: jadwal pendingin, fungsi biaya,
struktur ketetanggaan, dan ruang solusi.
2.4.1. Jadwal Pendingin.
Jadwal pendinginan merupakan komponen yang sangat kritis.
temperatur akhir, penurunan temperatur, dan jumlah iterasi pada setiap
temperatur.
2.4.1.1. Temperatur Awal.
Temperatur/suhu awal adalah nilai parameter yang harus
diterapkan untuk mengoptimal proses simulated annealing. Pada
dasarnya temperatur/suhu awal seharusnya cukup panas atau tinggi agar
SA dapat memilih hampir semua state tetangga. Penentuan temperatur
awal ini harus dilakukan secara hati-hati dan disesuaikan dengan
masalah yang dihadapi.
Jika temperatur awal terlalu dingin atau rendah, solusi akhir yang
dihasilkan kemungkinan akan sama (atau sangat dekat) dengan solusi
awal. Sebaliknya, jika temperatur awal terlalu panas atau tinggi,
pencarian dapat bergerak ke setiap state tetangga.
Dalam kasus ini, SA akan sama saja dengan pencarian acak
(random search) pada awal iterasi. Sedangkan pada iterasi berikutnya,
pencarian akan mengarah pada simulated annealing ketika temperatur
sudah cukup dingin.
Dalam menentukan temperatur awal secara tepat hingga saat ini
belum ada satupun metode yang secara akurat dapat menentukan
temperatur awal untuk semua masalah. Tetapi, beberapa pakar
mengusulkan beragam cara berbeda, diantaranya adalah:
Jika mengetahui jarak maksimmum (perbedaan fungsi biaya)
menggunakan informasi tersebut untuk menghitung temperatur awal.
Mulai dengan temperatur awal yang tinggi dan mendinginkannya secara
cepat sehingga 60% new state (solusi baru) yang lebih buruk dapat
terpilih [Morton,dkk, 1993]. Cara ini dapat menghasilkan temperatur
awal yang sebenarnya dan selanjutnya temperatur tersebut dapat
didinginkan secara lebih lambat.
Cara yang sama juga diusulkan oleh [Rayward-Smith, dkk, 1996]
dimana sistem dipanaskan secara cepat hingga solusi yang lebih buruk
dapat terpilih secara proporsional (dalam posisi tertentu yang
diinginkan) dan kemudian pendinginan yang pelan dapat diimulai. Hal
ini sama dengan apa yang terjadi pada physical annealing, dimana
materi dipanaskan hingga mencair dan kemudian pendinginan dimulai
secara perlahan.
2.4.1.2. Temperatur Akhir.
Temperatur bisa saja dibuat terus menurun hingga mencapai 0.
Tetapi, hal ini bisa membuat SA berjalan sangat lama, terutama ketika
SA menggunakan geometric cooling schedule. Secara praktis, tidak
perlu membiarkan temperatur mencapai 0 karena ketika temperatur
mendekati 0, peluang untuk memilih new state yang lebih buruk hampir
sama saja dengan ketika temperatur sudah sama dengan 0.
Oleh karena itu, kriteria berhenti (stopping criteria) dapat berupa
sudah membeku “frozen” pada temperatur saat ini (tidak ada lagi satu
state-pun yang bisa dipilih).
2.4.1.3. Penurunan Temperatur.
Setelah menentukan temperatur awal dan akhir, selanjutnya harus
menentukan bagaimana cara yang baik dalam proses penurunan
temperatur selama proses SA sampai kriteria berhenti tercapai. Cara
penurunan temperatur merupakan satu hal yang sangat penting dan kritis
dalam SA.
Secara teori, seharusnya membuat cukup iterasi pada setiap
temperatur sedemikian hingga sistem menjadi stabil pada temperatur
tersebut. Tetapi, teori juga menyatakan bahwa jumlah iterasi pada setiap
temperatur untuk mencapai stabilitas mungkin bersifat eksponensial
terhadap ukuran masalah. Karena hal ini tidak mungkin di
implementasikan, maka membutuhkan kompromi. Terdapat dua cara
yang dapat gunakan, yaitu: 1) dengan melakukan sejumlah besar iterasi
pada sedikit temperatur dan sejumlah kecil iterasi pada banyak
temperatur atau 2) menggunakan porsi yang seimbangdiantara keduanya.
Satu cara untuk menurunkan temperatur adalah metode linear
sederhana (simple linear method). Cara lainnya adalah penurunan
geometris dengan rumus
T = ∗ T (2.1)
Menurut [Suyanto, 2010], pengalaman menunjukan bahwa yang
sebaiknya digunakan adalah antara 0,8 dan 0,99. Biasanya hasil yang
baik diperoleh ketika mendekati 0,99. Tetapi, tentu saja semakin besar
semakin lama pula proses penurunan temperatur untuk mencapai
kriteria berhenti.
2.4.1.4. Jumlah Iterasi pada Setiap Temperatur.
Komponen terakhir dalam jadwal pendingin (annealing schedule)
adalah jumlah iterasi pada setiap temperatur. Bisa menggunakan jumlah
iterasi yang konstan atau dinamis.
Lundy mengusulkan penggunaan hanya satu iterasi secara konstan
pada setiap temperatur. Penurunan temperatur dilakukan secara sangat
pelan [Downsland,K.A, 1995] menggunakan rumus
T =1+βTT (2.2)
Dimana adalah satu bilangan kecil yang sesuai.
Alternatif lainnya adalah dengan mengubah-ubah jumlah iterasi
sesuai dengan perkembangan proses annealing. Pada temperatur yang
rendah, sebaiknya digunakan sejumlah iterasi sehingga semua optimum
local dapat dieksplorasi. Tetapi, pada temperatur yang lebih tinggi,
sebaiknya digunakan sedikit iterasi.
2.4.2. Fungsi Biaya.
Untuk suatu masalah yang diberikan, terdapat beberapa cara
menggunakan fungsi biaya. Bagaimana menentukan fungsi biaya yang
baik?
Pertama, tentu saja perlu memastikan bahwa fungsi tersebut
merepresentasikan masalah yang hadapi, SA dirancang untuk masalah
minimasi, sehingga semakin kecil fungsi biaya dari suatu state berarti
semakin baik kualitas state tersebut. Untuk masalah maksimasi, harus
menggunakan fungsi biaya yang sesuai.
Kedua, fungsi biaya sebaiknya memiliki kompleksitas komputasi
yang serendah mungkin karena fungsi tersebut umumnya harus dihitung
pada setiap iterasi. Untuk menekan kompleksitas penghitungan fungsi
biaya, bisa menggunakan satu dari dua cara berikut:
Delta Evaluation: fungsi biaya dihitung hanya ketika terdapat
perbedaan antara state saat ini (current state) dengan state tetangga
(neighbourhood states).
Partial Evaluation: menggunakan fungsi biaya estimasi sehingga
keluarannya hanya berupa nilai-nilai perkiraan (bukan nilai sebenarnya),
tetapi nilai estimasi tersebut memberikan indikasi yang memadai untuk
menentukan kualitas solusi.
Ketiga, fungsi biaya sebaiknya dirancang sedemikian rupa
sehingga fungsi tersebut dapat memandu proses pencarian. Hindari
fungsi biaya yang menghasilkan nilai sama pada banyak state. Jika
semua state memiliki biaya yang sama, kemana arah pencarian yang
Banyak fungsi biaya yang bisa menentukan validitas suatu solusi
menggunakan batasan-batasan tertentu. Terdapat dua jenis batasan yang
sering digunakan, yaitu;
Hard Constraints: batasan yang tidak boleh dilanggar. Misalnya,
pada masalah penjadwalan kuliah, suatu jadwal yang valid adalah
jadwal yang tidak terdapat bentrok dosen, tidak bentrok ruang
kelas, tidak bentrok rombongan mahasiswa.
Soft Constraints: batasan yang sebaiknya tidak dilanggar, tetapi
jika batasan ini dilanggar, solusinya masih dianggap valid.
Misalnya, pada masalah penjadwalan kuliah, suatu jadwal masih
dianggap valid meskipun terdapat seorang dosen yang diberikan
jadwal empat pertemuan kuliah dalam sehari tanpa bentrok. Hal ini
masih valid meskipun sebaiknya dihindari.
Untuk membangun fungsi biaya, bisa memberikan pembobotan
(weighting) pada hard constraints dan soft constraints.
2.4.3. Struktur Ketetanggaan.
Ketika melakukan proses pencarian, bagaimana berpindah dari satu
state ke state lain sampai ditemukan solusi? Untuk hal ini perlu
mendefinisikan suatu struktur ketetanggaan (neighbourhood). Dengan
cara ini, bisa menentukan state mana saja yang bisa dijangkau dari state
saat ini. Untuk masalah penjadwalan kuliah, fungsi ketetanggaan dapat
berupa penukaran jadwal pertemuan kuliah seorang dosen dari suatu slot
Hasil penelitian menunjukan bahwa struktur ketetanggaan
sebaiknya simetris. Artinya, jika bisa bergerak dari state i ke state j
maka juga bisa bergerak dari state j ke state i. Selain itu juga perlu
memperhatikan bahwa setiap state harus dapat dicapai dari setiap state
yang lain.
2.4.4. Ruang solusi.
Jika ruang solusi (biasanya disebut juga ruang pencarian) sangat
sempit, maka proses pencarian akan lebih mudah karena tidak banyak
state yang harus dieksplorasi. Semakin kecil ruang solusi, semakin
sedikit pula jumlah iterasi yang diperlukan untuk konvergen pada solusi
optimal.
Untuk mempersempit ruang solusi, bisa membatasi pencarian pada
solusi yang valid saja. Selain itu struktur ketetanggaan juga dibuat
sekecil mungkin. Hali ini bisa mempercepat pencarian, tetapi mungkin
bisa mengakibatkan terbatasnya peningkatan kualitas solusi secara
17
BAB III
ANALISIS DAN PERANCANGAN SISTEM
3.1 Analisis Sistem
Dalam penelitian ini akan membahas mengenai cara kerja dari
algoritma Simulated Annealing (SA) untuk menanggani proses penjadwalan
kelas mata kuliah di PGSD Universitas Sanata Dharma Yogyakarta. Data
yang akan ditangani meliputi data dosen, data mata kuliah dengan bobot
sks-nya, data ruang kelas, data waktu, dan hari. Sistem ini akan
diimplementasikan menggunakan sebuah aplikasi dengan bahasa
pemrograman Java dan Mysql sebagai database penyimpanannya.
3.1.1. Analisis Masalah.
Kegiatan belajar mengajar di PGSD dilaksanakan pada hari senin
sampai jumat (5 hari), untuk setiap harinya dimulai dari pukul 07.00 sampai
dengan pukul 19.00. 1 sks mata kuliah teori mendapatkan 1 jam pertemuan.
Terkecuali mata kuliah praktikum 1 sks mendapat 2 jam pertemuan, untuk
sks selanjutnya tetap akan mendapatkan 1 jam. Proses penyusunan
penjadwalan mata kuliah di PGSD diawali dengan pemaketan mata kuliah
pada tiap semester. Kemudian masing-masing kelas mata kuliah ditugaskan
kepada dosen yang kompeten mengajar pada mata kuliah tersebut.
Selanjutnya, kelas mata kuliah dijadwalkan pada hari, waktu, dan ruang
dosen mengajar. Selanjutnya, dosen luar akan diprioritaskan untuk
mendapatkan waktu dan hari mengajar yang diinginkan.
Hasil akhir yang diinginkan adalah jadwal kelas mata kuliah
selama satu semester (ganjil/genap) yang tersusun secara baik berdasarkan
waktu, hari, dan ruang kelasnya.
3.1.2. Aturan Penjadwalan
Untuk mendapatkan sebuah jadwal mata kuliah yang optimal
dibutuhkan batasan-batasan atau aturan dalam membuat penjadwalan.
Jika semua aturan yang ditentukan dapat terpenuhi maka penjadwalan
mata kuliah tersebut dapat dikatakan optimal. Berikut ini adalah
batasan-batasan (hard constraints dan soft constraints ) yang akan diterapkan
dalam membuat penjadwalan di PGSD:
A. Batasan yang tidak boleh dilanggar (Hard Constraints).
1. Tidak terjadi bentrok ruang kelas, karena tidak mungkin 1 ruang kelas
digunakan 2 kelas mata kuliah pada waktu bersamaan.
2. Tidak terjadi bentrok Dosen. Karena tidak mungkin ada dua mata
kuliah yang berbeda diselenggarakan bersamaan oleh satu dosen.
3. Tidak terjadi bentrok rombongan belajar, dalam tingkat semester yang
sama.
5. Dosen luar mendapatkan prioritas dibandingkan dengan dosen tetap
dalam waktu dan hari mengajar. Jadi dosen luar bisa menentukan hari
dan jam mengajar.
6. Setiap dosen tidak boleh mengajar melebihi 20 sks.
B. Batasan yang sebaiknya tidak dilanggar, tapi jika terlanggar masih
dianggap valid (Soft Contraints).
1. Dalam 1 hari, rombongan belajar tidak boleh dijadwalkan lebih dari 3
(untuk menghindari mahasiswa kuliah 4 pertemuan dalam 1 hari).
3.2 Pemodelan Simulated Annealing untuk Penjadwalan Kelas Matakuliah.
Dalam algoritma SA ada beberapa komponen penting yang harus
diperhatikan untuk proses pembuatan jadwal kelas matakuliah.
3.2.1.Menetapkan Jadwal Awal (Initial state).
Dalam menetapkan jadwal awal akan digunakan pemodelan vector
yaitu Y adalah “timeslot” dan X adalah “Ruang”, dan koordinat yang
dihasilkan X dan Y adalah kelas matakuliah. Berikut ini pemodelannya :
A. Model Data
Di PGSD terdapat 5 hari perkuliahan (senin-jumat), waktu
perkuliahan dibagi 4 sesi dalam 1 hari, dan terdapat 13 ruang kelas teori.
yang dapat ditangani dengan data tersebut, yaitu 5 hari * 4 waktu * 13 ruang
= 260 kelas matakuliah. Jika melebihi 260, maka ada kelas matakuliah yang
tidak terjadwal.
1. Data Hari dan Waktu dapat dilihat dilampiran pada table 5.1 halaman
193.
2. Data TimeSlot dapat dilihat dilampiran pada table 5.2 halaman 194.
3. Data Ruang dapat dilihat dilampiran pada table 5.3 halaman 194.
4. Data Dosen dapat dilihat dilampiran pada table 5.4 halaman 195.
5. Data Matakuliah dapat dilihat dilampiran pada table 5.5 halaman 196.
6. Data KelasMatakuliah dapat dilihat dilampiran pada table 5.6 halaman
197.
Berikut ini pemodelan struktur data vector untuk membuat jadwal
awal, Y adalah kode timeslot dan X adalah kode ruang. Pada titik/koordinat
pertemuan antara X dan Y akan ditandai/diisikan dengan satu kode kelas
Y adalah Kode TimeSlot, X adalah kode Ruang.
Gambar 3. 1 Pemodelan Vektor untuk membuat jadwal awal
Keterangan :
Pada titik/koordinat pertemuan akan di isikan kode Kelas Matakuliah
Setiap titik/koordinat pertemuan X dan Y akan berisi kode kelas matakuliah
yang akan diambil secara acak. Berikut ini table penjelasannya :
Hasil Koordinat = {(11,ts1,kodeKM), (11,ts1,kodeKM),…,(Xav,ts20,KodeKM)}
Koordinat Tabel X Y Kode KM 11 ts1
12 ts1 13 ts1 21 ts1 22 ts1 23 ts1 24 ts1 L.Sbk ts1 L.Lis ts1 300 ts1 401 ts1
… … …
[image:43.595.99.502.207.621.2]Xav ts20
Tabel 3. 1 Penjelasan model koordinat yang akan terbentuk.
Keterangan :
Kode KM adalah kode kelas matakuliah, Kode KM akan di acak untuk
menempati setiap koordinat/titik pertemuan.
Setelah didapatkan kode kelas matakuliah, maka akan diambil dari
setiap titik koordinat yang dihasilkan X dan Y. Maka akan dihasilkan jadwal
Kumpulan jadwal awal akan disimpan kedalam larik arraylist dengan setiap
hasil koordinat akan diberi satu kode jadwal yang unik. Berikut ini struktur
kumpulan jadwal awal yang tersimpan :
Jadi, Jadwal Awal
={( S1,Ts1,11,kodeKM),( S2,Ts1,12, kodeKM),…,( Sn, Ts20,Xav, kodeKM)}.
Jadwal Awal
Kode Jadwal Kode TimeSlot Kode Ruang Kode KM
S1 Ts1 11 S2 Ts1 12
… … … …
[image:44.595.97.497.186.603.2]Sn Ts20 Xav
Sebelum menetapkan Algoritma jadwal awal, harus terlebih dahulu buat
atribut untuk menampung JadwalAwal, Jadwal_sekarang, Jadwal_baru,
jadwal_yg_terbaik, fungsi biaya jadwal awal, fungsi biaya Jadwal_sekarang,
fungsi biaya Jadwal_baru, dan Permintaan kedalam larik seperti berikut.
Keterangan :
1. jadwal_Awal, untuk menyimpan hasil dari random awal (initial state) tanpa
terjadi duplikat kelas matakuliah dalam random.
2. Jadwal_sekarang dan jadwal_baru untuk menyimpan hasil sementara untuk
proses pengoptimalan dari annealing schedule.
3. Jadwal_terbaik, untuk menyimpan hasil solusi/state terbaik.
private static List<Jadwal> jadwal_awal = new ArrayList<>();
private static List< Jadwal > jadwal_sekarang = new ArrayList<>();
private static List< Jadwal > jadwal_baru = new ArrayList<>();
private static List< Jadwal > jadwal_terbaik = new ArrayList<>();
private static List<Pelanggaran> fungsiBiaya_jadwal_Awal = new ArrayList<>();
private static List<Pelanggaran> fungsiBiaya_jadwal_sekarang = new ArrayList<>();
private static List<Pelanggaran> fungsiBiaya_jadwal_baru = new ArrayList<>();
private static List<Pelanggaran> fungsiBiaya_jadwal_terbaik = new ArrayList<>();
4. fungsiBiaya_jadwal_Awal, fungsiBiaya_jadwal_skrg, fungsiBiaya_jadwal
baru, fungsiBiaya_terbaik, untuk menyimpan dan menghitung pelanggaran
jadwal.
5. Permintaan, yaitu untuk menyimpan jadwal permintaan.
Berikut ini adalah Algoritma Metod menetapkan jadwal awal secara random tanpa
duplikat kelas matakuliah, “TimeSlot” terhadap “Ruang” untuk mendapatkan “Kelas Matakuliah”.
1. Mulai.
2. Buat metod dengan nama MenetapkanJadwalAwal, type pengembalian
static void.
3. Buat variable Objek baru untuk menyimpan kodetimeslot” dan
“kodeRuang” didalam list Object java.
List<Object> bantuSimpantimeslotRuang= new ArrayList<Object>();
4. Buat variable Objek baru untuk menyimpan Permintaan dalam list.
List<Jadwal> jadwal_permintaan=
KontrolPermintaan.getKoneksi().getAllPermintaan();
5. Buat variable Objek baru untuk menyimpan timeslot didalam list.
List<TimeSlot> timeslot=
KontrolTimeSlot.getKoneksi().getAllTimeSlot();
6. Buat variable Objek baru untuk menyimpan ruang didalam list.
List<Ruang> ruang = KontrolRuang.getKoneksi().getAllRuangTeori();
7. Buat matrik 2 dimensi untuk menyimpan timeslot dan ruang sementara.
String[][] matrikJadwal = new String[timeslot.size()][ruang.size()];
8. Untuk i=0 sampai i sebanyak “timeslot”, lakukan,
1. Untuk j=0 sampai j sebanyak “ruang” , lakukan
- Set matrikJadwal[i][j]= kodetimeslot, koderuang, kodewaktu
dan kodehari.
- Simpan matrikJadwal[i][j] kedalam
Keterangan :
9. Cek, jika jadwal permintaan tidak kosong maka, lakukan langkah
berikut:
- Untuk i=0 sampai i sebanyak jadwal_permintaan, lakukan
- Buat variable Objek baru untuk menyimpan atribut solusi.
Jadwal solusi=new Jadwal();
- Set semua atribut solusi dan simpan kedalam Larik jadwalAwal,
solusiBaru, dan permintaann.
1. Untuk j=0 sampai j sebanyak “bantuSimpantimeslotRuang”,
lakukan
- Cek apakah kodetimeslot dan koderuang pada
“jadwal_permintaan” = kodetimeslot dan koderuang pada
“bantuSimpantimeslotRuang”.
- Jika ya, maka dihapus dari “bantuSimpantimeslotRuang”.
10.Random kelasmatakuliah.
List<Object> BantukodeKM = RandomKelasMatakuliah();
11.Cek, apakah jumlah BantukodeKM <= bantuSimpantimeslotRuang.
1. Ya, Untuk i=0 sampai i sebanyak “BantukodeKM”, lakukan
- Ambil kodeKelasMatakuliah dari “bantukm” ke i
- Ambil kodeTimeslot dan koderuang dari “bantutimeslot” ke i.
- Simpan dalam Larik jadwalAwal dan jadwalBaru.
7. Jadwal solusi=new Jadwal(), solusi digunakan untuk mengeset semua atribut
Jadwal untuk disimpan kedalam jadwalAwal,jadwalBaru, dan permintaan.
8. BantukodeKM, fungsinya untuk menyimpan satu data kelas matakuliah
matakuliah hasil random.
9. List<Jadwal>jadwal_permintaan=KontrolPermintaan.getKoneksi().getAllPer
mintaan(), fungsinya mengambil semua jadwal permintaan ke database
menggunakan perintah sql kemudian dimasukan kedalam list.
10.List<TimeSlot>timeslot=KontrolTimeSlot.getKoneksi().getAllTimeSlot(),
fungsinya mengambil semua timeslot ke database menggunakan perintah sql
kemudian dimasukan kedalam list.
11.List<Ruang>ruang=KontrolRuang.getKoneksi().getAllRuangTeori(),
fungsinya mengambil semua ruang ke database menggunakan perintah sql
kemudian dimasukan kedalam list.
Sebelum membuat random jadwal awal, terlebih dahulu membuat metod random
kelas matakuliah tanpa duplikat serta pengecekan dengan jadwal permintaan.
1. Mulai.
2. Buat metod dengan nama RandomKelasMatakuliah, type pengembalian
static List<KelasMatakuliah>.
3. Buat variable Objek baru bantu untuk menyimpan kodekelasMatakuliah
didalam list object java.
List<Object> simpanKodeKM = new ArrayList<Object>();
4. Buat variable Objek baru untuk menyimpan sementara
kodekelasMatakuliah didalam list object java untuk menghindari terjadi
duplikat.
List<Object> randomkm = new ArrayList<Object>();
5. Buat variable Objek baru untuk menyimpan KelasMatakuliah didalam
list.
List<KelasMatakuliah> kelasMatKul =
KontrolKelasMataKuliah.getKoneksi().getAllKelasMataKuliah_Teori();
Buat Object baru random.
Random random = new Random();
6. Untuk i=0 sampai i sebanyak kelasMatKul,
- Buat objek baru dari kelasmatakuliah, “KelasMatakuliah km = new
KelasMatakuliah();”
- Set abtribut matakuliah dan simpan kedalam “randomkm”.
randomkm.add(km);
Dalam SA jika jadwal awal sudah merupakan jadwal yang optimal (tidak
ada terjadi pelanggaran) maka yang digunakan adalah jadwal awal tersebut, tanpa
harus melakukan proses pengoptimalan lagi (pencarian jadwal baru). Jika tidak
1. Random kelasmatakuliah berdasarkan indexnya.
int next_num = random.nextInt(randomkm.size());
2. Ambil kodekelasmatakuliah pada index tersebut.
- Buat objek baru dari kelasmatakuliah,
KelasMatakuliah km = new KelasMatakuliah();
- Set abtribut matakuliah sesuai index hasil random.
“km.setKodeKM(randomKm.get(next_num).getKodeKM());”
3. Simpan kedalam “simpanKodeKM”.
simpanKodeKM.add(km);
4. Hapus kodekelasmatakuliah tersebut dari “randomkm”.
randomKm.remove(randomkm.get(next_num));
8. Cek, jika jadwal permintaan tidak kosong maka, lakukan langkah
berikut:
- Untuk i=0 sampai i sebanyak jadwal_permintaan, lakukan
1. Untuk j=0 sampai j sebanyak simpanKodeKM, lakukan
- Cek apakah kodekelasMatakuliah pada “jadwal_permintaan”
= kodekelasmatakuliah pada “simpanKodeKM”.
- Jika ya, maka dihapus dari “simpanKodeKM”.
9. Kembalikan simpanKodeKM.
maka buat inisialisasi jadwal_sekarang dari jadwal_awal, jadwal_terbaik dari
jadwal_sekarang. Begitu juga simpan fungsi biaya jadwal_sekarang dari fungsi
biaya jadwal awal dan fungsiBiaya_terbaik dari jadwal_sekarang. Menghitung
fungsiBiaya_jadwal_awal menggunakan (Algoritma 3.9 sampai Algoritma 3.13).
1. Buat inisialisasi jadwal_sekarang dari jadwal_awal (Algoritma 3.3).
2. Buat inisialisasi JadwalTerbaik dari jadwal_sekarang (Algoritma 3.4). 1. Mulai
2. Buat metod dengan nama inisialisasiJadwalSkrg_dari_JadwalAwal, dengan
tipe pengembalian static void.
3. Untuk i=0, sampai i sebanyak jadwal_awal.
Jadwal solusi=new Jadwal.
Sett atribut Jadwal dari solusi_awal ke i jadwal_sekarang.add(solusi)
4. Untuk i=0, sampai i sebanyak fungsiBiaya_jadwal_awal
Sett atribut Jadwal dari fungsiBiaya_jadwal_awal ke i fungsiBiaya_ jadwal_sekarang.add(solusi)
3.2.2.Menetapkan Temperatur Awal, Nilai Reduksi Suhu, dan Jumlah
Iterasi.
Sebelum ketahap proses pencarian solusi baru, 3 komponen ini harus
ditetapkan terlebih dahulu. Disini akan ditetapkan seperti berikut:
1. Temperatur awal, T= 5000.
2. Nilai factor reduksi suhu, �= 0,99.
3. Jumlah iterasi, L= 3.
Semua nilai ini dinyatakan dalam angka. Angka-angka tersebut
ditentukan sendiri menyesuaikan masalah yang dihadapi. Fungsi dari ke tiga
komponen tersebut:
1. Temperatur awal.
1. Mulai
2. Buat metod dengan nama inisialisasiJadwalTerbaik_dari_JadwalSkrg,
dengan tipe pengembalian static void.
3. Untuk i=0, sampai i sebanyak jadwal_sekarang.
Jadwal solusi=new Jadwal.
Sett atribut solusi dari jadwal_awal ke i
jadwal_sekarang.add(solusi)
4. Untuk i=0, sampai i sebanyak fungsiBiaya_ jadwal_sekarang
Sett atribut Jadwal dari fungsiBiaya_ jadwal_sekarang ke i fungsiBiaya_terbaik.add(solusi)
Yaitu menentukan lamanya proses pembuatan solusi baru, karena
semakin tinggi angka yang ditentukan dan kecil nilai reduksi suhu yang
digunakan untuk menurunkan, maka semakin lama penurunan suhunya.
Penetapan nilai temperatur awal disesuaikan dengan masalah yang
dihadapi, telah dikatakan pada dasar teori Bab 2 yaitu 2.4.1.1 “Dalam
menentukan temperatur awal secara tepat hingga saat ini belum ada
satupun metode yang secara akurat dapat menentukan temperatur awal
untuk semua masalah”. Jadi nilai ini bisa diubah tergantung pada saat
pengujian algoritma terhadap masalah. Titik akhir penurunan suhu
adalah mencapai suhu/angka 0.
2. Nilai factor reduksi suhu.
Yaitu nilai tetap yang akan digunakan untuk menurunkan
temperatur awal. Nilai ini ditetapkan berdasarkan dari dasar teori pada
Bab 2 yaitu 2.4.1.3 “Pengalaman menunjukan bahwa yang sebaiknya
digunakan adalah antara 0,8 dan 0,99. Biasanya hasil yang baik
diperoleh ketika mendekati 0,99”. Jadi penulis memilih menggunakan
0.99 menurunkan secara pelan.
3. Jumlah iterasi.
Yaitu nilai konstan yang akan digunakan untuk lama proses
pencarian solusi baru sebelum terjadi 1 kali proses penurunan suhu.
Dalam satu kali iterasi akan terjadi 2 peristiwa penting, yaitu fungsi
pencarian solusi baru menggunakan struktur ketetanggaan dan
Setelah sejumlah iterasi ( 3 iterasi ) selesai maka akan dilakukan
penurunan suhu, mengunakan rumus (2.1) yaitu � = � ∗ � (penurunan
nilai temperatur awal tadi). Pada dasar teori Bab 2 yaitu 2.4.1.4
dikatakan “Pada temperatur yang rendah, sebaiknya digunakan sejumlah
iterasi sehingga semua optimum local dapat dieksplorasi. Tetapi, pada
temperatur yang lebih tinggi, sebaiknya digunakan sedikit iterasi”. Jadi
penentuan nilai jumlah iterasi ini juga dapat disesuaikan dengan masalah
yang dihadapi dengan merubah saat pengujian.
Untuk lebih jelasnya peran ketiga komponen tersebut, berikut proses
Mulai
Jadwal
Awal={(S1,Ts1,11,kodekm),…(Sn,Ts20,Xav,kodekm)}
T=5000,a=0.9,L=3
1. Inisialisasi jadwal_sekarang=jadwal_awal jadwal_sekarang={(S1,Ts1,11,kodekm),…(Sn,Ts20,Xav,kodekm)}
fungsiBiaya_jadwal_sekarang=fungsibiaya_jadwal_awal 2. Inisialisasi jadwal_terbaikr=jadwal_sekarang Jadwal_terbaik={(S1,Ts1,11,kodekm),…(Sn,Ts20,Xav,kodekm)}
fungsiBiaya_terbaik=fungsiBiaya_jadwal_sekarang
T>0
Int i=0 i<L
1. Pencarian jadwal baru dari jadwal sekarang dengan struktur ketetanggaan berdasarkan hari pada timeslot
2. hitung fungsiBiaya_jadwal_baru
Delta evaluation (∆E) = fungsiBiaya_jadwal_baru-fungsiBiaya_jadwal_sekarang
fungsiBiaya_jadwal_baru= 0
Update T=T*a
∆E < 0
ganti jadwal_sekarang dengan jadwal_baru
r[0,1]< exp(-∆E/T) fungsiBiaya_jadwal_baru < fungsiBiaya_Terbaik Ya Ya Tidak Tidak Ya Tidak ganti jadwal_terbaik dengan
jadwal_baru Ya i++ Ya Ya Tidak Selesai Tidak
Simpan jadwal_terbaik ke database ganti jadwal_terbaik dengan
jadwal_baru
Gambar 3. 2 FlowChart Algoritma SA
3.2.3.Proses pencarian jadwal baru ( Solusi Baru ).
Struktur ketetanggaan yang akan digunakan dalam proses pencarian
jadwal baru ini adalah berdasarkan hari pada timeslot terjadwal, Jadi, jika
jadwal yang melanggar hari senin, maka akan akan dicari jadwal dari
tetangganya yaitu hari selasa, rabu, kamis, dan jumat. Setelah itu akan
dikumpulkan jadwal-jadwal tetangganya tersebut dan kemudian akan
di-random untuk mendapatkan kelas matakuliah kemudian ditukar posisi
dengan yang melanggar.
Disaat perhitungan fungsi biaya/jumlah pelanggaran telah disimpan
kode “Jadwal” yang melanggar. Kode ini akan digunakan untuk mencari
timeslot jadwal hari yang tidak bertetangga dengannya, setelah didapatkan maka akan melakukan proses penukaran “kelasMatakuliah”.
Dalam pencarian solusi baru ada 2 cara yang digunakan, yaitu
1. Jika terdapat timeslot yang belum digunakan dan harinya berbeda
dari jadwal yang melanggar tersebut, maka timeslot tersebut
digunakan kemudian di ambil secara random (penukaran timeslot).
2. Jika semua timeslot yang harinya berbeda dari jadwal yang
melanggar sudah digunakan, maka akan dilakukan penukaran secara
random kelas matakuliah terhadap jadwal hari yang berbeda
Berikut ini metod pencarian jadwal baru (Solusi Baru’) :
1. ProsesPencarianJadwalbaru (Algoritma 3.5).
1. Mulai
2. Buat metod ProsesPencarianJadwalBaru, tipe pegembalian static void.
3. Buat variable List<Pelanggaran> fB_jadwal_sekarang =
BantuSimpanFungBiaya_JadwalSkrg();.
4. Untuk i=0 sampai i sebanyak “fB_ jadwal_sekarang”, lakukan
langkah 4 sampai 8.
5. Buat variable String HariYangMelanggar =
fB_jadwal_sekarang.get(i).getKodeSolusi().getKodeTimeSlot().getKod
eHari().getKodeHari();
6. Buat variable List<String>TsRg_Free=
tampung_TS_Ruang_yg_tidak_digunakanDanBerbedaHari
(HariYangMelanggar);
7. Jika ”TsRg_Free” tidak kosong dan fungsi biaya current_state > 10 dan
size ”TsRg_Free” >2 atau Jika ”TsRg_Free” tidak kosong size ”
TsRg_Free” >10.
Ambil secara random timeslot dan ruang.
Random random=new Random();
int next_num = random.nextInt(TsRg_Free.size());
Ambil “kode ts”,“kode ruang”,”kodewaktu”,”kodehari”.
Keterangan :
1. Jadwal solusi=new Jadwal() ,Jadwal solusi1=new Jadwal(),Jadwal
solusi2=new Jadwal (), membuat objek baru solusi, solusi1, dan solusi2 untuk
mengeset semua atribut Jadwal. Sebelum mengeset atrribut tersebut harus
diset terlebih dahulu timeslot, matkuliah, dosen, kelasatakuliah, hari,waktu,
timeslot, dan ruang.
2. UpdateTimeSlotRuang(solusi), metod yang berfungsi untuk menukarkan
timeslot yang melanggar dengan timeslot baru hasil random yang tidak
digunakan.
Jadwal solusi = new Jadwal ();
- UpdateTimeSlotRuang(solusi);
8. Jika “TsRg_Free” kosong atau size ”TsRg_Free” <=2.//Cara 2
Set atrribut solusi1 dari “fB_jadwal_sekarang” yang melanggar.
Jadwal solusi1=new Jadwal ();
- ambil secara random kelasmatakuliah baru beda hari.
Jadwal sol= getRandomKelasMatakuliahSolusiBaruOptimal
(HariYangMelanggar);
- Set atribut solusi2. “Jadwal solusi2=new Jadwal ()”;
- Tukarkan kelasmatakuliah dari kedua solusi1 dan solusi2 tersebut
UpdateKelasMatakuliah(solusi1, solusi2);
3. UpdateKelasMatakuliah(solusi1,solusi2), metod yang berfungsi untuk
menukar kelas matakuliah melanggar dengan kelas matakuliah baru hasil
random dari tetangganya.
4. BantuSimpanFungBiaya_JadwalSkrg(), metod yang berfungsi untuk
menyimpan semua data pelanggaran/fungsi biaya dari jadwal_sekarang yang
akan dicari Jadwal barunya. Pada metod ini kode jadwal (melanggar) yang
sama cukup sekali diatasi.
Sebelum membuat metod pencarian jadwal baru, ada beberapa metod yang
harus dibuat terlebih dahulu yaitu :
1. Random Timeslot dan ruang yang tidak digunakan dan harinya berbeda dari
2. Random Kode kelas matakuliah yang harinya berbeda dari yang
melanggar (Algoritma 3.7). 1. Mulai.
2. Buat metod dengan nama
tampung_TS_Ruang_yg_tidak_digunakanDanBerbedaHari dengan
parameter string cari, tipe pengembalian List<String>.
3. Buat variable Objek baru untuk menyimpan kodetimeslot, kodeRuang,
kodeWaktu, kodeHari didalam list String java.
List<String> kodeTsRg = new ArrayList<String>();
4. Untuk i=0 sampai i sebanyak timeslot, lakukan langkah berikut:
1. Untuk j=0 sampai j sebanyak ruang, lakukan langkah berikut ini.
a. Simpan kodetimeslot, koderuang, kodewaktu, kodehari dalam
“kodeTsRg”:
5. Untuk i=0 sampai i sebanyak “jadwal_baru”, lakukan langkah berikut.
1. Untuk j=0 sampai j sebanyak “kodeTsRg”, lakukan langkah berikut.
a. Cek apakah kodetimeslot dan koderuang sudah digunakan,
Ya, hapus dari “kodeTsRg”.
6. Untuk i=0 sampai i sebanyak kodeTsRg, lakukan langkah berikut:
a. Cek jika hari sama dari parameter cari.
Ya, Hapus kodetimeslot dan koderuang dari “kodeTsRg”:
7. Kembalikan kodeTSRg.
3. Simpan Fungbiaya jadwal_sekarang tanpa duplikat jadwal.(Algoritma 3.8). 1. Mulai.
2. Buat metod dengan nama
getRandomKelasMatakuliahSolusiBaruOptimal dengan parameter
string cari, tipe pengembalian static Jadwal.
3. Buat variable Objek baru menyimpan data solusi didalam List Jadwal java.
List<Jadwal> solusi = new ArrayList<>();
4. Untuk i=0 sampai i sebanyak “jadwal_baru”, lakukan langkah berikut:
- Jika berbeda hari dengan yang dicari.
Ya, Simpan data solusi tersebut kedalam “Jadwal”.
5. Untuk i=0 sampai i sebanyak “permintaan”, lakukan langkah berikut:
1. Untuk j=0 sampai j sebanyak “Jadwal”, lakukan langkah berikut:
- Jika ada KelasMatakuliah yang terdapat di “Jadwal” sudah ada di
permintaan.
Ya, hapus dari “Jadwal”.
6. Random untuk mendapatkan kodeKelasMatakuliah yang baru dari Jadwal.
Random random = new Random();
int next_num = random.nextInt(Solusi.size());
sett atribut jadwal sesuai indek random “next_num”.
Jadwal solusi=new Jadwal ().
3.2.4.Perhitungan Fungsi biaya (Jumlah Pelanggaran) dari Hard Constraints
dan Soft Constraints.
Sebuah jadwal dikatakan belum optimal jika masih terdapat
pelanggaran. Pelanggaran didapati dari bobot constraints yang ditetapkan
(Hard Constraints maupun Soft Constraints). Setiap terjadi pelanggaran 1. Mulai.
2. Buat metod dengan nama BantuSimpanFungBiaya_currentState, tipe
pengembalian static List<Pelanggaran>.
3. Buat variable baru untuk menyimpan data pelanggaran
List<Pelanggaran> pelanggaran = new ArrayList<>();
4. Untuk i=0 sampai i sebanyak “fungsiBiaya_jadwal_sekarang”, lakukan
langkah berikut:
Set semua attribute pelanggaran ke i.
Pelanggaran p=new Pelanggaran();
pelanggaran.add(p);
5. Untuk i=0 sampai i sebanyak “pelanggaran”, lakukan langkah berikut:
Untuk j=i+1 sampai j sebanyak “pelanggaran”, l
- Jika kode jadwal ke 1 dan ke j sama.
Maka hapus dari tampungan pelanggaran.
5. Kembalikan pelanggaran.
maka akan diberi nilai dengan bobot 1. Berikut adalah analisa menghitung
jumlah pelanggaran dari constraints yang ditetapkan.
A. Batasan yang tidak boleh dilanggar (Hard Constraints).
1. Metod menghitung terjadi bentrok ruang kelas (Algoritma 3.9).
2. Metod menghitung terjadi bentrok dosen (Algoritma 3.10). 1. Mulai
2. Buat metod Bentrok_Ruang_KelasMatakuliah_JdwlBaru, tipe
pengembalian static int.
3. Buat variable pelanggaran =0.
4. Untuk i=0 sampai i sebanyak “jadwal_baru”, lakukan langkah berikut.
Buat variable cek=1;
1. Untuk j=i+1 sampai j sebanyak “jadwal_baru”, lakukan langkah
berikut.
- Cek apakah ada timeslot pada jadwal_baru ke j = timeslot pada
jadwal_baru ke i dan ruang pada jadwal_baru ke j = ruang pada
jadwal_baru ke i.
Ya, cek=cek+1;
Jika cek=2,
3. Metod menghitung terjadi bentrok rombongan belajar (Algoritma 3.11). 1. Mulai
2. Buat metod Bentrok_Dosen_ JdwlBaru, tipe pengembalian static int.
3. Buat variable pelanggaran =0.
4. Untuk i=0 sampai i sebanyak “jadwal_bar