Perbandingan algoritma A dan Dijkstra untuk pencarian jalur terpendek pada Graf Square Lattice

(1)

Oleh:

A Fendi Pratama NIM. 135314113

Program Studi Teknik Informatika

Fakultas Sains dan Teknologi

Universitas Sanata Dharma

Yogyakarta

2017

PERBANDINGAN ALGORITMA A* DAN DIJKSTRAUNTUK

PENCARIAN JALUR TERPENDEK PADA GRAF SQUARE LATTICE

SKRIPSI

Diajukan Untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Komputer


(2)

COMPARISON OF A* AND DIJKSTRA ALGORITHMS FOR SMALLEST PATHFINDING IN SQUARE LATTICE GRAPH

THESIS

Presented as Partial Fulfillment of The Requirements To Obtain Sarjana Komputer Degree

In Informatics Engineering Study Program

By:

A Fendi Pratama NIM. 135314113

Informatics EngineeringStudy Program

Faculty of Science and Technolgy

Sanata Dharma University

Yogyakarta


(3)

HALAMAN PERSETUruAN SKRIPSI

PERBAI{I}INGAI\I ALGORITMA A* DAIY DIJKSTRA UNTUK PENCARIAN JALUR TERPENDEK PADA GRAF'SQUARE I,AITTICE

llI


(4)

