TUGAS KE – II
PENGANTAR KECERDASAN BUATAN ALGORITMA PENCARIAN
TIYAS UTAMI 10215084
NURUL HIDAYAH 10215079
SRI MAELANI 10215039
JURUSAN SISTEM KOMPUTER
FAKULTAS TEKNIK DAN ILMU KOMPUTER UNIVERSITAS KOMPUTER INDONESIA
BANDUNG
2018
RINGKASAN
Pencarian (searching) merupakan proses yang fundamental dalam pengolahan data.
Proses pencarian adalah menemukan nilai (data) tertentu didalam sekumpulan data yang bertipe sama (baik bertipe dasar maupun bertipe bentukan).
Definisi algoritma pencarian secara luas adalah sebuah algoritma yang menerima masukan berupa sebuah masalah dan menghasilkan sebuah solusi untuk masalah tersebut, yang biasanya didapat dari evaluasi beberapa kemungkinan solusi. Algoritma pencarian (searching algorithm) adalah algoritma yang menerima sebuah argumen kunci dan dengan langkah-langkah tertentu akan mencari rekaman dengan kunci tersebut. Setelah proses pencarian dilaksanakan, akan diperoleh salah satu dari dua kemungkinan, yaitu data yang dicari ditemukan (successful) atau tidak ditemukan (unsuccessful).
Data dapat disimpan secara temporer dalam memori utama atau disimpan secara permanen di dalam memori sekunder (tape atau disk). Didalam memori utama , struktur penyimpanan data yang umum adalah berupa larik atau tabel (array), sedangkan di dalam memori sekunder berupa arsip (file). Algoritma pencarian yang akan dibicarakan dimulai dengan algoritma pencarian yang paling sederhana yaitu pencarian beruntun atau Sequential Search.
BAB I PENDAHULUAN
1.1 LATAR BELAKANG
Dalam ilmu komputer, sebuah algoritma pencarian dijelaskan secara luas adalah sebuah algoritma yang menerima masukan berupa sebuah masalah dan menghasilkan sebuah solusi untuk masalah tersebut, yang biasanya didapat dari evaluasi beberapa kemungkinan solusi. Sebagian besar algoritma yang dipelajari oleh ilmuwan komputer adalah algoritma pencarian. Himpunan semua kemungkinan solusi dari sebuah masalah disebut ruang pencarian. Algortima pencarian brute-force atau pencarian naif/uninformed menggunakan metode yang sederhana dan sangat intuitif pada ruang pencarian, sedangkan algoritma pencarian informed menggunakan heuristik untuk menerapkan pengetahuan tentang struktur dari ruang pencarian untuk berusaha mengurangi banyaknya waktu yang dipakai dalam pencarian. Adapun dalam metode pencarian blind atau buta digunakan karena memang tidak ada informasi awal yang digunakan dalam proses pencarian.
Searching adalah pencarian data dengan menelusuri tempat pencarian data tersebut.
Tempat pencarian data tersebut dapat berupa array dalam memori, bisa juga pada file pada external storage.Bila jumlah data sudah demikian besar, dibutuhkan suatu metode untuk mendapatkan data yang dibutuhkan. Beberapa metode pengorganisasian data telah membuat proses pencarian data menjadi lebih efisien.
1.2 Tujuan
Pada makalah ini terdapat beberapa tujuan, yaitu :
1. Untuk mengetahui pengertian searching/pencarian.
2. Untuk mengetahui apa saja jenis-jenis algoritma pencarian.
BAB II PEMBAHASAN
2.1 ALGORITMA PENCARIAN OPTIMASI A. Branch and Bound
Pada metode ini kita tidak memerlukan estimasi jarak tiap node menuju GOAL.Selain itu elemen-elemen pada queue bukan tiap node, melainkan lintasan parsial yang sudahtercapai.
Algoritma
1. Buat sebuah Antrian, inisialisasi node pertama dengan Root daritree
2. Bila lintasan parsial Ç lintasan GOAL, maka lintasan parsial diganti dengan lintasan parsial + node child, semuanya diatur berdasarkan harga yang diurut secaraascending.
3. Bila node pertama = lintasan GOAL,selesai
SsZ
BsZ
AsZ
CsZ
AsZ
EsZ
DsZ Z=Z
Keuntungan
1. Algoritma berhenti pada nilai optimum sebenarnya (menemukan optimum global).
S
S-B S-A
S-A S-B-C S-B-A S-B-C S-B-A S-A-D S-B-A S-B-C -E S-A-D S-B-C -E S-A-D S-B-A-D S-A-D S-B-C-E-Z S-B-A-D
S-B-C-E-Z S-A-D-F S-B-A-D S-A-D-C
Kelemahan
1. Membutuhkan memori yang cukup banyak, karena bisa jadi menyimpan semua lintasan parsial yang memungkinkan
B. Dynamic Programming
Metode ini sama dengan Branch and Bound, tetapi lebih efisien karena bisa mengurangi lebar / melakukan pemotongan terhadap lebar dari tree. Hal ini dilakukan dengan cara mereduksi lintasan parsial yang menuju ke suatu node yang sudah pernah dikunjungi sebelumnya
Algoritma
1. Buat sebuah Antrian, inisialisasi node pertama dengan Root daritree
2. Bila lintasan parsial Ç lintasan GOAL, jika ada lintasan parsial dengan node terakhir yang sama (dalam satu queue) maka diambil yang harganya paling minimal, sedangkan yang lebih mahal dihapus dari queue, sehinggan tree akan lebihkurus.
3. Bila node pertama = lintasan GOAL,selesai SsZ
BsZ AsZ CsZ EsZ DsZ ZsZ
S
S-B S-A
S-A S-B-C S-B-A S-B-C S-A-D S-A-B S-B-C -E S-A-D S-B-C-D S-A-D S-B-C-E-Z
S-B-C-E-Z S-A-D-F S-A-D-C
S
A B
B D A C
C C F D E D
E D B E C F Z A F
Z F Z E
Z
Keuntungan
1. Algoritma berhenti pada nilai optimumsebenarnya.
2. Lebih efisien dari metode Branch & Bound dalam penggunaan memori dan waktu eksekusi karena adapemotongan.
Kelemahan
1. Harus mengingat node terakhir dari lintasan parsial yang sudah dicapai sebelumnya
Gambar 2.1 Gambar Tree Yang Dihasilkan dengan Metode Branch & Bound dengan Dynamic Programming
C. A*
Algoritma A* adalah algoritma yang dikemukakan oleh Hart, Nilsson, dan Raphael pada tahun 1968. Algoritma A* merupakan salah satu algoritma Branch and Bound atau disebut juga sebagai sebuah algoritma untuk melakukan pencarian solusi dengan menggunakan informasi tambahan (heuristic) dalam menghasilkan solusi yang optimal.
Ada beberapa variasi A* seperti berikut : – Iterative Depeening A* (IDA*)
– Simplified Memory-Bounded A* (SMA*) – Bi-Directional A* (BDA*)
– Modified Bi-Directional A* (MBDA*) – Dynamic Weighting A* (DWA*) – Beam A* (BA*)
Iterative Deepening A* (IDA*)
Iterative Deepening A* atau yang sering disebut dengan IDA* merupakan gabungan dari algoritma BFS dan DFS, dimana algoritma BFS merupakan algoritma complete dan optimal dan algoritma DFS merupakan algoritma yang space complexity rendah.
IDA* menggunakan pencarian iterative dimana nilai batasan/limit pencarian didasarkan pada nilai f(n). Dimulai dari status awal, tentukan suatu limit awal. Bangkitkan semua node dari status awal tersebut lalu hitung f(n) untuk setiap anak yang terkecil.
Apakah f(n) terkecil lebih kecil dari limit ? Jawabannya bias Ya bias Tidak. Jika jawaban Iya maka bangkitkan semua anak dari node dengan f(n) terkecil tersebut, lalu lanjutkan pencarian. Jika jawabannya tidak maka jadikan f(n) tersebut sebagai limit baru kemudian ulang pencarian dari status awal (restart).
IDA* merupakan algoritma yang time complexity nya tinggi dikarenakan proses pencarian dilakukan secara iterative sehingga terjadi proses penelusuran menggunakan algoritma DFS yang berulang-ulang tetapi walaupun boros waktu IDA* tetap memberikan solusi terbaik.
Algoritma IDA*
Function depth_first_search(n, limit) If f(n) > limit
Then Return f(n)
If h(n) = 0 Then BERHASIL
Return nilai terendah dari depth_first_search (ni;, limit) bagi semua successor n; dari n end
Procedure IDA* (n) Limit = h(n)
repeat
limit = depth_first_search (n, limit) until BERHASIL
end
Jalur Terpendek S ke G dengan IDA
2.2 ALGORITMA PENCARIAN UNINFORM (BREADTH FIRST, DEPTH FIRST, HILL CLIMBING, BESTFIRST)
A. Pencarian Melebar Pertama (Breadth-FirstSearch)
Pada metode Breadth-First Search, semua node pada level n akan dikunjungi terlebih dahulu sebelum mengunjungi node-node pada level n+1. Pencarian dimulai dari node akar terus ke level ke-1 dari kiri ke kanan, kemudian berpindah ke level berikutnya demikian pula dari kiri ke kanan sampai ditemukannya solusi
Gambar 2.2.1 Tree untuk Breadth First Search
Algoritma
1. Buat sebuah Antrian, inisialisasi node pertama dengan Root daritree 2. Bilanodepertama,jikaÇGOAL,digantidengananak-anaknyadandiletakkandi
belakang PERLEVEL
3. Bila node pertama = GOAL,selesaai.
Keuntungan
1. Tidak akan menemui jalanbuntu
2. Jika ada satu solusi, maka breadth first search akan menemukannya. Dan jika ada lebih dari satu solusi, maka solusi minimum akanditemukan.
Kelemahan
1. Membutuhkan memori yang cukup banyak, karena menyimpan semua node dalam satu pohon.
2. Kemungkinan ditemukan optimal lokal.
S
A B
B D A C
C C F D E D
E D B E C F Z A F
Z F Z E
Z
B. Pencarian Mendalam Pertama (Depth-First Search)
Pada Depth First Search, proses pencarian akan dilaksanakan pada semua anaknya sebelum dilakukan pencarian ke node-node yang selevel. Pencarian dimulai dari node akar ke level yang lebih tinggi. Proses ini diulangi terus hingga ditemukaannyasolusi.
Algoritma
1. Buat sebuah Antrian, inisialisasi node pertama dengan Root daritree
2. Bila node pertama, jika Ç GOAL, node dihapus diganti dengan anak-anaknya dengan urutanLChild
3. Bila node pertama = GOAL,selesai
Keuntungan
1. Membutuhkan memori yang relative kecil, karena hanya node-node pada lintasan yang aktif saja yang disimpan.
2. Menemukan solusi tanpa harus menguji lebih banyak lagi dalam ruang keadaan.
Kelemahan
1. Kemungkinan terjebak pada optimallokal.
2. Hanya akan mendapatkan 1 solusi pada setiappencarian.
Gambar 2.2.2 Tree untuk Depth First Search S
A B
B D A C
C C F D E D
E D B E C F Z A F
Z F Z E
Z
C. Pencarian dengan Best First Search
Metode ini merupakan kombinasi dari metode depth-first search dan breadth-first search.
Pada metode best-first search, pencarian diperbolehkan mengunjungi node yang ada di level yang lebih rendah, jika ternyata node pada level yang lebih tinggi ternyata memiliki nilai heuristic yang lebih buruk.
Fungsi Heuristik yang digunakan merupakan prakiraan (estimasi) cost dari initial state ke goal state, yang dinyatakan dengan :
f’(n) = g(n)+ h’(n)
dimana f’ = Fungsi evaluasi
g = cost dari ini tial state ke current state
h’ = prakiraan cost dari current state ke goal state Contoh :
Misalkan kita memiliki ruang pencarian seperti pada gambar dibawah. Node M merupakan keadaan awal dan node T merupakan tujuannya. Biaya edge yang menghubungkan node M dengan node A adalah biaya yang dikeluarkan untuk bergerak dari kota M ke kota A. Nilai g diperoleh berdasarkan biaya edge minimal. Sedangkan nilai h’ di node A merupakan hasil perkiraan terhadap biaya yang diperlukan dari node A untuk sampai ke tujuan. h’(n) bernilai ~ jika sudah jelas tidak ada hubungan antara node n dengan node tujuan (jalan buntu). Kita bisa mengurut nilai untuk setiap node.
Keuntungan
1. Membutuhkan memori yang relative kecil, karena hanya node-node pada lintasan yang aktif saja yang disimpan.
2. Secara kebetulan, metode best first search akan menemukan solusi tanpa harus menguji lebih banyak lagi dalam ruangkeadaan.
Kelemahan
1. Algoritma akan berhenti kalau mencapai nilai optimumlocal.
2. Tidak diijinkan untuk melihat satupun langkahsebelumnya.
D. Pencarian dengan Hill Climbing
Hill Climbing (mendaki bukit) merupakan salah satu variasi metode buat dan uji (generate and test) dimana umpan balik yang berasal dari prosedur uji digunakan untuk memutuskan arah gerak dalam ruang pencarian (search).
Dalam prosedur buat dan uji yang murni, respon fungsi uji hanyalah ya atau tidak. Dalam prosedurHill Climbing, fungsi uji dikombinasikan dengan fungsi heuristik yang menyediakan pengukuran kedekatan suatu keadaan yang diberikan dengan tujuan (goal).
Prosedur Hill Climbing :
Buatlah solusi usulan pertama dengan cara yang sama seperti yang dilakukan dalam prosedur buat dan uji (generate and test). Periksalah apakah solusi usulan itu merupakan sebuah solusi. Jika ya, berhentilah. Jika tidak, kita lanjutkan ke langkah berikutnya.
Dari solusi ini, terapkan sejumlah aturan yang dapat diterapkan untuk membuat sekumpulan solusi usulan yang baru.
Untuk setiap elemen kumpulan solusi tersebut, lakukanlah hal-hal berikut ini : Kirimkanlah elemen ini ke fungsi uji. Jika elemen ini merupakan sebuah solusi, berhentilah.
Jika tidak, periksalah apakah elemen ini merupakan yang terdekat dengan solusi yang telah diuji sejauh ini. Jika tidak, buanglah.
Ambilah elemen terbaik yang ditemukan di atas dan pakailah sebagai solusi usulan berikutnya. Langkah ini bersesuaian dengan langkah dalam ruang problema dengan arah yang muncul sebagai yang tercepat dalam mencapai tujuan.
Kembalilah ke langkah 2.
Metode ini hampir sama dengan metode pembangkitan dan pengujian, hanya saja proses pengujian dilakukan dengan menggunakan fungsi heuristic. Pembangkitan keadaan berikutnya tergantung pada feedback dari prosedur pengetesan. Tes yang berupa fungsi heuristic ini akan menunjukkan seberapa baiknya nilai terkaan yang diambil terhadap keadaan-keadaan lainnya yang mungkin.
Algoritma Simple HillClimbing
Kerjakan langkah-langkah berikut sampai solusinya ditemukan atau sampai tidak ada operator baru yang akan diaplikasikan pada keadaan sekarang:
Cari operator yang belum pernah digunakan; gunakan operator ini untuk mendapatkan keadaan yang baru.
Evaluasi keadaan baru tersebut :
Jika keadaan baru merupakan tujuan, keluar
Jika bukan tujuan, namun nilainya lebih baik dari pada keadaan sekarang, maka jadikan keadaan baru tersebut menjadi keadaan sekarang.
Jika keadaan baru tidak lebih baik daripada keadaan sekarang, maka lanjutkan iterasi.
Pada simple hill climbing, ada 3 masalah yang mungkin:
Algoritma akan berhenti kalau mencapai nilai optimum local
Urutan penggunaan operator akan sangat berpengaruh pada penemuan solusi
Tidak diijinkan untuk melihat satupun langkah sebelumnya
Contoh: TSP dengan Simple Hill Climbing
Disini ruang keadaan berisi semua kemungkinan lintasan yang mungkin. Operator digunakan untuk menukar posisi kota-kota yang bersebelahan. Apabila ada n kota, dan kita ingin mencari kombinasi l intasan dengan menukar posisi urutan 2 kota, maka kita akan mendapatkan sebanyak:
atau sebanyak 6 kombinasi (lihat gambar dibawah). Fungsi heuristic yang digunakan adalah panjang lintasan yang terjadi
3.1 ALGORITMA PENCARIAN PERMAINAN A. METODE MINIMAX
Algoritma Minimax merupakan algoritma yang digunakan untuk menentukan pilihan agar memperkecil kemungkinan kehilangan nilai maksimal. Algoitma ini diterpkan dalam permainan yang melibatkan dua pemain seperti tic tac toe, checkers, go dan permainan yang menggunakan strategi atau logika lainnya.
Hal ini berarti permainan-permainan tersbut dapa dijelaskan sebagai suatu rangkaian aturan dan premis. Algoritma ini mulai dikembangkan dari teori game zero-sum. Teori ini mendeskripsikan situasi dimana jika terdapat pemain yang mengalami pendapatan, pemain lain akan mengalami kehilangan dengan nilai yang sama dari pendapatan tersebut, dan sebaliknya. Jumlah pendapatan dari pemain yang dikurangi dengan jumlah kehilangan akan berjumlah nol. Teori minimax menyatakan :
Untuk setiap dua orang pemain dalam zero-sum game, terdapat nilai V dari strategi yang dimiliki pemain seperti :
Stratregi yang ditentukan pemain kedua akan menghasilkan konsekuensi kemungkinan untuk pemain pertama, V
Strategi yang dutentukan pemain pertama akan menghasilkan konsekuensi kemungkinan untuk pemain pertama, -V Secara setara, strategi pemain pertama akan memastikan suatu nilai V tanpa memperdulikan strategi pemain kedua, dan bersamaan dengan itu pemain kedua akan memastikan dirinya kehilangan nilai sebesar –V.
Algoritma Minimax merupakan algoritma dasar pencarian DFS (Depth-First Search) untuk melakukan traversal dalam pohon. DFS akan mengekspansi simpul paling dalam terlebih daulu. Setelah simpul akar dibangkitkan, algoritma ini akan membangkitkan simpul pada tingkat kedua, yang akan dilanjutkan pada tingkat ketiga, dst. Dalam melakukan treversal, misalkan dimulai dari suatu simpul i, maka simpul selanjutnya yang akan dikunjungi adalah simpul tetangga j, yang bertetangga dengan simpul k, selanjutnya pencarian dimulai lagi secara rekursif dari simpul j. Ketika telah mencapai simpul m, dimana semua simpul yang bertetanggadengannya telah dikunjungi, pencarian akan dirunutbalikke simpul terakhir yang dikunjungi sebelumnya danmempunyai simpul j yang belum dikunjungi. Selanjutnyapencarian dimulai kembali dari j. Ketika tidak ada lagisimpul yang belum dikunjungi yang dapat dicapai darisimpul yang telah dikunjungi maka pencarian
selesai.Dalam repersentasi pohon dalam algoritma Minimax,terdapat dua jenis node, yaitu node min dan node max.Max node akan memilih langkah dengan nilai tertinggidan min node akan memilih langkah dengan nilaiterendah. Berikut merupakan gambar pohon untukalgoritma Minimax.Gambar 2 Pohon Pencarian Algoritma MinimaxDalam algoritma ini, langkah yang dapat dilakukanpemain ditentukan oleh langkah pemain lawansebelumnya. Sebagai contoh pada tabel berikut di berikantabel nilai yang memberitahukan hasil dari pilihan.
Tabel 1 Tabel Contoh Nilai Pilihan B memilih B1 B memilih B2 B memilih B3
A memilih A1 +3 -2 +2 A memilih A2 -1 0 +4 A memilih A3 -4 -3 +1
Pada tabel ini diperlihatkan setiap pemain memiliki tigapilihan yang harus dipertimbangkan. Denganmengasumsikan nilai pilihan yang dipilih untuk suatupemain akan bernilai kebalikannya bagi pemain lawan.Maka pilihan minimal untuk A adalah A2 karena nilaiterburuk adalah kehilangan -1, dengan pilihan minimaxuntuk B adalah B3 karena kemungkinan teburuk adalahmendapatkan nilai 1. Bagaimanapun, solusi ini tidakstabil, jika B mengira A akan memilih A2 maka B akan
B. METODE ALPHA-BETA-PRUNNING
Alpha Beta Pruning adalah cara untuk mengurangi jumlah simpul yang dieksplorasi dalam algoritma MinMax. Dengan alpha-beta, waktu yang diperlukan dalam pencarian akan berkurang dengan cara membatasi waktu yang terbuang percuma pada saat mengevaluasi pohon permainan. Implementasi alpha-beta akan memberikan jalur terbaik dalam setiap kemungkinan permainan dalam pohon permainan yang terbentuk.
Dalam algoritma alpha-beta, urutan jalannya algoritma akan dimulai sama seperti algoritma minmax. Untuk simpul MIN, nilai yang dihitung dimulai dengan +infinity dan akan menurun seiring jalannya permainan. Untuk simpul MAX, nilai akan dihitun gmulai dengan –infinity dan akan menaik seiring berjalannya waktu.
Efisiensi prosedur alpha – beta akan sangat tergantung pada urutan simpul berikutnya dari sebuah simpul yang sedang dieksplorasi. Jika beruntung, maka sebuah simpul MIN akan dianggap sebagai simpul dengan urutan nilai dari rendah ketinggi, dan simpul MAX dari tinggi kerendah. Secara umum, dapat diperlihatkan bahwa dalam kondisi yang terbaik, alpha-beta akan membuka jumlah terminal nodes yang sama dengan MInMax dalam pohon permainan, dengan dua kali lipat tingkat kedalaman pohon.
2. Algoritma Alpha – Beta
Algoritma akan mendapat dua nilai : alpha dan beta, yang akan merepresentasikan nilai minimum untuk MAX, dan nilai maksimum untuk MIN. Pada awalnya nilai alpha adalah – infinity dan beta bernilai awal +infinity. Selama jalannya rekursi, perbedaan nilai alpha dan beta akan semakin mengecil.
Ketika nilai beta menjadi lebih kecil dari alpha, berarti keadaan saat ini bukan merupakan hasil terbaik dari kedua pemain, dan dengan demikian tidak perlu dieksplorasi lebih jauh.
Pseudocode untuk algoritma alpha-beta adalah :
Contoh Alpha Beta Pruning
Kondisi awal dari sebuah keadaan seperti digambarkan pada gambar 2.1 danakan didapatkan hasil dengan metode Alpha Beta Prunning seperti pada 4.2.
Gambar 3.1.2 Aplha Beta Prunning Algoritma
1. Hampiri node pertama pada leaf dengannilai 5, naik ke parent pada level 2 masukkan nilai 5, hampiri 8, karena 8>5 maka ganti parent dengan 8, hampiri 3.
2. Setelah ketiga leaf pertama terhampiri, naik lebih tinggi lagi ke level 1 masukkan nilai 8.
3. Hampiri node keempat pada leaf dengan nilai 9, naik ke parent pada level 2 masukkan nilai 9. Jika kita menghampiri leaf berikutnya, kita mencari yang lebih tinggi dari 9, sementara pada level 1 kita mencari yang lebih kecil dari 8, maka leaf 3 dan 1 kita potong (tidak kita hampiri).
4. Begitu seterusnya hingga kita dapat kan hasil akhir dari tree di atas adalah seperti gambar 3.1.2
Source code
intAlphaBeta(char *successor, int depth, bool man, int alpha, int beta){
intval = heuristic_function(successor);
if (terminal_node(val)) returnval;
char **successors = generate_successors(successor);
if (max) val = INT_MIN;
elseval = INT_MAX;
for (n = 0 ; n <num_successors ; n++){
inttmp = AlphaBeta(successors[n], depth-1, !max, alpha, beta);
if (max){
val = MAX(val, tmp);
if (val>= beta) returnval;
alpha = MAX(alpha, val);
} else{
val = MIN(val, tmp);
if (val<= alpha) returnval;
beta = MIN(beta, val);
} }
returnval;
}
4.1 ALGORITMA PENCARIAN INFORM A. HEURISTIC
Heuristik adalah sebuah teknik yang mengembangkan efisiensi dalam proses pencarian, namum dengan kemungkinan mengorbankan kelengkapan (completeness). Fungsi heuristik digunakan untuk mengevaluasi keadaankeadaan problema individual dan menentukan seberapa jauh hal tersebut dapat digunakan untuk mendapatkan solusi yang diinginkan. Jenis-jenis Heuristic Searching:
1. Generate and Test.
2. HillClimbing.
3. Best First Search.
4. Alpha Beta Prunning,Means-End-Anlysis,Constraint Satisfaction, Simulated Anealing,
DAFTAR PUSTAKA http://makalahsearchingunikama.blogspot.co.id/
https://www.academia.edu/5024807/ARTIFICIAL_INTELLIGENCE_ALGORITMA_PENCAR IAN_Searching_Algorithm_
https://piptools.net/algoritma-hill-climbing/
https://lasigma.wordpress.com/2010/04/25/metode-search/
http://darasinta.blogspot.co.id/2010/12/algoritma-searching.html https://blog.ub.ac.id/dinaarizky/2013/10/22/alpha-beta-pruning/
http://imeldapasaribu.blogspot.co.id/2014/06/pencarian-searching-dalam-algoritma.html http://solikhaton.blogspot.co.id/2014/08/makalah-membahas-tentang-algoritma.html