Vous êtes sur la page 1sur 10

GENERATE-AND-TEST

SIMPLE HILL CLIMBING


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*)

Vous aimerez peut-être aussi