• Tidak ada hasil yang ditemukan

Penerapan Algoritma A*(A Star) Dalam Pencarian Jalan Terpendek Pada Game Pathfinding

N/A
N/A
Protected

Academic year: 2017

Membagikan "Penerapan Algoritma A*(A Star) Dalam Pencarian Jalan Terpendek Pada Game Pathfinding"

Copied!
168
0
0

Teks penuh

(1)

ii

APPLICATION OF A* (A STAR) ALGORITHM IN THE SHORTEST PATH SEARCH ON PATHFINDING GAME

by

Dewi Nurul Rahayu 10106407

Pathfinding game is a game to find the shortest path from the starting point towards the destination point on a map. Pathfinding game made with AI (Artificial Intelligence) implement a specific A* (A Star) algorithm. This algorithm is used to determine the choice of the shortest path to destination point. To determine the performance in terms of search time, the total of steps from a starting point toward the destination point and the node that is checked in pathfinding game.

Implementation of A* algorithm in pathfinding game are based on the A* procedure to obtain the best move from the position of starting point. A * Algorithm is a improvement of the best-first search (BFS) method using the heuristic function. Heuristic function is also called f (n) which is the determination of the sequence point to be visited first. Heuristic function is actually symbolize how well or maybe point visited to reach the destination point. A * will minimize the total cost of the track and will provide the best solutions in optimal time. This application was created using Borland Delphi 7.0.

The results of testing this application, other than get on a path to destination map and the tracking branches, algorithm A * search provides of search results path which is the optimal shortest path. Alpha test resulting by A* search in a total steps of smaller, but node of checked is bigger so take a long time. Performance level resulting A * depends on the position of starting point, destination point, the barrier and heuristic value.

(2)

i

PENCARIAN JALAN TERPENDEK PADA GAMEPATHFINDING

Oleh

Dewi Nurul Rahayu 10106407

Game pathfinding merupakan game untuk mencari jalan terpendek dari

titik awal menuju titik tujuan pada sebuah map. Game pathfinding yang dibuat dengan AI (Artificial Intelligence) tersebut menerapkan algoritma A* (A Star). Algoritma ini digunakan untuk menentukan pilihan jalan terpendek menuju titik

tujuan. Untuk mengetahui performansi dalam hal waktu pencarian, jumlah langkah

dari titik awal menuju titik tujuan dan simpul yang diperiksa pada game

pathfinding.

Penerapan algoritma A* dalam game pathfinding dibuat berdasarkan

prosedur A*untuk mendapatkan langkah terbaik dari posisi titik awal. Algoritma A*

merupakan perbaikan dari metode best-first search (BFS) dengan menggunakan fungsi heuristic. Fungsi heuristic sering juga disebut f(n) yang merupakan penentuan urutan titik yang akan dikunjungi terlebih dahulu. Fungsi heuristic ini sebenarnya menyimbolkan seberapa baik atau mungkin titik yang dikunjungi untuk mencapai titik tujuan. A* akan meminimumkan total biaya lintasan dan akan memberikan solusi yang terbaik dalam waktu yang optimal. Aplikasi ini dibuat menggunakan Borland Delphi 7.0.

Hasil pengujian aplikasi ini, selain didapatkan jalan menuju tujuan pada sebuah map dan pelacakan cabangnya, algoritma A* search memberikan hasil pencarian jalan optimal yang merupakan jalan terpendek. Pengujian alpha yang dihasilkan oleh A* search dalam jumlah langkah lebih kecil, tetapi simpul yang diperiksa lebih besar sehingga memerlukan waktu yang lama. Tingkat performansi yang dihasilkan A* tergantung pada posisi titik awal, titik tujuan, penghalang dan nilai heuristic.

(3)

1

BAB I

PENDAHULUAN

I.1 Latar Belakang

Seiring dengan kemajuan teknologi yang semakin pesat, kini teknologi mampu mengadopsi proses dan cara berpikir seperti manusia yaitu artificial

intellegence (kecerdasan buatan). Tanpa memiliki kemampuan untuk menalar

dengan baik, manusia dengan segudang pengalaman dan pengetahuan tidak akan dapat menyelesaikan masalah dengan baik. Namun bekal pengetahuan dan pengalaman yang memadai, manusia juga tidak akan bisa menyelesaikan masalah dengan baik. Permasalahan tersebut dapat diatasi dengan sebuah aplikasi yang dapat menyelesaikan masalah sesuai kebutuhan. Agar suatu aplikasi tersebut dapat bertindak seperti manusia, maka harus dibekali pengetahuaan dan mempunyai kemampuan untuk menalar. Lebih detailnya, pengertian kecerdasan buatan dapat dipandang dari berbagai sudut pandang salah satunya sudut pandang penelitian. Domain yang sering dibahas oleh para peneliti salah satunya formal task yang diterapkan pada permainan atau games.

(4)

A*. Algoritma ini dapat menyelesaikan permasalahan secara optimal untuk menemukan jalan terpendek menuju suatu tujuan.

Algoritma A* dapat dipakai untuk pencarian langkah pada berbagai macam

game puzzle. Algoritma ini juga dapat digunakan untuk pathfinding atau

pencarian jalan suatu karakter untuk sampai ke tujuan,dalam proses pencariannya akan dimodelkan dengan fungsi heuristic. A* (A Star) menggunakan fungsi

heuristic yang sering juga disebut f(n) yang merupakan penentuan urutan titik

mana yang akan dikunjungi terlebih dahulu. Fungsi heuristic ini sebenarnya menyimbolkan seberapa baik/mungkin titik itu dikunjungi untuk mencapai titik tujuan. A* juga akan meminimumkan total biaya lintasan, pada kondisi yang tepat A* akan memberikan solusi yang terbaik dalam waktu yang optimal. Algoritma A* adalah pengembangan dari best-first search (BFS) yang digunakan untuk mencari jalan terpendek (shortest path) yang sering dipakai dalam game

programming, salah satunya akan diterapkan pada game pathfinding.

Berdasarkan latar belakang masalah di atas, penulis tertarik untuk mengambil pokok bahasan skripsi dengan judul “PENERAPAN ALGORITMA A* (A STAR) DALAM PENCARIAN JALAN TERPENDEK PADA GAME

PATHFINDING”.

I.2 Perumusan Masalah

Berdasarkan latar belakang masalah yang telah diuraikan di atas, yang menjadi pokok permasalahan adalah sebagai berikut :

(5)

2. Bagaimana menerapkan algoritma A* untuk mencari jalan terpendek pada

game pathfinding.

I.3 Maksud dan Tujuan

Maksud dari penulisan skripsi ini adalah menerapkan metode algoritma A*

(A Star) dalam pencarian jalan terpendek pada game pathfinding.

Adapun tujuan dari penulisan skripsi ini adalah :

1. Mengetahui performansi waktu pencarian, jarak dan simpul yang diperiksa dari titik awal menuju titik tujuan dengan algoritma A* (A Star) yang diterapkan dalam pencarian jalan terpendek pada game pathfinding.

2. Menerapkan algoritma A* untuk mencari jalan terpendek pada game pathfinding.

I.4 Batasan Masalah

Agar pembahasan menjadi terarah, maka permasalahan akan dibatasi terhadap masalah-masalah berikut ini:

1. Jalan yang dihasilkan dari titik awal ke titik tujuan yang akan dibuat bersifat

artificial intelligence, dengan menggunakan metode algoritma A* untuk

penyelesaian masalah pencariannya.

2. Dalam pencarian jalan pada game pathfinding disediakan ruang kosong yang berupa grid (kotak).

3. Pada ruang kosong user dapat menambahkan penghalang berupa tembok, pohon maupun keduanya untuk membuat jalur penghalang.

(6)

5. Dapat menampilkan jalur pencarian dari titik awal ke titik tujuan dengan algoritma A*.

6. Untuk algoritma A* nilai heuristik dapat dipilih dari rentang 0,1 sampai 10, agar dapat terlihat perbedaan yang signifikan pada performansi yang akan dihasilkan.

7. Analisis pembangunan perangkat lunak ini menggunakan analisis aliran data terstruktur. Alat bantu yang digunakan adalah diagram konteks dan DFD

(Diagram Flow Diagram).

8. Tools yang digunakan untuk membangun aplikasi ini menggunakan bahasa

pemrograman Borland Delphi 7.0. I.5 Metodologi Penelitian

Metodologi yang digunakan dalam penulisan skripsi ini adalah sebagai berikut :

1. Tahap pengumpulan data

Metode studi pustaka merupakan kegiatan pengumpulan data dengan mempelajari buku - buku, karya ilmiah, koleksi perpustakaan dan sumber dari internet yang berkaitan erat dengan materi bahasan dalam penulisan skripsi ini. 2. Tahap pembuatan perangkat lunak

