Implementasi Form Implementasi Antarmuka

92 Gambar 4.2. Halaman kelola Problem Gambar 4.3. Halaman kelola variabel 93 Gambar 4.4. Halaman kelola rule Gambar 4.5. Halaman pilih solusi Aplikasi State and Space 94 Gambar 4.6. Halaman Solusi AI Gambar 4.7. Halaman Solusi Manual 95 Gambar 4.8. Halaman Materi State and Space 96 Gambar 4.9. Halaman Materi Breadth-First Search 97 Gambar 4.10. Halaman Contoh Soal 98 Gambar 4.11. Halaman Tentang Pembuat Gambar 4.12. Halaman Bantuan 99

4.1.6 Implementasi Algoritma Pohon Pelacakan

Algoritma penyelesaian masalah state and space menggunakan pohon pelacakan untuk mencari solusi dari setiap permasalahan. Akar dari pohon merupakan keadaan awal. Akar pohon kemudian membentuk cabang-cabang baru dengan melakukan semua aksi-aksi yang dapat terjadi pada keadaan awal. Keadaan-keadaan baru yang dihasilkan merupakan cabang baru dari pohon. Proses pengembangan dan pencarian dilanjutkan dengan membentuk keadaan baru cabang baru dari cabang-cabang yang sudah ada hingga didapatkan solusi. Proses pembentukan keadaan baru juga melakukan prosedur pengecekan apakah keadaan tersebut sudah pernah dibentuk sebelumnya pada pohon. Apabila sudah ada, maka cabang baru tidak jadi dibentuk. Apabila tidak ada cabang yang dapat dikembangkan lagi dan ternyata belum ditemukan solusi, maka permasalahan yang sedang diselesaikan tidak memiliki solusi. Penelusuran pohon pelacakan dilakukan secara per level, dari level-1 keadaan awal, kemudian ke level-2 keadaan yang dapat dicapai oleh level-1 dan seterusnya. Metode penelusuran seperti ini disebut metode pencarian melebar pertama Breadth-First Search. Algoritma pencarian juga melakukan prosedur pengecekan apakah setiap aksi yang dilakukan pada setiap keadaan melanggar aturan yang telah dibuat sebelumnya. Prosedur ini memastikan bahwa keadaan baru yang akan dibentuk tidak melanggar aturan yang telah ada. Adapun struktur algoritma pencarian solusi adalah sebagai berikut: 1. Panggil record aturan rule dari database dan simpan ke dalam variabel array „Rule‟. Seperti yang telah dijelaskan sebelumnya, bentuk aturan adalah variabel1 akan menyerang variabel2 apabila variabel3 dan variabel4 tidak 100 berada di tempat. Untuk I1 = 1 sampai rs.RecordCount, lakukan prosedur berikut: a. I2 = indeks array tertinggi dari variabel Rule + 1. b. ControlI2.Var1 = rsVariabel1. c. ControlI2.Var2 = rsVariabel2. d. ControlI2.Var3 = rsVariabel3. e. ControlI2.AttID = rsAttackID. f. ControlI2.Var4 = rsVariabel4. g. rs.MoveNext. 2. Panggil record variabel dari database dan simpan ke dalam variabel array „Variabel‟. Untuk I1 = 1 sampai rs.RecordCount, lakukan prosedur berikut: a. I2 = indeks array tertinggi dari variabel Rule + 1. b. VariabelI2.VarID = rsVariabelID. c. VariabelI2.NamaVar = rsNamaVariabel. d. VariabelI2.Driver = rsDriver. e. KAwal = KAwal IIfI1 = 1, , , 1. f. sT1 = sT1 IIfI1 = 1, , , 0. g. KTujuan = KTujuan IIfI1 = 1, , , 1. h. rs.MoveNext. 3. Hasilkan semua kombinasi variabel pada rakit yang mungkin terjadi dan tidak menyalahi aturan. Untuk I1=1 sampai batas atas array Variabel, a. Jika VariabelI1.Driver = True maka, lanjutkan ke algoritma berikutnya. Jika tidak, maka lanjutkan looping berikutnya untuk variabel I1. 101 b. Hasilkan kombinasi single hanya terdapat satu buah variabel pada rakit sehingga tidak akan pernah menyalahi aturan manapun. i. I4 = UBoundKombinasi + 1. ii. ReDim Preserve KombinasiI4. iii. KombinasiI4.Var1 = VariabelI1.NamaVar. iv. KombinasiI4.Var2 = “”. v. Tambah ke list. sList = sList “{“ KombinasiI4.Var1 “}”. c. Cari kombinasi double terdapat dua buah variabel pada rakit. Untuk I2 = 1 sampai UboundVariabel, lakukan prosedur berikut. i. Jika I1 I2 dan kombinasiVariabelI1.NamaVar dan VariabelI2.NamaVar belum pernah ada pada variabel sList, maka lanjutkan ke poin berikutnya. Jika tidak maka lanjutkan looping untuk variabel I2. ii. Cek apakah kombinasi variabel menyalahi aturan yang telah ada. Set B1 = False. Untuk I3 = 1 sampai UBoundControl, lakukan prosedur berikut. 1 Jika VariabelI1.NamaVar = ControlI3.Var1 dan VariabelI2.NamaVar = ControlI3.Var2 Atau VariabelI2.NamaVar = ControlI3.Var1 dan VariabelI1.NamaVar = ControlI3.Var2 maka set B1 = True dan keluar dari looping. iii. Jika B1 = False ini artinya tidak menyalahi aturan, maka hasilkan kombinasi double. 102 1 I4 = UBoundKombinasi + 1. 2 ReDim Preserve KombinasiI4. 3 KombinasiI4.Var1 = VariabelI1.NamaVar. 4 KombinasiI4.Var2 = VariabelI2.NamaVar. 5 Tambah ke list. sList = sList “{“ KombinasiI4.Var1 “,” KombinasiI4.Var2 “}” “{“ KombinasiI4.Var2 “,” KombinasiI4.Var1 “}”. 4. Memulai pencarian dari keadaan awal. a. ReDim Keadaan1. b. Keadaan1.DKiri = KAwal. c. Keadaan1.DKanan = sT1. d. Keadaan1.Rakit = “KIRI”. e. Keadaan1.IsExpand = False. f. Keadaan1.Induk = 0. g. Keadaan1.Aksi = “”. 5. Tambahkan list keadaan. sList = “{Kr=” KAwal “,Kn = “ sT1 “R=KIRI}”. 6. N = 0. 7. Selama belum semua keadaan dikembangkan Not IsAllExpandKeadaan, maka lakukan prosedur berikut: a. N = N + 1. b. Simpan keadaan pada daerah asal dan keadaan pada daerah seberang pada variabel sT1 dan sT2.