Anda di halaman 1dari 12

Laporan

Penerapan Algoritma UCS dan A*


Disusun untuk memenuhi tugas pada mata kuliah Kecerdasan Buatan Oleh Ufra Neshia 1107124177 Ivan Rekyan Fitrayana 1107090021 Adyo Subhodo 1107100014

Program Studi Ilmu Komputasi Fakultas Teknik Telkom University 2014

A. Menentukan Peta
Peta yang digunakan dalam laporan ini adalah peta pulau Jawa yang diambil dari Google Map dan digambarkan dalam bentuk graf untuk memudahkan pencarian rute.

Gambar 1: Peta Asli

Gambar 2: Graf

Graf terdiri atas 19 simpul berupa kota-kota yang terletak di daerah jawa, dengan simpul awal (start) adalah Depok dan simpul akhir (Goal) adalah Klaten.

B. Menghitung Nilai Heuristik


Dalam sebagian algoritma pencarian perlu diketahui nilai heuristik, yaitu jarak berupa garis lurus suatu simpul ke simpul akhir, yang didapatkan dengan rumus: Dalam laporan ini, nilai heuristik dicari dengan memanfaatkan koordinat bujur dan lintang (Longitude dan Latitude) kota yang disediakan oleh Google Maps. Nilai heuristik dihitung dengan menjadikan garis lintang sebagai y dan bujur sebagai x, nilai lintang dan bujur kemudian dikonversi ke dalam satuan kilometer dengan mengalikan sebesar 111 km, lalu dihitung nilai d dengan rumus di atas.

Kota Cilegon Serang Jakarta Depok Sukabumi Bandung Pamanukan Subang Indramayu Cirebon Babakan Gerbang Brebes Garut Tasik Purwokerto Kebumen Klaten Semarang Salatiga

Latitude Longitude (x) (y) 106.034 -5.992 106.150 -6.106 106.847 -6.194 106.831 -6.379 106.922 -6.918 107.609 -6.907 107.821 -6.283 107.762 -6.318 108.325 -6.302 108.551 -6.730 108.717 -6.864 109.049 -6.866 107.909 -7.227 108.213 -7.311 109.248 -7.428 109.653 -7.656 110.592 -7.695 110.417 -6.954 110.473 -7.294

Xb-Xa 4.557 4.442 3.744 3.761 3.670 2.982 2.771 2.830 2.267 2.041 1.875 1.542 2.683 2.379 1.344 0.939 0.000 0.175 0.118

Yb-Ya -1.704 -1.589 -1.502 -1.316 -0.777 -0.789 -1.413 -1.377 -1.394 -0.965 -0.831 -0.829 -0.469 -0.384 -0.267 -0.039 0.000 -0.742 -0.401

Xb-Xa (KM) 505.857 493.052 415.615 417.476 407.339 331.045 307.589 314.105 251.606 226.513 208.092 171.185 297.814 264.018 149.168 104.190 0.000 19.436 13.142

Yb-Ya (KM) -189.104 -176.370 -166.671 -146.064 -86.257 -87.544 -156.816 -152.882 -154.700 -107.107 -92.230 -92.008 -52.012 -42.619 -29.655 -4.381 0.000 -82.323 -44.546

h(n) dalam KM 540.047 523.648 447.789 442.291 416.372 342.425 345.257 349.335 295.360 250.559 227.615 194.344 302.322 267.436 152.087 104.282 0.000 84.586 46.444

C. Menentukan Rute Menggunakan Algoritma UCS


procedure UniformCostSearch(Graph, root, goal) node := root, cost = 0 frontier := priority queue containing node only explored := empty set do if frontier is empty return failure node := frontier.pop() if node is goal return solution explored.add(node) for each of node's neighbors n if n is not in explored if n is not in frontier frontier.add(n) else if n is in frontier with higher cost replace existing node with n

Keterangan: Node Frontier Explored Cost : Best Node : Open Node : Closed Node : Jarak

: Suksesor

Langkah penelusuran dengan metode UCS Open Iterasi 0 1 Asal Depok Node Depok Jakarta Serang Sukabumi Subang Jakarta Serang Subang Bandung Jakarta Subang Bandung Cilegon Jakarta Subang Bandung Subang Bandung Pamanukan Bandung Pamanukan Indramayu Pamanukan Indramayu Cirebon Garut Garut Cirebon Jarak/Cost (km) 0 132 104 92,4 144 132 104 144 186,8 132 129,5 144 186,8 132 144 186,8 144 186,8 153,8 186,8 153,8 224,3 153,8 224,3 324,8 252,3 252,3 324,8 Closed Depok Best Node Sukabumi Ubah Parent -

Depok Sukabumi Depok