Tahapan dalam pembuatan perangkat lunak ini akan menggunakan model

waterfall. Model ini melakukan pendekatan secara sistematis dan urut mulai

dari level kebutuhan sistem lalu menuju ke tahap pengumpulan data, analisis, perancangan, pengodean, pengujian, dan perawatan. Disebut dengan waterfall

(7)

sebelumnya dan berjalan berurutan, sebagai contoh tahap desain harus menunggu selesainya tahap sebelumnya yaitu tahap requirement. Secara umum tahapan pada model waterfall dapat dilihat pada gambar I.1. [11]

Gambar I.1. Model Waterfall a. Rekayasa Sistem

Tahap ini merupakan kegiatan pengumpulan data sebagai pendukung pembangunan sistem serta menentukan ke arah mana aplikasi ini akan dibangun.

b. Analisis Sistem

(8)

algoritma yang akan dipakai dalam pencarian jalur terpendek pada game

pathfinding.

c. Perancangan Sistem

Tahap ini merupakan kegiatan menterjemahkan analisis kebutuhan ke dalam bentuk rancangan sebelum penyusunan program yang berupa perancangan

antarmuka dan merancang prosedur (algoritma).

d. Pengodean Sistem

Tahap ini merupakan tahapan penterjemahan hasil perancangan kedalam program-program yang menggunakan bahasa pemrograman yang telah ditentukan.

e. Pengujian Sistem

Program yang telah dibuat harus diuji, proses pengujian difokuskan pada kebenaran logika internal perangkat lunak dan fungsional sistem.

f. Pemeliharaan sistem

Pemeliharaan suatu perangkat lunak diperlukan, termasuk di dalamnya adalah pengembangan, karena perangkat lunak yang dibuat tidak selamanya hanya seperti itu. Ketika dijalankan mungkin saja masih ada errors kecil yang tidak ditemukan sebelumnya, atau ada penambahan fitur-fitur yang belum ada pada perangkat lunak tersebut, seperti penyesuaian atau perubahan karena adaptasi dengan situasi yang sebenarnya. [11]

g. Umpan balik

(9)

I.6 Sistematika Penulisan

Pada sistematika penulisan laporan, penulis membagi dalam beberapa bab dengan pokok-pokok permasalahannya. Sistematika secara umum adalah sebagai berikut :

BAB I PENDAHULUAN

Bab I akan membahas mengenai latar belakang, perumusan masalah, maksud dan tujuan, batasan masalah, metodologi penelitian serta sistematika penulisan.

BAB II LANDASAN TEORI

Bab II akan berisi tentang bahan, teori dan konsep yang digunakan sebagai landasan atau acuan yang diperlukan terhadap analisis dan perancangan sistem hingga implementasi dan pengujian.

BAB III ANALISIS DAN PERANCANGAN SISTEM

Bab III terbagi menjadi dua bagian yaitu analisis dan perancangan sistem. Bagian analisis sistem yaitu deskripsi masalah, analisis kasus, analisis masalah, analisis kebutuhan, menguraikan cara pemecahan masalah dengan menggunakan algoritma A*, kemudian akan dilakukan analisis terhadap algoritma A* untuk mengetahui performansi dalam rangka mencari jalan terpendek pada game

pathfinding. Selain itu terdapat perancangan sistem yang terbagi menjadi

(10)

BAB IV IMPLEMENTASI DAN PENGUJIAN

Bab ini menjelaskan implementasi dari hasil analisis dan perancangan yang telah dibuat ke dalam bentuk aplikasi pemograman, kemudian dilakukan pengujian terhadap aplikasi yang dibangun.

BAB V KESIMPULAN DAN SARAN

(11)

9 II.1 Kecerdasan Buatan

Artificial Intelligence (AI) atau kecerdasan buatan merupakan cabang dari

ilmu komputer yang berhubungan dengan pengautomatisasian tingkah laku cerdas. Pernyataan tersebut juga dapat dijadikan definisi dari AI. Definisi ini menunjukkan bahwa AI adalah bagian dari komputer sehingga harus didasarkan pada sound theoretical (teori suara) dan prinsip-prinsip aplikasi dari bidangnya. Prinsip-prinsip ini meliputi struktur data yang digunakan dalam representasi pengetahuan, algoritma yang diperlukan untuk mengaplikasikan pengetahuan tersebut, serta bahasa dan teknik pemrograman yang digunakan dalam mengimplementasikannya.

Dari beberapa perspektif, AI dapat dipandang sebagai:

1. Dari perspektif kecerdasan, AI adalah bagaimana membuat mesin yang cerdas dan dapat melakukan hal-hal yang sebelumnya hanya dapat dilakukan manusia.

2. Dari perspektif bisnis, AI adalah sekelompok alat bantu (tools) yang berdayaguna dan metodologi yang menggunakan alat-alat bantu tersebut untuk menyelesaikan masalah-masalah bisnis.

(12)

4. Dari perspektif penelitian:

a. Riset tentang AI dimulai pada awal tahun 1960-an, percobaan pertama adalah membuat program permainan catur, membuktikan teori, dan

general problem solving.

b. Artificial intelligence adalah nama pada akar dari studi area.

Ada dua hal yang sangat mendasar mengenai penelitian-penelitian AI, yaitu knowledge representation (representasi pengetahuan) dan search

(pelacakan). Para peneliti AI terus mengembangkan berbagai jenis teknik baru dalam menangani sejumlah permasalahan yang tergolong ke dalam AI seperti

vision dan percakapan, pemrosesan bahasa alami, dan permasalahan khusus

seperti diagnosa medis.

AI seperti bidang ilmu lainnya juga memiliki sejumlah sub-disiplin ilmu yang sering digunakan untuk pendekatan yang esensial bagi penyelesaian suatu masalah dan dengan aplikasi bidang AI yang berbeda. Gambar II.1 merupakan sejumlah bidang-bidang tugas (task domains) dari AI.

(13)

Aplikasi penggunaan AI dapat dibagi ke dalam tiga kelompok, yaitu :

a. Mundane task

Secara harfiah, arti mundane adalah keduniaan. Di sini, AI digunakan untuk melakukan hal-hal yang sifatnya duniawi atau melakukan kegiatan yang dapat membantu manusia. Contohnya :

1. Persepsi (vision & speech).

2. Bahasa alami (understanding, generation & translation). 3. Pemikiran yang bersifat commonsense.

4. Robot control.

b. Formal task

AI digunakan untuk melakukan tugas-tugas formal yang selama ini manusia biasa lakukan dengan lebih baik. Contohnya :

1. Permainan/games.

2. Matematika (geometri, logika, kalkulus, integral, pembuktian).

c. Expert task

AI dibentuk berdasarkan pengalaman dan pengetahuan yang dimiliki oleh para ahli. Penggunaan ini dapat membantu para ahli untuk menyampaikan ilmu-ilmu yang mereka miliki. Contohnya :

1. Analisis finansial 2. Analisis medikal

3. Analisis ilmu pengetahuan

(14)

Aplikasi Artificial Intelegent memiliki dua bagian utama, yaitu :

a. Basis Pengetahuan (Knowledge Base) : berisi fakta - fakta, teori, pemikiran dan hubungan antara satu dengan lainnya.

b. Motor Inferensi (Inference Engine) : kemampuan menarik kesimpulan berdasarkan pengalaman.

Gambar II.2. Penerapan konsep kecerdasan buatan di komputer [8] II.2 Teknik-Teknik Dasar Pencarian

Pencarian atau pelacakan merupakan salah satu teknik untuk menyelesaikan permasalahan AI. Keberhasilan suatu sistem salah satunya ditentukan oleh kesuksesan dalam pencarian dan pencocokan. Teknik dasar pencarian memberikan suatu kunci bagi banyak sejarah penyelesaian yang penting dalam bidang AI. Ada beberapa aplikasi yang menggunakan teknik pencarian ini, yaitu :

1. Papan game dan puzzle (tic-tac-toe, catur, menara hanoi).

2. Penjadwalan dan masalah routing (travelling salesman problem).

3. Parsing bahasa dan inteprestasinya (pencarian struktur dan arti).

4. Logika pemrograman (pencarian fakta dan implikasinya).

5. Computer vision dan pengenalan pola.

(15)

Pencarian adalah proses mencari solusi dari suatu permasalahan melalui sekumpulan kemungkinan ruang keadaan (state space). Ruang keadaan merupakan suatu ruang yang berisi semua keadaan yang mungkin. Kondisi suatu pencarian meliputi :

1. Keadaan sekarang atau awal.

2. Keadaan tujuan-solusi yang dijangkau dan perlu diperiksa apakah telah mencapai sasaran.