PERBANDINGAN ALGORITMA A* DAI{ DIJKSTRA TJNTUK PENCARIAIY JALUR TERPENDEK PADA GRAT SQUARB LATTTICE

Yang Dipersiapkan dan Ditutis Oleh : A Fendi Pratama

r3$14u3

Telah dipertahamkan di depan Panitia Penguji

mdinvehlrr

g-44 I

q4D 5ts- '

4

*u*u**i

*

\--{:

*d

a

qA

-1 f.

Fakultas Sains dan Teknologi


(5)

v

PERNYATAAN KEASLIAN HASIL KARYA

Saya menyatakan dengan sesungguhnya bahwa skripsi yang saya tulis ini tisak memuat karya atau bagian karya orang lain, kecuali yang telah disesbutkan dalam kutipan dan daftar pustaka, sebagaimana hasil karya ilmiah.

Yogyakarta, 14 Juni 2017 Penulis


(6)

vi

LEMBAR PERNYATAAN PERSETUJUAN PUBLIKASI UNTUK KEPENTINGAN AKADEMIS

Yang bertanda tangan di bawah ini, saya mahasiswa Universitas Sanata Dharma Yogyakarta :

Nama : A Fendi Pratama NIM : 135314113

Demi pengembangan ilmu pengetahuan, saya memberikan kepada Perpustakaan Universitas Sanata Dharma karya ilmiah saya yang berjudul :

“PERBANDINGAN ALGORITMA A* DAN DIJKSTRAUNTUK

PENCARIAN JALUR TERPENDEK PADA GRAF SQUARE LATTTICE ”

Beserta perangkat yang diperlukan (bila ada). Dengan demikian saya memberikan kepada Universitas Sanata Dharma untuk menyimpan, mengalihkan dalam bentuk media lain, mengolahnya dalam bentuk pangkalan data, mendistribusikannya secara terbatas, dan mempublikasikannya di internet atau media lain untuk kepentingan akademis tanpa perlu minta ijin dari saya maupun memberikan royality kepada saya selama tetao mencatumkan nama saya sebagai penulis. Demikian peryataan ini saya buat dengan sebenarnya.

Yogyakarta, 14 Juni 2017 Penulis


(7)

vii ABSTRAK

Graf Square Lattice merupakan salah satu bentuk graf yang simpul dan penghubungnya membentuk dimensi jaring-jaring kotak atau persegi. Graf ini sering diimplementasikan untuk membangun jalur pada peta suatu arena permainan. Salah satu permasalahan popular yang muncul pada graf adalah pencarian jalur terpendek. Maka dengan menggunakan teknolgi komputer dapat dibuat sistem yang bisa memberikan solusi jalur terpendek dengan lebih cepat.

Pada pembangunan sistem ini dapat dibuat dengan menerapkan algoritma pathfinding.Ada beberapa algoritma pathfinding yang bisa digunakan dua diantaranya adalah A* dan Dijkstra. Dari kedua algoritma tersebut dapat ditentukan algoritma mana yang bekerja lebih baik, baik dari solusi yang diberikan dan proses kerja. Parameter yang dapat digunakan untuk penilaian kedua algoritma tersebut diantaranya waktu eksekusi, poses looping, simpul dijelajahi yang merupakan parameter proses kerja dan jalur terpendek merupakan parameter solusi.

Hasil yang dicapai adalah bawha algoritma A* dan Dijkstra sama-sama memberikan solusi yang optimal. Kedua algoritma mampu memberikan jalur terpendek dengan ukuran yang sama.Pada proses kerja baik dari Algoritma A* dan Algoritma Dijkstra memiliki keunggulan dan kelemahan masing-masing. A* lebih baik untuk arenadengan halangan yang tidak mengecoh. Dijkstra bisa lebih baik untuk arena dengan halangan yang mengecoh.


(8)

viii ABSTRACT

Graph Square Lattice is one of the forms of graph that vertices and edges form a square webs dimension. These graphs are often implemented to build paths on maps in a game arena.One of the popular topics that appear on graphs is the shortest pathfinding. So by using computer technology can be made system that can provide the shortest path solution more quickly.

To build this system can be made by applying pathfinding algorithm. There are several pathfinding algorithms that can be used two of them are A* and

Dijkstra. From both algorithms can be determined which algorithm works better, both form given solution and work process.Parameters that can be used for the assessment of both algorithms include execution time, looping process, explored nodes which are the working process parameters and the shortest path is the solution parameter.

The result is that the A* and Dijkstra algorithms provide the optimal solution. Both algorithms are able to provide the shortest path of the same size. In the work process both from A* Algortihm and Dijkstra Algorithm have advantages and disadvantages of each. A* Algorithm is better for obstacles that do not deceive. Dijkstra is better for a deceptive obstacle.


(9)

ix

KATA PENGANTAR

Puji syukur saya haturkan kepada Tuhan YME yang telah melimpahkan rahmat dan karunia-Nya, sehingga penulis dapat menyelsesaikan Tugas Akhir dengan judul “Perbandingan Algoritma A* dan Dijkstrauntuk Pencarian Jalur Terpendek pada Graf Square Lattice”.

Dalam menyelesaikan pembuatan program dan laporan Tugas Akhir ini, penulis telah banyak menerima bimbingan, saran dan masukan dari berbagai pihak, baik secara langsung maupun tidak langsung. Pada kesempatan ini penulis menyampaikan banyak terima kasih kepada :

1. Bapak Albertus Agung Hadhiatma M.T. selaku dosen pembimbing yang telah banyak membantu, memberikan bimbingannya dengan sabar danbaik.

2. Ayah, Ibu, dan Kakak yang telah memberi dukungan dalam bentuk materi, non materi, moril, kasih sayang bagi penulis sehingga program dan laporan Tugas Akhir ini dapat terselesaikan dengan baik dan tepat waktu.

3. Sahabat – sahabat dekat saya yang selalu memberikan semangat, dan pencerahan.

4. Teman – teman TI angkatan 2013 yang tidak dapat penulis sebutkan satu per satu.

5. Pihak lain yang tidak dapat penulis sebutkan satu per satu, sehingga Tugas Akhir ini dapat terselesaikan dengan baik.

Penulis menyadari bahwa Tugas Akhir ini masih jauh dari sempurna.Penulis sangat mengharapkan kritik dan saran yang membangun dari pembaca, sehingga suatu saat penulis dapat memberikan karya yang lebih baik.

Akhir kata, penulis memohon maaf apabila ada kesalahan dan kekurangan baik dalam penyusunan laporan Tugas Akhir maupun penyusunan program Tugas Akhir. Penulis berharap semoga Laporan Tugas Akhir ini dapat berguna dan bermanfaat bagi pembaca.


(10)

x DAFTAR ISI

HALAMAN JUDUL ... i

TITTLE PAGE ... ii

HALAMAN PERSETUJUAN SKRIPSI ... iii

HALAMAN PENGESAHAN SKRIPSI ... iv

PERYATAAN KEASLIAN HASIL KARYA... v

LEMBAR PERYATAAN PUBLIKASI ... vi

ABSTRAK ... vii

ABSTRACT ... viii

KATA PENGANTAR ... ix

DAFTAR ISI ... x

DAFTAR GAMBAR ... xiii

DAFTAR TABEL ... xv

DAFTAR GRAFIK ... xvi

BAB IPENDAHULUAN ... 1

1.1 Latar Belakang ... 1

1.2 Rumusan Masalah ... 2

1.3 Batasan Masalah ... 2

1.4 Tujuan Penelitian ... 3

1.5 Manfaat Penelitian ... 3

1.6 Metode Penilitian ... 4

1.7 Sistematika Penulisan ... 5

BAB II LANDASAN TEORI ... 7

2.1 Permainan Labirin ... 7

2.2 Graf Square Lattice ... 8

2.3 Algoritma A* ... 9


(11)

xi

2.3.3 Fungsi Heuristik ... 10

2.3.4 Langkah Algoritma A* ... 11

2.4 Algoritma Dijkstra ... 12

2.4.1 Algoritma Greedy ... 13

2.4.2. Langkah Algoritma Dijkstra ... 14

BAB III PERANCANGAN SISTEM ... 14

3.1 Kebutuhan Sistem ... 15

3.2 Rancangan Use Case ... 17

3.3 Rancangan Algoritma ... 17

3.3.1 Rancangan Kode untuk Algoritma A* ... 18

3.3.2 Rancangan Kode untuk Algoritma Dijkstra ... 18

3.4 Perancangan Struktur Data ... 19

3.5. Perancangan Antarmuka ... 20

3.6 Perancangan Pengujian ... 21

3.7 Simulasi Manual Penerapan Algoritma ... 21

3.7.1 Simulasi Algoritma A* ... 21

3.7.2 Simulasi Algoritma Dijkstra ... 27

BAB IV IMPLEMENTASI DAN ANALISIS ... 30

4.1 Implementasi Sistem ... 30

4.1.1 Implementasi Rancangan Tampilan ... 30

4.1.2 Implementasi Algoritma Dijkstra dan A* ... 32

4.2 Pengujian dan Analisa ... 36

4.2.1 Pengujian Arena Solid dan Simetris ... 38

4.2.2 Pengujian Arena TidakSoliddan Simetris ... 42

4.2.3 Pengujian Arena Solid danRandom Obstacle ... 47

4.2.4 Pengujian Arena TidakSoliddan Random Obstacle ... 57

4.2.5 Pengujian Arena TidakSoliddan Random ObstacleUkuran Diperbesar ... 62


(12)

xii

4.2.7 Pengujian dengan Banyak Target ... 64

4.2.8 Analisa... 65

BABVKESIMPULAN DAN SARAN ... 69

5.1 Kesimpulan ... 69

5.2 Saran ... 69


(13)

xiii

DAFTAR GAMBAR

Gambar 2.1 Contoh Permainan Labirin Pacman ... 7

Gambar 2.2 Graf Square Lattice ... 8

Gambar 3.1.c Rancangan Grid Matrix ... 16

Gambar 3.2 Use Case Alat Pengujian ... 17

Gambar 3.4 Linked List Penelusuran Ke Node Awal ... 19

Gambar 3.5 Tampilan Papan Permainan dan Pengujian ... 20

Gambar 3.7.1.1 Visualisasi A* Langkah 1 ... 22

Gambar 3.7.1.2 Visualisasi A* Langkah 2 ... 22

Gambar 3.7.1.3 Visualisasi A* Langkah 3 ... 23

Gambar 3.7.1.4 Visualisasi A* Langkah 4 ... 23

Gambar 3.7.1.5 Visualisasi A* Langkah 5 ... 24

Gambar 3.7.1.6.a Visualisasi A* Langkah 6 ... 24

Gambar 3.7.1.6.b Kemungkinan Jalur Terpendek ... 25

Gambar 3.7.1.7 Visualisasi A* Langkah 7 ... 25

Gambar 3.7.1.8.a Visualisasi A* Langkah 8 ... 26

Gambar 3.7.1.8.b Visualisasi Runut Balik ... 26

Gambar 3.7.2.1 Inisiasi Posisi Awal ... 27

Gambar 3.7.2.2 Langkah Dijkstra 2 ... 27

Gambar 3.7.2.3 Langkah Dijkstra 3 ... 28

Gambar 3.7.2.4 Langkah Dijkstra 4 ... 28

Gambar 3.7.2.5 Langkah Dijkstra 5 ... 29

Gambar 4.1.1 Tampilan papan permainan dan Fasilitas Pencarian jalur terpendek ... 31

Gambar 4.2.1.1 Arena Solid dan Simetris... 38

Gambar 4.2.1.2 Pencarian Algoritma A* Pengujian 1 ... 39

Gambar 4.2.1.3 Pencarian Algoritma Dijkstra Pengujian 1 ... 39

Gambar 4.2.2.1 Arena TidakSoliddan Simetris ... 42


(14)

xiv

Gambar 4.2.2.3 Pencarian Algoritma Dijkstra Pengujian 2 ... 43

Gambar 4.2.3.1 Arena Soliddan Random Obstacle... 47

Gambar 4.2.3.2 Pencarian Algoritma A* Pengujian 3 ... 48

Gambar 4.2.3.3 Pencarian Algoritma Dijkstra Pengujian 3 ... 48

Gambar 4.2.4.1 Arena TidakSolid danRandom Obstacle ... 51

Gambar 4.2.4.2 Pencarian Algoritma A* Pengujian 4 ... 52

Gambar 4.2.4.3 Pencarian Algoritma DijkstraPengujian 4 ... 52

Gambar 4.2.6.1 Arena Halangan Berbentuk Cincin ... 51

Gambar 4.2.6.2 Pencarian Algoritma A* Pengujian 6 ... 52

Gambar 4.2.6.3 Pencarian Algoritma Dijkstra Pengujian 6 ... 52

Gambar 4.2.7.1 Arena dengan Banyak Target ... 64

Gambar 4.2.7.2 Pencarian Algoritma A* Pengujian 5 ... 64


(15)

xv

DAFTAR TABEL

Tabel 4.2.1.1 Tabel PengujianArena Solid dan Simetris ... 40

Tabel 4.2.2.1 Tabel PengujianArena TidakSolid dan Simetris ... 44

Tabel 4.2.3.1 Tabel Pengujian Arena Solid dan Random Obstacle ... 48

Tabel 4.2.4.1 Tabel Pengujian Arena Tidak Solid dan Random Obstacle ... 53

Tabel 4.2.5.1 Tabel Pengujian Arena Tidak Solid dan Random Obstacle Ukuran Diperbesar ... 56

Tabel 4.2.6.1 Tabel Pengujian Arena Halangan Berbentuk Cincin ... 61

Tabel 4.2.8.1 Rata-Rata Penurunan Besaran Proses Dari Algoritma Dijktra ke A* ... 66


(16)

xvi

DAFTAR GRAFIK

Grafik 4.2.1.1 Perbandingan Node Visitation 30 Kali Pengujian 1 ... 41

Grafik 4.2.1.2 Perbandigan Proses Looping 30 Kali Pengujian 1 ... 42

Grafik 4.2.1.3 Perbandingan Waktu Pencarian 30 Kali Pengujian 1 ... 42

Grafik 4.2.2.1 Perbandingan Node Visitation 30 Kali Pengujian 2 ... 45

Grafik 4.2.2.2 Perbandigan Proses Looping 30 Kali Pengujian 2 ... 46

Grafik 4.2.2.3 Perbandingan Waktu Pencarian 30 Kali Pengujian 2 ... 46

Grafik 4.2.3.1 Perbandingan Node Visitation 30 Kali Pengujian 3 ... 50

Grafik 4.2.3.2 Perbandigan Proses Looping 30 Kali Pengujian 3 ... 50

Grafik 4.2.3.3 Perbandingan Waktu Pencarian 30 Kali Pengujian 3 ... 51

Grafik 4.2.4.1 Perbandingan Node Visitation 30 Kali Pengujian 4 ... 54

Grafik 4.2.4.2 Perbandigan Proses Looping 30 Kali Pengujian 4 ... 55

Grafik 4.2.4.3 Perbandingan Waktu Pencarian 30 Kali Pengujian 4 ... 55

Grafik 4.2.5.1 Perbandingan Node Visitation 30 Kali Pengujian 5 ... 58

Grafik 4.2.5.2 Perbandigan Proses Looping 30 Kali Pengujian 5 ... 58

Grafik 4.2.5.3 Perbandingan Waktu Pencarian 30 Kali Pengujian 5 ... 59

Grafik 4.2.6.1 Perbandingan Node Visitation 30 Kali Pengujian 6 ... 62

Grafik 4.2.6.2 Perbandigan Proses Looping 30 Kali Pengujian 6 ... 63


(17)

1

BAB I

PENDAHULUAN

1.1Latar Belakang

Graf Square Lattice merupakan salah satu bentuk graf yang simpul dan penghubung-nya membentuk dimensi kotak atau persegi. Graf ini sering diimplementasikan untuk membangun jalur pada peta untuk arena permainan.Ghost Words Labyrinth merupakan permainan labirin dimana pemainakan ditugaskan untuk menyusun kata dari huruf yang secara beruntun akan muncul pada peta labirin. Dalam membangun arena labirin permainan ini diimplementasikan Graf Square Lattice. Rintangan dari game ini adalah dinding-dinding yang ada pada arena permainan. Skor permainan akan bergantung seberapa cepat pemain dapat mendapatkan huruf, sehingga pemain harus mencari jalur yang efektif untuk mendapatkan huruf yang dicari.

Dari masalah di atas maka bisa dibuat fasilitas pencari jalan yang dapat membantu pemain menyelesaikan misi.Menurut buku Artificial Intelligence for Games karangan Ian Millington algoritma pathfinding bisa dipakai sebagai solusi untuk menyelesaikan misi permainan yang membutuhkan pencarian jalur terpendek.Ada banyak algoritma yang dapat digunakan untuk pencarian jalur beberapa diantaranya adalah algoritma A* dan algoritma Dijkstra.

Algoritma A* diperkenalkan pertama kali oleh Peter Hart, Nils Nilsson dan Bertram Raphael dari Institut Riset Stanford(Stanford Reseach Institute) pada tahun 1968. Algoritma A* merupakan algoritma heuristik sehingga pencariannya akan terbimbing. Sedangkan untuk algoritma Dijksta diperkenalkan oleh Edsger Dijkstra pada tahun 1956.Algoritma Dijkstra sendiri bersifat greedy sehingga pencarianya tidak terbimbing.(Reddy, 2013).

Dari kedua algoritma yang disebutkan di atas ini dapat dicari algoritma mana yang bekerja lebih baik.Dalam buku Analysis of Algortihms karangan


(18)

Robert Sedgewick bahwa algoritma dapat dikatakan bekerja lebih baik jika kita dapat melihat nilai performa yang didapatkan dari masing algoritma. Kemudian pada bukuAftificial Intelligence for Games karangan Ian Millington performa kerja algoritma Patfinding dapat dinilai dengan melihat banyaknya proses kerja dan solusi yang diberikan.

Merujuk permasalahan di atas peneliti akan membuat prototipe dari papan Ghost Words Labyrinth dan membuat fasilitas pencarian jalur terpendek dengan algoritmaA* dan Dijkstra. Kemudian meneliti performa dari algoritma A* dan Dijkstra yang akan dipakai, sehingga perbandingan kedua algoritma tadi dapat diketahui mana yang lebih baik.

1.2Rumusan Masalah

Berdasarkan latar belakang diatas, maka dapat ditarik beberapa rumusan masalah sebagai berikut :

1. Bagaimana hasil perbandingan untuk solusi jalur terpendek yang diberikan algoritma A* maupun Dijkstra?

2. Bagaimana hasil perbandingan dari proses kerja untuk algoritma A* dan Dijkstra?

1.3Batasan Masalah

Batasan-batasan masalah dalam dalam penelitian ini antara lain :

1. Graf yang dipakai untuk membuat jalur pada arena adalah Square Lattice sehingga hanya memungkinkan jalur vertikal dan horizontal. 2. Peta arena dibuat secara manual dan tidak dibuat secara otomatis. 3. Penelitian difokuskan pada perbandingan kinerja Algoritma A* dan

Dijkstra. Penelitian tidak menitikberatkan pada RealGame Development , tidak melakukan pembahasan dan analisa game yang meliputi antarmuka, usability testing, skenario / jalan cerita game.


(19)

4. Game ini adalah prototipe yang digunakan sebagai media untuk menguji dan mengukur kinerja Algoritma A* dan Dijkstra.

1.4Tujuan Penelitian

Tujuan yang akan dicapai dari penelitian ini adalah mengetahui perbandingan performa algortima A* dan Dijkstra baik dari solusi yang diberikan dan proses kerja yang dilakukan untuk mencari jalur terpendek pada graf dengan tipe Square Lattice pada suatu arena permainan.

1.5Manfaat Penelitian

Manfaat yang dapat diperoleh dari penilitian dapat diuraikan sebagai berikut :

1. Bagi Peneliti

Bisa menambah wawasan keilmuan kepada peniliti dalam menerapkan algoritma untuk memberikan solusi pada suatu permainan.Kemudian bisa menambah pengetahuan mengenai perbandingan algoritma yang diterapkan.

2. Bagi Peneliti Berikutnya

Dapat dijadikan sebagai bahan pertibangan atau dikembangkan lebih lanjut, serta referensi terhadap penelitian sejenis.


(20)

1.6Metode Penelitian

Dalam melakukan penelitian ini langkah-langkah yang dilakukan adalah sebagai berikut :

1. Studi Pustaka

Pada langkah ini peneliti mempelajari teori-teori melalui buku, artikel, jurnal yang berkaitan dengan perancangan permainan komputer, algoritma A*, Algoritma Dijkstra, dan buku referensi dalam membangun aplikasi dengan menggunakan HTML5 dan pemrograman Javascripgt. 2. Perancangan Sistem

Peneliti melakukan perencanaan alat uji yang akan digunakan sebagai alat penelitian. Perancangan sistem ini akan meliputi skenario permainan, perancangan kebutuhan, use case, rancangan struktur data, rancangan algoritma, serta rancangan antarmuka dari aplikasi yang akan dibuat.

3. Pembangunan Sistem

Pada tahap ini peneliti akan membangun alat uji yakni simulasi pencarian jalur permainan Ghost Words Labyrinth berdasarkan rancangan yang telah dibuat.

4. Pengujian

Pada Bagian ini peniliti akan melakukan pengujian dengan melihat perbadingan efektifitas algoritma A* dan Dijkstra dengan menjalankan alat uji yang telah dibuat.


(21)

5. Evalusi dan Analisis Hasil

Peniliti melakukan penarikan kesimpulan setelah menganalisis data hasil pengujian.

1.7 Sistematika Penulisan

Sistematika penulisan proposal tugas akhir ini terbagi atas lima bab dengan garis besar sebagai berikut :

BAB I PENDAHULUAN

Berisi gambaran umum dari penelitian. Pendahulan terdiri dari Latar Belakang, Rumusan Masalah, Batasan Masalah, Tujuan Penelitian, Manfaat Penelitian, Metode Penelitian dan Sistematika Penulisan.

BAB II LANDASAN TEORI

Berisi teori-teori yang berhubungan dengan permainan, algoritma A* dan Dijkstra yang digunakan untuk pencarian jalur terpendek.

BAB III PERANCANGAN SISTEM

Berisi analisis teori-teori yang digunakan dan bagaimana menerjemahkannya ke dalam sistem yang hendak dibuat dan membahas tentang perancangan kebutuhan sistem, pemilihan algoritma, desain user interface program, dan rancangan pengujian sistem.


(22)

BAB IV IMPLEMENTASI DAN ANALISIS

Bab ini memuat hasil riset/implementasi, dan pembahasan/analisis dari riset tersebut yang sifatnya terpadu.

BAB V KESIMPULAN DAN SARAN

Kesimpulan merupakan peryataan singkat dan tepat yang dijabarkan dari hasil analisis kegiatan riset/implementasi dalam penyusunan skripsi. Saran memuat aktifitas yang dilakukan untuk mengembangkan kinerja sistem saat ini.


(23)

7 BAB II

LANDASAN TEORI

2.1Permainan Labirin

Permainan labirin adalah salah satu jenisatau genre dari pemainan komputer yang cukup populer di dunia. Permainan ini merupakann cabang permainan puzzle dalam bentuk percabangan jalan yang kompleks dan memiliki banyak jalan yang buntu. Tujuan dari permainan labirin adalah pemain harus mencari jalan keluar dari suatu pintu masuk menuju pintu keluar.Bisa juga pemain harus menyelesaikan suatu misi atau tugas dengan mejelajahi labirin yang telah disediakan.

Permainan labirin biasanya bersifat single-user atau dimainkan oleh satu orang pemain.Salah satu contoh misi yang harus diselesaikan pada permainan labirin adalah mengumpulkan sejumlah objek yang disebarkan di dalam peta labirin. Dimana objek yang dikumpulkan akan menjadi scoring atau penilaian dalam permainan labirin.(Rina, 2013)

Gambar 2.1 Contoh Permainan Labirin Pacman

Arena pada game labirin biasanya menerapkan graf untuk membangun lintasan-lintasan yang ada. Graf tersebut membentuk jaring-jaring ubin membentuk persegi atau bisa disebut Square Lattice Graph. Permaslahan yang muncul adalah bagaimana mendapatkan jalur terpendek untuk mendapat target pada game. Dengan menggunakn algoritma pathfinding masalah itu bisa selesai.


(24)

Pada penelitian akan dipakai dua algoritma yang bisa dipakai untuk memcahkan masalah tersebut yaitu A* atau Dijkstra.(Angga, 2013)

2.2Graf Square Lattice

Secara definitif graf merupakan suatu pasangan dua himpunan dari elemen yang disebut titik, atau simpul, vertex dan pasang terurut dari simpul yang disebut ruas atau garis, atau ruas, atau edge. Square Lattice Graph merupakan salah satu bentuk dari Lattice Graph. Menurut Beouwer, A.E. (1999) graf lattice atau bisa disebut graf jaring atau graf grid merupakan graf yang memiliki gambar yang disematkan di ruang euclidean, graf ini biasanya membentuk ubin. Simpul pada graf ini biasanya menyimpan data koordinat sehinnga meskipun kedua simpul tidak terhubung dengan vertex secara langsung perkiraan jarak dari kedua simpul bisa diketahui dengan pendekatan jarak tertentu.

Square Lattice Graph adalah graf lattice yang jaring-jaring ubinya membentuk kotak. Garis atau edge pada graph menyimbolkan apakah kedua simpul saling terhubung. Graf Square Lattice dapat digambarkan sebagai berikut.

Gambar 2.2 Graf Square Lattice

Simpul yang ada di graf diatas meyimpan koordinat x dan y, dari hal itu yang meyatakan graf tersebut terdapat pada sebuah ruang euclidean.


(25)

2.3Algoritma A*

Algoritma A* adalah algoritma yang ditemukan oleh Hart, Nilsson, dan Raphael pada tahun 1968. Algoritma A* merupakan salah satu algoritma Branch & Bound atau disebut juga sebagai sebuah algoritma untuk melakukan pencarian solusi dengan menggunakan informasi tambahan (heuristik) dalam menghasilkan solusi yang optimal.(Hapsari,2011)

2.3.1Terminologi Dasar Algoritma A*

Beberapa terminologi dasar yang terdapat pada algoritma ini adalah starting point, current node, simpul, neighbor node, open set , closed set , came from, harga (F), walkabiltiy, target point.

Starting point adalah sebuah terminologi untuk posisi awal sebuah benda.Current node adalah simpul yang sedang dijalankan dalam algoritma pencarian jalan terpendek.Simpul adalah petak-petak kecil sebagai representasi dari area pathfinding.Bentuknya dapat berupa persegi, lingkaran, maupun segitiga.Neighbor node adalah simpul-simpul bertetangga dengan current node.

Open set adalah tempat menyimpan data simpul yang mungkin diakses dari starting point maupun simpul yang sedang dijalankan. Closed set adalah tempat menyimpan data simpul sebelum current node yang juga merupakan bagian dari jalur terpendek yang telah berhasil didapatkan. Came from adalah tempat menyimpan data ketetanggan dari suatu simpul, misalnya y came from x artinya neighbor node y dari current node x.

Harga (F) adalah nilai yang diperoleh dari penjumlahan nilai G, jumlah nilai tiap simpul dalam jalur terpendek dari starting point ke current node, dan H adalah jumlah nilai perkiraan dari sebuah simpul ke target point. Target point yaitu simpul yang dituju dan H inilah merupakan fungsi heuristik yang digunakan.Kemudian, Walkability adalah sebuah atribut yang menyatakan apakah sebuah simpul dapat atau tidak dapat dilalui oleh current node.


(26)

2.3.2Fungsi Heuristik

Algoritma A* merupakan teknik heuristik dan membantu penyelesaian persoalan.Heuristik adalah penilai yang memberi harga pada tiap simpul yang memandu A* mendapatkan solusi yang diinginkan. Dengan heuristik yang benar, maka A* pasti akan mendapatkan solusi (jika memang ada solusinya) yang dicari. Dengan kata lain, heuristik adalah fungsi optimasi yang menjadikan algoritma A* lebih baik dari algoritma lainnya. Namun heuristik masih merupakan estimasi/perkiraan biasa saja, sama sekali tidak ada rumus khususnya. Artinya setiap kasus memiliki fungsi heuristik yang berbeda – beda.Nilai ongkos pada setiap simpul n menyatakan taksiran ongkos termurah lintasan dari simpul n ke simpul target (target node), yaitu :

F(n) = nilai taksiran lintasan termurah dari simpul status n ke status tujuan Dengan kata lain, F(n) menyatakan batas bawah (lower bound) dari ongkos pencarian solusi dari status n. Fungsi heuristik yang terdapat pada algoritma A* untuk menghitung taksiran nilai dari suatu simpul dengan simpul yang telah dilalui adalah :

Dimana:

F(n) = ongkos untuk simpul n

G(n) = ongkos mencapai simpul n dari akar

H(n) = ongkos mencapai simpul tujuan dari simpul n (heuristik).

Fungsi H ini dapat dihitung menggunakan rumus pendekatan jarak salah satunya yang dapat dipakai adalah Manhattan Distance. Rumus Manhattan Distanceuntuk mencari fungsi Heuristik H dapat formulasikan sebagai berikut :


(27)

Dimana :

H(n) = Perkiraan heuristik Dari simpul n ke target Xt = Koordinat X untuk simpul target

Xn = Koordinat X untuk simpul n (sedang dijelajahi) Yt = Koordinat Y untuk simpul target

Yn = Koordinat Y untuk simpul n (sedang dijelajahi)

2.3.3Langkah Algoritma A*

Menurut Eranki Rajiv(2002) dari MIT mengenai algoritma A* secara ringkas langkah demi langkahnya adalah sebagai berikut :

1. Inisiasi Open list dan Inisiasi Closed List.

2. Tambahkan starting point ke dalam open list dan set nilai f = g+h dimana g = 0 dan h dengan menggunakan rumus ii.

3. Lakukan looping jika open list tidak kosong. Jika kosong pencarian selesai.

4. Ambil open list dengan f terkecil sebagai current.

5. Jika current adalah node tujuan, hentikan pencarian dan return

pathnya.

6. Generatesemua simpul yang bertetangga dengan current yang

walkable atau dapat dijelajahi. Node – node ini disebut suksesor. 7. Loop semua suksesor pada node current.

8. Set nilai g untuk suksesor sama dengan current.g ditambah dengan jarak antara suksesor dengan current.

9. Set nilai h (heuristik) untuk suksesor dari node tujuan ke suksesor dengan rumus ii.

10. Set nilai f sama dengan g ditambah nilai h pada suksesor seperti rumus i.

11. Jika sebuah node dengan posisi yang sama dengan suksesor ada di dalam close list dan mempunyai nilai f yang lebih kecil dari suksesor maka abaikan suksesor tersebut.


(28)

12. Jika suksesor mempunyai kondisi selain pada langkah 11 maka tambahkan suksesor ke dalam open list.

13. Ulangi langkah 7 pada semua suksesor.

14. Tambahkan nodecurrent ke dalam closed list.

15. Temukan node yang ada di dalam open list dengan nilai F paling kecil , kembali ke langkah 3.

2.4Algoritma Dijkstra

Sudah banyak algoritma yang bisa digunakan untuk pencarian rute terpendek. Tidak bisa dipungkiri Dijkstra masih menjadi salah satu yang populer dari sekian banyak algoritma pencarian jalur terpendek.Algoritma Dijkstra dinamakan sesuai dengan nama penemunya, seorang ilmuwan komputer berkebangsan Belanda yang bernama Edsger Dijkstra pada tahun 1956, adalah algoritma yang digunakan untuk mencari lintasan terpendek pada sebuah graf berarah dan tidak berarah. Ian Millington (2006) pada bukunya berjudul Artificial Inteligence for Games menyebut algoritma dijkstra sebagai versi ringkas algoritma A*. Keringkasan yang dimaksud adalah bahwa keduanya memiliki kesamaan dalam proses pencarian rute terdekat, hanya saja pada algoritma Dijkstra fungsi heuristik tidak di perhitungkan sebagaimana yang dilakukan oleh A*.(Setiawan, 2015).

Cara kerja algoritma Dijkstra memakai strategi greedy, dimana pada setiap langkah dipilih sisi dengan bobot yang paling kecil yang menghubungkan sebuah simpul yang sudah terpilih dengan simpul lain yang belum terpilih.


(29)

2.4.1 Algoritma Greedy

Algoritma greedy merupakann metode yang paling populer untuk memecahkan persoalan optimasi.Persoalan Optimasi adalah persoalan mencari solusi yang paling optimum.Hanya ada dua macam persoalan optimasi, yaitu maksimasi dan minimasi.

Algoritma greedy adalah algoritma yang memecahkan masalah langkah per langkah . Pada setiap langkah :

1. Mengambil pilihan yang terbaik yang dapat diperoleh pada saat itu tanpa memperhatikan konsekuensi ke depan.

2. Berharap bahwa dengan memilih optimum local pada setiap langkah akan berakhir dengan optimum global.

Element-elemen algoritma greedy :

1. Himpunan kandidat (C), berisi elemen-elemen pembentuk solusi. 2. Himpunan solusi (S), berisi kandidat-kandidat yang terpilih sebagai

solusi persoalan.

3. Fungsi seleksi, memilih kandidat yang paling memungkinkan mencapai solusi optimal. Kandidat yang sudah dipilih pada suatu langkah tidak pernah dipertimbangkan lagi pada langkah selanjutnya. 4. Fungsi kelayakan, memeriksa apakah fungsi suatu kandidat yang telah

dipilih dapat memberikan solusi yang layak, yakni kandidat tersebut bersama-sama dengan himpunan solusi yang sudah terbentuk tidak melanggar kendala (constraints) yang ada. Kandidat yanglayak dimasukkan ke dalam himpunan solusi,sedangkan kandidat yang tidak layak dibuang dantidak pernah dipertimbangkan lagi.

5. Fungsi Obyektif, fungsi yang memaksimumkan atau meminimumkan nilai solusi(misalnya panjang lintasan, keuntungan, dan lain-lain).


(30)

Algoritma greedy melibatkan pencarian sebuah himpunan bagian, S, dari himpunan kandidat, C, yang dalam hal ini, S harus memenuhi beberapa kriteria yang ditentukan, yaitu menyatakan suatu solusi dan S dioptimasi oleh fungsi obyektif.

2.4.2 Langkah Algoritma Dijkstra

Algoritma Dijkstra pada dasarnya menggunakan strategi greedy. Pada setiap langkah, ambil sisi yang berbobot minimum yang menghubungkan sebuah simpul yang sudah terpilih dengan sebuah simpul lain yang belum terpilih. Lintasan dari simpul asal ke simpul yang baru haruslah merupakan lintasan yang terpendek diantara semua lintasannya ke simpul-simpul yang belum terpilih.

Algoritma secara ringkas langkahnya dapat dijelaskan sebagai berikut : 1. Inisiasi open list dan close list.

2. Setstarting node ke dalam open list dan set cost sama dengan 0. 3. Lakukan looping jika open list tidak kosong. Jika kosong pencarian

selesai.

4. Ambil open list dengan cost terkecil sebagai current.

5. Jika Suksesor adalah node tujuan, hentikan pencarian dan return

pathnya.

6. Generatesemua simpul yang bertetangga dengan current yang

walkable atau dapat dijelajahi. Node – node ini disebut suksesor. 7. Loop semua suksesor pada node current.

8. Set cost pada suksesor dengan nilai cost current ditambah jarak antara suksesor dengan current.

9. Tambahkan suksesor tersebut ke dalam open list. 10. Ulangi langkah ke 7 untuk semua suksesor. 11. Tambahkan current ke dalam closed list.

12. Temukan node yang ada di dalam open list dengan nilai cost paling kecil , kembali ke langkah 3.


(31)

15 BAB III

PERANCANGAN SISTEM

Pada bab ketiga penulisan Tugas Akhir ini dibagi menjadi 7 subbab. Bagian pertama kebutuhan sistem yang akan dipakai untuk membangun dan menjalankan aplikasi. Bagian kedua adalah diagram use case yang memperlihatkan kegiatan user terhadap aplikasi. Bagian ketiga adalah rancangan algoritma yang akan digunakan berupa pseudocode dari algoritma A* dan Dijkstra. Bagian keempat berisi rancangan struktur data dari aplikasi yang dibuat.Bagian kelima merupakan rancangan antarmuka dari aplikasi yang dibuat. Bagian keenam merupakan rancangan pengujian yang akan dilakukan. Bagian ketuju berisi penerapan algoritma yang memperlihatkan kerja dari algoritma A* dan Dijkstra.

3.1Kebutuhan Sistem

Secara umum kebutuhan yang diperlukan dalam membangun prototype Ghost Words Labyrinth dengan fasilitas pencarian jalurnya meliputi kebutuhan perangkat lunak, kebutuhan perangkat keras dan kebutuhan data. Kebutuhan yang diperlukan dalam sistem dapat jabarkan sebagai sebagi berikut:

a. Perangkat Lunak

Pada pembuatan permainan Ghost Words Labyrinth peneliti akan menggunakan sistem operasi windows 7. Kemudian untuk membangun sistem akan digunakan text editor Sublime dengan menggunakan bahasa pemrograman Javascript dan HTML5, serta menggunakan web browser Google Chrome untuk menjalankan sistem.

HTML5 merupakan bahasa markah generasi ke 5 yang diciptakan World Wide Web Consortium (Konsortium Waring Wara Wenua).HTML5 mempunyai dukungan untuk teknologi multimedia terbaru, sehingga mudah


(32)

dibaca oleh manusia dan dimengerti oleh mesin.Javascript sendiri merupakanbahasa pemrogrman tingkat tinggi dan dinamis yang dijalankan pada sisi client. Kode Javascript sendiri langsung diterjemahkan oleh web browser.

b. Perangkat Keras

Perangkat keras yang akan dipakai pada penelitian ini memiliki spesifikasi sebagai berikut

 Processor Intel Pentium B960 Dual Core 2GHz RAM 4 GB  Hardisk 1 GB

 Keybord dan Mouse

c. Data

Pada penelitian ini akan dibutuhkan data berupa kata-kata. Kata-kata ini akan dipakai untuk misi dalam prototype permainan Ghost Words Labyrinth. Kemudian data lainnya adalah objek animasi untuk karakter pemain dan karakter, serta peta labirin yang akan dipakai sebagai map dari game yang direpresentasikan sebagai graf berbentuk grid matrix atau bisa disebut (Square Lattice Graph)dimana 1 melambangkan dindingyang tidak bisa dilalui dan 0 melambangkan jalan pada labirin dengan dimensi matrix.


(33)

17

3.2Rancangan Use Case

Use Case dari aplikasi yang dibuat dapat digambarkan sebagai berikut:

Gambar 3.2 Use Case Alat Pengujian

Terdapat 1 user dimana peneliti yang melakukan penelitian dengan pathfinfing dengan algoritma A* dan Dijkstra. Peneliti akan menggunakan fasilitas pencari jalur terpendek A* dan Dijkstra yang akan menampilkan simulasi dan data pengujian berupa runtime, open node(node yang dijelajahi) dan best path(jalur terpendek).

3.3Rancangan Algoritma

Dalam membangun fasilitas pencarian jalur terpendek maka dibutuhkan algoritma yang mampu memberikan solusi tersebut, maka untuk penelitian ini akan dipakai algoritma algoritma A* dan Dijkstra dimana keduanya akan memberi solusi untuk pencarian jalur terpendek. Dimana nantinya akan dilakukan penelitian pada segi performa dari kedua algoritma tersebut. Untuk perancangan

Peneliti

Melihat Performa Algoritma A* dan


(34)

algoritma dapat diuraikan sebagai berikut. 3.3.1 Rancangan Kode untuk Algoritma A*

Pseudocode algoritma A* dapat diuraikan sebagai berikut :

3.3.2 Rancagan Kode untuk Algoritma Dijkstra

Adapun pseudocode dari algoritma dijkstra dapat diuraikan sebagai berikut:

\

initialize the open list initialize the closed list

put the starting node on the open list set F = G+ H where G = 0 and H = distance from goal to open list

while the open list is not empty set node with the least f as current

if current is the goal, stop the search return the path generate all successors and set current as their parents for each successor

successor.g = current.g + distance between successor and q successor.h = distance from goal to successor

successor.f = successor.g + successor.h

if a node with the same position as successor is in the CLOSED list which has a lower f than successor, skip this successor

otherwise, add the node to the open list end for

push current on the closed list

find the node with the least f on the open list end while

initialize the open list initialize the closed list

put the starting node on the open list set the cost is 0 while the open list is not empty

set node with the least cost as current

generate all successors and set current as their parents for each successor

if successor is the goal, stop the search return the path successor.cost = q.cost + distance between successor and q add the node to the open list

end for

push current on the closed list

find the node with the least cost on the open list, end while


(35)

19

Linked List adalah suatu struktur data linier.Berbeda dengan array yang juga merupakan struktur data linier dan tipe data komposit, linked list dibentuk secara dinamik. Pada saat awal program dijalankan elemen linked list belum ada. Elemen linked list (disebut node) dibentuk sambil jalan sesuai instruksi. Linked list digunakan untuk menyimpan alur dari path dari end node menuju start node melalui parent – parent nodenya dalam proses runut balik ke node awal.

Misal Start Node di koordinat (19,11) dan End Node di (16,13) maka pada pencarian tersebut disetiap node yang dijelajahi akan di disimpan ke dalam array dengan index sesuai koordinatnya. Ketika Algoritma sudah menemukan jarak terpendek maka akan dilihat index [x][y] nya kemudian didalam array tersebut sudah terbentuk link list yang digunakan untuk merunut node tersebut dari node awal. Link listnya dimulai dari End Node ditelusur parent - parent nya hingga sampai ke start node.

Untuk koordinat di atas maka dimulai dari Object Node (16,13) yang menunjuk parent ke node (17,13) , node (18,13) menunjuk parent node(19,13) , node (19,13) menunjuk ke parent node (19,12) kemudian node (19,12) menunjuk ke parent node (19,11). Jadi itulah menjadi jalur terbaik dari node (19,11) ke (16,13).

Gambar 3.4 3.4Perancangan Struktur Data

Pada penelitian ini penulis menggunakan struktur data sebagai penyimpan data.Struktur data yang digunakan adalah Array dan Linked List. Array dua dimensi digunakan untuk menentuan koordinat titik (x, y) dalam permainan labirin ini. Array dua dimensi adalah Sebuah array yang menampung array lain sebagai data nilai dari setiap indeks array penampung.


(36)

3.5Perancangan Antarmuka

Bagian ini menjelaskan mengenai rancangan interfacepapan permainan Ghost Words Labyrinth beserta fasilitas pencarian jalur terpendek serta fungsi-fungsi dari tombol yang dibuatt.

Gambar 3.5 Tampilan Papan Permainan dan Pengujian

Gambar diatas merupakan rancangan untuk untuk papan permainan dari Ghost Words Labyrinth. Dimana bagiannya dapat diuraikan sebagai berikut :

1. Papan permainan Ghost Words Labyrinth

2. Fasilitas pencarian jalur terpendek untuk penyelesaian misi yakni tombol A* dan Dijkstra, yang digunakan juga sebagai pengujian untuk perbandingan algoritma.

3. Data performa yang diperlihatkan yaitu time adalah waktu algoritma melakukan pencarian jalur terpendek, loop adalah banyaknya proses looping, node adalah banyak simpul yang dijelajahi, path adalah solusi jalur terpendek yang diberikan.

1

2

3 Linked List Penelusuran Alur Ke Node Awal


(37)

21

3.6Perancangan Pengujian

Pengujian akan dilakukan dengan menjalankan fasilitas pencarian jalur terpendek pada permainan Ghost Words Labyrinth. Pada pengujian akan dipakai beberapa karakteristik peta labirin yang berbeda. Akan digunakan fasilitas pencarian untuk algoritma A* dan Dijkstra untuk penyelesaian misi yang sama. Jadinya untuk satu misi akan dijalankan dua fasilitas pencarian jalur yaitu A* dan Dijkstra.

Ketika menjalankan fasilitas pencarian jalur akan dicatat data performa diantaranya lama algoritma melakukan pencarian jalur terpendek, banyak proses looping yang dilakukan oleh algoritma, banyaknya simpul dijelajahi danbanyak solusijalur terpendek yang diberikan. Setelah itu akan dilakukan analisa dari data dengan menghitung nilai efisiensi dan akan ditarik kesimpulan bagaimana perbandingan peforma dari kedua algoritma tersebut.

3.7Simulasi Manual Penerapan Algoritma

Pada subbab ini akan dijelaskan bagaimana jalanya pencarian terpendek dengan menggunakan algoritma A* dan Dijktra. Dimana disitu akan terdapat angka yang menjelaskan penghitungan dari kedua algoritma tersebut

3.7.1Simulasi Algoritma A*

Penerapan Algoritma A* pada permainan ini adalah pada fasilitas pencarian jalur yang akan digunakan untuk membantu pemain dalam penyelesaian misi. Adapun proses algoritma-nya dapat dicontohkan seperti berikut ini. Pada gambar dibawah akan terdapat daftar nilai untuk F = G+Hdimana :

 F adalah ongkos untuk kotak : Posisinya berada di kiri atas.  G adalah ongkos dari node awal : Posisinya berada di kiri bawah.


(38)

 H adalah ongkos dari node yang dituju : Posisinya berada di kanan bawah.

Langkah 1

Tentukan kotak tentangga yang mungkin dijelajahi (Walkable) dari posisi awal (Poin A).Hitung juga nilai F, dan tambahkan itu sebagai list.

Gambar 3.7.1.1 Visualisasi A* Langkah 1

Langkah 2

Langkah selanjutnya, pilih kotak yang memiliki nilai F terkecil, tambahkan ke closed list kemudian cari lagi tetangganya.


(39)

23

Gambar 3.7.1.2 Visualisasi A* Langkah 2

Langkah 3

Lakukan lagi, yaitu memilih lagi kotak dengan nilai F terendah, dan lanjutkan iterasi.

Gambar 3.7.1.3 Visualisasi A* Langkah 3

Langkah 4

Pada langkah ini ada kasus yang menarik. Dapat dilihat pada gambar sebelumnya terdapat 4 kotak yang memiliki nilai F yang sama yaitu 7. Lalu solusinya adalah tetap ikuti kotak yang baru ditambahkan ke open list.Kemudian lanjutkan pada


(40)

kotak baru yang telah didapatkan.

Gambar 3.7.1.4 Visualisasi A* Langkah 4

Langkah 5

Pilih kotak yang memiliki nilai terendah yakni 7 dan pada kasus ini dipilih simpul yang paling baru.

Gambar 3.7.1.5 Visualisasi A* Langkah 5

Langkah 6

Pada langkah ini sudah akan terlihat bahwa akan terdapat dua pilihan 2 jalur terpendek untuk ke tujuan yang bisa dipilih, yakni 1-2-3-4-5-6 dan 1-2-3-4-5-7


(41)

25

tetapi ini tidak menjadi masalah yang mana yang akan dipilih, ini akan sesuai dengan implementasi yang sebenarnya dalam kode program.

Gambar 3.7.1.6.a Visualisasi A* Langkah 6

Gambar 3.7.1.6.b Kemungkinan Jalur Terpendek

Langkah 7

Lakukan iterasi satu kali lagi dari langkah sebelumnya maka tujuan akan masuk ke open list.


(42)

Gambar 3.7.1.7 Visualisasi A* Langkah 7

Langkah 8

Pada saat dimana kotak target telah menjadi open list, algoritma akan menambahkan itu ke closed list, kemudian algoritma akan melakukan runut balik untuk memperoleh jalur final.


(43)

27

Gambar 3.7.1.8.b Visualisasi Runut Balik

3.7.2Visualisasi Algoritma Dijkstra

Penerapan Algoritma Dijkstra pada permainan Ghost Words Labyrinth adalah pada fasilitas pencarian jalur yang akan digunakan untuk membantu pemain dalam penyelesaian misi.Adapun keterangan angka adalah ongkos dari setiap simpul yang dihitung dari akar.

Langkah 1


(44)

Pada posisi awal open node di atas dan disamping kiri dan kanan node awal diberi cost 1. Sesudah itu pilih salah satu node dengan nilai cost paling kecil.Lalu jadikan posisi current node.Sesudah itu pada current node tentukan open node dari current node.

Langkah 2

Gambar 3.7.2.2 Langkah Dijkstra 2

Sesudah ditentukan maka berikan nilai cost adalah cost current node ditambah 1. Untuk selanjutnya pilihlah open node dengan cost terkecil lalu tentukan open node lagi. Begitu seterusnya hingga mencapai titik akhir yang dicari.

Langkah 3


(45)

29

Lakukan hal yang sama seperti langkah sebelumnya untuk close node pada node yang ada dikiri dengan menjelajahi ke atas dan ke bawah dan berikan cost 2 untuk lanjutan biaya dari node sebelumnya.

Langkah 4

Gambar 3.7.2.4 Langkah Dijkstra 4

Lakukan lagi pencarian dengan closed node dengan biaya terkecil yaitu current node yang berada diatas start point. Jadikan node diatasnya sebagai closed node lanjutan dan tambahkan biayanya sehingga biayanya menjadi 2.

Langkah 5

Pada Langkah 5 ini ditampilkan proses keselurah dari pencarian algoritma dijkstra. Jadi node tujuan ditemukan dengan cost 7 maka proses selesai. Lalu dirunut balik menujut titik awal dari tujuan melewati node- node parentnya maka diperoleh jalur terpendek.


(46)

(47)

30 BAB IV

IMPLEMENTASI DAN ANALISIS

Bab keempat pada penulisan Tugas Akhir ini akan dibagi menjadi menjadi dua bagian. Pada bagian pertama akan berisi impementasi pembangunan sistem berdasrkan rancangan yang telah dibuat. Pada bagian Kedua menjelaskan mengenai hasil pengujian yang dilakukan antara Algoritma Dijkstra dan Algoritma A* pada beberapa tipe Arena yang berbeda serta analisa baik secara matematis maupun secara deskriptif.

4.1Implementasi Sistem

Berdasarkan perancangan dan perencanaan yang telah dilakukan pada Bab 3, aplikasi pencari jalur untuk permainan Ghost Words Labyrinth dibuat dengan menggunakan pemrograman HTML5 dan Javascript, aplikasi ini direkomendasikan untuk dijalankan menggunakan web browser Google Chrome. Pada subbab ini akan dibagi menjadi dua bagian, bagian pertama akan menjelaskan tentang rancangan implementasi rancangan tampilan program, kemudian untuk bagian kedua menjelaskan implemntasi algoritma A* dan Dijkstra pada aplikasi pencarian jalan di permainan Ghost Words Labyrinth. 4.1.1 Implementasi Rancangan Tampilan

Peneliti masuk ke papan permainan untuk melakukan pengujian algoritma. Dalam papan permainan tersebut akan ada beberapa tombol. Tampilan papan permainan dapat diperlihatkan pada halaman selanjutnya.


(48)

Gambar 4.1.1 Tampilan Papan Permainan dan Fasilitas Pencarian Jalur Terpendek

Tampilan papan permainan dan fasilitas pencarian jalur sesuai rancangan yang dibuat. Tampilan diatas dipakai untuk meneliti bagaimana performa algoritma yang dipakai sesuai dengan bentuk arena yang ada. Akan terdapat 5 tombol yang ada program yang dibuat,yaitu :

 Simulasi Dijkstra :

Tombol ini digunakan untuk memperlihatkan simulasi proses pencarian rute terpendek dengan algoritma Dijkstra.

 Simulasi A* :

Tombol ini digunakan untuk memperlihatkan simulasi proses pencarian rute terpendek dengan algoritma A*.

 Performa Dijsktra :

Tombol ini digunakan untuk memperlihatkan performa dari pengetesan algoritma Dijkstra dan memperlihatkan proses pencarian jalur terpedek secara langsung tanpa animasi proses pencarian.


(49)

32

 Performa A* :

Tombol ini digunakan untuk memperlihatkan performa dari dari pengetesan algoritma A* untuk peneliti dan bagi publik dapat dipakai untuk mencari langsung rute terpendek saat bermain game Ghost Words Labyrinth.

4.1.2 Implementasi Algoritma Dijkstra dan A*

Algoritma Dijkstra dan A* dipakai untuk mencari jalur terpendek jika user kesulitan mencari jalur yang efektif.User bisa memakai kedua fasilitas pencarian jalur yang ada. Kedua algoritma akan bekerja dengan membaca peta labirin yang sedang dimainkan dimana dinding dan hantu adalah simpul yand tidak dapat dijelajahi. Kemudian obyek player dan target yang merupakan titik awal dan akhir pencarian. Algoritma akan melakukan iterasi pencarian pada node yang diinisialisasikan sebagai jalan pada peta labarin. Iterasi akan dilakukan sampai target ditemukan .

Setelah simpul target ditemukan maka algoritma akan dilakukan proses

backtracking. Proses backtracking akan melakukan penelusuran jalur dengan merunut jalur Linked List hasil dari proses pencarian dari root menuju target. Setelah proses backtracking selesai maka jalur terpendek telah ditemukan. Yang membedakan dari kedua algoritma adalah pada proses pencarian algoritma A* dibuat fungsi heuristik yang akan mecari simpul tetangga dengan nilai terkecil. Sedangkan algoritma dijkstra tidak memakai fungsi heuristik dan akan menelurusi semua node terdekat sampai target ditemukan.

Berikut ini akan ditampilkan kode program yang telah dibuat untuk algortima Dijsktra dan A*.


(50)

Dijkstra

function getDijkstra(fromX,fromY,toX,toY) {

console.log("FIND: " + fromX + "," + fromY + " -> " + toX + "," + toY); if(toX < 0 || toY < 0 || toY >= map.length || toX >= map[0].length || map[toY][toX] != 0)

return []; var m = [];

for (var i = 0; i <map.length; i++) { m[i] = [];

for (var j = 0; j < map[i].length; j++) { m[i][j] = map[i][j];

} }

for (var i = 0; i <monsters.length; i++) {

m[monsters[i].gy][monsters[i].gx] = 1; }

var width = m[0].length; var height = m.length; var opened = []; var open = []; var count = 0;

var start = AData(fromX,fromY,0,0); addtoOpenNode(open,start); addtoOpenedNode(opened,start); while(open.length > 0) {

var cur = open[0]; cur.closed = true;

if(cur.x == toX && cur.y == toY) { count++;

console.log("FOUND xxx"); var path = [];

while(cur != null) {

path.splice(0,0,{x:cur.x,y:cur.y}); cur = cur.parent;

}

return {"path":path, "node": opened, "count": count}; }

open.splice(0,1); var neighbour = [];

if(cur.x - 1 > 0 && m[cur.y][cur.x - 1] == 0) { neighbour.push({x:cur.x-1,y:cur.y}); }


(51)

34

A*

if(cur.y - 1 > 0 && m[cur.y - 1][cur.x] == 0) { neighbour.push({x:cur.x,y:cur.y-1}); }

if(cur.x + 1 < width && m[cur.y][cur.x + 1] == 0) { neighbour.push({x:cur.x+1,y:cur.y}); }

if(cur.y + 1 < height && m[cur.y + 1][cur.x] == 0) { neighbour.push({x:cur.x,y:cur.y+1}); }

for(var i = 0; i < neighbour.length; i++) { var n = neighbour[i];

var node = getNode(opened, n.x, n.y); count++;

if (!node){

node = AData(n.x, n.y, cur.g + 1, 0,cur); addtoOpenedNode (opened, node); addtoOpenNode(open,node); }

} }

}

function getAstar(fromX,fromY,toX,toY,heur=heuristic) {

console.log("FIND: " + fromX + "," + fromY + " -> " + toX + "," + toY); if(toX < 0 || toY < 0 || toY >= map.length || toX >= map[0].length || map[toY][toX] != 0)

return []; var m = [];

for (var i = 0; i <map.length; i++) { m[i] = [];

for (var j = 0; j < map[i].length; j++) { m[i][j] = map[i][j];

} }

for (var i = 0; i <monsters.length; i++) {

m[monsters[i].gy][monsters[i].gx] = 1; }

var width = m[0].length; var height = m.length; var opened = []; var open = []; var count = 0;


(52)

addtoOpenNode(open,start); addtoOPenedNode(opened,start); while(open.length > 0) {

var cur = open[0]; cur.closed = true;

if(cur.x == toX && cur.y == toY) { count++;

console.log("FOUND xxx"); var path = [];

while(cur != null) {

path.splice(0,0,{x:cur.x,y:cur.y}); cur = cur.parent;

}

return {"path":path, "node": opened, "count": count}; }

open.splice(0,1); var neighbour = [];

if(cur.x - 1 > 0 && m[cur.y][cur.x - 1] == 0) { neighbour.push({x:cur.x-1,y:cur.y}); }

if(cur.y - 1 > 0 && m[cur.y - 1][cur.x] == 0) { neighbour.push({x:cur.x,y:cur.y-1}); }

if(cur.x + 1 < width && m[cur.y][cur.x + 1] == 0) { neighbour.push({x:cur.x+1,y:cur.y}); }

if(cur.y + 1 < height && m[cur.y + 1][cur.x] == 0) { neighbour.push({x:cur.x,y:cur.y+1}); }

for(var i = 0; i < neighbour.length; i++) { var n = neighbour[i];

var node = getNode(opened, n.x, n.y); count++;

if (!node){

node = AData(n.x, n.y, cur.g + 1, heur(n.x,n.y,toX,toY),cur);

addtoOpenedNode(opened, node); addtoOpenNode(open,node); } else {

if(cur.g + 1 < node.g) { node.g = cur.g + 1; node.parent = cur;

addtoOpenedNode(opened, node); addtoOpenNode(open,node); } } } } }


(53)

36

4.2Pengujian dan Analisa

Proses pengujian akan dilakukan sebanyak 30 kali untuk tiap tipe karakteristik arena. Setiap pengujian akan ditempatkan posisi start dan tujuan secara acak ( random ) lalu diambil data berupa path terbaik , jumlah node yang dijelajahi, waktu , dan proses looping pada proses pencarian.

Sebelumnya akan dijelaskan mengenai data yang akan diambil dalam pengujian :

1. Path :

Path adalah jalur terpendek yang diperoleh dari masing-masing algoritma. Pada papan pengujian diperlihatkan dari blok jalan yang berwarna jingga, kemudian jumlahnya dapat dilihat dari status performa.

2. Simpul dijelajahi/ Node Visitation :

Simpul dijelajahi adalah jumlah simpul yang dijelajahi selama algoritma melakukan pencarian sampai target ditemukan. Dapat dilihat pada gambar papan pengujian dari semua blok jalan yang berubah warna. Dimana terdiri dari close node yang diwakili warna kuning dan jingga. Dan open node yang diwakili dengan blok berwarna biru. 3. Banyak Looping :

Looping adalah jumlah proses looping dari proses algoritma mencari jalur terpendek. Pada implementasi algoritma dapat dilihat dari kedua algoritma terdapat proses looping yang merupakan proses pengecekan tetangga dari dari starting point sampai menemukan target.

4. Time :

Waktu adalah lama untuk algoritma melakukan pencarian jalur terpendek, untuk mendapatkan waktu tersebut akan dilakukan pencatatan waktu algoritma mulai dipanggil sampai selesai memberikan solusi jalur terpendek kemudian dicari selisihnya. Waktu yang dicatat adalah dalam satuan milisekon(ms).


(54)

Proses pengujian ini dilakukan dengan 5 tipe karakteristik arena yang berbeda :

1. Arena Solid dan Simetris (Simetris Sedikit Rongga)

Arena yang penuh dengan obstacle(halangan) dengan bentuk halangan dan tipe jalur yang teratur (jalurnya setapak).

2. Arena TidakSoliddan Simetris (Simetris dan banyak rongga)

Arena yang mempunyai halangan dan bentuknya simetris , terdapat banyak rongga (jalurnya tidak setapak).

3. Arena Solid dan RandomObstacle (Acak sedikit Rongga)

Arena yang mempunyai sedikit rongga (jalurnya setapak) dan bentuk halangannya random.

4. Arena Tidak Solid dan Random Obstacle (Acak dan Berongga)

Arena yang mempunyai halangan yang banyak rongga dan bentuk halangannya random.

5. Arena Tidak Solid dan RandomObstacle Ukuran Diperbesar

Pada arena iniadalah seperti jenis ke 4 hanya arena diperbesar menjadi sekitar 4 kali lipat dari ukuran semula dengan ukuran matrik 156 x 70. 6. Arena dengan Halangan Berbentuk Cincin

Pada arena ini adalah halangan atau obstacle akan membentuk cincin.

Starting point akan berada di dalam cincin dan target point berada di luar cincin.

7. Arena dengan Banyak Target

Pada arena ini berbentuk seperti dengan arena 6. Hanya memiliki target lebih dari 1.


(55)

38

4.2.1 Pengujian Arena Solid dan Simetris

Gambar 4.2.1.1 Arena Solid dan Simetris

Tipe Arena ini mempunyai halangan dan jalur yang teratur.Jalur yang disediakan adalah jalur setapak saja di setiap arena. Pada peta ini algoritma A* lebih baik dari pada Algoritma Dijkstra dalam hal Efisiensi dan Efektifitas Algoritma, yang ditandai dengan waktu proses pencarian yang lebih cepat dan proses penjelajahan node yang lebih sedikit dan 2 Algoritma tersebut sama – sama menghasilkan path yang terbaik ( minimum ) pada semua proses pengujian yang telah ditentukan jumlahnya .


(56)

Gambar 4.2.1.2 Pencarian Algoritma A* Pengujian 1


(57)

40

Berikut ini adalah tabel data pengujian Algoritma A* dan Dijkstra pada 30 kondisi berbeda pada arena tersebut :

Tabel 4.2.1.1 Tabel Pengujian Arena Solid dan Simetris

No Koordinat Dijkstra A*

Start End Time(ms) Loop Node Path Time(ms) Loop Node Path

1 24,11 29,3 3.3200 175 91 14 2.8200 31 19 14

2 29,10 35,17 5.7250 167 87 14 3.1500 29 17 14

3 15,8 20,17 4.1900 209 107 15 1.6350 31 18 15

4 37,6 29,12 3.5750 75 40 15 1.1950 33 20 15

5 9,11 1,4 4.2050 207 106 16 2.8050 41 24 16

6 15,10 6,17 5.1850 255 129 17 2.7750 49 28 17

7 29,5 17,11 3.6300 217 111 19 3.4100 43 26 19

8 30,17 18,11 2.8450 153 78 19 1.1800 41 24 19

9 29,12 36,1 4.1950 227 116 19 1.1250 69 38 19

10 9,5 23,4 5.6350 237 119 20 1.1000 49 29 20

11 26,7 15,16 6.8050 299 150 21 2.5900 57 33 21

12 25,7 9,12 5.0900 323 158 22 2.9750 55 33 22

13 15,17 1,12 4.9250 237 121 22 2.8950 49 28 22

14 36,11 23,1 2.8600 209 112 24 2.5600 65 37 24

15 29,10 9,6 5.3950 315 154 25 3.0450 63 37 25

16 37,15 21,7 3.1550 159 81 25 2.4550 55 32 25

17 37,6 19,1 2.7550 215 110 26 2.1350 91 47 26

18 23,6 7,17 5.6300 387 189 28 2.3450 101 54 28

19 9,6 31,11 4.4450 337 164 28 1.2450 65 39 28

20 9,12 29,17 4.0250 339 165 28 2.3450 113 60 28

21 1,1 19,11 3.6900 187 96 29 0.8900 120 63 29

22 7,17 29,8 4.0800 307 152 32 2.1650 71 41 32

23 6,7 29,16 4.0500 357 174 33 2.5800 105 59 33

24 34,1 16,17 4.6550 303 150 35 2.9550 87 48 35

25 35,7 9,15 3.8750 355 173 35 2.2550 103 58 35

26 31,11 3,1 5.6250 409 198 39 2.4500 137 73 39

27 2,1 29,17 3.9200 371 181 44 2.1050 147 78 44

28 37,6 1,13 6.6750 399 193 44 3.2650 113 63 44

29 5,17 34,1 6.2450 405 196 46 3.4700 121 67 46


(58)

Panjang semua path yang dipilih sebagai jalur baik Algoritma A* dan Dijkstra adalah sama. Node yang dijelajahi oleh algoritma A* lebih sedikit dari Algoritma Dijkstra dan Waktu yang diperlukan untuk menemukan jalur terbaiknya lebih sedikit sehingga bisa dikatakan algoritma A* lebih baik daripada Algoritma Dijkstra pada Arena tipe ini. Presentase 2 algoritma menemukan jalur terbaiknya dalam 30 kali pengujian adalah 30/30*100% = 100% .

Grafik 4.2.1.1 Perbandingan Node Visitation 30 Kali Pengujian 1

Grafik 4.2.1.2 Perbandingan Proses Looping 30 kali Pengujian 1 0 50 100 150 200 250

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29

N o d e Percobaan ke Dijkstra A* 0 50 100 150 200 250 300 350 400 450

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29

Lo o p in g Percobaan ke Dijkstra A*


(59)

42

Grafik 4.2.1.3 Perbandingan Waktu Pencarian 30 kali Pengujian 1

4.2.2. Pengujian Arena Tidak Solid dan Simetris

Gambar 4.2.2.1 Arena Tidak Solid dan Simetris

Tipe Arena ini mempunyai halangan yang tidak padat, bentuknya simetris dan jalur yang longgar.Jalur yang disediakan adalah jalur longgar di setiap arena. Di arena ini memungkinkan hero mempunyai banyak pilihan untuk menentukan jalur menuju tujuannya, karena jalurnya longgar dan tidak setapak, akan tetapi

0.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29

W

a

kt

u

(m

s)

Percobaan ke

Dijkstra


(60)

masih memiliki rintangan penghalang.

Gambar 4.2.2.2 Pencarian A* Pengujian 2


(61)

44

Berikut ini adalah tabel data pengujian Algoritma A* dan Dijkstra pada 30 kondisi berbeda pada arena tersebut :

Tabel 4.2.2.1 Tabel Pengujian Arena Tidak Solid dan Simetris

No Koordinat Dijkstra A*

Start End Time(ms) Loop Node Path Time(ms) Loop Node Path

1 14,8 9,15 5.7050 572 193 13 2.2750 39 27 13

2 1,3 9,9 4.4850 194 65 15 4.0900 43 29 15

3 14,11 23,6 6.6000 711 232 15 3.9100 55 41 15

4 8,7 16,1 7.5850 587 195 15 4.7150 51 37 15

5 21,3 13,11 4.6550 583 190 17 2.8300 60 44 17

6 8,1 18,8 5.1450 454 152 18 2.7100 74 26 18

7 29,14 37,5 10.0950 620 205 18 5.2100 111 56 18 8 30,14 36,2 8.9850 607 200 19 1.8000 114 63 19 9 30,15 36,2 10.7250 607 200 20 4.3050 121 66 20

10 15,8 1,3 14.1700 979 315 20 5.7500 110 60 20

11 32,12 18,7 11.5050 676 220 20 2.6950 65 45 20 12 23,10 37,3 11.2150 1045 332 22 5.9000 68 44 22

13 4,6 16,15 16.3350 661 217 22 6.7150 96 58 22

14 31,2 36,17 8.3250 708 230 23 3.9300 182 83 23

15 18,8 37,2 6.9750 1254 392 26 4.5400 80 55 26

16 24,8 7,16 11.1250 1167 366 26 3.6100 210 96 26 17 36,3 22,15 7.5850 661 217 27 4.1200 114 71 27 18 6,5 28,10 6.3750 937 299 28 3.9800 230 103 28 19 17,14 37,7 11.0050 1642 386 28 1.6650 174 74 28 20 24,10 3,16 6.0100 1236 388 28 2.1750 369 115 28 21 31,2 15,17 7.3400 1014 318 32 3.9650 138 81 32 22 20,17 2,4 6.1750 1265 395 32 2.8450 162 89 32 23 14,7 37,16 8.4950 1308 404 33 6.6600 282 127 33 24 31,5 7,14 11.7500 1137 358 34 4.1550 213 107 34 25 37,3 18,16 5.0250 952 302 35 4.3350 540 171 35 26 4,12 33,17 5.4800 1171 367 37 3.0200 330 135 37 27 3,14 31,5 8.4100 1119 352 38 1.9150 130 89 38 28 30,16 1,6 12.1700 1256 392 40 2.8900 179 110 40 29 36,16 6,5 13.1150 1140 358 42 3.8350 214 118 42 30 1,4 37,16 10.9700 1308 404 49 4.1850 364 172 49


(62)

Pada arena ini baik Algoritma A* maupun Dijkstra menemukan jalur terbaik dengan nilai yang sama di setiap pengujian. Apabila dilihat dari gambar 4.2.2.2 dan 4.2.2.3 bisa dilihat kalau rintangan semakin longgar maka Algoritma Dijkstra akan melakukan pencarian path secara menyebar sehingga algoritma ini akan melakukan proses yang lebih banyak dan tidak efisien, sedangkan Algoritma A* lebih efektif dalam proses pencarian pathnya

Dilihat dari hasil path jalur terbaik maka algoritma Dijkstra dan A* sama – sama menemukan hasil, akan tetapi proses dan pencarian algoritma Dijkstra kurang efektif dibandingkan Algoritma A*. Persentase 2 Algoritma menemukan jalur terbaik yang sama minimumnya dalam 30 kali pengujian adalah 30/30*100% = 100%.

Grafik 4.2.2.1 Perbandingan Node Visitation 30 kali Pengujian 2 0

50 100 150 200 250 300 350 400 450

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29

N

o

d

e

Percobaan ke

Dijkstra


(63)

46

Grafik 4.2.2.2 Perbandingan Proses Looping 30 kali Pengujian 2

Grafik 4.2.2.2 Perbandingan Waktu Pencarian 30 kali Pengujian 2 0 200 400 600 800 1000 1200 1400 1600 1800

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29

Lo o p in g Percobaan ke Dijkstra A* 0.0000 2.0000 4.0000 6.0000 8.0000 10.0000 12.0000 14.0000 16.0000 18.0000

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29

W a kt u (m s) Percobaan ke Dijkstra A*


(64)

4.2.3. Pengujian Arena Soliddan Random Obstacle

Gambar 4.2.3.1 Arena Solid dan Random Obstacle

Tipe Arena ini mempunyai halangan yang padat dan letaknya

random.Jalur yang disediakan adalah jalur setapak saja di setiap arena. Untuk mencapai suatu tujuan , di arena ini memungkinkan Hero untuk mencari path dengan jalur yang berbeda pada setiap pencarian algoritma, tergantung jarak tujuan dengan posisi awal Hero.


(65)

48

Gambar 4.2.3.3 Pencarian Dijkstra Pengujian 3

Berikut ini adalah tabel data pengujian Algoritma A* dan Dijkstra pada 30 kondisi berbeda pada arena tersebut :

Tabel 4.2.3.1 Tabel Pengujian Arena Soliddan Random Obstacle

No Koordinat Dijkstra A*

Start End Time(ms) Loop Node Path Time(ms) Loop Node Path

1 25,8 17,12 3.3050 214 110 13 2.0200 30 19 13

2 37,8 31,3 2.8350 123 64 14 1.3400 39 22 14

3 17,6 24,7 9.2050 258 133 15 2.9850 57 33 15

4 11,4 17,11 9.2850 247 124 16 1.6750 48 29 16

5 27,13 20,8 3.7950 279 140 17 1.8550 81 43 17

6 26,5 31,14 16.8950 267 134 17 2.9300 82 46 17

7 17,12 11,2 6.7400 412 207 19 2.5100 57 62 19

8 22,5 12,15 9.8500 620 199 21 1.5050 103 33 21

9 18,13 30,5 6.3000 442 215 21 4.1750 57 34 21


(66)

Tabel 4.2.3.1 Tabel Pengujian Arena Soliddan Random Obsctacle

No. Koordinat Dijkstra A*

Start End Time(ms) Loop Node Path Time(ms) Loop Node Path

11 11,11 24,4 8.6300 446 215 23 5.3850 81 43 23

12 33,17 17,10 6.5450 283 137 24 5.1750 63 37 24

13 7,17 18,5 6.3100 331 161 24 1.9600 60 36 24

14 11,2 17,16 5.0800 342 168 25 2.5550 69 40 25

15 22,2 31,14 7.7250 478 228 26 3.9750 104 58 26

16 20,8 33,17 8.2900 576 272 27 2.1850 66 38 27

17 8,6 27,13 7.2750 420 200 27 2.5250 71 43 27

18 15,12 37,7 6.4800 613 287 28 2.7000 73 43 28

19 7,13 23,2 10.2350 409 194 28 1.6950 62 36 28

20 28,14 13,4 6.4900 519 248 30 5.1200 229 116 30

21 9,4 29,14 10.2550 481 229 31 1.8100 87 52 31

22 11,1 26,6 12.7000 465 222 31 2.8750 171 86 31

23 25,11 6,2 9.5150 596 278 31 6.2550 163 88 31

24 18,2 33,12 6.7850 586 277 32 4.9450 169 93 32

25 3,8 25,16 5.2400 439 207 33 2.3200 154 84 33

26 34,17 20,3 20.2650 466 219 35 7.9950 275 131 35

27 25,6 1,15 6.4000 631 293 38 5.0300 229 114 38

28 14,4 37,9 7.8750 602 281 39 4.5650 169 91 39

29 3,4 30,16 7.2200 522 246 44 3.7300 196 106 44

30 3,11 35,3 7.4150 611 286 49 3.8450 346 161 49

Pada arena ini baik Algoritma A* maupun Dijkstra menemukan jalur terbaik dengan nilai yang sama di setiap pengujian. Apabila dilihat dari gambar 4.2.3.2 dan 4.2.3.3 bisa dilihat kalau Algoritma Dijkstra melakukan pencarian secara menyebar karena pada Arena ini terdapat beberapa jalan , sesuai karakteristiknya Algoritma Dijkstra akan melakukan pencarian secara menyebar apabila ruang kosongnya ada banyak di area sekitar Hero berada.

Dilihat dari hasil path jalur terbaik maka baik Algoritama Dijkstra maupun A* sama – sama menghasilakan jalur dengan nilai path yang sama. Proses dan pencarian algoritma Dijkstra kurang efektif dibandingkan Algoritma A*. Persentase 2 Algoritma menemukan jalur terbaik yang sama minimumnya dalam 30 kali pengujian adalah 30/30*100% = 100%.


(67)

50

Grafik 4.2.3.1 Perbandingan Node Visitation 30 kali Pengujian 3

Grafik 4.2.3.2 Perbandingan Proses Looping 30 kali Pengujian 3 0 50 100 150 200 250 300 350

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29

N o d e Percobaan ke Dijkstra A* 0 100 200 300 400 500 600 700

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29

Lo o p in g Percobaan ke Dijkstra A*


(68)

Grafik 4.2.3.3 Perbandingan Waktu Pencarian 30 kali Pengujian 3

4.2.4. Pengujian Arena Tidak Solid dan Random Obstacle

Gambar 4.2.4.1 Arena Tidak Solid dan Random Obstacle

Tipe Arena ini mempunyai halangan yang random dan jalur yang longgar.Jalur yang disediakan adalah jalur longgar saja di dalam arena ini. Untuk mencapai suatu tujuan , di arena ini memungkinkan Hero untuk mencari path

0.0000 5.0000 10.0000 15.0000 20.0000 25.0000

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29

W

a

kt

u

(m

s)

Percobaan ke

Dijkstra


(69)

52

dengan jalur yang berbeda pada setiap pencarian algoritma, tergantung jarak tujuan dengan posisi awal Hero.

Gambar 4.2.4.2 Pencarian A* Pengujian 4


(70)

Berikut ini adalah tabel data pengujian Algoritma A* dan Dijkstra pada 30 kondisi berbeda pada arena tersebut :

Tabel 4.2.4.1 Tabel Pengujian Tidak Arena Solid dan Random Obstacle

No Koordinat Dijkstra A*

Start End Time(ms) Loop Node Path Time(ms) Loop Node Path

1 10,14 15,9 4.6450 258 96 11 2.0800 33 22 11

2 4,2 9,11 3.8650 263 88 15 1.1800 47 32 15

3 29,16 34,6 10.8400 481 165 16 3.3750 130 63 16

4 17,8 7,3 6.9650 623 218 16 2.9400 69 42 16

5 27,15 37,6 7.5750 577 193 20 3.5300 153 73 20

6 3,4 15,10 4.3850 470 159 21 2.8650 127 58 21

7 21,3 8,6 10.7350 296 301 21 2.5950 68 47 21

8 9,3 2,17 10.5350 768 256 22 5.1300 71 50 22

9 1,13 16,7 4.7100 480 167 22 1.0300 74 51 22

10 6,13 20,7 5.5550 796 263 23 3.3300 289 96 23

11 23,13 8,5 8.1450 1051 349 24 4.5900 91 56 24

12 13,11 32,16 18.5100 1151 379 25 6.5450 188 95 25

13 9,1 18,16 7.9850 781 259 25 1.5100 188 73 25

14 37,12 16,7 12.6150 748 246 27 6.3050 198 92 27 15 17,11 34,1 11.0950 1324 428 28 3.0450 135 83 28

16 7,3 21,16 6.6600 871 288 28 3.0900 177 94 28

17 14,10 32,1 9.7250 1254 409 28 5.9150 97 64 28

18 23,14 3,7 7.4700 1181 386 28 3.2800 195 92 28

19 31,16 13,6 10.0600 857 284 29 3.1500 99 65 29

20 28,15 10,7 6.0100 922 306 29 3.4450 257 110 29

21 28,11 7,3 9.5950 1199 393 30 5.3300 160 87 30

22 12,3 29,10 8.3650 974 312 31 4.4700 271 112 31 23 12,3 27,10 13.4750 974 321 31 6.6350 271 113 31 24 27,10 3,4 9.9850 1285 419 33 4.5100 304 130 33 25 17,17 33,1 6.8400 1299 420 33 4.5400 128 79 33

26 9,17 31,5 8.0000 1133 375 35 1.1250 119 79 35

27 8,15 29,1 13.7850 1195 391 36 4.0100 119 82 36 28 11,1 31,13 9.3100 1126 373 37 6.4100 220 112 37 29 8,3 26,15 10.7850 1226 402 37 6.8200 805 236 37 30 35,16 3,7 6.3100 1181 386 42 5.3250 319 147 42


(71)

54

Pada arena ini baik algoritma Dijkstra maupun A* sama – sama mempunyai hasil optimal dalam menemukan jalur terbaik sampai ke tujuan ( nilainya selalu sama ). Arena ini mempunyai karakteristik jalur yang longgar sehingga Algoritma Dijkstra akan melakukan pencarian secara menyebar dan hal ini akan menyebabkan proses pencarian yang kurang efektif bagi algoritma Dijkstra.

Dilihat dari hasil path jalur terbaik maka baik Algoritama Dijkstra maupun A* sama – sama menghasilakan jalur dengan nilai path yang sama . Proses dan pencarian algoritma Dijkstra kurang efektif dibandingkan Algoritma A*. Persentase 2 Algoritma menemukan jalur terbaik yang sama minimumnya dalam 30 kali pengujian adalah 30/30*100% = 100%.

Grafik 4.2.4.1 Perbandingan Node Visitation 30 kali Pengujian 4 0

50 100 150 200 250 300 350 400 450

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29

N

o

d

e

Percobaan ke

Dijkstra


(72)

Grafik 4.2.4.2 Perbandingan Proses Looping 30 kali Pengujian 4

Grafik 4.2.4.3 Perbandingan Waktu Pencarian 30 kali Pengujian 4 0 200 400 600 800 1000 1200 1400

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29

Lo o p in g Percobaan ke Dijkstra A* 0.0000 2.0000 4.0000 6.0000 8.0000 10.0000 12.0000 14.0000 16.0000 18.0000 20.0000

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29

W a kt u (m s) Percobaan ke Dijkstra A*


(73)

56

4.2.5Pengujian Arena Tidak Solid dan RandomObstacle Ukuran Diperbesar Pada percobaan ini arena akan diperbesar menjadi 156x70 dengan tipe yang berongga dengan bentuk rintangan yang yang random. Dengan tujuan mengamati kinerja algoritma pada ruang yang lebih luas.Apakah terjadi perbedaan pada solusi jalur terpendek yang diberikan, dan perbandingan kinerja pada kedua algoritma.Pada bagian tidak ditampilkan arena yang telah dibuat karena ukuran arena yang terlalu besar sehingga melebihi jendela browser.

Berikut ini adalah tabel data pengujian Algoritma A* dan Dijkstra pada 30 kondisi berbeda pada arena tersebut :

Tabel 4.2.5.1 Tabel Pengujian Arena Tidak Solid dan RandomObstacle

Ukuran Diperbesar

No Koordinat Dijkstra A*

Start End Time(ms) Loop Node Path Time(ms) Loop Node Path

1 70,67 81,60 5.8750 680 223 19 1.4100 74 53 19

2 153,20 139,29 11.4300 1854 524 24 3.1600 93 70 24 3 44,23 22,29 11.2950 2201 679 35 1.6750 236 105 35 4 117,9 92,19 14.4100 3195 969 38 1.9800 200 101 38 5 112,35 96,58 13.5000 5109 1547 40 1.8950 141 101 40 6 106,33 72,47 19.7500 7899 2342 49 2.0650 193 127 49 7 109,63 68,47 20.3650 7477 2178 58 1.9650 369 193 58 8 146,45 111,16 19.2950 8231 2338 65 3.1150 246 149 65 9 119,57 77,32 19.4950 10351 2992 68 2.8000 782 322 68 10 64,31 115,51 22.8150 11999 3508 72 3.7450 476 230 72 11 24,13 16,53 12.7100 6752 2004 73 10.0400 1760 534 73 12 55,39 32,5 24.7150 12903 3769 76 15.0050 2099 620 76 13 75,31 25,3 23.0650 13722 4010 79 5.7750 626 289 79 14 15,19 90,21 14.7300 8223 2407 82 3.4050 453 222 82 15 1,10 43,52 63.4300 6088 1808 85 8.0450 292 191 85 16 140,63 78,41 16.9100 10188 2911 85 2.7450 574 286 85 17 11,16 77,4 15.1100 7721 2266 85 12.9450 1534 452 85 18 64,32 133,26 19.1800 15066 4390 86 4.0600 1560 486 86 19 9,30 79,47 16.8900 8363 2436 88 3.6500 430 226 88 20 90,10 8,29 20.4200 17637 5082 102 3.9450 1044 442 102


(74)

Tabel 4.2.5.1 Tabel Pengujian Arena Tidak Solid dan Random Obstacle

Ukuran Diperbesar

No Koordinat Dijkstra A*

Start End Time(ms) Loop Node Path Time(ms) Loop Node Path

21 100,45 33,3 26.7650 18890 5389 110 3.7850 935 414 110 22 28,23 94,67 25.2950 14798 4297 117 3.7200 601 303 117 23 108,5 12,21 19.1850 18158 5195 119 17.8150 3913 1069 119 24 65,68 152,27 31.5000 19565 5612 129 4.9900 534 324 129 25 8,67 85,3 21.4250 14149 4126 142 4.6850 1180 567 142 26 116,17 8,48 19.9800 20156 5768 148 15.2750 10168 2051 148 27 26,39 141,1 25.2350 20227 5794 154 4.0350 708 435 154 28 126,2 4,35 26.5350 19383 5534 156 17.2450 2268 893 156 29 1,45 153,55 25.8950 19814 5708 185 17.7600 4170 1292 185 30 147,5 8,65 32.1800 20515 5857 202 28.3200 8741 2537 202

Pada arena ini baik algoritma Dijkstra maupun A* sama – sama mempunyai hasil optimal dalam menemukan jalur terbaik sampai ke tujuan ( nilainya selalu sama ). Arena ini mempunyai karakteristik jalur yang longgar sehingga Algoritma Dijkstra akan melakukan pencarian secara menyebar dan hal ini akan menyebabkan proses pencarian yang kurang efektif bagi algoritma Dijkstra.

Dilihat dari hasil path jalur terbaik maka baik Algoritama Dijkstra maupun A* sama – sama menghasilakan jalur dengan nilai path yang sama . Proses dan pencarian algoritma Dijkstra kurang efektif dibandingkan Algoritma A*. Persentase 2 Algoritma menemukan jalur terbaik yang sama minimumnya dalam 30 kali pengujian adalah 30/30*100% = 100%.


(1)

apabila hasil besaran pada 3 parameter itu lebih kecil daripada yang dihasilkan oleh algoritma pathfinding yang lain.

Kondisi Arena mempengaruhi kinerja algoritma, faktor yang mempengaruhi antara lain halangan (obstacle), ruang gerak serta jarak dengan tujuan akan sangat mempengaruhi kinerja masing – masing algoritma. Ruang gerak yang lebih longgar akan menyebabkan tingginya node visitation, proses Looping pada masing – masing algoritma dibandingkan ruang gerak yang lebih sempit.

Tabel 4.2.8.1Rata-Rata Penurunan Proses Algortim A* Terhadap Dijkstra

Arena Node Loop Time

Arena Solid dan Simetris 68,71% 72,01% 45,52%

Arena Tidak Soliddan Simetris 72,31% 82,44% 52,75%

Arena Soliddan RandomObstacle 70,40% 74,02% 54.60%

Arena Tidak Solid danRandomObstacle 71,26% 79,63% 54,25%

Arena Diperbesar 156x70 86,12% 88,91% 66,69%

Arena Halangan Bentuk Cincin 13,00% -18,77% -175.39%

Tabel diatas dibuat agar dapat melihat nilai garis besar dari perbandingan performa kerja dari kedua algoritma. Penghitungan dilihat dari sisi algoritma A* terhadap algoritma Dijkstra. Dimana tabel perbandingan akan menampilkan nilai prsentasi penurunan proses algoritma A* terhadap Dijkstra.

Nilai persentase penurunan besaran proses Dari Algoritma Dijkstra ke A* ditentukan dengan rumus :

Persentase Penurunan = 100 – ( Besaran Proses A star / Besaran Proses Dijkstra *100 %)

Algoritma A* lebih efektif dikarenakan Algoritma Dijkstra menggunakan metodeblind search. A* sebenarnya cara kerjanya mirip dengan Dijkstra. Perbedaannya adalah A* mencari path menggunakan fungsi heuristic yang memberikan prioritas pada Node yang diduga lebih baik daripada yang node yang lain sedangkan Algoritma Dijkstra hanya melakukan eksplorasi ke semua path


(2)

yang memungkinkan dijelajahi. Optimalitas Algoritma A* tergantung pada fungsi heuristik yang digunakan.

Di dalam simulasi bisa terlihat jika algoritma A* lebih terfokus pencarian node tujuannya, dan node yang diobservasi lebih sedikit. Sedangkan pada algoritma Dijkstra pencariannya dilakukan secara menyebar keseluruh node yang berdekatan dengan current node ( ketika dianimasikan jelas terlihat membentuk belah ketupat yang semakin membesar) hingga ketemu node tujuan.

Dilihat dari tabel untuk arena - arena yang obstacle / halangannya tidak solid ( longgar ) maka presentase rata - rata penurunan proses loop maupun node visitation lebih besar dikarenakan karakteristik algoritma Dijkstra yang melakukan pencarian menyebar ke segala arah , hal ini didukung pula dengan tipe arena tersebut yang menyediakan ruang gerak yang lebih besar. Kemudian pada arena yang diperbesar algoritma A* masih memberikan solusi yang sama minimumnya dengan algoritma Dijkstra. Bisa dilihat pula pada tabel analisa bahwa penurunan besaran proses kerja algortima A* terhadap algoritma dijkstra semakin besar.

Namun pada pengujian 6 dan 7 Algoritma A* memperlihatkan kelemahanya. Pada pengujian 6 Algoritma A* terkecoh oleh halangan membentuk cincin dimana starting node berada di dalam dan target node terdapat di luar. Node yang dijelajahi tidak memperlihatkan bahwa Algoritma A* mempunyai kelemahan tetapi pada proses looping dapat memperlihatkan bahwa A* mempunyai kelemahan dimana proses looping Algoritma A* lebih besar dari Algoritma Dijkstra. Hal ini disebabkan karena Algoritma A* harus mengecek algoritma yang pernah dijelajahi untuk mencari jalan keluar dari halangan berbentuk cincin sehingga loopingnya akan lebih besar. Namun Dijkstra yang pencariannya menyebar hanya akan menjelajahi simpul satu kali saja dan tidak akan melakukan banyak looping.

Pada pengujian 7 Algoritma Dijkstra memperlihatkan keungulannya. Algoritma Dijkstra mampu mencari jalur untuk banyak target dalam sekali pencarian. Hal ini dapat terjadi karena Algoritma Dijkstra tidak menitikberatkan posisi target. Algoritma hanya menitikberatkan bahwa target sudah ditemukan


(3)

atau belum ditemukan. Berbeda dengan Algoritma A* dengan nilai heuristiknya harus memerlukan posisi target untuk mendapatkanya. Sehingga hal ini tidak memungkinkan untuk Algoritma A* mencari jalur untuk banyak target untuk satu kali pencarian.


(4)

69 BAB V

KESIMPULAN DAN SARAN 5.1Kesimpulan

Berdasarkan implementasi dan hasil analisa penelitian yang telah dilakukan pada bab sebelumnya, maka dapat diperoleh kesimpulan sebagai berikut :

1. Baik algoritma A* dan Dijkstra meberikan solusi yang optimal diperlihatkan pada setiap percobaan memberikan solusi dengan besaran yang sama.

2. Algoritma A* memiliki keunggulan dan kelemahan. Algoritma A* dengan fungsi heuristiknya mampu membuat pencarian menjadi lebih terpusat ke arah target sehingga proses kerja lebih sedikit. Tetapi Algoritma A* dapat terkecoh dengan halangan tertentuseperti pengujian telah dilakukan dimana proses kerja A* lebih besar dari Dijkstra.

3. Algoritma Dijkstra juga memiliki keunggulan dan kelemahannya. Algoritma Dijkstramampu melakukan pencarian untuk banyak target dalam satu kali pencarian berbeda dengan A* yang hanya bisa satu-persatu. Dengan pencarian yang menyebar membuat Algoritma Dijkstra tidak terkecoh oleh halangan seperti pengujian yang telah dilakukan. Namun pada halangan yang tidak mengecoh performa kerja A* lebih baik dari Dijktra

5.2Saran

Beberapa saran untuk penelitian sejenis mendatang :

1. Untuk penelitian selanjutnya, bisa kembangkan untuk sistem penyelesaian misi dengan algoritma pencari jalur terpendek yang lain.


(5)

70

Daftar Pustaka

Ari W, Angga. 2013. INTEGRASI ALGORITMA A* UNTUK PENGEMBANGAN PATHFINDING DAN PERILAKU KARAKTER GAME.Jember. Program Studi Sistem Informasi Universitas Jember.

Br Sirait, Rina. 2013. PERANCANGAN APLIKASI GAME LABIRIN DENGAN MENGGUNAKAN ALGORITMA BACKTRACKING . Medan. Teknik Informatika STMIK Budidarma Medan.

Millington, Ian & Funge, John. 2009. ARTIFICIAL INTELLIGENCE FOR GAMES. Morgan Kaufmann Publisher.

van der Spuy, Rex. 2012. FOUNDATION GAME DESIGN WITH HTML5 & JAVASCRIPT. Friendsof an Apress Company.

Reddy, Harika. 2013. PATHFINDING - Dijkstra’s and A* Algorithm’s. India. Putrady, Ekky. 2009. P ENERAPAN ALGORITMA A* SEBAGAI ALGORITMA

PENCARI JALAN DALAM GAME . Bandung. Teknik Informatika Institut Teknologi Bandung.

Raywenderlich. (2011, 29 September). INTRODUCTION TO A* PATHFINDING.Diperoleh 23 November 2016, dari https://www.raywenderlich.com/ 4946/introduction-to-a-pathfinding.

Sedgewick, Robert & Flajolet, Philippe. 2013. AN INTRODUCTION TO THE ANAYLYSIS ALGORITHMS SECOND EDITION. Addison-Wesley

Tilawah, Hapsari. 2011. PENERAPAN ALGORITMA A-STAR(A*) UNTUK MENYELESAIKAN MASALAH MAZE. Bandung. Teknik Informatika Institut Teknologi Bandung.

Visat S, Muhammad. 2015. PENERAPAN ALGORITMA DIJKSTRA PADA PERMAINAN COUNTER STRIKE. Bandung. Teknik Informatika Institut Teknologi Bandung.

Zaidah, Nur. 2016. P ENERAPAN ALGORITMA DIJKSTRA UNTUK GAME HIJAIYAH . Malang. Teknik Informatika Universitas Maulana Malik Ibrahim Malang.


(6)

Eranki Rajiv. (2002). PATHFINDING USING A*(A-STAR). Diperoleh 1 Maret 2017, dari http://web.mit.edu/eranki/www/tutorials/search/

Beouwer, A.E. (1999). Lattice Graph . Diperoleh 3 Juni 2017, darihttp://mathworld.wolfram.com/LatticeGraph.html