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.