3. Biaya atau nilai yang diperoleh dari solusi.

Solusi merupakan suatu lintasan dari keadaan awal sampai keadaan tujuan. Secara umum, proses pencarian dapat dilakukan seperti berikut :

1. Memeriksa keadaan sekarang atau awal.

2. Mengeksekusi aksi yang dibolehkan untuk memindahkan ke keadaan berikutnya.

3. Memeriksa jika keadaan baru merupakan solusinya. Jika tidak, keadaan baru tersebut menjadi keadaan sekarang dan proses ini diulangi sampai solusi ditemukan atau ruang keadaan habis terpakai. [8]

II.2.1 Masalah Pencarian

(16)

1. State space (ruang keadaan).

2. Start node (permukaan simpul).

3. Kondisi tujuan dan uji untuk mengecek apakah kondisi tujuan ditemukan atau tidak.

4. Kaidah yang memberikan bagaimana mengubah keadaan.

Terdapat beberapa cara untuk merepresentasikan ruang keadaan, antara lain : pohon AND/OR, graph keadaan, dan pohon pelacakan. [24]

II.2.1.1 Graph Keadaan

Graph terdiri dari node-node yang menunjukkan keadaan yaitu keadaan awal dan keadaan baru yang akan dicapai dengan menggunakan operator.

Node-node dalam graph keadaan saling dihubungkan dengan menggunakan arc (busur)

yang diberi panah untuk menunjukkan arah dari suatu keadaan ke keadaan berikutnya.

Konsep graph ini pertama diperkenalkan oleh seorang matematikawan dari Swiss, Leonhard Euler pada abad 18. Pada representasi graph, vertex digambarkan dengan node sedangkan edge digambarkan sebagai yang menghubungkan

node-node tersebut. Contoh representasi graph terhadap suatu peta dapat dilihat pada

gambar II.3.

(17)

II.2.1.2 Pohon Pencarian

Pelacakan adalah teknik pencarian sesuatu. Dalam pencarian ada dua kemungkinan hasil yang didapat yaitu menentukan dan tidak menemukan. Sehingga pencarian merupakan teknik yang penting dalam artificial intellegance.

Hal ini penting dalam menentukan keberhasilan sistem berdasar kecerdasan adalah kesuksesan dalam pencarian dan pencocokan. Keberhasilan dan kualitas pencarian diukur dari empat cara yaitu :

a. Kelengkapan

Apakah algoritma pencarian menjamin untuk mendapatkan sebuah penyelesaian jika ada penyelesaian?

b. Optimal

Apakah algoritma pencarian akan mendapatkan penyelesaian optimal (misal : penyelesaian dengan biaya lintasan minimum)

c. Kekompleksan waktu

Berapa lama waktu yang digunakan untuk penyelesaian permasalahan? d. Kekompleksan ruang

Berapa banyak memori yang dibutuhkan untuk melakukan pencarian [24] Untuk menghindari kemungkinan adanya proses pelacakan suatu node secara berulang, maka digunakan struktur pohon. Struktur pohon digunakan untuk menggambarkan keadaan secara hirarkis. Pohon juga terdiri dari beberapa node.

(18)

beberapa nodesuccessor yang sering disebut dengan nama “anak” dan merupakan node-node perantara.

Namun jika dilakukan pencarian mundur, maka dapat dikatakan bahwa

node tersebut memilki predecessor. Node-node yang tidak mempunyai anak sering disebut dengan nama node “daun” yang menunjukkan akhir dari suatu

pencarian, dapat berupa tujuan yang diharapkan (goal) atau jalan (dead end). [25] II.2.2 Contoh Pencarian

Misalkan ada tiga kotak 1, 2, 3 pada sebuah papan. Sebuah kotak dapat dipindahkan jika tidak ada kotak lain di atasnya dan hanya ada satu kotak yang boleh dipindahkan. Ada dua kemungkinan pemindahannya, yaitu:

1. Pindahkan sebuah kotak ke atas papan.

2. Pindahkan sebuah kotak ke atas kotak lainnya.

Masalah muncul jika diketahui keadaan awalnya (initial state atau current state) dan tujuan akhirnya (goal state atau final state) seperti pada gambar 2.4.

Gambar II.4. Contoh permainan yang merupakan pencarian

Pada gambar II.4 dapat dilihat bahwa ruang keadaan tersebut memiliki 13 elemen atau node, dengan perpindahan sebagai berikut:

(19)

4. Perpindahan kotak 1 ke atas kotak 3 untuk lintasan b dan m. 5. Perpindahan kotak 2 ke atas kotak 1 untuk lintasan c dan g. 6. Perpindahan kotak 2 ke atas kotak 3 untuk lintasan i dan j. 7. Perpindahan kotak 3 ke atas kotak 1 untuk lintasan h. 8. Perpindahan kotak 3 ke atas kotak 2 untuk lintasan f dan k.

Gambar II.5. Ruang keadaan

Penyelesaian untuk masalah permainan pada gambar II.5 adalah anggota kumpulan semua lintasan dari keadaan awal hingga tujuan yang lintasannya ditandai dengan huruf a, d, j, dan l.

(20)

II.3 Algoritma Pencarian (Search Algoritms)

Permasalahan pencarian dapat diselesaikan dengan beberapa metode yaitu: 1. Metode pencarian yang pertama adalah metode yang sederhana yang hanya berusaha mencari kemungkinan penyelesaian yang disebut juga pencarian buta.

2. Metode yang lebih kompleks yang akan mencari jarak terpendek. Metode ini adalah British Museum Procedure, Branch and Bound,

Dynamic Programming, Best First Search,Greedy Search, A* (A Star)

Search, dan Hill Climbing Search. Metode-metode ini digunakan pada

saat harga perjalanan untuk mencari kemungkinan menjadi perhitungan. Beberapa procedure/metode yang kita terapkan saat berhadapan dengan musuh. Prosedur ini adalah minimax search dan

alpha-beta pruning. Metode ini banyak digunakan pada

program-program seperti catur dan sebagainya.

Metode pencarian dikatakan penting untuk meyelesaikan permasalahan karena setiap state (keadaan) menggambarkan langkah-langkah untuk menyelesaikan permasalahan. Metode pencarian dikatakan penting untuk perencanaan karena dalam sebuah permainan akan menentukan apa yang harus dilakukan, dimana setiap state menggambarkan kemungkinan posisi pada suatu saat. Metode pencarian adalah bagian dari kesimpulan, dimana setiap state

(21)

Gambar II.6. Bagan metode pencarian (searching)

Menurut cara algoritma mengembangkan node dalam proses pencarian, gambar bagan metode penulusuran dibagi menjadi dua golongan, yakni pencarian buta (blind search) dan pencarian terbimbing (heuristic search). [8]

II.3.1 Pencarian Buta (Blind Search)

Blind Search adalah pencarian solusi tanpa adanya informasi yang dapat

mengarahkan pencarian untuk mencapai goal state dari current state (keadaan sekarang). Informasi yang ada hanyalah definisi goal state itu sendiri, sehingga algoritma dapat mengenali goal state bila menjumpainya.

Dengan ketiadaan informasi, maka blind search dalam kerjanya memeriksa/mengembangkan node-node secara tidak terarah dan kurang efisien untuk kebanyakan kasus karena banyaknya node yang dikembangkan.

Beberapa contoh algoritma yang termasuk blind seacrh antara lain adalah

Breadth First Search, Uniform Cost Search, Depth First Search, Depth Limited

(22)

II.3.2 Pencarian Terbimbing (Heuristic Search)

Berbeda dengan blind search, heuristic search mempunyai informasi tentang cost/biaya untuk mencapai goal state dari current state. Dengan informasi tersebut, heuristic search dapat melakukan pertimbangan untuk mengembangkan atau memeriksa node-node yang mengarah ke goal state. Misalnya pada pencarian

rute pada suatu peta, bila kita berangkat dari kota A ke kota tujuan B yang letaknya di Utara kota A, dengan heuristic search, pencarian akan lebih difokuskan ke arah Utara (dengan informasi cost ke goal), sehingga secara umum,

heuristic search lebih efisien daripada blind search.

Heuristic search untuk menghitung (perkiraan) cost ke goal state,

digunakan fungsi heuristic. Fungsi heuristic berbeda daripada algoritma, dimana

heuristic lebih merupakan perkiraan untuk membantu algoritma, dan tidak harus

valid setiap waktu. Meskipun begitu, semakin bagus fungsi heuristic yang dipakai, semakin cepat dan akurat pula solusi yang didapat. Menentukan heuristic

yang tepat untuk kasus dan implementasi yang ada juga sangat berpengaruh terhadap kinerja algoritma pencarian.

