Implementasi Algoritma Simulated Annealing SA.

4.1.2. Implementasi Algoritma Simulated Annealing SA.

Implementasi algoritma SA untuk membuat jadwal kelas matakuliah. Dalam algoritma ini, ada beberapa tahap atau proses untuk membuat jadwal kelas matakuliah adalah sebagai berikut : public static void Simulated_EngineJProgressBar progres, JTextField jumPelangaran throws SQLException { Tahap pertama MenetapkanJadwalAwal; hitung jumlah pelanggaran jadwal awal int f_jadwalAwal = fungsiBiaya_jadwal_Awal; jika jadwal awal bukan goal atau fungsi biaya jadwal awal 0 if f_jadwalAwal 0 { Tahap kedua Inisialisasi_jadwalSkrg_dgn_jadwalAwal; Inisialisasi_jadwalTerbaik_dgn_jadwalSkrg; suhu awal dan nilai alpha reduksi suhu, ditetapkan double suhu_awal = 5000 ;suhu awal double alpha = 0.99 ;nilai reduksi huhu int iterasi = 3; jumlah iterasi 3 Tahap ketiga ulangi sampai solusi ditemukan atau suhu awal mencapai 0.01 while suhu_awal 0.01 { for int i = 0; i iterasi; i++ { aturan produksi untuk proses menghasilkan jadwal baru ProsesPencarianJadwalBaru; Evaluasi jadwal baru int f_jadwalbaru = fungsibiaya_jadwalBaru; hitung delta evaluation dengan membandingkan fungsi biaya jadwal baru dengan jadwal sekarang apakah jadwal baru goal atau f_jadwalBaru = 0 if f_jadwalbaru == 0 { ganti jadwal terbaik dengan jadwal terbaru Update_jadwalTerbaik_dgn_jadwalBaru; Keluar dari program suhu_awal = 0.01; break; } else { jika jadwal baru bukan goal int f_jadwalSkrg = fungsiBiaya_jadwal_sekarang.size; int delta_evaluation = f_jadwalbaru - f_jadwalSkrg; cek apakah jadwal baru membaik atau 0, artinya jumlah pelanggaran jadwal baru lebih kecil dari jadwal sekarang if delta_evaluation 0 { System.out.printlnMembaik; ganti jadwal sekarang dengan jadwal baru Update_jadwalSkrg_dgn_jadwalBaru; cek apakah fungsi biaya jadwal baru lebih baik dari fungsi biaya jadwal terbaik sementara if fungsiBiaya_jadwal_baru.size fungsiBiaya_jadwal_terbaik.size { System.out.printlnJadwal terbaik; simpan jadwal terbaik Update_jadwalTerbaik_dgn_jadwalBaru; } Hapus fungsi biaya jadwal baru dari larik, karena akan dicari ulang. fungsiBiaya_jadwal_baru.removeAllfungsiBiaya_jadwal_baru; } else { jika jadwal baru lebih buruk dari jadwal sekarang double p = Math.exp-delta_evaluation suhu_awal; double r = Math.random;membangkitkan nilai random dalam interval 0 sampai 1 if rp { ganti jadwal sekarang dengan jadwal baru, dengan probabilitas System.out.printlnTidak membaik, diterima dengan probalitas = + r + + p; ganti jadwal sekarang dengan jadwal baru Update_jadwalSkrg_dgn_jadwalBaru; } else { System.out.printlntidak diterima; pencarian jadwal baru dikembalikan lagi dari jadwal sekarang karena jadwal baru sudah diubah dan tidak diterima. cariSolusi_kembali_dari_jadwalSkrg;} Hapus fungsi biaya jadwal baru dari larik, karena akan dicari ulang. fungsiBiaya_jadwal_baru.removeAllfungsiBiaya_jadwal_baru; } } } selesai iterasi lakukan update suhu update nilai suhu suhu_awal = alpha suhu_awal; System.out.printlnSuhu sekarang : + suhu_awal;} Tahap ke empat System.out.printlnSelesai ; SimpanDatabase; kosongkanSemuaLarik; } else { System.out.printlnSelesai tanpa proses SA ; SimpanDatabaseJadwalAwal; }} Keterangan : 1. Tahap pertama adalah menetapkan inisialisasi jadwal awal menetapkan jadwal awal, menghitung fungsi biaya jumlah pelanggaran jadwal awal. Jika jadwal awal masih ada pelanggaran, maka masuk ke tahap kedua. 2. Tahap kedua adalah inisialisasi jadwal sekarang dari jadwal awal, fungsi biaya jadwal sekarang dari fungsi biaya jadwal awal, inisialisasi jadwal terbaik dari jadwal sekarang, fungsi biaya jadwal terbaik dari fungsi biaya jadwal sekarang. Dan menetapkan nilai-nilai parameter algoritma SA yaitu suhu awal, alpha, dan jumlah iterasi. 3. Tahap ketiga adalah ulangi sampai solusi baru ditemukan atau sampai suhu awal sudah mencapai 0 lakukan, pencariaan jadwal baru new_state dari jadwal sekarang, evaluasi nilai jadwal baru dan jadwal sekarang. Jika jadwal baru sudah goal jumlah pelanggaran=0 maka keluar program set jadwal baru ke jadwal terbaik. Jika tidak goal, maka cek apakah jadwal baru lebih baik dari jadwal sekarang, jika membaik maka ganti jadwal sekarang dengan jadwal baru. Jika jadwal baru labih buruk maka akan diterima jika memenuhi rumus exponent. Jika tidak memenuhi rumus exponent maka dikembalikan mencari jadwal baru dari jadwal sekarang. Setelah 3 kali iterasi selesai maka update suhu. 4. Simpan jadwal terbaik kedatabase sebagai jadwal.

4.1.3. Implementasi User Interface.