Depok, Sukabumi Depok, Sukabumi, Serang Depok, Sukabumi, Serang, Cilegon Depok, Sukabumi, Serang, Cilegon, Jakarta Depok, Sukabumi, Serang, Cilegon, Jakarta, Subang Depok, Sukabumi, Serang, Cilegon, Jakarta, Subang, Bandung Depok, Sukabumi, Serang, Cilegon, Jakarta, Subang, Bandung,

Serang

Sukabumi Serang Depok

Cilegon

4 Sukabumi Depok Sukabumi 5 Jakarta Sukabumi Jakarta 6 Subang Jakarta Subang 7 Bandung

Jakarta

Subang

Bandung

Pamanukan

Bandung 8 Pamanukan

Indramayu

Indramayu

219,3

Bandung

Garut

252,3

Indramayu

Cirebon

274,2

Indramayu

Cirebon Babakan

274,2 400,3

10

Garut

Tasikmalaya

305,6

Bandung

Tasikmalaya Babakan

400,3 304,9

11

Cirebon

Brebes

346,5

Garut

Tasikmalaya

400,3

12

Cirebon

Brebes

346,5

Garut

Tasikmalaya Semarang

400,3 519,5

13

Brebes

Salatiga

565,5

Pamanukan Depok, Sukabumi, Serang, Cilegon, Jakarta, Subang, Bandung, Pamanukan, Indramayu Depok, Sukabumi, Serang, Cilegon, Jakarta, Subang, Bandung, Pamanukan, Indramayu, Garut Depok, Sukabumi, Serang, Cilegon, Jakarta, Subang, Bandung, Pamanukan, Indramayu, Garut, Cirebon Depok, Sukabumi, Serang, Cilegon, Jakarta, Subang, Bandung, Pamanukan, Indramayu, Garut, Cirebon, Babakan Depok, Sukabumi, Serang, Cilegon, Jakarta, Subang, Bandung, Pamanukan,

Garut

Cirebon

Babakan

Brebes

Tasikmalaya

Brebes

Semarang Salatiga

519,5 565,5

14 Tasikmalaya Purwokerto 540,3

Brebes

Salatiga

565,5

15

Tasikmalaya

Purwokerto

540,3

Brebes

Salatiga

565,3

16

Purwokerto

Kebumen

738,3

17

Purwokerto

Kebumen

738,3

Indramayu, Garut, Cirebon, Babakan, Brebes Depok, Sukabumi, Serang, Cilegon, Jakarta, Subang, Bandung, Pamanukan, Indramayu, Garut, Cirebon, Babakan, Brebes, Tasikmalaya Depok, Sukabumi, Serang, Cilegon, Jakarta, Subang, Bandung, Pamanukan, Indramayu, Garut, Cirebon, Babakan, Brebes, Tasikmalaya, Semarang Depok, Sukabumi, Serang, Cilegon, Jakarta, Subang, Bandung, Pamanukan, Indramayu, Garut, Cirebon, Babakan, Brebes, Tasikmalaya, Semarang, Purwokerto Depok,

Semarang

Purwokerto

Salatiga

Klaten

Salatiga

Klaten

623,5

18

Sukabumi, Serang, Cilegon, Jakarta, Subang, Bandung, Pamanukan, Indramayu, Garut, Cirebon, Babakan, Brebes, Tasikmalaya, Semarang, Purwokerto, Salatiga Depok, Sukabumi, Serang, Cilegon, Jakarta, Subang, Bandung, Pamanukan, Indramayu, Garut, Cirebon, Babakan, Brebes, Tasikmalaya, Semarang, Purwokerto, Salatiga, Klaten

Jadi rute yang dipilih sesuai algoritma di atas adalah Depok Jakarta Pamanukan Indramayu Cirebon Brebes Salatiga Klaten dengan total jarak 623,7 km.

D. Menentukan Rute Menggunakan Algoritma A*


Algoritma A* adalah algoritma pencarian yang menggabungkan kelebihan Greedy Search (operasi yang lebih ringkas, namun tidak komplit dan tidak optimal) serta Uniform Cost Search (komplit dan optimal namun waktu operasi lama). Hal ini didapatkan dengan menggunakan f(n)=h(n)+g(n), di mana h(n) adalah nilai heuristik yang digunakan dalam pencarian Greedy dan g(n) adalah nilai asli dari suatu node ke goal yang digunakan dalam Uniform Cost.

1. 2. 3. 4. 5.

Langkah pencarian: Dari starting point/initial node, akan dibentuk suatu himpunan simpul2 yang akan diperiksa nilainya (open). Dari simpul-simpul open akan diambil yang nilai f(x) terkecil dan dipindahkan ke himpunan simpul closed, simpul yang dipindahkan ini disebut best node. Tetangga-tetangga best node kemudian akan dibangkitkan, dimasukkan ke open node untuk diperiksa nilai f(x). Nilai f(x) di bagian open selalu diupdate setiap kali Best Node dipindah ke closed Pencarian berhenti saat f dan g goal node bernilai paling kecil.