Beberapa contoh algoritma pencarian yang menggunakan metode heuristic

search adalah : Best First Search, Greedy Search, A* (A Star) Search, dan Hill

(23)

Tabel II.1. Kegunaan heuristic search Algorima

Pencarian Kegunaan Implementasi

Best First Search

Penelusurannya hanya

menggunakan estimasi cost / jarak ke node tujuan, h(n) akibatnya pencarian tidak menyeluruh.

Sistem pakar, penjadwalan, pencarian rute pada peta geografis dan lain-lain.

Greedy Search

Pada greedy search ide utamanya adalah mengembangkan node dengan nilai estimasi biaya ke goal

yang paling kecil (berarti node

yang paling dekat ke tujuan).

Masalah penukaran uang, minimisasi waktu di dalam sistem (penjadwalan), memilih beberapa jenis investasi (penanaman modal), memilih jurusan di perguruan tinggi, masalah knapsnak dan lainnya.

A* (A Star)

Search

Menjumlahkan jarak sebenarnya dengan estimasi jaraknya dan pencariannya menyeluruh, tetapi akan memakai memori yang cukup besar untuk menyinpan node

sebelumnya.

Pencarian jalur terpendek pada peta, pencarian jalur angkutan kota, pencarian jalan pada

game, menggerakkan karakter

game, pencarian jalan untuk

permainan Lose Your Marble,

penyelesaian permasalahan 8

Puzzle dan lain-lain.

Hill Climbing Search

Hill climbing sering digunakan

ketika fungsi heuristic yang bagus tersedia untuk mengevaluasi state

tapi ketika tidak ada yang perlu dievaluasi maka fungsi ini tidak ada.

Sistem pakar, pencarian lokasi pada peta, dan lain-lain.

II.4 Algoritma A* (A Star)

(24)

Pada pencarian rute kasus sederhana, dimana tidak terdapat halangan pada peta, A* bekerja secepat dan seefisien BFS. Pada kasus peta dengan halangan, A* dapat menemukan solusi rutetanpa „terjebak’ oleh halangan yang ada.

Pencarian menggunakan algoritma A* mempunyai prinsip yang sama dengan algoritma BFS, hanya saja dengan dua faktor tambahan.

1. Setiap sisi mempunyai “cost” yang berbeda-beda, seberapa besar cost untuk pergi dari satu simpul ke simpul yang lain.

2. Cost dari setiap simpul ke simpul tujuan bisa diperkirakan. Ini membantu pencarian, sehingga lebih kecil kemungkinan kita mencari ke arah yang salah.

Cost untuk setiap simpul tidak harus berupa jarak. Cost bisa saja berupa waktu bila kita ingin mencari jalan dengan waktu tercepat untuk dilalui. Sebagai contoh, bila kita berkendaraan melewati jalan biasa bisa saja merupakan jarak terdekat, tetapi melewati jalan tol biasanya memakan waktu lebih sedikit.

Algoritma A* bekerja dengan prinsip yang hampir sama dengan BFS, kecuali dengan dua perbedaan, yaitu :

1. Simpul-simpul di list “terbuka” diurutkan oleh cost keseluruhan dari simpul awal ke simpul tujuan, dari cost terkecil sampai cost terbesar. Dengan kata lain, menggunakan priority queue (antrian prioritas). Cost keseluruhan dihitung dari cost dari simpul awal ke simpul sekarang (current node) ditambah cost perkiraan menuju simpul tujuan.

(25)

Karena list “terbuka” diurutkan berdasarkan perkiraan cost keseluruhan, algoritma mengecek simpul-simpul yang mempunyai perkiraan cost yang paling kecil terlebih dahulu, jadi algoritmanya mencari simpul-simpul yang kemungkinan mengarah ke simpul tujuan. Karena itu, lebih baik perkiraan cost -nya, lebih cepat pencariannya. Cost dan perkiraannya ditentukan oleh kita sendiri. Bila cost-nya adalah jarak, akan menjadi mudah.

Cost antara simpul adalah jaraknya, dan perkiraan cost dari suatu simpul ke simpul tujuan adalah penjumlahan jarak dari simpul tersebut ke simpul tujuan. Atau agar lebih mudahnya bisa ditunjukkan seperti berikut ini.

f(n) = g(n) + h(n) dengan :

f(n) = fungsi evaluasi

g(n) = biaya (cost) yang sudah dikeluarkan dari keadaan sampai keadaan n

h(n) = estimasi biaya untuk sampai pada suatu tujuan mulai dari n

Perhatikan bahwa algoritma ini hanya bekerja bila cost perkiraan tidak lebih besar dari cost yang sebenarnya. Bila cost perkiraan lebih besar, bisa jadi jalan yang ditemukan bukanlah yang terpendek. [19]

Node dengan nilai terendah merupakan solusi terbaik untuk diperiksa pertama kali pada g(n) + h(n). Dengan fungsi heuristic yang memenuhi kondisi tersebut, maka pencarian dengan algoritma A* dapat optimal.

(26)

pada cost untuk mencapai tujuan. Salah satu contoh dari admissible heuristic

adalah jarak dengan menarik garis lurus karena jarak terdekat dari dua titik adalah dengan menarik garis lurus. Adapun pseudecode dari algoritma A* adalah sebagai berikut :

Pada persoalan tentang Romanian Paths (Arab – Bucharest) yang terdapat pada buku Russel & Norwig penyelesaiannya dengan algoritma A* dapat dijelaskan pada gambar II.7.

function a* (start,goal)

closedset := the empty set % the set of nodes already evaluated.

openset := set containing the initial node % the set of tentaive nodes to be evaluated.

g_score[start] := 0 % distance from start along optimal path.

h_score[start] := heuristic_estimate_of_distance[start, goal]

f_score[start] := h_score[start] % estimated total distance from start to goal throught y.

while openset is not empty

x := the node in openset having the lowest f_score[] value if x = goal

return reconstruct_path(came_from, goal) remove x from openset

add x to closedset

foreach y in neighbor_nodes[x] if y in closedset

continue

tentativie_g_score := g_score[x] + dist_between[x,y] if y not in openset

add y to openset tentativie_is_better := true elseif tentative_g_score < g_score[y]

tentative_is_better :=true else

tentative_is_better := false if tentative_is_better = true

came_from[y] := x

g_score[y] := tentative_g_score

h_score[y] := heuristic_estimate_of_distance[y, goal] f_score[y] := g_score[y] + h_score[y]

return failure

function reconstruct_path(came_from,current_node) if came_from[current_node] is set

p = reconstruct+path(came_from, came_from[current_node]) return (p+current_node)

else

(27)
(28)
(29)

Urutan pelacakan (key : Pilih node yang belum diekspansikan yang mempunyai fungsi heuristik f (n) terkecil). Kesimpulan berdasarkan penelusuran di atas,

solution path-nya adalah : Arad – Sibiu – Rimnicu_Vilcea – Fagaras – Pitesti –

Bucharest.

Metode A* mirip dengan algoritma pencarian graph yang berpotensial mencari daerah yang luas pada sebuah peta. Metode A* mempunyai fungsi

heuristic untuk memandu pencarian ke depan sampai tujuan. Metode A* dapat

melakukan backtracking jika jalur yang ditempuh ternyata salah. Metode A* dapat melakukannya karena menyimpan jejak / track yang mungkin sebagai jalur yang optimal. Sebagai contoh, jika kita sedang menuju suatu kota dan sampai pada persimpangan jalan, dan memutuskan untuk belok kiri daripada ke kanan, dan ternyata bila jalan yang dipilih ternyata salah, kita akan kembali ke persimpangan dan mengambil jalan satunya. Itulah yang dilakukan metode A* ini. [23]

Performansi algoritma A* dapat diketahui dengan melihat perbandingan metode dari tabel II.2.

Tabel II.2. Perbedaan ketiga algoritma

No. Nama algoritma Metode Keterangan

1. terpendek dari node n ke GS

(30)

Dari informasi pada tabel II.2 di atas dapat dibuktikan bahwa bila :

a. g (n) = 0 , maka f (n) = h(n) sehingga algoritma A* akan bertingkah laku sebagaimana Best First Search.

b. h(n) = 0, maka f (n) = g (n) sehingga algoritma A* akan bertingkah laku sebagaimana Optimal Search(Dijkstra’s Algorithm).

Dengan demikian dapat diambil kesimpulan bahwa algoritma A* mengkombinasikan kelebihan dari algoritma Optimal Search dan Best First

Search. Dari informasi ini, kita dapat menganalisa dan membandingkan cost

ketiga algoritma tersebut.

II.4.1 Kompleksitas Algoritma A* (A Star)

