Implementasi Algoritma A Berbasis Pathfinding Dalam Pengembangan Game Menanam Pohon
BAB II
TINJAUAN PUSTAKA
Bab ini akan menjelaskan tentang pembahasan teori-teori algoritma A*.
2.1. Video Game
Video game (permainan video) adalah permainan yang menggunakan interaksi dengan
antarmuka pengguna melalui gambar yang dihasilkan oleh piranti video. Permainan
video umumnya menyediakan sistem penghargaan misalnya skor yang dihitung
berdasarkan tingkat keberhasilan yang dicapai dalam menyelesaikan tugas-tugas yang
ada di dalam permainan.
Kata "video" pada "permainan video" pada awalnya merujuk pada piranti
tampilan raster. Namun dengan semakin dipakainya istilah "video game", kini kata
permainan video dapat digunakan untuk menyebut permainan pada piranti tampilan
apapun. Sistem elektronik yang digunakan untuk menjalankan permainan video
disebut platform, contohnya adalah komputer, permainan konsol dan smartphone.
(Apperley, 2006)
2.2. Desain Analisis Algoritma
Desain Analisis Algoritma merupakan suatu cabang khusus dalam ilmu komputer
yang mempelajari karakteristik dan performa dari suatu algoritma dalam
menyelesaikan masalah (Levitin, 2011). Untuk menganalisis sebuah algoritma, kita
harus mengidentifikasi sumber primer sehingga analisis rinci dapat difokuskan dengan
benar. Sebuah analisis lengkap dari waktu berjalan dari algoritma melibatkan langkahlangkah berikut:
1. Melaksanakan algoritma sepenuhnya.
2. Tentukan waktu yang dibutuhkan untuk setiap operasi dasar. Mengidentifikasi
jumlah yang tidak diketahui yang dapat digunakan untuk menggambarkan
frekuensi pelaksanaan operasi dasar.
3. Mengembangkan model yang realistis untuk input ke program.
4. Menganalisis jumlah yang tidak diketahui, dengan asumsi input yang dimodelkan.
Universitas Sumatera Utara
7
5. Hitung total waktu berjalan dengan mengalikan waktu dengan frekuensi untuk
setiap operasi, kemudian menambahkan semua produk.
Langkah pertama dalam analisis ini adalah untuk hati-hati menerapkan algoritma pada
komputer tertentu. Sebuah implementasi tertentu tidak hanya menyediakan objek
konkret untuk belajar, tetapi juga dapat memberikan data empiris yang berguna untuk
membantu dalam atau untuk memeriksa analisis.
Langkah berikutnya adalah untuk memperkirakan waktu yang dibutuhkan oleh
masing-masing instruksi komponen program. Pendekatan lain adalah dengan hanya
menjalankan program untuk input kecil ukuran untuk "estimasi" nilai-nilai konstanta,
atau untuk melakukannya secara tidak langsung dalam agregat.
Langkah berikutnya adalah untuk model input ke program, untuk membentuk
dasar
untuk
analisis
matematis
dari
frekuensi
instruksi.
Nilai
dari
frekuensi diketahui tergantung pada masukan untuk algoritma: masalah ukuran
parameter utama yang digunakan untuk mengungkapkan hasil (Sedgewick, 2013).
2.3. Teori Graf
Graf adalah himpunan benda-benda yang disebut "simpul" (vertex atau node) yang
terhubung oleh sisi (edge) atau busur (arc). Biasanya graf digambarkan sebagai
kumpulan titik-titik (melambangkan "simpul") yang dihubungkan oleh garis-garis
(melambangkan "sisi") atau garis berpanah (melambangkan "busur"). Suatu sisi dapat
menghubungkan suatu simpul dengan simpul yang sama. Sisi yang demikian
dinamakan "gelang" (loop). Graf G didefinisikan sebagai pasangan himpuna (V,E).
2.4. Jenis-Jenis Graf
Jenis graf dibedakan atas 3 karakteristik yaitu, berdasarkan sisi ganda (berdasarkan
ada tidaknya suatu gelang), arah (berdasarkan arah dari sisi) , dan berdasarkan pada
bobot sisinya (Bondy, 2008).
Universitas Sumatera Utara
8
2.4.1. Berdasarkan sisi ganda
Berdasarkan ada tidaknya gelang atau sisi ganda pada suatu graf, maka secara
umum graf dapat digolongkan menjadi dua jenis:
1. Graf sederhana, graf yang tidak mengandung gelang maupun sisi ganda
dinamakan graf sederhana.
2. Graf tak-sederhana, graf yang mengandung sisi ganda dinamakan graf taksederhana. Ada dua macam graf tak sederhana, yaitu graf ganda dan graf semu.
Graf ganda adalah graf yang mengandung sisi ganda. Sebuah graf memiliki
sisi ganda jika ada 2 buah simpulyang dihubungkan lebih dari satu sisi. Graf
semu adalah graf yang memiliki sisi gelang (loop). Sisi gelang adalah sisi yang
menghubungkan sebuah simpul dengan simpul itu sendiri.
Gambar 2.1 Graf sederhana(G1), Graf Ganda (G2), Graf Semu(G3) (Munir, 2009)
2.4.2. Berdasarkan arah
Berdasarkan arah dari sisi, graf dibedakan menjadi 2 jenis :
1. Graf tak-berarah
Graf yang sisinya tidak memiliki orientasi arah disebut graf tak-berarah. Pada graf
tak-berarah, urutan pasangan simpul pada sisi tidak diperhatikan. Sebuah sisi e
= (u, v) sama dengan e = (v, u).
Gambar 2.2 Graf tidak berarah (Munir, 2009)
Universitas Sumatera Utara
9
2. Graf Berarah
Graf yang setiap sisinya memiliki orientasi arah disebuh graf berarah. Pada graf
berarah, sebuah sisi dikenal juga sebagai busur (arc). Pada graf berarah, (u, v) dan
(v, u) menyatakan dua buah sisi yang berbeda. Pada sebuah sisi (u, v), simpul u
menyatakan simpul asal (initial vertex) dan simpul v menyatakan simpul terminal
(terminal vertex).
Gambar 2.3 Graf berarah (Munir, 2009)
2.4.3. Berdasarkan bobot
1. Graf berbobot (weighted graph)
Graf berbobot adalah graf yang setiap sisinya memiliki bobot. Bobot pada sisi
graf dapat merepresentasikan kapasitas, biaya, atau keuntungan.
Gambar 2.4. Graf berbobot (Munir, 2009)
2. Graf tak-berbobot (unweighted graph)
Graf tak-berbobot adalah graf yang setiap sisinya tidak memiliki bobot.
Graph 2.5 Graf tak berbobot (Munir, 2009).
Universitas Sumatera Utara
10
2.5. Pathfinding
Pathfinding adalah suatu metode yang digunakan untuk pencarian jalur yang bertujuan
untuk mencapai suatu tempat tujuan dari tempat awal. Cara kerja metode pathfinding
adalah dengan mencari sebuah grafik dengan memulai pada satu titik dan menjelajahi
node yang berdekatan sampai node tujuan tercapai, umumnya dengan maksud untuk
menemukan rute terpendek. Namun, tidak perlu untuk memeriksa semua jalur yang
mungkin untuk menemukan satu yang optimal. Dalam sistem-perjalanan routing yang
praktis, kompleksitas waktu yang lebih baik dapat dicapai dengan algoritma yang
dapat pra-proses grafik untuk mencapai kinerja yang lebih baik. (Deiling, 2009).
2.6. Algoritma A*
Algoritma A* adalah pengembangan dari algoritma Djikstra yaitu suatu algoritma
yang bertujuan untuk memproses perencanaan jalur yang efisien di antara beberapa
titik (node) dengan menggunakan heuristik. Peter Hart, Nils Nilsson dan Bertram
Raphael dari Stanford Research Institute memperkenalkan algoritma ini pada tahun
1968 (Deiling, 2009).
A* menggunakan pencarian terbaik pertama dan menemukan jalan dengan
biaya terendah dari node awal yang diberikan ke satu node tujuan. A* melintasi grafik
untuk membangun sebuah pohon jalur parsial. Daun pohon ini (disebut set atau
pinggiran terbuka) disimpan dalam antrian prioritas yang memerintahkan node daun
dengan fungsi biaya, yang menggabungkan perkiraan heuristik dari biaya untuk
mencapai tujuan dan jarak yang ditempuh dari node awal. Secara khusus, fungsi
biaya:
f (n) = g (n) + h (n).
Di sini, g (n) adalah biaya diketahui mendapatkan dari node awal untuk nilai
ini dilacak oleh algoritma. h (n) adalah perkiraan heuristik dari biaya untuk
mendapatkan dari n ke setiap node tujuan. Untuk algoritma untuk menemukan jalur
terpendek yang sebenarnya, fungsi heuristik harus diterima, artinya tidak pernah
overestimates biaya yang sebenarnya untuk sampai ke node tujuan terdekat. Fungsi
heuristik adalah spesifik masalah dan harus disediakan oleh pengguna dari algoritma.
Beberapa terminologi dasar yang terdapat pada algoritma A* adalah starting
point, simpul (nodes), open list, closed list, harga (cost), halangan (unwalkable).
Universitas Sumatera Utara
11
Starting point adalah sebuah terminologi untuk posisi awal sebuah benda. Simpul
adalah petak-petak kecil sebagai representasi dari area pathfinding. Bentuknya dapat
berupa persegi, lingkaran, maupun segitiga. Open list adalah tempat menyimpan data
simpul yang mungkin diakses dari starting point maupun simpul yang sedang
dijalankan. Closed list adalah tempat menyimpan data simpul sebelum A yang juga
merupakan bagian dari jalur terpendek yang telah berhasil didapatkan. Simpul tujuan
yaitu simpul yang dituju. Halangan adalah sebuah atribut yang menyatakan bahwa
sebuah simpul tidak dapat dilalui oleh A. Prinsip algoritma ini adalah mencari jalur
terpendek dari sebuah starting point menuju simpul tujuan dengan memperhatikan
harga (F) terkecil (Munir, 1998).
2.6.1 Cara Kerja
Dimulai dengan node awal, ia mempertahankan antrian prioritas node yang akan
dilalui, dikenal sebagai set atau pinggiran terbuka. Semakin rendah f (x) untuk
diberikan simpul x, semakin tinggi prioritas. Pada setiap langkah algoritma, node
dengan f (x) nilai terendah akan dihapus dari antrian, f dan g nilai tetangganya
diperbarui sesuai, dan tetangga ini ditambahkan ke antrian. Algoritma terus sampai
node tujuan memiliki nilai f rendah dari setiap node dalam antrian (atau sampai
antrian kosong). (Node Goal dapat melewati beberapa kali jika masih ada node lain
dengan nilai f yang lebih rendah, karena dapat menyebabkan jalan yang lebih pendek
untuk tujuan.) Nilai f dari tujuannya adalah maka panjang jalur terpendek, karena jam
pada tujuannya adalah nol dalam heuristik diterima.
Algoritma yang dijelaskan sejauh memberi kita hanya panjang jalur terpendek.
Untuk menemukan urutan yang sebenarnya dari langkah-langkah, algoritma dapat
dengan mudah direvisi sehingga setiap node di jalan melacak pendahulunya. Setelah
algoritma ini dijalankan, node berakhir akan mengarah ke pendahulunya, dan
seterusnya, sampai pendahulunya beberapa node adalah node awal.Selain itu, jika
heuristik yang monoton (atau konsisten, lihat di bawah), satu set tertutup node sudah
dilalui dapat digunakan untuk membuat pencarian lebih efisien. (Deiling, 2009).
Universitas Sumatera Utara
12
2.6.2. Sifat Algoritma A*
A* selesai dan akan selalu mencari solusi jika ada. Jika heuristik fungsi h adalah
diterima, artinya tidak pernah overestimates biaya minimal sebenarnya mencapai
tujuan, maka A* itu sendiri diterima (atau optimal) jika kita tidak menggunakan satu
set tertutup. Jika satu set tertutup digunakan, maka h juga harus monoton (atau
konsisten) untuk A* menjadi optimal. Ini berarti bahwa untuk setiap pasangan node
yang berdekatan x dan y, di mana d (x, y) menunjukkan panjang dari tepi antara
mereka, kita harus memiliki:
Hal ini memastikan bahwa untuk setiap jalur X dari node awal untuk x:
dimana L adalah fungsi yang menunjukkan panjang jalan, dan Y adalah jalan X
diperluas untuk mencakup y. Dengan kata lain, tidak mungkin untuk menurunkan
(total jarak sejauh + diperkirakan jarak yang tersisa) dengan memperluas jalan untuk
memasukkan node tetangga. (Ini analog dengan pembatasan untuk nonnegatif tepi
bobot dalam algoritma Dijkstra.) Monotonisitas berarti diterimanya ketika estimasi
heuristik setiap node tujuan itu sendiri adalah nol, karena (membiarkan P = (f, v1, v2,
..., vn, g ) menjadi jalur terpendek dari setiap node f ke terdekat g tujuan):
A* juga optimal efisien untuk setiap heuristik h, yang berarti bahwa tidak ada
algoritma optimal mempekerjakan heuristik yang sama akan memperluas node kurang
dari A*, kecuali jika ada solusi parsial beberapa di mana h persis memprediksi biaya
jalur yang optimal. Bahkan dalam kasus ini, untuk setiap grafik terdapat beberapa
urutan hubungan melanggar dalam antrian prioritas sehingga A* memeriksa node
paling sedikit mungkin (Deiling, 2009).
2.7. Heuristik
Heuristik adalah fungsi optimasi pada algoritma A* dengan cara memberi nilai pada
tiap simpul yang memandu A* mendapatkan solusi yang diinginkan. Dengan heuristik,
maka A* pasti akan mendapatkan solusi (jika memang ada solusinya). Heuristik
Universitas Sumatera Utara
13
inilah yang membedakan algoritma A* dengan algoritma pathfinding lainnya.
Heuristik dapat digunakan untuk mengontrol perilaku A*.
Pada satu ekstrim, jika h (n) adalah 0, maka hanya g (n) memainkan peran, dan
A* berubah menjadi Algoritma Dijkstra, yang dijamin untuk menemukan jalan
terpendek.
Jika h (n) selalu lebih rendah dari (atau sama dengan) biaya pindah dari n ke
tujuan, maka A* dijamin untuk menemukan jalan terpendek. Lebih rendah h (n),
semakin simpul A* mengembang, membuatnya lebih lambat.
Jika h (n) adalah persis sama dengan biaya pindah dari n ke tujuan, maka A*
hanya akan mengikuti jalan terbaik dan tidak pernah memperluas apa pun,
sehingga sangat cepat.
Jika h (n) kadang-kadang lebih besar dari biaya bergerak dari n ke tujuan, maka
A* tidak dijamin untuk menemukan jalur terpendek, tetapi dapat berjalan lebih
cepat.
Pada ekstrem yang lain, jika h (n) relatif sangat tinggi untuk g (n), maka hanya h
(n) memainkan peran, dan A* berubah menjadi Greedy Best-First-Search.
Heuristik pada Algoritma A* memilki beberapa jenis dibedakan berdasarkan berapa
arah yang digunakan, yaitu heuristik Manhattan Distance, Diagona l Distance, dan
Euclidian Distance (Peters, 2009)
2.7.1 Manhattan Distance
Manhattan Distance adalah Heuristik standar pada peta grid yang memperkenankan 4
arah gerakan. Fungsi biaya dan menemukan minimum biaya D untuk bergerak dari
satu ruang ke ruang yang berdekatan. Dalam kasus sederhana, Anda dapat mengatur D
menjadi 1. Heuristik pada grid persegi D kali jarak Manhattan, yaitu :
function heuristik(node) {
dx = abs(node.x - goal.x)
dy = abs(node.y - goal.y)
return D * (dx + dy)
}
Universitas Sumatera Utara
14
Cara memilih nilai D adalah gunakan skala yang cocok dengan bobot fungsi. Untuk
jalur terbaik, ubah nilai D menjadi bobot terendah diantara petak yang berdekatan
(Patel, 2010).
Gambar 2.6. Ilustrasi Manhattan Distance (Patel, 2010).
2.7.2. Diagonal Distance
Diagonal Distance adalah Heuristik pada peta grid yang memungkinkan gerakan
diagonal. Jika Manhatan Distance membutuhkan gerakan 4 timur dan 4 utara (8
gerakan) untuk mencapai target, menjadi 8*D.
function heuristik(node) {
dx = abs(node.x - goal.x)
dy = abs(node.y - goal.y)
return D * (dx + dy) + (D2 - 2 * D) * min(dx, dy)
}
Namun, pada diagonal distance hanya membutuhkan 4 gerakan (4 timur laut) untuk
mencapai target, sehingga heuristik menjadi 4 * D2, di mana D2 adalah biaya
bergerak diagonal.
Gambar 2.7. Ilustrasi Heuristik Diagonal Distance (Patel, 2010).
Universitas Sumatera Utara
15
Di sini menghitung jumlah langkah yang diambil tidak dapat mengambil diagonal,
kemudian kurangi langkah-langkah yang disimpan dengan menggunakan diagonal.
Ada min (dx, dy) langkah diagonal, dan masing-masing biaya D2 tapi menghemat
2*D langkah non-diagonal. Ketika D = 1 dan D2 = 1, ini disebut jarak Chebyshev.
Ketika D = 1 dan D2 = sqrt (2), ini disebut jarak octile (Patel, 2010).
2.7.3 Euclidian Distance
Jika unit dapat bergerak di setiap sudut (bukan arah grid), maka harus menggunakan
jarak garis lurus:
function heuristik (node) {
dx = abs (node.x - goal.x)
dy = abs (node.y - goal.y)
return D * sqrt (dx * dx + dy * dy)
}
Namun, jika hal ini terjadi, maka memiliki masalah dengan menggunakan A*
langsung karena fungsi biaya g tidak akan cocok dengan heuristik fungsi h. Karena
jarak Euclidean lebih pendek dari Manhattan atau jarak diagona masih akan
mendapatkan jalur terpendek, tetapi A* akan memakan waktu lebih lama untuk
menjalankan (Patel, 2010).
Gambar 2.8 Ilustrasi Heuristik Euclidian (Patel, 2010).
2.8. Android
Android merupakan sistem operasi mobile berbasis kernel linux yang dikembangkan
oleh Android Inc dan kemudian diakusisi oleh Google. Sistem operasi ini bersifat
open source sehingga para programmer dapat membuat aplikasi secara mudah. Salah
satu keunggulan Android terletak pada bervariasinya merek ponsel yang mengadopsi
sistem operasi ini. Oleh karena itu, tidak heran jika kita melihat beragam merek ponsel
menggunakan sistem operasi ini, seperti HTC, Samsung, dan lain sebagainya. Google
pun juga merilis ponsel dengan nama Google Nexus One. Fenomena ini tentu
Universitas Sumatera Utara
16
mengakibatkan kita sebagai konsumen memliki banyak pilihan dalam menggunakan
ponsel bersistem operasi Android. Tidak sama dengan iPhone yang bentuk persis
untuk setiap seri atau Blacberry yang jumlahnya terbatas, ponsel berbasis Android
memilik banyak bentuk dan merek (Jubille, 2010).
2.9. Actionscript 3.0
ActionScript adalah bahasa pemrograman berorientasi objek awalnya dikembangkan
oleh Macromedia Inc (sekarang diakusisi oleh Adobe Systems). Ini adalah derivasi
dari HyperTalk, bahasa scripting untuk HyperCard. Sekarang dialek dari ECMAScript
(artinya itu adalah superset dari sintaks dan semantik dari bahasa lebih banyak dikenal
sebagai JavaScript), meskipun awalnya muncul sebagai saudara, baik yang
dipengaruhi oleh HyperTalk.
ActionScript
3
juga
digunakan
dengan
sistem
Adobe
AIR
untuk
pengembangan desktop dan aplikasi mobile. Bahasa itu sendiri adalah open source
dalam spesifikasi yang ditawarkan gratis dan kedua kompiler open source (sebagai
bagian dari Adobe Flex) dan mesin virtual open source (Mozilla Tamarin) yang
tersedia (Spuy, 2010).
2.10.
Framework Starling
Starling adalah Framework Actionscript 3 dikembangkan di atas Stage3D API
(Application Programming Interface). Starling dirancang untuk pengembangan game,
tapi bisa digunakan untuk banyak kasus penggunaan lainnya. Starling memungkinkan
untuk menulis aplikasi GPU(Graphic Processing Unit)-accelerated tanpa harus
menyentuh level rendah Stage3D API. Kebanyakan pengembang Adobe AIR ingin
dapat memanfaatkan akselerasi GPU tanpa perlu menulis framework yang lebih
tinggi. (Imbert, 2012).
Starling dikembangkan untuk pengembang ActionScript 3, terutama mereka
yang terlibat dalam pengembangan game 2D, sehingga perlu memiliki pemahaman
dasar tentang ActionScript 3. Dengan desain ringan, fleksibel, dan sederhana. Starling
juga digunakan untuk kasus penggunaan lain seperti pemrograman UI(User Interface).
(Bose, 2013).
Universitas Sumatera Utara
17
3. Penelitian yang Relevan
Berikut ini beberapa penelitian tentang desain analisis dan algoritma yang berkaitan
dengan Algoritma A*.
No
Nama/Tahun
Judul
Hasil Penelitian
1.
Witanti,
Wina,
(2013)
Analisis pengaruh
penggunaan nilai
Heuristik Terhadap
Performansi
Algortima A*
Nilai heuristik berpengaruh terhadap
performa algoritma A* dalam mencari
rute terdekat [15].
2.
Cui, Xiao &
Shi, H
(2011)
A*based Pathfinding
in Modern Computer
Games
Cara untuk mengoptimalkan performa
pencarian
A*
adalah
dengan
meningkatkan fungsi heuristik [4].
3.
Rahayu, D. N
(2011)
Optimasi Rute
Perjalanan
Ambulance
Menggunakan
Algoritma A-Star
Lamanya proses pencarian dan
banyaknya simpul yang diperiksa
untuk pencarian jalan tergantung pada
jarak antara titik awal dan titik tujuan
[12].
Universitas Sumatera Utara
TINJAUAN PUSTAKA
Bab ini akan menjelaskan tentang pembahasan teori-teori algoritma A*.
2.1. Video Game
Video game (permainan video) adalah permainan yang menggunakan interaksi dengan
antarmuka pengguna melalui gambar yang dihasilkan oleh piranti video. Permainan
video umumnya menyediakan sistem penghargaan misalnya skor yang dihitung
berdasarkan tingkat keberhasilan yang dicapai dalam menyelesaikan tugas-tugas yang
ada di dalam permainan.
Kata "video" pada "permainan video" pada awalnya merujuk pada piranti
tampilan raster. Namun dengan semakin dipakainya istilah "video game", kini kata
permainan video dapat digunakan untuk menyebut permainan pada piranti tampilan
apapun. Sistem elektronik yang digunakan untuk menjalankan permainan video
disebut platform, contohnya adalah komputer, permainan konsol dan smartphone.
(Apperley, 2006)
2.2. Desain Analisis Algoritma
Desain Analisis Algoritma merupakan suatu cabang khusus dalam ilmu komputer
yang mempelajari karakteristik dan performa dari suatu algoritma dalam
menyelesaikan masalah (Levitin, 2011). Untuk menganalisis sebuah algoritma, kita
harus mengidentifikasi sumber primer sehingga analisis rinci dapat difokuskan dengan
benar. Sebuah analisis lengkap dari waktu berjalan dari algoritma melibatkan langkahlangkah berikut:
1. Melaksanakan algoritma sepenuhnya.
2. Tentukan waktu yang dibutuhkan untuk setiap operasi dasar. Mengidentifikasi
jumlah yang tidak diketahui yang dapat digunakan untuk menggambarkan
frekuensi pelaksanaan operasi dasar.
3. Mengembangkan model yang realistis untuk input ke program.
4. Menganalisis jumlah yang tidak diketahui, dengan asumsi input yang dimodelkan.
Universitas Sumatera Utara
7
5. Hitung total waktu berjalan dengan mengalikan waktu dengan frekuensi untuk
setiap operasi, kemudian menambahkan semua produk.
Langkah pertama dalam analisis ini adalah untuk hati-hati menerapkan algoritma pada
komputer tertentu. Sebuah implementasi tertentu tidak hanya menyediakan objek
konkret untuk belajar, tetapi juga dapat memberikan data empiris yang berguna untuk
membantu dalam atau untuk memeriksa analisis.
Langkah berikutnya adalah untuk memperkirakan waktu yang dibutuhkan oleh
masing-masing instruksi komponen program. Pendekatan lain adalah dengan hanya
menjalankan program untuk input kecil ukuran untuk "estimasi" nilai-nilai konstanta,
atau untuk melakukannya secara tidak langsung dalam agregat.
Langkah berikutnya adalah untuk model input ke program, untuk membentuk
dasar
untuk
analisis
matematis
dari
frekuensi
instruksi.
Nilai
dari
frekuensi diketahui tergantung pada masukan untuk algoritma: masalah ukuran
parameter utama yang digunakan untuk mengungkapkan hasil (Sedgewick, 2013).
2.3. Teori Graf
Graf adalah himpunan benda-benda yang disebut "simpul" (vertex atau node) yang
terhubung oleh sisi (edge) atau busur (arc). Biasanya graf digambarkan sebagai
kumpulan titik-titik (melambangkan "simpul") yang dihubungkan oleh garis-garis
(melambangkan "sisi") atau garis berpanah (melambangkan "busur"). Suatu sisi dapat
menghubungkan suatu simpul dengan simpul yang sama. Sisi yang demikian
dinamakan "gelang" (loop). Graf G didefinisikan sebagai pasangan himpuna (V,E).
2.4. Jenis-Jenis Graf
Jenis graf dibedakan atas 3 karakteristik yaitu, berdasarkan sisi ganda (berdasarkan
ada tidaknya suatu gelang), arah (berdasarkan arah dari sisi) , dan berdasarkan pada
bobot sisinya (Bondy, 2008).
Universitas Sumatera Utara
8
2.4.1. Berdasarkan sisi ganda
Berdasarkan ada tidaknya gelang atau sisi ganda pada suatu graf, maka secara
umum graf dapat digolongkan menjadi dua jenis:
1. Graf sederhana, graf yang tidak mengandung gelang maupun sisi ganda
dinamakan graf sederhana.
2. Graf tak-sederhana, graf yang mengandung sisi ganda dinamakan graf taksederhana. Ada dua macam graf tak sederhana, yaitu graf ganda dan graf semu.
Graf ganda adalah graf yang mengandung sisi ganda. Sebuah graf memiliki
sisi ganda jika ada 2 buah simpulyang dihubungkan lebih dari satu sisi. Graf
semu adalah graf yang memiliki sisi gelang (loop). Sisi gelang adalah sisi yang
menghubungkan sebuah simpul dengan simpul itu sendiri.
Gambar 2.1 Graf sederhana(G1), Graf Ganda (G2), Graf Semu(G3) (Munir, 2009)
2.4.2. Berdasarkan arah
Berdasarkan arah dari sisi, graf dibedakan menjadi 2 jenis :
1. Graf tak-berarah
Graf yang sisinya tidak memiliki orientasi arah disebut graf tak-berarah. Pada graf
tak-berarah, urutan pasangan simpul pada sisi tidak diperhatikan. Sebuah sisi e
= (u, v) sama dengan e = (v, u).
Gambar 2.2 Graf tidak berarah (Munir, 2009)
Universitas Sumatera Utara
9
2. Graf Berarah
Graf yang setiap sisinya memiliki orientasi arah disebuh graf berarah. Pada graf
berarah, sebuah sisi dikenal juga sebagai busur (arc). Pada graf berarah, (u, v) dan
(v, u) menyatakan dua buah sisi yang berbeda. Pada sebuah sisi (u, v), simpul u
menyatakan simpul asal (initial vertex) dan simpul v menyatakan simpul terminal
(terminal vertex).
Gambar 2.3 Graf berarah (Munir, 2009)
2.4.3. Berdasarkan bobot
1. Graf berbobot (weighted graph)
Graf berbobot adalah graf yang setiap sisinya memiliki bobot. Bobot pada sisi
graf dapat merepresentasikan kapasitas, biaya, atau keuntungan.
Gambar 2.4. Graf berbobot (Munir, 2009)
2. Graf tak-berbobot (unweighted graph)
Graf tak-berbobot adalah graf yang setiap sisinya tidak memiliki bobot.
Graph 2.5 Graf tak berbobot (Munir, 2009).
Universitas Sumatera Utara
10
2.5. Pathfinding
Pathfinding adalah suatu metode yang digunakan untuk pencarian jalur yang bertujuan
untuk mencapai suatu tempat tujuan dari tempat awal. Cara kerja metode pathfinding
adalah dengan mencari sebuah grafik dengan memulai pada satu titik dan menjelajahi
node yang berdekatan sampai node tujuan tercapai, umumnya dengan maksud untuk
menemukan rute terpendek. Namun, tidak perlu untuk memeriksa semua jalur yang
mungkin untuk menemukan satu yang optimal. Dalam sistem-perjalanan routing yang
praktis, kompleksitas waktu yang lebih baik dapat dicapai dengan algoritma yang
dapat pra-proses grafik untuk mencapai kinerja yang lebih baik. (Deiling, 2009).
2.6. Algoritma A*
Algoritma A* adalah pengembangan dari algoritma Djikstra yaitu suatu algoritma
yang bertujuan untuk memproses perencanaan jalur yang efisien di antara beberapa
titik (node) dengan menggunakan heuristik. Peter Hart, Nils Nilsson dan Bertram
Raphael dari Stanford Research Institute memperkenalkan algoritma ini pada tahun
1968 (Deiling, 2009).
A* menggunakan pencarian terbaik pertama dan menemukan jalan dengan
biaya terendah dari node awal yang diberikan ke satu node tujuan. A* melintasi grafik
untuk membangun sebuah pohon jalur parsial. Daun pohon ini (disebut set atau
pinggiran terbuka) disimpan dalam antrian prioritas yang memerintahkan node daun
dengan fungsi biaya, yang menggabungkan perkiraan heuristik dari biaya untuk
mencapai tujuan dan jarak yang ditempuh dari node awal. Secara khusus, fungsi
biaya:
f (n) = g (n) + h (n).
Di sini, g (n) adalah biaya diketahui mendapatkan dari node awal untuk nilai
ini dilacak oleh algoritma. h (n) adalah perkiraan heuristik dari biaya untuk
mendapatkan dari n ke setiap node tujuan. Untuk algoritma untuk menemukan jalur
terpendek yang sebenarnya, fungsi heuristik harus diterima, artinya tidak pernah
overestimates biaya yang sebenarnya untuk sampai ke node tujuan terdekat. Fungsi
heuristik adalah spesifik masalah dan harus disediakan oleh pengguna dari algoritma.
Beberapa terminologi dasar yang terdapat pada algoritma A* adalah starting
point, simpul (nodes), open list, closed list, harga (cost), halangan (unwalkable).
Universitas Sumatera Utara
11
Starting point adalah sebuah terminologi untuk posisi awal sebuah benda. Simpul
adalah petak-petak kecil sebagai representasi dari area pathfinding. Bentuknya dapat
berupa persegi, lingkaran, maupun segitiga. Open list adalah tempat menyimpan data
simpul yang mungkin diakses dari starting point maupun simpul yang sedang
dijalankan. Closed list adalah tempat menyimpan data simpul sebelum A yang juga
merupakan bagian dari jalur terpendek yang telah berhasil didapatkan. Simpul tujuan
yaitu simpul yang dituju. Halangan adalah sebuah atribut yang menyatakan bahwa
sebuah simpul tidak dapat dilalui oleh A. Prinsip algoritma ini adalah mencari jalur
terpendek dari sebuah starting point menuju simpul tujuan dengan memperhatikan
harga (F) terkecil (Munir, 1998).
2.6.1 Cara Kerja
Dimulai dengan node awal, ia mempertahankan antrian prioritas node yang akan
dilalui, dikenal sebagai set atau pinggiran terbuka. Semakin rendah f (x) untuk
diberikan simpul x, semakin tinggi prioritas. Pada setiap langkah algoritma, node
dengan f (x) nilai terendah akan dihapus dari antrian, f dan g nilai tetangganya
diperbarui sesuai, dan tetangga ini ditambahkan ke antrian. Algoritma terus sampai
node tujuan memiliki nilai f rendah dari setiap node dalam antrian (atau sampai
antrian kosong). (Node Goal dapat melewati beberapa kali jika masih ada node lain
dengan nilai f yang lebih rendah, karena dapat menyebabkan jalan yang lebih pendek
untuk tujuan.) Nilai f dari tujuannya adalah maka panjang jalur terpendek, karena jam
pada tujuannya adalah nol dalam heuristik diterima.
Algoritma yang dijelaskan sejauh memberi kita hanya panjang jalur terpendek.
Untuk menemukan urutan yang sebenarnya dari langkah-langkah, algoritma dapat
dengan mudah direvisi sehingga setiap node di jalan melacak pendahulunya. Setelah
algoritma ini dijalankan, node berakhir akan mengarah ke pendahulunya, dan
seterusnya, sampai pendahulunya beberapa node adalah node awal.Selain itu, jika
heuristik yang monoton (atau konsisten, lihat di bawah), satu set tertutup node sudah
dilalui dapat digunakan untuk membuat pencarian lebih efisien. (Deiling, 2009).
Universitas Sumatera Utara
12
2.6.2. Sifat Algoritma A*
A* selesai dan akan selalu mencari solusi jika ada. Jika heuristik fungsi h adalah
diterima, artinya tidak pernah overestimates biaya minimal sebenarnya mencapai
tujuan, maka A* itu sendiri diterima (atau optimal) jika kita tidak menggunakan satu
set tertutup. Jika satu set tertutup digunakan, maka h juga harus monoton (atau
konsisten) untuk A* menjadi optimal. Ini berarti bahwa untuk setiap pasangan node
yang berdekatan x dan y, di mana d (x, y) menunjukkan panjang dari tepi antara
mereka, kita harus memiliki:
Hal ini memastikan bahwa untuk setiap jalur X dari node awal untuk x:
dimana L adalah fungsi yang menunjukkan panjang jalan, dan Y adalah jalan X
diperluas untuk mencakup y. Dengan kata lain, tidak mungkin untuk menurunkan
(total jarak sejauh + diperkirakan jarak yang tersisa) dengan memperluas jalan untuk
memasukkan node tetangga. (Ini analog dengan pembatasan untuk nonnegatif tepi
bobot dalam algoritma Dijkstra.) Monotonisitas berarti diterimanya ketika estimasi
heuristik setiap node tujuan itu sendiri adalah nol, karena (membiarkan P = (f, v1, v2,
..., vn, g ) menjadi jalur terpendek dari setiap node f ke terdekat g tujuan):
A* juga optimal efisien untuk setiap heuristik h, yang berarti bahwa tidak ada
algoritma optimal mempekerjakan heuristik yang sama akan memperluas node kurang
dari A*, kecuali jika ada solusi parsial beberapa di mana h persis memprediksi biaya
jalur yang optimal. Bahkan dalam kasus ini, untuk setiap grafik terdapat beberapa
urutan hubungan melanggar dalam antrian prioritas sehingga A* memeriksa node
paling sedikit mungkin (Deiling, 2009).
2.7. Heuristik
Heuristik adalah fungsi optimasi pada algoritma A* dengan cara memberi nilai pada
tiap simpul yang memandu A* mendapatkan solusi yang diinginkan. Dengan heuristik,
maka A* pasti akan mendapatkan solusi (jika memang ada solusinya). Heuristik
Universitas Sumatera Utara
13
inilah yang membedakan algoritma A* dengan algoritma pathfinding lainnya.
Heuristik dapat digunakan untuk mengontrol perilaku A*.
Pada satu ekstrim, jika h (n) adalah 0, maka hanya g (n) memainkan peran, dan
A* berubah menjadi Algoritma Dijkstra, yang dijamin untuk menemukan jalan
terpendek.
Jika h (n) selalu lebih rendah dari (atau sama dengan) biaya pindah dari n ke
tujuan, maka A* dijamin untuk menemukan jalan terpendek. Lebih rendah h (n),
semakin simpul A* mengembang, membuatnya lebih lambat.
Jika h (n) adalah persis sama dengan biaya pindah dari n ke tujuan, maka A*
hanya akan mengikuti jalan terbaik dan tidak pernah memperluas apa pun,
sehingga sangat cepat.
Jika h (n) kadang-kadang lebih besar dari biaya bergerak dari n ke tujuan, maka
A* tidak dijamin untuk menemukan jalur terpendek, tetapi dapat berjalan lebih
cepat.
Pada ekstrem yang lain, jika h (n) relatif sangat tinggi untuk g (n), maka hanya h
(n) memainkan peran, dan A* berubah menjadi Greedy Best-First-Search.
Heuristik pada Algoritma A* memilki beberapa jenis dibedakan berdasarkan berapa
arah yang digunakan, yaitu heuristik Manhattan Distance, Diagona l Distance, dan
Euclidian Distance (Peters, 2009)
2.7.1 Manhattan Distance
Manhattan Distance adalah Heuristik standar pada peta grid yang memperkenankan 4
arah gerakan. Fungsi biaya dan menemukan minimum biaya D untuk bergerak dari
satu ruang ke ruang yang berdekatan. Dalam kasus sederhana, Anda dapat mengatur D
menjadi 1. Heuristik pada grid persegi D kali jarak Manhattan, yaitu :
function heuristik(node) {
dx = abs(node.x - goal.x)
dy = abs(node.y - goal.y)
return D * (dx + dy)
}
Universitas Sumatera Utara
14
Cara memilih nilai D adalah gunakan skala yang cocok dengan bobot fungsi. Untuk
jalur terbaik, ubah nilai D menjadi bobot terendah diantara petak yang berdekatan
(Patel, 2010).
Gambar 2.6. Ilustrasi Manhattan Distance (Patel, 2010).
2.7.2. Diagonal Distance
Diagonal Distance adalah Heuristik pada peta grid yang memungkinkan gerakan
diagonal. Jika Manhatan Distance membutuhkan gerakan 4 timur dan 4 utara (8
gerakan) untuk mencapai target, menjadi 8*D.
function heuristik(node) {
dx = abs(node.x - goal.x)
dy = abs(node.y - goal.y)
return D * (dx + dy) + (D2 - 2 * D) * min(dx, dy)
}
Namun, pada diagonal distance hanya membutuhkan 4 gerakan (4 timur laut) untuk
mencapai target, sehingga heuristik menjadi 4 * D2, di mana D2 adalah biaya
bergerak diagonal.
Gambar 2.7. Ilustrasi Heuristik Diagonal Distance (Patel, 2010).
Universitas Sumatera Utara
15
Di sini menghitung jumlah langkah yang diambil tidak dapat mengambil diagonal,
kemudian kurangi langkah-langkah yang disimpan dengan menggunakan diagonal.
Ada min (dx, dy) langkah diagonal, dan masing-masing biaya D2 tapi menghemat
2*D langkah non-diagonal. Ketika D = 1 dan D2 = 1, ini disebut jarak Chebyshev.
Ketika D = 1 dan D2 = sqrt (2), ini disebut jarak octile (Patel, 2010).
2.7.3 Euclidian Distance
Jika unit dapat bergerak di setiap sudut (bukan arah grid), maka harus menggunakan
jarak garis lurus:
function heuristik (node) {
dx = abs (node.x - goal.x)
dy = abs (node.y - goal.y)
return D * sqrt (dx * dx + dy * dy)
}
Namun, jika hal ini terjadi, maka memiliki masalah dengan menggunakan A*
langsung karena fungsi biaya g tidak akan cocok dengan heuristik fungsi h. Karena
jarak Euclidean lebih pendek dari Manhattan atau jarak diagona masih akan
mendapatkan jalur terpendek, tetapi A* akan memakan waktu lebih lama untuk
menjalankan (Patel, 2010).
Gambar 2.8 Ilustrasi Heuristik Euclidian (Patel, 2010).
2.8. Android
Android merupakan sistem operasi mobile berbasis kernel linux yang dikembangkan
oleh Android Inc dan kemudian diakusisi oleh Google. Sistem operasi ini bersifat
open source sehingga para programmer dapat membuat aplikasi secara mudah. Salah
satu keunggulan Android terletak pada bervariasinya merek ponsel yang mengadopsi
sistem operasi ini. Oleh karena itu, tidak heran jika kita melihat beragam merek ponsel
menggunakan sistem operasi ini, seperti HTC, Samsung, dan lain sebagainya. Google
pun juga merilis ponsel dengan nama Google Nexus One. Fenomena ini tentu
Universitas Sumatera Utara
16
mengakibatkan kita sebagai konsumen memliki banyak pilihan dalam menggunakan
ponsel bersistem operasi Android. Tidak sama dengan iPhone yang bentuk persis
untuk setiap seri atau Blacberry yang jumlahnya terbatas, ponsel berbasis Android
memilik banyak bentuk dan merek (Jubille, 2010).
2.9. Actionscript 3.0
ActionScript adalah bahasa pemrograman berorientasi objek awalnya dikembangkan
oleh Macromedia Inc (sekarang diakusisi oleh Adobe Systems). Ini adalah derivasi
dari HyperTalk, bahasa scripting untuk HyperCard. Sekarang dialek dari ECMAScript
(artinya itu adalah superset dari sintaks dan semantik dari bahasa lebih banyak dikenal
sebagai JavaScript), meskipun awalnya muncul sebagai saudara, baik yang
dipengaruhi oleh HyperTalk.
ActionScript
3
juga
digunakan
dengan
sistem
Adobe
AIR
untuk
pengembangan desktop dan aplikasi mobile. Bahasa itu sendiri adalah open source
dalam spesifikasi yang ditawarkan gratis dan kedua kompiler open source (sebagai
bagian dari Adobe Flex) dan mesin virtual open source (Mozilla Tamarin) yang
tersedia (Spuy, 2010).
2.10.
Framework Starling
Starling adalah Framework Actionscript 3 dikembangkan di atas Stage3D API
(Application Programming Interface). Starling dirancang untuk pengembangan game,
tapi bisa digunakan untuk banyak kasus penggunaan lainnya. Starling memungkinkan
untuk menulis aplikasi GPU(Graphic Processing Unit)-accelerated tanpa harus
menyentuh level rendah Stage3D API. Kebanyakan pengembang Adobe AIR ingin
dapat memanfaatkan akselerasi GPU tanpa perlu menulis framework yang lebih
tinggi. (Imbert, 2012).
Starling dikembangkan untuk pengembang ActionScript 3, terutama mereka
yang terlibat dalam pengembangan game 2D, sehingga perlu memiliki pemahaman
dasar tentang ActionScript 3. Dengan desain ringan, fleksibel, dan sederhana. Starling
juga digunakan untuk kasus penggunaan lain seperti pemrograman UI(User Interface).
(Bose, 2013).
Universitas Sumatera Utara
17
3. Penelitian yang Relevan
Berikut ini beberapa penelitian tentang desain analisis dan algoritma yang berkaitan
dengan Algoritma A*.
No
Nama/Tahun
Judul
Hasil Penelitian
1.
Witanti,
Wina,
(2013)
Analisis pengaruh
penggunaan nilai
Heuristik Terhadap
Performansi
Algortima A*
Nilai heuristik berpengaruh terhadap
performa algoritma A* dalam mencari
rute terdekat [15].
2.
Cui, Xiao &
Shi, H
(2011)
A*based Pathfinding
in Modern Computer
Games
Cara untuk mengoptimalkan performa
pencarian
A*
adalah
dengan
meningkatkan fungsi heuristik [4].
3.
Rahayu, D. N
(2011)
Optimasi Rute
Perjalanan
Ambulance
Menggunakan
Algoritma A-Star
Lamanya proses pencarian dan
banyaknya simpul yang diperiksa
untuk pencarian jalan tergantung pada
jarak antara titik awal dan titik tujuan
[12].
Universitas Sumatera Utara