STEEPEST-ASCENT HILL CLIMBING SIMULATED ANNEALING (SA) BEST-FIRST SEARCH A* ITERATIVE DEEPENING A* (IDA*) SIMPLIFIED MEMORY-BOUNDED A* (SMA*) BI-DIRECTIONAL A* (BDA*) Generate-and-Tet 1. Ban!"#t"an sebuah solusi yang mungkin. Solusi bisa berupa suatu keadaan (state) tertentu, seperti pada masalah jurigen air. Solusi juga bisa berupa sebuah jalur dari satu posisi asal ke posisi tujuan, seperti dalam kasus pencarian rute dari satu kota asal ke kota tujuan. 2. Te apakah solusi yang dibangkitkan tersebut adalah sebuah solusi yang bisa diterima sesuai dengan kriteria yang diberikan. 3. $#"a solusi telah ditemukan, keluar. Jika belum, kembali ke langkah 1. S#%&'e H#'' C'#%(#n! 1. Evaluasi initial state. Jika state ini adalah goal state, maka kembalikan state ini sebagai solusi dan keluar dari program. Jika state ini bukan goal state, lanjutkan proses dengan initial state sebagai current state. 2. Ulangi sampai solusi ditemukan atau sampai tidak ada operator (aturan produksi) baru yang dapat diaplikasikan terhadap current state a). !ilih sebuah operator yang belum diaplikasikan terhadap current state dan aplikasikan operator tersebut sehingga menghasilkan new state. b). Evaluasi new state (i) Jika state ini adalah goal state, maka kembalikan state ini sebagai solusi dan keluar dari program. (ii) Jika state ini bukan goal state tetapi lebih baik daripada current state, maka jadikan state ini sebagai current state. (iii) Jika state ini tidak lebih baik daripada current state, kembali ke langkah ".a. Stee&et-A)ent H#'' C'#%(#n! 1. Evaluasi initial state. Jika state ini adalah goal state, maka kembalikan state ini sebagai solusi dan keluar dari #ungsi. Jika state ini bukan goal state, lanjutkan proses dengan initial state sebagai current state (keadaan sekarang). ". Ulangi sampai solusi ditemukan atau sampai tidak ada perubahan terhadap current state a). $isalkan SUK adalah suatu state yang menjadi suksesor dari current state. b). Untuk setiap operator yang bisa dilakukan terhadap current state, kerjakan (i) %plikasikan operator tersebut dan bangkitkan new state. (ii) Evaluasi new state. Jika merupakan goal state, kembalikan state ini sebagai solusi dan keluar dari program. Jika bukan goal state, bandingkan new state dengan SUK. Jika new state lebih baik daripada SUK, maka ganti SUK dengan new state. Jika tidak lebih baik, SUK tidak perlu diganti. c). Jika SUK lebih baik dari current state, maka ganti current state dengan SUK. S#%*'ated Annea'#n! (SA) Bet-F#rt Sear)+ 1. OPEN berisi initial state dan CLOSED masih kosong. ". Ulangi sampai goal ditemukan atau sampai tidak ada nodes di dalam OPEN a) %mbil simpul terbaik yang ada di OPEN b) Jika simpul tersebut sama dengan goal, maka sukses c) Jika tidak, masukkan simpul tersebut ke dalam CLOSED d) &angkitkan semua suksesor dari simpul tersebut. e) Untuk setiap suksesor kerjakan i. Jika suksesor tersebut belum pernah dibangkitan, evaluasi suksesor tersebut, tambahkan ke OPEN, dan catat arent atau orang tuanya. ii. Jika suksesor tersebut sudah pernah dibangkitan, ubah arent'nya jika jalur melalui arent ini lebih baik daripada jalur melalui arent yang sebelumnya. Selanjutnya, perbarui biaya untuk suksesor tersebut dan nodes lain yang berada di level ba(ahnya. A* function A*(masalah) returns solusi OPEN S CLOSED array kosong loop sampai goal ditemukan atau sampai tidak ada simpul di dalam OPEN if OPEN = kosong then Gagal else BestNode = simpul yang ada di OPEN dengan f minimal Pindahkan simpul terbaik tersebut dari OPEN ke CLOSED if BestNode = goal then Sukses else Bangkitkan semua suksesor BestNode tapi jangan buat pointer Untuk setiap suksesor kerjakan: itung g(suksesor) = g(BestNode) ! actual cost(dari BestNode ke suksesor) {Periksa suksesor} if suksesor ada di OPEN then "sudah pernah dibangkitkan tapi belum diproses# $%& = simpul di OPEN yang sama dengan suksesor tersebut 'ambahkan $%& sebagai suksesor BestNode Buat pointer dari $%& ke BestNode Bandingkan nilai g($%&) dengan g(suksesor) if g($%&) lebih baik then Ubah parent $%& ke BestNode Ubah nilai g dan f yang ada pada $%& end else if suksesor ada di CLOSED then "sudah pernah dibangkitkan dan sudah diproses# $%& = simpul di CLOSED yang sama dengan suksesor tersebut 'ambahkan $%& sebagai suksesor BestNode Bandingkan nilai g($%&) dengan g(suksesor) if g($%&) lebih baik then Ubah parent $%& ke BestNode Ubah nilai g dan f yang ada pada $%& Propagasi untuk semua suksesor $%& dengan penelusuran &(S dengan aturan: loop sampai simpul suksesor tidak ada di OPEN atau simpul tidak punya suksesor if suksesor ada di OPEN then Propagasi diteruskan else if nilai g )ia suksesor lebih baik then Propagasi diteruskan else Propagasi dihentikan end end end else "suksesor tidak ada di OPEN maupun CLOSED# *asukkan suksesor ke OPEN 'ambahkan suksesor tersebut sebagai suksesornya BestNode itung f = g(suksesor) ! h(suksesor) end end end end Iterat#,e Dee&en#n! A* (IDA*)
-*n)t#.n )*%+(!asala") ret*rn solusi #n&*t/ !asala", sebuah masalah '.)a' ,ar#a('e/ #$li!it, batasan #',ost saat ini root, sebuah simpul
root $%-E'S)$!U.(%N%&%'L'S&'&E/masalah0) #$li!it #',ost(root) loop d. solusi( #$li!it *1S',2342U5(root( #$li!it) #- solusi bukan null t+en return solusi #- #$li!it sama dengan %N)%N%&E t+en return gagal end
-*n)t#.n *1S',2342U5(simpul( #$li!it) ret*rn solusi, batasan #',ost yang baru #n&*t/ simpul, sebuah simpul f-limit0 batasan #',ost saat ini '.)a' ,ar#a('e/ ne*t$#, batasan #',ost untuk penelusuran berikutnya, pada a(alnya variabel ini di beri nilai tak hingga (%N)%N%&E)
#- #$Cost/simpul0 6#$li!it t+en ret*rn null, #$Cost/simpul0 #- +O'L'4ES4/problem0(S&'&E/simpul0) t+en ret*rn simpul,#$li!it -.r setiap simpul s yang menjadi SU,,ESS25(simpul) d. solusi( new$# *1S',2342U5(s(#$li!it) #- solusi bukan null t+en ret*rn solusi( #$li!it ne*t$# $)3(ne*t$#( new$#) end ret*rn null, ne*t$# S#%&'#1ed Me%.r2-B.*nded A* (SMA*) B#-d#re)t#.na' A* (BDA*)