Kompleksitas waktu dari algoritma A* tergantung dari heuristicnya. Dalam kasus terburuk (worst case), jumlah simpul yang diekspansi bisa eskponensial dalam solusinya (jalan tependek). Akan tetapi, kompleksitasnya bisa berupa polinomial bila fungsi heuristik h bertemu kondisi berikut:

| h(x) − h* (x) | = O(logh* (x))

Dimana h* adalah heuristik optimal, atau cost pasti untuk menuju tujuan dari x. Dengan kata lain, kesalahan (error) dari h tidak boleh tumbuh lebih cepat dari algoritma “perfect heuristich* yang mengembalikan jarak sebenarnya dari x

menuju tujuan. [16]

II.4.2 Efisien Waktu Algoritma A*

Dengan digunakannya fungsi heuristic H(n), algoritma A* dapat memfokuskan pencarian pada node-node yang berada pada arah yang mendekati

(31)

diperiksa. Hal ini dapat meminimalisasikan jumlah node yang harus diperiksa dan arena waktu yang diperlukan untuk mendapatkan jalur berbanding lurus dengan jumlah node yang diperiksa, maka waktu pencarian dapat diminimalisasikan.

Walaupun jumlah node yang diperiksa dapat diminimalisasikan, algoritma A* mempunyai kasus terburuk. Pada kasus ini, sebagian besar ataupun keseluruhan node pada jalan diperiksa, sehingga algoritma A* bekerja seperti algoritma dijkstra atau BFS (Best-First-Search). Ada dua hal yang dapat menyebabkan keadaan terburuk ini, yaitu keadaan sepadan dan jika jalur yang dicari tidak ditemukan. [10]

II.4.3 Keadaan Sepadan pada Algoritma A*

Jika dua atau lebih node yang diperiksa mempunyai harga f(n) yang sama, maka keadaan sepadan (tie) terjadi. Hal ini dimungkinkan karena f(n) bergantung pada dua fungsi, yaitu fungsi g(n) dan h(n). Hal ini sangat mungkin terjadi antara

node-node yang letaknya berjauhan, dan kemungkinan besar node yang satu terletak dekat node tujuan sedangkan yang lainnya terletak jauh dari node tujuan.

(32)

Karena algoritma A* memberikan prioritas berdasarkan harga f(n), maka jika keadaan sepadan terjadi, terdapat lebih dari satu node dengan prioritas sama. Akibatnya adalah node-node tersebut akan diperiksa lebih dulu, yang mungkin

node tersebut terletak berjauhan dengan node tujuan. Hal ini berakibat turunnya

kinerja algoritma A*. [10] II.4.4 Fungsi Heuristic

BFS dan A* sebagai algoritma pencarian yang menggunakan fungsi

heuristic untuk „menuntun’ pencarian rute, khususnya dalam hal pengembangan

dan pemeriksaan node-node pada peta. Dalam aplikasi ini, fungsi heuristic yang dipakai untuk pencarian rute mengisi nilai/notasi h pada algoritma BFS dan A*. Ada beberapa fungsi heuristic umum yang bisa dipakai untuk algoritma BFS dan A* ini. Salah satunya adalah yang dikenal dengan istilah „Manhattan Distance’.

Fungsi heuristic ini digunakan untuk kasus dimana pergerakan pada peta hanya lurus (horizontal atau vertikal), tidak diperbolehkan pergerakan diagonal. [15]

(33)

Perhitungan nilai heuristic untuk node ke-n menggunakan Manhattan

Distance adalah sebagai berikut :

h(n) = (abs(n.x - goal.x) + abs(n.y - goal.y))

Dimana h(n) adalah nilai heuristic untuk node n, dan goal adalah node tujuan. Jika pergerakan diagonal pada peta diperbolehkan, maka digunakan fungsi

heuristic selain Manhattan Distance. Untuk mendekati kenyataan, cost untuk

perpindahan node secara diagonal dan orthogonal dibedakan. Cost diagonal adalah 1,4 kali cost perpindahan secara orthogonal.

Gambar II.10. Rute dengan langkah diagonal diperbolehkan Maka fungsi heuristic yang digunakan adalah sebagai berikut: h_diagonal(n) = min(abs(n.x - goal.x) + abs(n.y – goal.y)) h_orthogonal(n) = (abs(n.x - goal.x) + abs(n.y – goal.y))

h(n) = h_diagonal(n) + (h_orthogonal (n) – (2 * h_diagonal(n)))

(34)

Nilai heuristic kemudian diperoleh dari h_diagonal(n) ditambah dengan selisih h_orthogonal(n) dengan dua kali h_diagonal(n). Dengan kata lain, jumlah langkah diagonal kali cost diagonal ditambah jumlah langkah lurus yang masih bisa diambil dikali cost pergerakan lurus. [14]

II.5 Linked List

Dikembangkan tahun 1955-1956 oleh Allen Newell, Cliff Shaw dan Herbert Simon di RAND Corporation sebagai struktur data utama untuk bahasa

Information Processing Language (IPL). IPL dibuat untuk mengembangkan

program artificial intelligence, seperti pembuatan Chess Solver. Victor Yngve di

Massachusetts Institute of Technology (MIT) juga menggunakan linked list pada

natural language processing dan machine transitions pada bahasa pemrograman

COMMIT.

Linked list adalah salah satu bentuk struktur data, berisi kumpulan data

(node) yang tersusun secara sekuensial, saling sambung menyambung, dinamis dan tidak terbatas. Pada tabel II.3 dapat disimpulkan linked list lebih optimal daripada array. Linked list sering disebut juga senarai berantai dan saling terhubung dengan bantuan variabel pointer. Masing-masing data dalam linked list

disebut dengan node (simpul) yang menempati alokasi memori secara dinamis dan biasanya berupa struct yang terdiri dari beberapa field.

Tabel II.3. Perbandingan array dan linked list

Array Linked list

Statis Dinamis

Penambahan/penghapusan data terbatas Penambahan/penghapusan data tidak terbatas

Random access Sequential access

(35)

Linked list terdiri dari tiga jenis yaitu singlelinked list, double linked list

dan circular linked list. Salah satu yang akan dijelaskan yaitu tentang singlelinked

list.

Single linked list adalah linked list dengan simpul berisi satu link/pointer

yang mengacu ke simpul berikutnya, ilustrasinya dijelaskan pada gambar II.11.

A B C D

P Awal

info next info next Info next Info null

Akhir

Gambar II.11. Ilustrasi singlelinked list

Setiap node pada linked list mempunyai field yang berisi pointer ke node

berikutnya, dan juga memiliki field yang berisi data. Pada akhir linked list, node

terakhir akan menunjuk ke NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list.

Penambahan node baru memiliki tiga cara penyisipan yaitu sisip didepan, sisip ditengah dan sisip diakhir. Pada pembahasan ini akan lebih dijelaskan tentang sisip didepan, penambahan data didepan akan dikaitan di node paling awal, namun pada saat pertama kali (data masih kosong), maka penambahan data

dilakukan dengan cara „Awal’ ditunjukkan ke node baru tersebut. Salah satu

contoh penambahan data baru yaitu „A’ dan „B’ dengan penyisipan didepan

(36)

Baru

data baru yang akan ditambahkan

Baru

proses penambahan data baru

A

info null Awal

Akhir

hasil akhir setelah data ditambahkan

A ditengah dan hapus diakhir. Pada pembahasan ini akan dijelaskan tentang hapus didepan.

A B

info next info null Awal

(37)

kondisi linked list memiliki data awal lebih dari 1 data, kemudian akan

dihapus data „A’ yang terletak pada posisi paling depan.

A B

info next info null Posisihapus

P

Awal Akhir

Setelah „Awal’ dipindahkan ke data berikutnya maka hapus/hancurkan

data di Posisihapus, sehingga linked list menjadi seperti di bawah ini.

B

info null Awal

Akhir

II.6 Pathfinding

Pathfinding (pencarian jalan/rute) adalah salah satu bidang penerapan

yang sering ditangani oleh kecerdasan buatan khususnya dengan menggunakan algoritma pencarian. Penerapan yang dapat dilakukan dengan pathfinding antara lain adalah pencarian rute dalam suatu game dan pencarian jalan/rute pada suatu peta. Algoritma pencarian yang dipakai harus dapat mengenali jalan dan elemen peta yang tidak dapat dilewati.

(38)

Gambar II.12. Penentuan rute tanpa pathfinding

Pada gambar II.12, dari start menuju goal, tanpa algoritma pathfinding, unit hanya akan memeriksa lingkungan sekitarnya saja (dilambangkan dengan daerah di dalam kotak hijau). Unit tersebut akan maju terus ke atas untuk mencapai tujuan, baru setelah mendekati adanya halangan, lalu berjalan memutar untuk menghindarinya. Sebaliknya, penentuan rule dengan algoritma pathfinding