function A*(start,goal) closedset := the empty set // Simpul yang sudah diperiksa (closed) openset := {start} //simpul-simpul yang hendak diperiks (open) came_from := the empty map // peta/jalur suatu node g_score[start] := 0 // Biaya jalur terbaik //Estimasi biaya dari awal ke akhir melalui y f_score[start] := g_score[start] + heuristic_cost_estimate(start, goal) while openset is not empty current := the node in openset having the lowest f_score[] value if current = goal return reconstruct_path(came_from, goal) remove current from openset add current to closedset for each neighbor in neighbor_nodes(current) if neighbor in closedset continue tentative_g_score := g_score[current] + dist_between(current,neighbor) if neighbor not in openset or tentative_g_score < g_score[neighbor] came_from[neighbor] := current g_score[neighbor] := tentative_g_score f_score[neighbor] := g_score[neighbor] + heuristic_cost_estimate(neighbor, goal) if neighbor not in openset add neighbor to openset return failure function reconstruct_path(came_from, current_node) if current_node in came_from p := reconstruct_path(came_from, came_from[current_node]) return (p + current_node) else return current_node

Tabel Tracing:

i 1

BN Depok

Closed Depok

Suksesor

Open

Ubah Parent? -

Jakarta, Serang, Jakarta Serang Sukabumi, Subang Sukabumi Subang Cilegon, Pamanukan

Serang Sukabumi Subang Cilegon Pamanukan Serang Sukabumi Depok,Jakarta,Pama Subang , Subang Cilegon 3 Pamanukan nukan Indramayu Pamanukan Indramayu Serang Sukabumi Depok,Jakarta,Pama Pamanukan,Indra 4 Subang Subang Cilegon nukan,Subang mayu,Bandung Indramayu Bandung Depok,Jakarta,Pama Serang Sukabumi 5 Indramayu nukan,Subang,Indra Subang,Cirebon Subang Cilegon mayu Bandung Cirebon Serang Sukabumi Depok,Jakarta,Pama Bandung,Babakan, Subang Cilegon 6 Cirebon nukan,Subang,Indra Brebes Bandung Babakan mayu,Cirebon Brebes Depok,Jakarta,Pama Serang Sukabumi nukan,Subang,Indra Subang Cilegon 7 Babakan Garut, Brebes mayu,Cirebon,Baba Bandung Brebes kan Garut Depok,Jakarta,Pama Serang Sukabumi Babakan nukan,Subang,Indra Subang Cilegon 8 Brebes ,Tasik,Semarang,S mayu,Cirebon,Baba Bandung Garut Tasik alatiga kan,Brebes Semarang Salatiga Depok,Jakarta,Pama Serang Sukabumi nukan,Subang,Indra Subang Cilegon 9 Semarang mayu,Cirebon,Baba Salatiga Bandung Garut Tasik kan,Brebes,Semara Salatiga ng,Salatiga Depok,Jakarta,Pama Serang Sukabumi nukan,Subang,Indra Purwokerto,Klate Subang Cilegon 10 Salatiga mayu,Cirebon,Baba n Bandung Garut Tasik kan,Brebes,Semara Purwokerto Klaten ng 2 Jakarta Depok,Jakarta 11 Klaten

Subang tidak diubah parent karena jarak Subang via Pamanukan lebih besar daripada via Depok Indramayu: Tidak, karena jarak Indramayu via Pamanukan lebih kecil daripada dari Subang Subang: Tidak karena jarak dari Depok lebih kecil daripada dari Indramayu Bandung: Tidak karena jarak dari Subang lebih kecil daripada bila parent Bandung diganti menjadi Cirebon Brebes: Tidak, karena jarak Brebes lebih kecil bila parentnya tetap Cirebon daripada Babakan Babakan: Tidak karena jaraknya akan lebih kecil bila parent tetap Cirebon daripada Brebes Salatiga: Tidak karena jaraknya akan lebih kecil bila parent tetap Brebes daripada Semarang

Didapati rute Depok ke Klaten: DepokJakartaPamanukanIndramayuCirebonBrebesSalatigaKlaten Total Jarak = 623.7 KM

E. Perbandingan Kedua Rute yang Didapat


Jumlah Iterasi Nilai Solusi Waktu Complete Optimal

UCS A*

14 11

623.7 623.7

Lebih lama Lebih cepat

Ya Ya

Ya Ya

F. Kesimpulan
Pencarian dengan menggunakan algoritma UCS dan A* akan menghasilkan solusi yang komplit dan optimal. Namun algoritma UCS memiliki waktu komputasi yang lebih tinggi dikarenakan jumlah iterasi yang lebih besar. Karena optimal, maka kedua algoritma menghasilkan solusi yang sama yaitu rute Depok-JakartaPamanukan-Indramayu-Cirebon-Brebes-Salatiga-Klaten dengan jarak tempuh terpendek dibandingkan jalur lain yaitu 627.7 KM.

Anda mungkin juga menyukai