pada gambar II.13 akan memprediksi ke depan mencari jalan yang lebih pendek menghindari halangan (dilambangkan garis biru) untuk mencapai tujuan, tanpa

pernah mengirim unit ke dalam „perangkap’ halangan berbentuk U. Karena itu peran algoritma pathfinding sangat berguna untuk memecahkan berbagai permasalahan dalam penentuan rute.

(39)

II.7 Perkembangan Game Komputer

Permainan komputer (game) adalah program komputer yang terdiri dari dunia maya yang dikendalikan oleh sebuah komputer di mana pemainnya bisa berinteraksi untuk mencapai sejumlah tujuan (goal).

Permainan komputer juga dapat digolongkan ke dalam beberapa aliran/genre: a. Laga (Action)

b. Petualangan (Adventure)

c. Bermain Peran (Role-Playing (RPG)) d. Simulasi (Simulation)

e. Olahraga (Sports)

Game pathfinding sendiri dapat digolongkan ke dalam genre simulasi (simulation)

yang berkaitan erat dengan bentuk kotak. Permainan ini akan memiliki fungsi

game engine yaitu artificial intellegence dalam proses pencariannya.

Game Engine disebut juga komponen inti dari sebuah game atau aplikasi

interaktif lainnya yang disajikan secara real time. Game engine memberikan teknologi dasar, mempermudah pengembangan sebuah game dan bahkan

memberikan teknologi yang dapat dijalankan dengan platform yang berdeda-beda,

seperti game console, Operasi sistem berbasis desktop Linux, Max OS, dan Microsoft

Windows. Fungsi-fungsi utama yang biasanya disediakan oleh game engine termasuk

didalamnya rendering engine (renderer) untuk grafik 2D atau 3D, physic engine atau

deteksi benturan (collation detection), suara, scripting, animation, AI (Artificial

Intelligence), networking dan susunan adegan/kejadian/film pendek (scene graph).

AI (Artificial Intelligence) bisa dikatakan cukup berperan pada sebuah

(40)

dari bertarung, hingga berjalan. Khusus proses berjalan, algoritma path finding

adalah algoritma yang dapat dimanfaatkan untuk membantu aplikasi menemukan alur jalannya. Game dengan contoh menemukan jalan yaitu game maze (labirin),

game perang, game sokoban dan game strategi. [20]

II.8 Algoritma Penerapan A* pada Game

Setiap permainan memiliki aturan main. Hal ini mempermudah upaya menghasilkan ruang pencarian dan memberikan kebebasan pada para peneliti dari bermacam-macam ambisi dan kompleksitas sifat serta kurangnya struktur permasalahan. Papan konfigurasi yang digunakan untuk memainkan permainan ini mudah direpresentasikan pada komputer dan tidak memerlukan bentuk yang kompleks. Permainan dapat menghasilkan sejumlah besar pencarian ruang. Hal ini cukup besar dan kompleks sehingga membutuhkan suatu teknik yang tangguh untuk menentukan alternatif pengeksplorasian ruang permasalahan. Teknik ini dikenal dengan nama heuristic dan merupakan area utama dari penelitian tentang AI. Banyak hal yang biasanya dikenal sebagai kecerdasan tampaknya berada dalam heuristic yang digunakan oleh manusia untuk menyelesaikan permasalahannya. [18]

II.9 Metode Pengembangan Perangkat Lunak

Pada rekayasa perangkat lunak, banyak model yang telah dikembangkan untuk membantu proses pengembangan perangkat lunak. Model-model ini pada umumnya mengacu pada model proses pengembangan sistem yang disebut System

(41)

Gambar II.14. System Development Life Cycle (SDLC)

Setiap model yang dikembangkan mempunyai karakteristik sendiri-sendiri. Namun secara umum ada persamaan dari model-model ini, yaitu:

a. Kebutuhan terhadap definisi masalah yang jelas. Input utama dari setiap model pengembangan perangkat lunak adalah pendefinisian masalah yang jelas. Semakin jelas akan semakin baik karena akan memudahkan dalam penyelesaian masalah.

b. Tahapan-tahapan pengembangan yang teratur. Meskipun model-model pengembangan perangkat lunak memiliki pola yang berbeda-beda, biasanya model-model tersebut mengikuti pola umum analysis – design – coding –

testing - maintenance.

c. Stakeholder berperan sangat penting dalam keseluruhan tahapan

pengembangan. Stakeholder dalam rekayasa perangkat lunak dapat berupa pengguna, pemilik, pengembang, pemrogram dan orang-orang yang terlibat dalam rekayasa perangkat lunak tersebut.

(42)

tulisan, diagram, gambar atau bentuk-bentuk lain yang harus didokumentasi dan merupakan bagian tak terpisahkan dari perangkat lunak yang dihasilkan. e. Keluaran dari proses pengembangan perangkat lunak harus bernilai

ekonomis. Nilai dari sebuah perangkat lunak sebenarnya agak susah dirupiahkan. Namun efek dari penggunaan perangkat lunak yang telah dikembangkan haruslah memberi nilai tambah bagi organisasi. Hal ini dapat

peningkatan keuntungan organisasi, peningkatan “image” organisasi dan lain-lain.

Ada banyak model pengembangan perangkat lunak, antara lain The Waterfall

Model, Joint Application Development (JAD), Information Engineering (IE),

Rapid Application Development (RAD) termasuk di dalamnya Prototyping,

Unified Process (UP), Structural Analysis and Design (SAD) dan Framework for

the Application of System Thinking (FAST). Salah satu yang akan dijelaskan yaitu

tentang model waterfall.[17]

Model waterfall sebenarnya adalah “linear sequential model”. Model ini

sering disebut dengan “classic life cycle” atau model waterfall. Model ini adalah model yang muncul pertama kali yaitu sekitar tahun 1970 sehingga sering dianggap kuno, tetapi merupakan model yang paling banyak dipakai didalam

Software Engineering (SE). Model ini melakukan pendekatan secara sistematis

dan urut mulai dari level kebutuhan sistem lalu menuju ke tahap analisis, desain,

coding, testing / verification, dan maintenance. Disebut dengan waterfall karena

(43)

berjalan berurutan. Sebagai contoh tahap desain harus menunggu selesainya tahap sebelumnya yaitu tahap requirement.

Gambar II.15. Model waterfall

Gambar II.15 adalah tahapan umum dari proses model waterfall, akan tetapi Roger S. Pressman memecah model ini menjadi enam tahapan meskipun secara garis besar sama dengan tahapan-tahapan model waterfall pada umumnya. Berikut adalah penjelasan dari tahap-tahap yang dilakukan di dalam model ini menurut Pressman:

1. Sistem / information engineering and modeling. Permodelan ini diawali dengan mencari kebutuhan dari keseluruhan sistem yang akan diaplikasikan ke dalam bentuk software. Hal ini sangat penting, mengingat software harus dapat berinteraksi dengan elemen-elemen yang lain seperti hardware,

database dan sebagainya. Tahap ini sering disebut dengan Project Definition.

2. Software Requirements Analysis. Proses pencarian kebutuhan diintensifkan

(44)

sebagainya. Dari dua aktivitas tersebut (pencarian kebutuhan sistem dan

software) harus didokumentasikan dan ditunjukkan kepada pelanggan.

3. Design, proses ini digunakan untuk mengubah kebutuhan-kebutuhan di atas

menjadi representasi ke dalam bentuk “blueprintsoftware sebelum coding

dimulai. Desain harus dapat mengimplementasikan kebutuhan yang telah disebutkan pada tahap sebelumnya. Seperti dua aktivitas sebelumnya, maka proses ini juga harus didokumentasikan sebagai konfigurasi dari software.

4. Coding, untuk dapat dimengerti oleh mesin, dalam hal ini adalah komputer,

maka desain tadi harus diubah bentuknya menjadi bentuk yang dapat dimengerti oleh mesin, yaitu ke dalam bahasa pemrograman melalui proses

coding. Tahap ini merupakan implementasi dari tahap design yang secara

teknis nantinya dikerjakan oleh programmer.

5. Testing / verification, sesuatu yang dibuat haruslah diujicobakan. Demikian

juga dengan software. Semua fungsi-fungsi software harus diujicobakan, agar

software bebas dari error, dan hasilnya harus benar-benar sesuai dengan

kebutuhan yang sudah didefinisikan sebelumnya.

6. Maintenance, pemeliharaan suatu software diperlukan, termasuk di dalamnya

adalah pengembangan, karena software yang dibuat tidak selamanya hanya seperti itu. Ketika dijalankan mungkin saja masih ada errors kecil yang tidak ditemukan sebelumnya, atau ada penambahan fitur-fitur yang belum ada pada

software tersebut. Pengembangan diperlukan ketika adanya perubahan dari

(45)

II.10 Borland Delphi

Borland Delphi adalah sebuah alat pengembangan aplikasi-aplikasi untuk sistem operasi Microsoft Windows. Delphi sangat berguna dan mudah digunakan untuk membuat suatu program berbasis GUI (Graphical user interface) atau

console (mode teks).

Semua user interface seperti form, tombol (button), dan objek list-list telah disertakan dalam Delphi dalam bentuk komponen atau control. Pengembang dapat dengan mudah menempatkan komponen-komponen tersebut ke dalam form. Pengembang dapat juga menempatkan controlActiveX pada form untuk membuat program-program khusus seperti Browser Web dalam waktu yang cepat. Delphi memungkinkan pengembang untuk merancang keseluruhan interface secara visual, dan dengan cepat dapat diimplementasikan sebuah kode perintah berbasis

event (event driven) dengan mengklik mouse. Dengan IDE Delphi, pengembang

perangkat lunak dapat membuat program windows dengan lebih cepat dan lebih mudah dari sebelumnya.

IDE adalah sebuah singkatan dari Integrated Development Environment

yaitu sebuah lingkungan pengembangan yang terintegrasi, istilah IDE popular untuk menyebut software bahasa pemrograman dimana proses pengembangan programmnya mulai dari coding, designing dan debugging dilakukan pada satu

framework atau pada satu aplikasi yang terintegrasi.

IDE delphi tersebut terbagi menjadi tujuh bagian utama, yaitu : menubar,

toolbar, component palette, form designer, code explorer, object treeview dan

(46)

Gambar II.16. IDE Delphi

Menubar dan toolbar merupakan dua bagian yang biasanya terdapat pada

aplikasi-aplikasi windows lain. Fungsi dari menubar dan toolbar ini relatif hampir sama dengan aplikasi windows lain, melainkan hanya menubar yang biasa digunakan dalam pembuatan program.

Gambar II.17. Menu bar dan tool bar

Component Palette berisi kumpulan VCL (Visual Component Library)

yang berguna dalam desain aplikasi. VCL merupakan pustaka untuk komponen visual, dimana dalam component palette dilambangkan dengan ikon yang

merepresentasikan komponen tersebut. Komponen-komponen VCL pada component

palette dikelompokkan ke dalam tab, sesuai dengan fungsinya, dengan maksud untuk

memudahkan programmer dalam memilih komponen yang diinginkannya. Disamping

VCL ada juga CLX (Component Library for Cross Platform) dalam desain aplikasi

(47)

Gambar II.18. Component pallete

Setiap aplikasi biasanya memiliki jendela atau background interface, yang dalam bahasa pemrograman Delphi atau bahkan dalam bahasa pemrograman lain yang berbasis visual, biasa disebut dengan form. Form Designer berfungsi sebagai tempat untuk mendesain form untuk aplikasi yang akan dibuat, dan juga sebagai tempat untuk meletakkan komponen-komponen yang kita ambil dari component palette.

Gambar II.19. Form designer

Code Explorer merupakan area di mana kita menuliskan kode program,

posisinya secara default terletak dibelakang form. Untuk menampilkan code

explorer di depan form, bisa digunakan tombol F12 pada keyboard. Pada code

explorer tersebut, akan terlihat kode-kode dalam bahasa pemrograman Delphi

yang secara otomatis di’generate’ oleh Delphi, hal ini jelas akan memudahkan atau mempercepat kita dalam menulis program. Pada code explorer Delphi, ada sebuah fitur yang disebut dengan code completion. Sesuai dengan namanya, code

(48)

dari code-code yang bisa kita gunakan, hal ini akan sangat membantu apabila kita lupa terhadap kode tertentu.

Code completion ini secara otomatis akan muncul ketika anda menekan

tombol titik pada keyboard, selain itu untuk menampilkan code completion ini, anda juga bisa melakukannya dengan menekan kombinasi tombol Ctrl + space

secara bersamaan. Disamping code completion, code explorer pada Delphi juga dilengkapi dengan hint (layer berwarna kuning yang muncul ketika mouse didekatkan pada komponen tertentu). Hint ini, muncul ketika kita menggunakan

procedure atau fungsi dan menekan tombol pada keyboard, pada hint tersebut

akan muncul nama dan tipe data dari parameter yang digunakan atau informasi lain yang diperlukan.

Gambar II.20. Code Explorer

Object TreeView adalah bagian yang berisi daftar komponen yang

(49)

Gambar II.21. Object treeview

Object Inspector adalah bagian yang digunakan untuk memanipulasi sifat

atau karakteristik dan event dari komponen yang kita gunakan dalam form

designer. Jendela object inspector terbagi menjadi dua bagian tab, yaitu tab

property dan tab event. Tab property digunakan untuk memanipulasi property

yang dimiliki oleh komponen tertentu, misalkan ukuran, warna dan caption dari

komponen, sedangkan tab event digunakan untuk menangani pemasukan kode pada

kejadian tertentu dari suatu komponen, misalnya : kejadian ketika komponen button

(tombol) diklik atau onClick.

Sebagaimana yang telah dijelaskan di atas, salah satu fungsi dari object

inspector ini adalah untuk mengatur property dari komponen, pengaturan tersebut

tidak akan disimpan pada file unit, melainkan akan disimpan pada file form

(*.dfm).[4]

(50)

48

Pada bab ini akan dibahas mengenai analisis dan perancangan pada sistem yang dibangun yakni penerapan algoritma A* dalam pencarian jalan terpendek pada game pathfinding.

III.1 Deskripsi Masalah

Deskripsi masalah adalah suatu gambaran masalah yang diangkat dalam penulisan skripsi tentang penerapan algoritma A*. Algoritma A* (A Star)

merupakan perbaikan dari metode BFSdengan memodifikasi fungsi heuristicnya. A* akan meminimumkan total biaya lintasan. Pada kondisi yang tepat, A* akan memberikan solusi yang terbaik dalam waktu yang optimal.

Algoritma A* (A Star) akan diterapkan dalam pencarian jalan terpendek pada game pathfinding. Pencarian jalan terpendek pada game pathfinding akan diasumsikan dengan titik awal(keadaan pertama) dan titik tujuan (keadaan akhir) yang diimplementasikan pada pencarian di ruang kosong maupun di ruang dengan penghalang seperti halnya permainan labirin. Ruang yang akan dibangun akan berbentuk puzzle (kotak) supaya mempermudah dalam penerapan cara kerja algoritma A*. Hasil pencarian algoritma tersebut akan menghasilkan jalan terpendek dari suatu titik awalke titik tujuan.

(51)

pengembangan dari BFS yang digunakan untuk mencari jalan terpendek (shortest

path) yang sering dipakai dalam game programming.

III.2 Analisis Kasus

Algoritma A* (A Star) akan diterapkan pada analisis kasus pencarian jalan terpendek menuju tujuan pada game pathfinding untuk mencari kecepatan, jarak langkah menuju tujuan dan simpul yang diperiksa.

Dalam kondisi jarak yang ditempuh sangat jauh dan memiliki banyak rintangan algoritma A* cocok untuk mencari solusi yang terbaik. Setiap pergerakan yang dilakukan pada kotak statusnya akan disimpan pada suatu list.

List ini akan digunakan untuk melakukan pengecekan apakah kita sudah pernah membangun status tersebut atau belum agar kita tidak menggerakkan kotak yang sama berkali-kali ke status yang sama. Dengan menerapkan strategi ini, selain menemukan solusi, algoritma ini juga bisa menemukan langkah terpendek untuk mencapai solusi tersebut. Untuk lebih jelasnya, cara kerja algoritma A* dapat dilihat pada gambar III.1.

(52)

Pada gambar III.1, kotak warna hijau di sebelah kiri adalah node awal, dan kotak merah di sebelah kanan adalah tujuan. Tiga kotak biru di tengah adalah halangan yang tidak bisa dilewati. Angka-angka dalam kotak masing-masing adalah nilai f (kiri atas) dan h (kanan bawah). Tanda lingkaran dan garis di tengah kotak menunjukkan parent kotak tersebut. Untuk pergerakan horizontal dan vertikal, costnya adalah sepuluh, sedangkan untuk pergerakan diagonal memakan

cost 14.

Pada kotak di sebelah kanan node awal, g bernilai sepuluh dan h bernilai 30. Perhitungannya sederhana saja, g bernilai sepuluh sebab dari node awal ke kotak tersebut hanya perlu bergerak horizontal satu kali. H bernilai 30 didapat dari banyaknya langkah yang diperlukan untuk mencapai tujuan dari kotak tersebut.

Selanjutnya, algoritma ini akan memeriksa kotak mana yang bernilai f-nya terkecil dan mengembangkan jalan di sekitar kotak tersebut. Dengan cara seperti ini telah dijelaskan di atas sebelumnya, hasil akhir ini adalah seperti gambar III.2.

(53)

Pada gambar III.2, rute yang ditemukan digambarkan dengan bujur sangkar berbingkai biru dengan lingkaran biru muda di tengahnya. Maka jika diimplementasikan pada game pathfinding suatu karakter akan melewati halangan dan akhirnya akan menemukan rute terpendek ke tujuan.

III.3 Analisis Masalah

Game pathfinding akan berupa kotak-kotak dengan ordo X x Y, supaya

pengguna bisa menentukan sendiri orde yang diinginkan.Pada ordo X x Y, 2 kotak akan dipakai oleh titik awal dan titik tujuan, sisanya untuk menghasilkan jalan agar terlihat jalurnya yang pada akhirnya akan menentukan jalan terpendek ke titik tujuan. Maksimal penghalang pada tiap ordo dapat kita tentukan yaitu dengan rumus pada tabel III.1.

Tabel III.1. Maksimal penghalang

Ordo Maksimal Penghalang X x Y (M x N) - 2

3 x 3 (3 x 3) - 2 = 7 4 x 4 (4 x 4) - 2 = 14 5 x 5 (5 x 5) - 2 = 23 ... x ... (... x ...) - 2 = ...

Keterangan :

X : Nilai baris

Y : Nilai kolom

(54)

dan jumlah penghalang yang akan dipasangkan kurang dari maksimal, implementasinya dapat dilihat dengan contoh ordo 3x3 pada gambar III.3.

Keterangan :

A : Titik awal T : Titik Tujuan

Maksimal penghalang yang akan dipasangkan pada ordo lainnya adalah sebanyak ordo tersebut dikurangi dua untuk menempatkan titik awal dan titik tujuan. Pada gambar III.3 menunjukkan suatu ruang (map) dengan ordo 3x3 di dalam game yang akan dibangun. Setiap kotak mempresentasikan simpul (node). Setiap kotak terhubung ke delapan kotak yang paling dekat, artinya setiap simpul

(node) terhubung ke simpul lain yang berada di sebelah kanan, kiri, atas-kanan,

bawah-kanan, bawah-kiri, dan atas-kiri dari simpul tersebut. Kotak warna orange

dan warna hijau diimplementasikan sebagai penghalang, yaitu kotak yang tidak dapat dilalui oleh titik awal.

Sekarang, kita akan mencari jalan terpendek dari posisi titik awalke posisi titik tujuan. Karena titik A tidak terhubung langsung ke titik T, maka kita perlu melewati simpul-simpul tertentu yang pada akhirnya akan mengantarkan ke titik T dengan jarak sependek mungkin.

: Penghalang

(55)

III.4 Analisis Pemecahan Masalah dengan Algoritma A* (A Star)

Terdapat beberapa hal yang perlu didefinisikan terlebih dahulu dalam kasus game pathfinding dengan penerapan algoritma A* (A Star). Adapun istilah-istilah yang akan dibahas yaitu path, open list, closed list, nilai f, g dan n.

Algoritma A* menggunakan dua senarai yaitu OPEN dan CLOSED.

OPEN adalah senarai (list) yang digunakan untuk menyimpan simpul-simpul yang

pernah dibangkitkan dan nilai heuristiknya telah dihitung tetapi belum terpilih sebagai simpul terbaik (best node) dengan kata lain, OPEN berisi simpul-simpul masih memiliki peluang untuk terpilih sebagai simpul terbaik, sedangkan

CLOSED adalah senarai untuk menyimpan simpul-simpul yang sudah pernah

dibangkitkan dan sudah pernah terpilih sebagai simpul terbaik. Artinya, CLOSED

berisi simpul-simpul yang tidak mungkin terpilih sebagai simpul terbaik (peluang untuk terpilih sudah tertutup).

1. OPEN LIST adalah list yang menyimpan kemungkinan path yang akan

diperiksa. OPEN LIST dibuat terurut berdasarkan nilai f. OPEN LIST

digunakan untuk menentukan secara selektif (berdasarkan nilai f) jalan yang dikira lebih dekat menuju pada path tujuan. OPEN berisi simpul-simpul yang masih memiliki peluang untuk terpilih sebagai simpul terbaik (best node).

2. CLOSED adalah senarai (list) untuk menyimpan simpul-simpul yang sudah

(56)

LIST dan CLOSED LIST) ini bertujuan juga untuk menghindari penelusuran berkali-kali jalan (rute) yang memang sudah diidentifikasi agar tidak masuk kembali ke dalam OPEN LIST.

3. Nilai F adalah cost perkiraan suatu path yang teridentifikasi. Nilai F merupakan hasil dari f(n).

4. Nilai G hasil dari fungsi g(n), adalah banyaknya langkah yang diperlukan untuk menuju ke path sekarang.

5. Setiap simpul (node) harus memiliki informasi nilai h(n), yaitu estimasi harga simpul tersebut dihitung dari simpul tujuan yang hasilnya menjadi nilai H. [1] Fungsi f sebagai estimasi fungsi evaluasi terhadap node n, dapat dituliskan :

f(n) = g(n) + h(n) dengan :

f(n) = fungsi evaluasi ( jumlah g(n) dengan h(n) )

g(n) = biaya (cost) yang dikeluarkan dari keadaan awal sampai keadaan n

h(n) = estimasi biaya untuk sampai pada suatu tujuan mulai dari n [18]

Pergerakan diagonal pada map diperbolehkan, maka digunakan fungsi

heuristic Non-Manhattan Distance. Maka fungsi heuristic yang digunakan adalah

sebagai berikut :

h_diagonal(n) = min(abs(n.x-goal.x) + abs(n.y-goal.y)) h_orthogonal(n) = (abs(n.x-goal.x) + abs(n.y-goal.y))

(57)

Sudah dijelaskan pada analisis masalah bahwa ordo dapat disesuaikan dengan rentang X x Y, salah satu contoh perhitungan pada game pathfinding ini akan dijelaskan dengan ordo minimal yaitu 3x3 dikarenakan perhitungan pada ordo berapa pun akan sama. Pada penentuan bobot setiap node akan diberikan nilai sesuai dengan jarak terdekat ke tujuan, misal node yang terjauh dari tujuan maka diberi bobot yang kecil sedangkan node yang terdekat dengan tujuan diberi bobot yang lebih besar. Contoh perhitungannya seperti pada gambar III.4 yang diberi nilai bobot yang terkecil yaitu 1 dan bobot selanjutnya ditambahkan 1.

Gambar III.4. Contoh kondisi ruang map yang akan dihitung dengan A* Perhitungan yang dilakukan dengan algoritma A*dengan kondisi tanpa

penghalang yang terlihat pada gambar III.5.

Gambar III.5. Contoh kondisi (i) tanpa penghalang dengan pencarian A* Posisi simpul awal = Ax : 0, Ay : 0

Gambar

Gambar II.8. Keadaan sepadan
Gambar II.10. Rute dengan langkah diagonal diperbolehkan
Gambar II.11. Ilustrasi single linked list
gambar II.12.
+7

Referensi

Dokumen terkait

Pada bab ini berisi penjelasan hasil dari pengujian algoritma A* (A Star) yang telah dilakukan dalam menyelesaikan permasalahan dalam penentuan jarak terpendek untuk

Perbedaan dengan penelitian ketiga juga terletak pada algoritma yang diterapkan untuk menyelesaikan masalah pencarian jarak

Analisis Algoritma A Star (A*) dan Implementasinya Dalam Pencarian Jalur Terpendek pada Jalur Lintas Sumatera di Provinsi Sumatera Utara.. Universitas

graph) [2]. Banyak penelitian terdahulu membahas tentang algoritma untuk pencarian rute menuju titik tertentu dan menghasilkan rute terpendek salah satunya penelitian yang

Penerapan algoritma A Star dapat berjalan dengan baik, sehingga dapat mengetahui jalur terpendek dari ular enemy menuju apel dalam permainan

Berdasarkan Gambar 3 proses pencarian terhadap semua simpul dari simpul awal menuju simpul tujuan menggunakan algoritma Depth First Search pada game mummy maze deluxe level

Alasan inilah yang membuat penulis ingin mencoba untuk menerapkan algoritma A* (A Star) pada game edukasi The Maze Island berbasis Android.. Algoritma A*

Algoritma Dijkstra memecahkan masalah pencarian jalur terpendek antara dua simpul dalam graf berbobot dengan jumlah total terkecil, dengan mencari jarak terpendek antara simpul awal