Implementasi Algoritma Simplified Memory Bounded A* Untuk Pencarian Kata PAda Permainan Word Search Puzzle

(1)

1

1.1. Latar Belakang Masalah

Permainan word search puzzle atau permainan pencarian kata adalah permainan berbasis puzzle untuk mencari kata-kata yang disusun dalam bentuk matriks. Kata-kata tersebut dapat disusun secara horizontal, vertikal maupun tersusun dengan lebih dari satu ruas garis yang terhubung secara horizontal dan vertikal. Penyelesaian dari permainan word search puzzle ini adalah menemukan semua kata yang tersembunyi pada papan permainan yang berbentuk matriks. Permasalahan yang dihadapi adalah bagaimana sistem dapat menemukan semua kata yang tersembunyi di dalam puzzle yang telah tersusun secara random baik secara horizontal, vertikal maupun tersusun dengan lebih dari satu ruas garis yang terhubung secara horizontal dan vertikal. Sebelumnya telah ada penelitian tentang analisis perbandingan algoritma Knuth-Morris-Pratt dengan algoritma Boyer-Moore pada permainan word search puzzle [1]. Dari penelitian tersebut diketahui bahwa algoritma Boyer-Moore efisien untuk pencarian secara horizontal dan vertikal, sedangkan algoritma Knuth-Morris-Pratt lebih efisien pada pencarian secara diagonal. Akan tetapi algoritma ini tidak dapat digunakan dalam penyelesaian permainan ini karena aturan pencarian pada kata yang tersusun tidak hanya horizontal, vertikal dan diagonal saja.

Maka dari itu dalam penelitian ini digunakan algoritma Simplified Memory-Bounded A* untuk melakukan pencarian kata pada permainan word search puzzle. Algoritma ini dipilih karena melihat karakteristik permasalahan word search puzzle

tersebut sama dengan permasalahan pada pathfinding. Algoritma ini adalah algoritma yang sering digunakan pada pencarian jalur terpendek dan merupakan algoritma pencarian heuristic. Algoritma ini memiliki kelebihan yaitu membutuhkan memori yang lebih kecil dibandingkan dengan algoritma A* [2].

Berdasarkan penjelasan yang telah dipaparkan diatas, maka diharapkan solusi pada permainan word search puzzle dapat ditemukan dan diketahui bahwa


(2)

algoritma yang dipilih merupakan algoritma yang efektif untuk melakukan pencarian kata pada permainan word search puzzle tersebut.

1.2. Rumusan Masalah

Berdasrkan latar belakang yang diuraikan di atas, maka perumusan masalah yang diangkat adalah:

1. Bagaimana mengimplementasikan algoritma Simplified Memory-Bounded A* untuk pencarian kata pada permainan word search puzzle dengan susunan kata yang lebih dari satu ruas garis yang terhubung secara horizontal dan vertikal.

2. Bagaimana mengukur performansi dari algoritma Simplified Memory-Bounded A* untuk pencarian kata pada permainan word search puzzle.

1.3. Maksud dan Tujuan

Berdasarkan permasalahan yang diteliti, maka maksud dari penelitian ini adalah menerapkan algoritma Simplified Memory-Bounded A* pada penyelesaian permainan word search puzzle.

Sedangkan tujuan yang diharapkan akan dicapai dalam penelitian ini adalah sebagai berikut:

1. Mengetahui apakah algoritma Simplified Memory-Bounded A* dapat digunakan untuk mencari solusi permainan word search puzzle.

2. Mengetahui performansi dalam kecepatan dan penggunaan memori dari algoritma Simplified Memory-Bounded A* untuk pencarian kata pada permainan word search puzzle.

1.4. Batasan Masalah

Untuk menghindari pembahasan yang meluas, maka permasalahan hanya dibatasi sebagai berikut:

1. Pengujian kata-kata diambil dari kata kerja dalam Bahasa Indonesia. 2. Pengujian menggunakan kata yang memiliki panjang maksimal 30 karakter. 3. Ukuran matriks yang digunakan minimal yaitu 3 baris x 3 kolom dan

maksimal 20 baris x 20 kolom.


(3)

5. Sistem yang akan dibangun merupakan aplikasi berbasis Desktop. 6. Media penyimpanan yang digunakan yaitu menggunakan file teks. 7. Bahasa pemrograman yang digunakan adalah Java.

8. Analisis dan pemodelan yang digunakan dalam membangun sistem ini adalah OOAD(Object Oriented Analysis Design).

1.5. Metodologi Penelitian

Pada penelitian kali ini digunakan metode penelitian deskriptif. Metode penelitian deskriptif adalah suatu metode untuk meneliti status sekelompok manusia, suatu objek, suatu set kondisi suatu sistem pemikiran ataupun suatu kelas peristiwa pada masa sekarang. Tujuan dari penelitian deskriptif ini adalah untuk membuat deskripsi, gambaran atau lukisan secara sistematis, faktual, dan akurat mengenai fakta-fakta yang diselidiki [3].

1.5.1. Metode Pengumpulan Data

Metode pengumpulan data yang digunakan adalah dengan melakukan studi literatur. Studi literatur adalah mengumpulkan data melalui buku-buku, hasil penelitian, jurnal, situs internet, artikel terkait dengan permasalahan yang terjadi.

1.5.2. Metode Pembangunan Perangkat Lunak

Metode yang digunakan dalam pengembangan perangkat lunak adalah metode Agile [4]. Penggambaran metode Agile dapat dilihat pada gambar dibawah ini.


(4)

Metode Agile memiliki beberapa proses antara lain sebagai berikut:

a. Planning

Tahap perencanaan yang dilakukan adalah mencari fungsionalitas-fungsionalitas yang dibutuhkan untuk membangun perangkat lunak yang dalam hal ini meliputi analisis masalah, analisis algoritma Simplified Memory-Bounded A*, analisis masukan serta analisis kebutuhan fungsional dan non-fungsional.

b. Design

Pada tahap ini melakukan perancangan dari perangkat lunak yang dibuat meliputi perancangan antarmuka, perancangan model, serta melakukan perancangan kelas-kelas pada konsep object oriented.

c. Coding

Pada tahap ini yaitu mulai menerjemahkan analisis dan perancangan-perancangan yang dilakukan sebelumnya ke dalam bahasa pemrograman. Setelah lolos tahap testing, maka dilakukan refactoring, yaitu meninjau kembali semua kode program, dilihat keefektifannya, jika ada kode program yang tidak efektif akan dilakukan penulisan kode program ulang tanpa mengubah kerja dari modul.

d. Testing

Pada tahap testing yaitu menguji implementasi dari perangkat lunak dan pengujian algoritma yang telah dibuat, dan bertujuan untuk menemukan kesalahan-kesalahan terhadap sistem tersebut untuk kemudian bisa diperbaiki.


(5)

1.6. Sistematika Penulisan

Sistematika penulisan disusun untuk memberikan gambaran secara umum mengenai permasalahan dan pemecahannya. Sistematika penulisan tugas akhir ini adalah sebagai berikut:

BAB 1 PENDAHULUAN

Bab ini menguraikan tentang latar belakang masalah, rumusan masalah yang dihadapi, menentukan maksud dan tujuan, menentukan batasan masalah, metode penelitian dan sistematika penulisan laporan.

BAB 2 LANDASAN TEORI

Bab ini berbagai konsep dasar dan teori-teori permainan word search puzzle, Artificial Intelligence, algoritma A*, algoritma Simplified Memory-Bounded A*, UML, dan Java.

BAB 3 ANALISIS DAN PERANCANGAN SISTEM

Bab ini berisi analisis masalah dari model penelitian, menggambarkan analisis algoritma, analisis kebutuhan perangkat keras, analisis kebutuhan perangkat lunak, diagram pembuatan sistem, perancangan antarmuka dan jaringan semantik.

BAB 4 IMPLEMENTASI DAN PENGUJIAN SISTEM

Bab ini berisi tahapan yang dilakukan dalam penelitian dalam menjelaskan implementasi, tampilan antarmuka, menu yang tersedia pada sistem, dan pengujian terhadap sistem.

BAB 5 KESIMPULAN DAN SARAN

Bab ini berisi mengenai hal-hal penting yang telah dibahas dan kemudian dibuat kesimpulan. Bab ini juga berisi saran-saran yang diberikan untuk pengembang selanjutnya.


(6)

(7)

7

2.1. Permainan Word Search Puzzle

Permainan word search puzzle dikenal sebagai word find game, yang terkenal karena membantu siswa untuk mengenali kata-kata. Pada permainan ini huruf dari sebuah kata terletak pada grid dan biasanya memiliki bentuk persegi. Untuk memainkan game ini, pemain mencari dan menandai semua kata-kata tersembunyi di dalam grid. Dalam permainan word search puzzle, daftar kata tersembunyi disediakan. Biasanya banyak kata yang terkait mudah bagi pemain untuk dicari. Kata terdaftar dapat diatur dalam arah horizontal, vertikal atau diagonal dalam grid. Semakin cepat penyelesaian setiap tingkat, maka skor yang lebih tinggi akan didapatkan. Dalam mencari kata-kata, pengguna membaca dan menghafal kata-kata saat mereka bermain game yang membantu mereka mempelajari kata-kata dan ejaan, huruf demi huruf, dalam teka-teki [5]. Berikut ini adalah gambar dari salah satu permainan word search puzzle:


(8)

2.2. Artificial Intelligence

Sebagian kalangan menerjemahkan Artificial Intelligence sebagai kecerdasan buatan, kecerdasan artifisial, intelijensia artifisial, atau intelijensia buatan. Para ahli mendefinisikan AI secara berbeda-beda tergantung pada sudut pandang mereka masing-masing. Ada yang fokus pada logika berpikir manusia saja, tetapi ada juga yang mendefinisikan AI secara lebih luas pada tingkah laku manusia [2]. Menurut Stuart Russel dan Peter Norvig [5] mengelompokkan definisi AI, yang diperoleh dari beberapa textbook yang berbeda, ke dalam empat kategori, yaitu:

1. Thinking humanly: the cognitive modeling approach

Pendekatan ini dilakukan dengan dua cara sebagai berikut:

a. Melalui introspeksi: mencoba menangkap pemikiran-pemikiran sendiri pada saat berpikir. Tetapi, seorang psikolog Barat mengatakan: “how do

you know that you understand?” Bagaimana Anda tahu bahwa Anda mengerti? Karena pada saat Anda menyadari pemikiran Anda, ternyata pemikiran tersebut sudah lewat dan digantikan kesadaran Anda. Sehingga, definisi ini terkesan mengada-ada atau tidak mungkin dilakukan.

b. Melalui eksperimen psikologi.

2. Acting Humanly: the turing test approach

Pada tahun 1950, Alan Turing merancang suatu ujian bagi komputer berintelijensia untuk mengetahui apakah komputer tersebut mampu mengelabuhi seorang manusia yang menginterogasinya melalui teletype

(komunikasi berbasis teks jarak jauh). Jika interrogator tidak dapat membedakan yang diinterogasi adalah manusia atau komputer, maka komputer berintellijensia tersebut lolos dari Turing test. Komputer tersebut perlu memiliki kemampuan: Natural Language Processing, Knowledge Representation, Automated Reasoning, Machine Learning, Computer Vision, Robotics. Turing test sengaja menghindari interaksi fisik antara interrogator dan komputer karena simulasi fisik manusia tidak memerlukan intelijensia.


(9)

3. Thinking Rationally: the laws of thoughtapproach

Terdapat dua masalah dalam pendekatan ini, yaitu:

a. Tidak mudah untuk membuat pengetahuan informal dan menyatakan pengetahuan tersebut ke dalam formal term yang diperlukan oleh notasi logika, khususnya ketika pengetahuan terseubut memiliki kepastian kurang dari 100%.

b. Terdapat perbedaan besar antara memecahkan masalah “dalam prinsip”

dan memecahkannya “dalam dunia nyata”.

4. Acting Rationally: the rational agent approach

Membuat inferensi yang logis merupakan bagian dari suatu rational agent. Hal ini disebabkan satu-satunya cara untuk melakukan aksi secara rasional adalah menalar secara logis. Dengan menalar secara logis, maka bisa didapatkan kesimpulan bahwa aksi yang diberikan akan mencapai tujuan atau tidak. Jika mencapai tujuan, maka agent dapat melakukan aksi berdasarkan kesimpulan tersebut.

Teknik pemecahan masalah yang ada di dalam Artificial Intelligence dibagi menjadi 4 yaitu [2]:

a. Searching

Searching merupakan teknik menyelesaikan masalah dengan cara merepresentasikan masalah ke dalam state dan ruang masalah serta menggunakan strategi pencarian untuk menemukan solusi.

b. Reasoning

Reasoning yaitu mempresentasikan masalah ke dalam basis pengetahuan dan melakukan proses penalaran untuk menemukan solusi.

c. Planning

Planning adalah suatu metode penyelesaian masalah dengan cara memecah masalah ke dalam sub-sub masalah yang lebih kecil, menyelesaikan sub-sub masalah satu demi satu, kemudian menggabungkan solusi-solusi dari sub-sub masalah tersebut menjadi sebuah solusi lengkap dengan tetap mengingat dan menangani interaksi yang terdapat pada sub-sub masalah tersebut.


(10)

d. Learning

Learning merupakan teknik menyelesaikan masalah dengan mengotomatisasi mesin untuk menemukan aturan yang diharapkan bisa berlaku umum untuk data-data yang belum pernah diketahui.

2.3. Metode-metode Pencarian

Terdapat banyak metode pencarian yang telah diusulkan. Semua metode yang ada dapat dibedakan ke dalam dua jenis: pencarian buta/tanpa informasi (blind

atau un-informed search) dan pencarian heuristik/dengan informasi (heuristic atau

informed search). Setiap metode mempunyai karakteristik yang berbeda-beda dengan kelebihan dan kekurangannya masing-masing.

Untuk mengukur performansi suatu metode pencarian, terdapat empat kriteria yang digunakan, yaitu [2]:

a. Completeness, yaitu apakah metode tersebut menjamin penemuan solusi jika solusinya memang ada.

b. Time complexity, yaitu berapa lama waktu yang diperlukan untuk melakukan pencarian.

c. Space complexity, yaitu berapa banyak memori yang diperlukan selama pencarian.

d. Optimality, yaitu apakah metode tersebut menjamin menemukan solusi yang terbaik jika terdapat solusi yang berbeda.

2.3.1. Metode Pencarian Buta (Blind/Un-informed Search)

Disini digunakan istilah blind atau buta karena memang tidak ada informasi awal yang digunakan dalam proses pencarian [2]. Informasi yang ada hanyalah kondisi start state dan goal state saja. Dengan seperti ini maka pencarian buta akan mencari seluruh kemungkinan yang ada untuk menemukan solusi, sehingga menjadi kurang efisien.

Beberapa metode yang ada pada blind search antara lain: Breadth First Search (BFS), Uniform Cost Search (UCS), Depth First Search (DFS), Depth-Limited Search (DLS), Iterative-Deepening Search (IDS), dan Bi-directional Search (BDS).


(11)

2.3.2. Metode Pencarian Heuristik (Informed Search)

Kata heuristic berasal dari sebuah kata kerja bahasa Yunani, heuriskein,

yang berarti ‘mencari’ atau ‘menemukan’. Dalam dunia pemrograman, sebagian

orang menggunakan kata heuristik sebagai lawan kata dari algoritmik, dimana kata

heuristik ini diartikan sebagai ‘suatu proses yang mungkin dapat menyelesaikan

suatu masalah tetapi tidak ada jaminan bahwa solusi yang dicari selalu dapat

ditemukan’. Di dalam mempelajari metode-metode pencarian ini, kata heuristik diartikan sebagai suatu fungsi yang memberikan suatu nilai berupa biaya perkiraan (estimasi dari suatu solusi) [2].

Metode-metode yang termasuk dalam teknik pencarian yang berdasarkan pada fungsi heuristik adalah: Generate and Test, Hill Climbing (Simple Hill Climbing dan Steepest-Ascent Hill Climbing), Simulated Annealing, Best First Search(Greedy Best First Search dan A* dengan berbagai varisinya, seperti

Simplified Memory-Bounded A*).

2.4. Algoritma A* (A Bintang)

Algoritma ini merupakan algoritma Best First Search yang menggabungkan

Uniform Cost Search dan Greedy Best-First Search. Biaya yang diperhitungkan didapat dari biaya sebenarnya ditambah dengan biaya perkiraan. Dalam notasi matematika dituliskan sebagai: f(n) = g(n) + h(n). Dengan perhitungan biaya seperti ini,algoritma A* adalah complete dan optimal [2].

Sama dengan algoritma dasar Best First Search, algoritma A* ini juga menggunakan dua senarai OPEN dan CLOSED. Terdapat tiga kondisi bagi setiap suksesor yang dibangkitkan, yaitu sudah berada di OPEN, sudah berada di

CLOSED, dan tidak berada di OPEN maupun CLOSED. Pada ketiga kondisi tersebut diberikan penanganan yang berbeda-beda.

Jika suksesor sudah pernah berada di OPEN, maka dilakuakn pengecekan apakah perlu pengubahan parent atau tidak tergantung pada nilai g-nya melalui

parent lama atau parent baru. Jika melalui parent baru memberikan nilai g yang lebih kecil, maka dilakukan pengubahan parent. Jika pengubahan parent dilakukan, maka dilakukan pula pembaruan (update) nilai g dan f pada suksesor tersebut.


(12)

Dengan perbaruan ini, suksesor tersebut memiliki kesempatan yang lebih besar untuk terpilih sebagai simpul terbaik (best node).

Jika suksesor tidak berada di OPEN maupun CLOSED, maka suksesor tersebut dimasukkan ke dalam OPEN. Tambahkan suksesor tersebut sebagai suksesornya best node. Hitung biaya suksesor tersebut dengan rumus f = g + h.

2.5. Algoritma Simplified Memory-Bounded A* (SMA*)

Untuk masalah tertentu, di mana memori komputer terbatas, algoritma A* mungkin tidak mampu menemukan solusi karena sudah tidak tersedia memori untuk menyimpan simpul-simpul yang dibangkitkan. Algoritma IDA* dapat digunakan untuk kondisi seperti ini karena IDA* hanya membutuhkan sedikit memori. Tetapi, satu kelemahan IDA* adalah bahwa pencarian yang dilakukan secara iteratif akan membutuhkan waktu yang lama karena harus membangkitkan simpul berulang kali [2].

Berlawanan dengan IDA* yang hanya mengingat satu f-limit, algoritma SMA* mengingat f-Cost dari setiap iterasi sampai sejumlah simpul yang ada di dalam memori. Karena batasan memori dalam jumlah tertentu, maka dapat membatasi pencarian hanya sampai pada simpul-simpul yang dapat dicapai dari root sepanjang suatu jalur yang memorinya masih mencukupi. Kemudian mengembalikan suatu rute terbaik diantara rute-rute yang ada dalam batasan jumlah simpul tersebut. Jika memori komputer hanya mampu menyimpan 100 simpul, maka bisa membatasi proses pencarian sampai level 99.

Pada algoritma SMA* terdapat sebuah senarai yang digunakan untuk memanipulasi antrian simpul yang terurut berdasarkan f-cost. Di sini yang dimaksud f-cost adalah gabungan biaya sebenarnya dan biaya perkiraan, yang secara matematika dinyatakan seperti pada persamaan 2.1 berikut:

f(n) = g(n) + h(n) (2.1) Dengan:

n = simpul saat ini

g(n) = biaya (cost) dari simpul awal ke simpul n sepanjang jalur pencarian

h(n) = perkiraan cost dari simpul n ke simpul tujuan (nilai heuristic) f(n) = total cost dari simpul n ke simpul tujuan


(13)

Berikut ini adalah algoritma Simplified Memory-Bounded A* [2]:

function SMA*(masalah) returns solusi

inputs : masalah, sebuah masalah

local variables : Queue, antrian nodes yang terurut berdasarkan f-cost

Queue  MAKE-QUEUE({MAKE-SIMPUL(INITIAL-STATE[masalah])})

loop do

if Queue kosong then return gagal

n  simpul di Queue yang memiliki f-cost terkecil dan level terdalam

if GOAL-TEST(n) then return sukses suk  NEXT-SUCCESSOR(n)

if suk bukan goal dan levelnya sudah maksimum then

f(suk)  INFINITE

else

f(suk)  MAX(f(n), g(n) + h(n))

end

if semua suksesor dari n sudah dibangkitkan then

Ganti f-cost pada n dengan nilai f(suk) yang terkecil. Gantikan nilai f(suk) terkecil ini ke semua ancestors dari n(ayah, kakek, dan seterusnya keatas) kecuali ancestors yang memiliki f-cost lebih kecil daripada f(suk)terkecil itu.

if semua SUCCESSOR(n) sudah di memori then

Keluarkan n dari Queue (tetapi tidak dihapus secara fisik di memori)

if memori penuh then

if suk = Goal and f(suk) = f(start) then return sukses dan exit

Hapus simpul terburuk di dalam Queue yang memiliki f-cost terbesar dan level terdangkal.

Keluarkan simpul terburuk tersebut dari daftar suksesor parent-nya.

Masukkan parent dari simpul terburuk tersebut ke Queue jika parent tersebut tidak ada di Queue.

end

insert suk in Queue

Gambar 2.2 Algoritma Simplified Memory-Bounded A*

Pada awalnya, Queue berisi initial state yang memiliki f-cost = h(n) karena

g(n) = 0 (tidak ada biaya dari initial state menuju initial state). Selanjutnya, dilakukan iterasi sampai goal ditemukan atau sampai Queue kosong. Awalnya,

initial state akan terpilih sebagai n. Kemudian, satu per satu, suksesornya dibangkitkan dan dihitung biayanya yang dilambangkan dengan f(suk). Ketika


(14)

semua suksesor dari n sudah dibangkitkan, maka ganti nilai f-cost pada n dengan nilai f-cost terkecil dari nilai-nilai f-cost yang ada pada semua suksesornya. Pergantian ini dilakukan juga untuk semua ancestor-nya n(ayah, kakek, dst keatas). Tetapi jika ancestor-nya n tersebut memiliki nilai f-cost yang lebih kecil daripada

f-cost baru pada n, maka nilai f-cost pada ancestor tersebut tidak perlu diganti. Selanjutnya, jika semua suksesor dari n sudah di memori, maka keluarkan n dari

Queue, tetapi tidak dihapus secara fisik dari memori (artinya: biarkan n tetap berada di memori). Pengeluaran n dari Queue ini dilakukan agar n tidak terhapus ketika memori f-cost terbesar dan level terdangkal (dan jika terdapat lebih dari satu simpul dengan f-cost terbesar, maka dipilih simpul yang levelnya terdangkal), maka n akan terhapus ketika suksesornya memiliki f-cost yang sama dengannya (di mana f-cost

tersebut adalah yang terbesar di antara semua simpul yang ada di memori). Proses berikutnya adalah penghapusan simpul secara fisik dari memori ketika memori sudah penuh. Simpul yang terpilih akan dihapus dari memori dan perubahan atribut sudah dilakukan pada parent-nya, yaitu daftar suksesor yang berisi simpul terhapus tersebut dihilangkan. Kemudian parent dari simpul terhapus tersebut dimasukkan ke dalam Queue jika parent tersebut tidak ada di Queue (artinya: jika parent tidak ada di Queue berarti parent tersebut adalah n yang pernah dikeluarkan dari Queue). Misalnya terpadat masalah pencarian rute terpendek seperti pada gambar berikut:

S

A

B

C

D

E

10 25

30 35 10

F

5

G H

J

K

L

M

90

40 50 10

40

10 25

52 20

40 80

10

25 30

n S A B C D E F G H J K L M

h(n) 80 80 60 70 85 74 70 0 40 100 30 20 70


(15)

Berikut ini adalah ilustrasi bagaimana langkah-langkah SMA* dalam menyelesaikan masalah yang terdapat pada gambar 2.3 diatas. Misalkan memori komputer hanya mampu menyimpan 6 simpul. Oleh karena itu , level maksimum yang dapat dijangkau oleh SMA* adalah level 5.

1. Pada langkah pertama kondisi Queue = {S}. Pada langkah 1 tersebut seperti pada gambar berikut:

S

80

Gambar 2.4 Langkah 1 Pencarian Rute

2. Kemudian langkah selanjutnya seperti berikut:

a. n S {simpul di Queue yang memiliki f-cost terkecil dan level terdalam} b. suk A {NEXT-SUCCESSOR(S)}

hitung f(A) = MAX(f(S), g(A) + h(A)) = MAX(80,90) = 90 insert A in Queue

maka, Queue = {S, A}

c. suk B {NEXT-SUCCESSOR(S)} hitung f(B) = 85

insert B in Queue

maka, Queue = {S, A, B}

b. suk C {NEXT-SUCCESSOR(S)} hitung f(C) = 100

insert C in Queue

maka, Queue = {S, A, B, C}

c. suk D {NEXT-SUCCESSOR(S)} hitung f(D) = 120

insert D in Queue

maka, Queue = {S, A, B, C, D} d. suk E { NEXT-SUCCESSOR(S)}


(16)

e. Jika semua suksesor dari S sudah dibangkitkan, maka Ganti f-cost pada S dengan nilai f(suk) yang terkecil yaitu f(E) = 84. Dengan demikian, f(S) yang tadinya 80 diganti dengan 84.

f. Jika semua SUKSESOR(S) sudah di memori maka, Keluarkan S dari Queue

(tetapi tidak dihapus secara fisik di memori). Hal ini untuk menghindari terpilihnya S sebagai node yang harus dihapus. Setelah S dikeluarkan dari

Queue, maka Queue = {A, B, C, D}.

g. Jika memori penuh, maka hapus simpul terburuk yang berada di dalam

Queue. Di sini terpilih D karena simpul ini adalah yang terburuk di dalam

Queue, yang memiliki f-cost terbesar dan level terdangkal. Sehingga Queue

= {A, B, C}. Sebelum simpul D dihapus, simpan nilai f(D) ke dalam simpul parent-nya sebagai history bahwa pernah ada simpul yang dibangkitkan kemudian dihapus. Sehingga pada simpul S terdapat dua nilai yaitu 84(120). Angka yang berada di dalam kurung adalah nilai f(D), nilai f terbaik dari suksesor yang terhapus. Keluarkan simpul terburuk tersebut dari daftar suksesor parent-nya. Dalam hal ini, keluarkan D tersebut dari daftar suksesor S.

h. Masukkan S (parent dari simpul terburuk tersebut) ke Queue jika parent tersebut tidak ada di Queue. Setelah S dimasukkan ke dalam Queue, maka

Queue = {S, A, B, C}

i. Insert E inQueue. Sehingga Queue = {S, A, B, C, E} Untuk langkah 2 tersebut seperti pada gambar berikut:


(17)

S

A

B

C

D

E 10

25 30 35 10 84(120)

f(A) - MAX(f(S),g(A)+h(A)) = MAX(80,90) = 90

f(B) = 85

f(C) = 100

f(D) = 120

f(E) = 84

Gambar 2.5 Langkah 2 Pencarian Rute

3. Kemudian langkah 3a seperti berikut:

a. n E {simpul di Queue yang memiliki f-cost terkecil dan level terdalam} b. suk D {NEXT-SUCCESSOR(E)}

c. Hitung f(D) = 110

d. Jika suksesor E sudah dibangkitkan (kondisi ini SALAH), sehingga tidak ada aksi yang dilakukan.

e. Jika semua SUCCESSOR(E) sudah di memori (kondisi ini SALAH), sehingga tidak ada aksi yang dilakukan.

f. Jika memori penuh (kondisi ini BENAR karena ada 6 simpul: 5 simpul di dalam Queue dan simpul D), maka hapus simpul terburuk yang berada di

dalam Queue. Di sini terpilih C karena simpul ini adalah yang terburuk di

dalam Queue, yang memiliki f-cost terbesar dan level terdangkal, yaitu f(C) = 100. Sebelum simpul C dihapus simpan nilai f(C) ke dalam simpul parent-nya sebagai histori. Sehingga pada simpul S terdapat tiga nilai, yaitu 84 (100, 120). Angka yang berada di dalam kurung adalah nilai f(C) dan f(D), dua suksesor yang terhapus. Setelah C dihapus dari Queue, maka Queue = {S, A, B, E}


(18)

g. Keluarkan simpul terburuk tersebut dari daftar suksesor parent-nya. Dalam hal ini, keluarkan C tersebut dari daftar suksesor S. Proses memasukkan parent dari C, yaitu S, ke dalam Queue tidak diperlukan karena S sudah berada di dalam Queue.

h. Insert D inQueue. Sehingga Queue = {S, A, B, E, D,} Untuk langkah 3a seperti pada gambar berikut:

S

A

B

C

E

D

10 25

30

10

15 f(A) = 90

f(B) = 85

f(C) = 100

f(D) = MAX(f(E), g(D)+h(D)) = MAX(84, 110) = 110 84(100, 120)

84

Gambar 2.6 Langkah 3a Pencarian Rute

4. Kemudian langkah 3b seperti berikut a. suk J {NEXT-SUCCESSOR(E)} b. Hitung f(J) = 130

c. Jika semua suksesor dari E sudah dibangkitkan (kondisi ini BENAR), maka ganti f-cost pada E dengan nilai f(suk) yang terkecil, yaitu 110. Dengan demikian, f(E) yang awalnya 84 diganti menjadi 110. Nilai f(E) yang baru ini perlu dicek apakah bisa menggantikan nilai parent-nya dan berlaku hingga semua anchestor-nya(ayah, kakek, buyut, dst) dengan cara membandingkan semua sibling (saudara kandung) dari E, yaitu A dan B. Ternyata f(E) lebih besar dibandingkan f(A) = 90 dan f(B) = 85. Sehingga nilai f(E) tidak digunakan untuk mengganti nilai f(S). nilai f(S) yang tadinya


(19)

84 digantikan oleh f(B) = 85 yang merupakan nilai terendah diantara semua suksesor S.

d. Jika semua SUCCESSOR(E) sudah di memori (kondisi ini BENAR), maka Keluarkan E dari Queue (tetapi tidak dihapus secara fisik di memori). Setelah E dikeluarkan, maka Queue = {S, A, B, D}

e. Jika memori penuh (kondisi ini BENAR karena ada 6 suimpul: 4 di Queue, E dan J), maka hapus simpul terburuk yang berada di dalam Queue. Di sini terpilih D karena simpul ini adalah yang terburuk di dalam Queue, yang memiliki f-cost terbesar dan level terdangkal, yaitu f(D) = 110. Sebelum simpul D dihapus, simpan nilai f(D)ke dalam simpul parent-nya sebagai histori. Sehingga pada simpul E terdapat dua nilai, yaitu 110 (110). Angka yang berada di dalam kurung adalah nilai f(D), suksesor yang terhapus. Setelah D dihapus dari Queue, maka Queue = {S, A, B}

f. Keluarkan simpul terburuk tersebutdari daftar suksesor parent-nya. Dalam hal ini, keluarkan D tersebutdari daftar suksesor S. Masukkan E ke Queue. Sehingga Queue = {S, A, B, E}

g. Insert J inQueue. Sehingga Queue = {S, A, B, E, J} Untuk langkah 3b seperti pada gambar berikut:


(20)

S

A

B

E

D

10 25

10

15 f(A) = 90

f(B) = 85

f(D) = 110 85(100, 120)

J

20

f(J) = MAX(f(E), g(J)+h(J)) = MAX(84, 130) = 130 110 (110)

Gambar 2.7 Langkah 3b Pencarian Rute

5. Demikian seterusnya. Langkah 4a, 4b, 4c, hingga langkah 8 memiliki cara yang sama seperti diatas. Untuk gambar dari langkah 4a adalah seperti pada gambar berikut:

S

A

B

E

10

25

10

f(A) = 90

85(100, 120)

J

20

f(J) = 130

A

10

f(J) = MAX(f(B), g(A)+h(A)) = MAX(85, 115) = 115

110 (130) 85

Gambar 2.8 Langkah 4a Pencarian Rute


(21)

Langkah 4b adalah seperti pada gambar berikut:

S

A

B

E

10

25

10

f(A) = 90

85(100, 120)

A

10

f(F) = MAX(f(B), g(F)+h(F)) = MAX(85, 100) = 100

110 (130) 85 (115)

F

5

f(A) = 115

Gambar 2.9 Langkah 4b Pencarian Rute

Langkah 4c adalah seperti pada gambar berikut:

S

A

B

E

10

25

10

f(A) = 90

90 (100, 110, 120)

K

50

f(K) = MAX(f(B), g(K)+h(K)) = MAX(85, 105) = 105

110 (130) 100 (115)

F

5 f(F) = 100

Gambar 2.10 Langkah 4c Pencarian Rute


(22)

Langkah 5a adalah seperti pada gambar berikut:

S

A

B

10

25

90 (100, 110, 120)

K

50

f(G) = MAX(f(A), g(G)+h(G)) = MAX(90, 100) = 100

100 (105, 115)

F

5 f(F) = 100 90

G

90

f(K) = 105

Gambar 2.11 Langkah 5a Pencarian Rute

Langkah 5b adalah seperti pada gambar berikut:

S

A

B

10

25

90 (100, 110, 120)

f(B) = MAX(f(A), g(B)+h(B)) = MAX(90, 80) = 90

100 (105, 115)

F

5 f(F) = 100 90 (100)

G

90

B

10

f(G) = 100

Gambar 2.12 Langkah 5b Pencarian Rute

Langkah 6a adalah seperti pada gambar berikut:

S

A

10

90 (100, 110, 120)

f(F) = MAX(f(B), g(F)+h(F)) = MAX(90, 95) = 95 90 (100)

G

90

B

10

f(G) = 100

F

5 90

Gambar 2.13 Langkah 6a Pencarian Rute


(23)

Langkah 6b adalah seperti pada gambar berikut:

S

A

10

90 (100, 110, 120)

f(K) = MAX(f(B), g(K)+h(K)) = MAX(90, 100) = 100 95 (100)

G

90

B

10

f(G) = 100

F

5 95

K

50

f(F) = 95

Gambar 2.14 Langkah 6b Pencarian Rute

Langkah 7 adalah seperti pada gambar berikut:

S

A

10

90 (100, 110, 120)

f(K) = MAX(f(F), g(K)+h(K)) = MAX(95, 95) = 95 95 (100)

B

10

F

5 95

K

50

f(K) = 100

K

40 95

Gambar 2.15 Langkah 7 Pencarian Rute

Langkah 8 adalah seperti pada gambar berikut:

S

A

10

90 (100, 110, 120)

f(G) = MAX(f(K), g(G)+h(G)) = MAX(95, 95) = 95

95 (100) B

10

F

5

95

K

40

95

G

30 95

Gambar 2.16 Langkah 8 Pencarian Rute (hasil akhir pencarian)


(24)

2.6. Fungsi Heuristik

Di dalam metode yang termasuk heuristic search, fungsi heuristik memainkan peranan yang sangat menetukan. Suatu fungsi dapat diterima sebagai fungsi heuristik jika biaya perkiraan yang dihasilkan tidak melebihi dari biaya sebenarnya. Ketika fungsi heuristik memberikan biaya perkiraan yang melebihi biaya sebenarnya (overestimate), maka proses pencarian bisa tersesat dan membuat

heuristic search menjadi tidak optimal [2].

Suatu fungsi heuristik dikatakan baik jika bisa memberikan biaya perkiraan yang mendekati biaya sebenarnya, fungsi heuristik tersebut semakin baik. Berikut ini adalah contoh fungsi heuristik pada masalah 8-puzzle dimana terdapat dua fungsi heuristik yang dapat digunakan, antara lain:

1. h1 = jumlah kotak yang posisinya salah. Pada masalah tersebut misalnya angka 1, 2, dan 3 sudah berada pada posisi yang benar. Sedangkan lima angka lainnya berada pada posisi yang salah. Jadi h1 = 5.

2. h2 = jumlah langkah yang diperlukan masing-masing kotak menuju posisi yang benar di goal state. Biasanya disebut City Block Distance

atau Manhattan Distance. Untuk masalah tersebut misalnya angka 1, 2 dan 3 membutuhkan 0 langkah. Angka 4, 5, 7 dan 8 membutuhkan 2 langkah. Sedangkan angka 6 membutuhkan 3 langkah. Sehingga h2 = 0 + 0 + 0 + 2 + 2 + 3 + 2 + 2 = 11.

2.7. Pemrograman Berorientasi Objek

Perkembangan gaya pemrograman mencapai gaya pemrograman orientasi objek setelah era pemrograman terstruktur. Pemrograman berorientasi objek menggantikan pemrograman terstruktur karena mempunyai banyak keunggulan dalam menangani proyek yang luar biasa kompleks. Pemrograman menggunakan bahasa orientasi objek menawarkan fleksibilitas, kegunaulangan dan kemudahan perawatan [7].

Dengan pemrograman berorientasi objek, para pengembang menciptakan blok-blok kode, yang dinamakan objek [7]. Objek-objek ini kemudian digunakan oleh berbagai aplikasi. Suatu saat jika objek mebutuhkan perubahan, para pengembang hanya melakukan perubahan sekali saja dan kemudian ia dengan


(25)

mudah akan mewariskannya ke objek-objek lain yang menjadi turunannya. Dengan kepraktisannya, perusahaan-perusahaan perangkat lunak saat ini berusaha mengadopsi teknologi baru ini dan mengintegrasikannya pada aplikasi-aplikasi yang sudah ada. Kenyataannya, kebanyakan aplikasi-aplikasi modern saat ini berorientasi objek.

Paradigma berorientasi objek adalah cara yang berbeda dalam memandang aplikasi-aplikasi [7]. Dengan pendekatan berorientasi objek, para pengembang membagi aplikasi-aplikasi besar menjadi objek-objek, yang mandiri satu terhadap lainnya. Pengembang kemudian mengembangkan aplikasi dengan membuat objek-objek itu saling mengirim pesan (message) dan bekerja-sama. Dimbil suatu contoh. Dengan pemrograman terstruktur, katakanlah ingin membuat form dengan listbox

di dalamnya. Untuk hal ini, maka harus menulis kode-kode yang jumlahnya sangat banyak untuk membuat form dan listbox itu sendiri dan kemudian membuat kode-kode untuk tombol OK. Dengan pemrograman berorientasi objek, maka dengan sederhana hanya perlu menggunakan objek-objek yang telah ada sebelumnya: form,

listbox, dan tombol OK. Maka, alih-alih membuat segalanya dari awal dengan pemrograman terstruktur, dengan pemrograman berorientasi objek tinggal menggunakan objek-objek yang sudah ada dan kemudian berfokus pada ‘apa yang

unik’ untuk aplikasi tertentu yang sedang dikembangkan. “Do not reinventing the wheel!”, kata banyak ahli. Maka, keunggulan utama mengembangkan objek-objek sekali saja dan menggunakannya lagi (reusable) berulang-ulang. Dengan pendekatan berorientasi objek, difokuskan pada informasi dan perilaku yang dimiliki suatu objek sehingga kemudian pengembang dapat mengembangkan sistem/perangkat lunak yang fleksibel dalam menghadapi perubahan-perubahan informasi dan/atau perilaku yang dituntut pengguna.

2.8. UML (Unified Modelling Language)

UML (Unified Modelling Language) adalah salah satu alat bantu yang sangat handal di dunia pengembangan sistem yang berorientasi objek. Hal ini disebabkan karena UML menyediakan bahasa pemodelan visual yang memungkinkan bagi pengembang untuk membuat cetak biru atas visi mereka dalam bentuk yang baku, mudah untuk dimengerti serta dilengkapi dengan mekanisme


(26)

yang efektif untuk berbagi (sharing) dan mengkomunikasikan rancangan mereka yang lain [9].

UML merupakan kesatuan dari bahasa pemodelan yang dikembangkan oleh Booch, Object Modelling Technique (OMT) dan Object Oriented Software Engineering (OOSE) [9]. Metode Booch dari Grady Booch sangat terkenal dengan nama metode Design Object Oriented. Metode ini menjadikan proses analisis dan design ke dalam empat tahapan iteratif, yaitu identifikasi kelas-kelas dan objek-objek, identifikasi semantik dari hubungan objek dan kelas tersebut, perincian interface dan implementasi. Keunggulan metode Booch adalah pada detail kayanya dengan notasi dan elemen. Pemodelan OMT yang dikembangkan oleh Rumbaugh didasarkan pada analisis terstruktur dan pemodelan entity-relationship. Tahapan utama dalam metodologi ini adalah analisis, design sistem, design objek dan implementasi. Keunggulan metode ini adalah dalam penotasian yang mendukung semua konsep OO. Metode OOSE dari Jacobson lebih memberi penekanan pada

use case. OOSE memiliki tiga tahapan yaitu membuat model requirement dan analisis, design dan implementasi, dan model pengujian (test model). Keunggulan metode ini adalah mudah dipelajari karena memiliki notasi yang sederhana namun mencakup seluruh tahapan dalam rekayasa perangkat lunak.

Dengan UML, metode Booch, OMT dan OOSE digabungkan dengan membuang elemen-elemen dari metode lain yang lebih efektif dan elemen-elemen baru yang belum ada pada metode terdahulu sehingga UML lebih ekspresif dan seragam daripada metode lainnya.

2.8.1. Use Case Diagram

Use Case adalah deskripsi fungsi dari sebuah sistem dari perspektif pengguna. Use case bekerja dengan cara mendeskripsikan tipikal interaksi antara

user (pengguna) sebuah sistem dengan sistemnya sendiri melalui sebuah cerita bagaimana sebuah sistem dipakai. Urutan langkah-langkah yang menerangkan antara pengguna dan sistem disebut skenario. Setiap skenario mendeskripsikan urutan kejadian. Setiap urutan diinisialisasi oleh orang, sistem lain, perangkat keras atau urutan waktu. Dengan demikian secara singkat biasa dikatakan use case adalah


(27)

serangkaian skenario yang digabungkan bersama-sama oleh tujuan umum pengguna [9].

Berikut ini adalah contoh Use Case Diagram:

Gambar 2.17 Use Case Diagram [10]

2.8.2. Use Case Scenario

Sebuah diagram yang menunjukkan kasus penggunaan dan aktor dapat menjadi titik awal yang bagus, tetapi tidak memberikan cukup detail untuk desainer sistem untuk benar-benar memahami persis bagaimana kekhawatiran sistem akan dipenuhi. Use Case Skenario adalah cara terbaik untuk mengungkapkan informasi penting ini dalam bentuk penggunaan description setiap kasus berbasis teks harus disertai dengan satu [10].

Berikut ini adalah contoh Use Case Scenario:


(28)

2.8.3. ClassDiagram

Class Diagram adalah diagram yang digunakan untuk menampilkan beberapa kelas serta paket-paket yang ada dalam sistem/perangkat lunak yang sedang kita kembangkan. Diagram kelas memberikan gambaran/diagram statis tentang sistem/perangkat lunak dan relasi-relasi yang ada di dalamnya [8].

Berikut ini adalah contoh Class Diagram:

Gambar 2.19 Class Diagram [10]

2.8.4. Sequence Diagram

Sequence Diagram digunakan untuk menggambarkan perilaku pada sebuah skenario. Diagram ini menunjukkan sejumlah contoh objek dan message (pesan) yang diletakkan diantara objek-objek ini dalam use case.

Komponen utama sequence diagram terdiri atas objek yang dituliskan dengan kotak segiempat bernama. Message diwakili oleh garis dengan tanda panah dan waktu yang ditunjukkan dengan progress vertikal [9].

Berikut ini adalah contoh Sequence Diagram:


(29)

2.8.5. Activity Diagram

Activity Diagram adalah teknik untuk mendeskripsikan logika prosedural, proses bisnis dan aliran kerja dalam banyak kasus. Activity Diagram mempunyai peran seperti halnya flowchart, akan tetapi perbedaannya dengan flowchart adalah activity diagram mendukung perilaku paralel sedangkan flowchart tidak bisa [9].

Berikut ini adalah contoh Activity Diagram:

Gambar 2.21 Activity Diagram [10]

2.9. Java

Pada 1991, sekelompok insinyur Sun Microsystem, Inc., dipimpin Patrick

Naughton dan James Gosling merancang bahasa untuk perangkat konsumer

seperti cable TV box. Karena perangkat tidak mempunyai banyak memori, bahasa harus berkuran kecil dan menghasilkan kode yang liat. Karena pabrikan-pabrikan


(30)

berbeda memilih pemroses –pemroses berbeda maka bahasa harus netral arsitektur

manapun. Proyek diberi nama “Green” [6].

Kebutuhan untuk kecil, liat dan netral platform mengantar tim mempelajari implementasi Pascal yang pernah dicoba. Niklaus Wirth, pencipta Pascal telah merancang bahasa kode antara (intermediate code) portable untuk mesin hipotesis. Kode antara ini kemudian dapat digunakan di sembarang mesin yang memiliki interpreter. Proyek Green menggunakan mesin maya untuk mengatasi isu netral terhadap arsitektur mesin.

Karena orang-orang di proyek Green berbasis C++ bukan Pascal maka kebanyakan sintaks diambil dari C++ serta mengadopsi orientasi objek bukan prosedural. Mulanya bahasa yag diciptakan diberi nama “Oak”, kemudian diganti

Java” karena telah ada bahasa yang bernama “Oak”.

Produk pertama proyek “Green” adalah “*7”, sebuah kendali jauh yang

cerdas. Karena pasar belum tertarik dengan prosuk konsumer cerdas maka proyek

Green harus menemukan pasar lain. Penerapan mengarah menjadi teknologi di

web. Pada 1995, Netscape memutuskan membuat browser dilengkapi Java. Setelah itu diikuti IBM, Symantec, bahkan Microsoft.

Sebagai bahasa yang menampung hampir seluruh kemampuan terbaik bahasa pemrograman yang pernah dikembangkan umat manusia, maka bahasa ini memang menjadi tidak mudah, sedikit rumit dan kompleks. Namun, pantas sedikit bersusah agar mampu menguasai salah satu kakas terampuh umat manusia, yaitu bahasa pemrograman modern.

Bahasa Java tidak lagi hanya untuk pemanis di web sebagai applet yang membuat Duke berdansa. Java adalah kakas, tetap hanya perangkat, bagaimanapun tetap hanya orang hebat yang dapat memberi arti penting kakas seperti dikatakan

James Gosling , tokoh terpenting di Java:

All along, the language was a tool, not the end.

Bahasa Java telah disertai berton-ton pustaka kelas, namun tidak perlu mengetahui semuanya. Perlu diketahui sekumpulan yang diperlukan untuk menyelesaikan persoalan serius yang sedang dihadapi.


(31)

Bahasa pemrograman orientasi objek telah menjadi aliran utama (mainstream), Java berorientasi objek sejati melebihi C++. Segala sesuatu di Java kecuali sedikit tipe dasar (int, float, double, char) adalah objek.

Dibanding bahasa C++, Java lebih memberi kemudahan, antara lain [3]: 1. Perancang Java menghilangkan keperluan dealokasi manual. Java

dilengkapi garbage collector yang bertugas mendealokasi memori yang tidak diperlukan. Tidak ada lagi upaya pemrogram untuk dispose(). Pemrogram tidak dibebani urusan korupsi dan sampah memori.

2. Java menerapkan array sebenarnya, menghilangkan keperluan aritmatika pointer yang berbahaya dan berpeluan besar menyebabkan kesalahan. 3. Menghilangkan keniscayaan operasi penugasan (asignment) sebagai

pengujian atas kesamaan di kalimat bersyarat. Di C/C++, pernyataan seperti

(nPerson = 3) …

sering menyebabkan masalah, memaksudkan pengujian namun yang terjadi adalah pemberian nilai. Pada kasus ini, kompilator tidak berhak memberi peringatan karena pernyataan itu merupakan pernyataan yang sah.

4. Menghilangkan pewarisan jamak (multiple inheritance) diganti fasilitas

interface. Interface memberi banyak manfaat antara lain untuk pewarisan

jamak tanpa dibebani kompleksitas yang muncul dari pengelolaan hirarki pewarisan jamak.

2.10. Teknik Pengujian Perangkat Lunak

Ujicoba software merupakan elemen yang kritis dari SQA dan merepresentasikan tinjauan ulang yang menyeluruh terhadap spesifikasi,desain dan pengkodean. Ujicoba merepresentasikan ketidaknormalan yang terjadi pada pengembangan software. Selama definisi awal dan fase pembangunan, pengembang berusaha untuk membangun software dari konsep yang abstrak sampai dengan implementasi yang memungkin [11].

Para pengembang membuat serangkaian uji kasus yang bertujuan untuk

”membongkar” software yang mereka bangun. Kenyataannya, ujicoba merupakan salah satu tahapan dalam proses pengembangan software yang dapat dilihat (secara psikologi) sebagai destruktif, dari pada sebagai konstruktif.


(32)

Pengembang software secara alami merupakan orang konstruktif. Ujicoba yang diperlukan oleh pengembang adalah untuk melihat kebenaran dari software

yang dibuat dan konflik yang akan terjadi bila kesalahan tidak ditemukan. Dari sebuah buku, Glen Myers menetapkan beberapa aturan yang dapat dilihat sebagai tujuan dari ujicoba:

1. Ujicoba merupakan proses eksekusi program dengan tujuan untuk menemukan kesalahan

2. Sebuah ujicoba kasus yang baik adalah yang memiliki probabilitas yang tinggi dalam menemukan kesalahan-kesalahan yang belum terungkap 3. Ujicoba yang berhasil adalah yang mengungkap kesalahan yang belum

ditemukan

Sehingga tujuan dari ujicoba ini adalah mendesain serangkaian tes yang secara sistematis mengungkap beberapa jenis kesalahan yang berbeda dan melakukannya dalam waktu dan usaha yang minimum. Jika pengujian diselenggarakan dengan sukses, maka akan membongkar kesalahan yang ada didalam perangkat lunak, manfaat lain dari pengujian adalah menunjukkan bahwa fungsi perangkat lunak telah bekerja sesuai dengan spesifikasi, dan kebutuhan fungsi telah tercapai. Sebagai tambahan, data yang dikumpulkan pada saat pengujian dilaksanakan akan menyediakan suatu indikasi keandalan perangkat lunak yang baik dan beberapa indikasi mutu perangkat lunak secara keseluruhan.


(33)

2.10.1.Alur Informasi Test (Test Information Flow)

Berikut ini adalah gambar alur informasi test (Test Information Flow):

Gambar 2.22 Test Information Flow

Alur informasi untuk ujicoba mengikuti pola seperti gambar diatas. Dua kategori input yang disediakan untuk proses ujicoba adalah:

1. Software configuration yang terdiri dari spesifikasi kebutuhan software, spesifikasi desain dan kode sumber;

2. Test configuration yang terdiri dari rencana dan prosedur ujicoba, Tools ujicoba apapun yang dapat digunakan, dan kasus ujicoba termasuk hasil yang diharapkan. Pada kenyataannya, konfigurasi ujicoba merupakan subset dari konfigurasi software.

2.10.2.Desain Kasus Ujicoba (Test Case Design)

Desain ujicoba untuk software atau produk teknik lainnya sama sulitnya dengan desain inisial dari produk itu sendiri. Dengan tujuan dari ujicoba itu sendiri yaitu, mendesain ujicoba yang tingkat kemungkinan penemuan kesalahan yang tinggi dengan jumlah waktu dan usaha yang sedikit [11].

Selama beberapa dekade, metode desain ujicoba kasus telah dikembangkan. Metode ini menyediakan pendekatan sistematik untuk ujicoba. Hal yang lebih penting yaitu, metode-metode ini menyediakan mekanisme yang dapat membantu memastikan kelengkapan ujicoba dan menyediakan tingkat kemungkinan yang tinggi dalam penemuan kesalahan pada software.


(34)

Semua produk yang dikembangkan (engineered) dapat diujicoba dengan salah satu cara dari 2 cara berikut:

1. Mengetahui fungsi-fungsi yang dispesifikasikan pada produk yang didesain untuk melakukannya, ujicoba dapat dilakukan dengan mendemonstrasikan setiap fungsi secara menyeluruh;

2. Mengetahui cara kerja internal dari produk, ujicoba dapat dilakukan untuk memastikan bahwa seluruh operasi internal dari produk dilaksanakan berdasarkan pada spesifikasi dan komponen internal telah digunakan secara tepat.

Pendekatan pertama adalah black box testing dan yang kedua adalah white box testing. Black box testing menyinggung ujicoba yang dilakukan pada interface

software. Walaupun didesain untuk menemukan kesalahan, ujicoba black box

digunakan untuk mendemonstrasikan fungsi software yang dioperasikan; apakah input diterima dengan benar, dan ouput yang dihasilkan benar; apakah integritas informasi eksternal terpelihara. Ujicoba black box memeriksa beberapa aspek sistem, tetapi memeriksa sedikit mengenai struktur logikal internal software.

White box testing didasarkan pada pemeriksaan detail prosedural. Alur logikal suatu software diujicoba dengan menyediakan kasus ujicoba yang melakukan sekumpulan kondisi dan/atau perulangan tertentu. Status dari program dapat diperiksa pada beberapa titik yang bervariasi untuk menentukan apakah status yang diharapkan atau ditegaskan sesuai dengan status sesungguhnya.

Sepintas seolah-olah white box testing akan menghasilkan program yang 100% benar, yang diperlukan hanyalah mendefinisikan alur logikal, membangun kasus uji untuk memeriksa software tersebut dan mengevaluasi hasil yang diperoleh. Sayangnya, ujicoba yang menyeluruh ini menghadirkan masalah logikal tertentu. Untuk sebuah program sederhana sekalipun, terdapat banyak alur logikal yang memungkinkan. Sehingga white box testing sebaiknya hanya dilakukan pada alur logikal yang penting. Struktur data-struktur data yang penting dapat diujikan dengan uji validitas. Atribut dari black box testing dan white box testing dapat dikombinasikan untuk digunakan bersama.


(35)

2.10.3.White-Box Testing

Ujicoba white-box merupakan metode desain uji kasus yang menggunakan struktur kontrol dari desain prosedural untuk menghasilkan kasus-kasus uji. Dengan menggunakan metode ujicoba white-box, para pengembang software dapat menghasilkan kasus-kasus uji yang [11]:

1. Menjamin bahwa seluruh independent paths dalam modul telah dilakukan sedikitnya satu kali,

2. Melakukan seluruh keputusan logikal baik dari sisi benar maupun salah, 3. Melakukan seluruh perulangan sesuai batasannya dan dalam batasan

operasionalnya

4. Menguji struktur data internal untuk memastikan validitasnya

Mengapa menghabiskan banyak waktu dan usaha dengan menguji logikal

software? Hal ini dikarenakan sifat kerusakan alami dari software itu sendiri, yaitu: 1. Kesalahan logika dan kesalahan asumsi secara proposional terbalik dengan kemungkinan bahwa alur program akan dieksekusi. Kesalahan akan selalu ada ketika mendesain dan implementasi fungsi, kondisi atau kontrol yang keluar dari alur utama. Setiap harinya pemrosesan selalu berjalan dengan baik dan dimengerti sampai bertemu ”kasus spesial” yang akan mengarahkannya kepada kehancuran.

2. Sering percaya bahwa alur logikal tidak akan dieksekusi ketika dikenyataannya, mungkin akan dieksekusi dengan basis regular. Alur logika program biasanya berkebalikan dari intuisi, yaitu tanpa disadari asumsi mengenai alur kontrol dan data dapat mengarahkan pada kesalahan desain yang tidak dapat terlihat hanya dengan satu kali ujicoba.

3. Kesalahan typographical (cetakan) bersifat random. Ketika program diterjemahkan kedalam kode sumber bahasa pemrograman, maka akan terjadi kesalahan pengetikan. Banyak yang terdeteksi dengan mekanisme pemeriksaan sintaks, tetapi banyak juga yang tidak terdeteksi sampai dengan dimulainya ujicoba.

Karena alasan tersebut diatas, maka ujicoba white box testing diperlukan selain black box testing.


(36)

Ujicoba Berbaisi Alur (Basis Path Testing)

Ujicoba berbasis alur merupakan teknik ujicoba white box pertama yang diusulkan oleh Tom McCabe. Metode berbasis alur memungkinkan perancang kasus uji untuk menghasilkan ukuran kompleksitas logikal dari desain prosedural dan menggunakan ukuran ini untuk mendefinisikan himpunan basis dari alur eksekusi. Kasus uji dihasilkan untuk melakukan sekumpulan basis yang dijamin untuk mengeksekusi setiap perintah dalam program, sedikitnya satu kali selama ujicoba [11].

Notasi graf Alur (Path Graph Notation)

Notasi sederhana untuk merepresentasikan alur kontrol disebut graf alur (flow graph), seperti gambar dibawah ini:

Gambar 2.23 Flow Graph Notation

Untuk mengilustrasikan kegunaan dari diagram alir dapat dilihat pada gambar dibawah ini. Gambar bagian (a) digunakan untuk menggambarkan struktur kontrol program, sedangkan gambar bagian (b) setiap lingkaran disebut dengan

flow graph node, merepresentasikan satu atau lebih perintah prosedural. Urutan dari simbol proses dan simbol keputusan dapat digambarkan menjadi sebuah node, sedangkan anak panah disebut edges, menggambarkan aliran dari kontrol sesuai dengan diagram alir.

Sebuah edge harus berakhir pada sebuah node walaupun tidak semua node

merepresentasikan perintah prosedural. Area yang dibatasi oleh edge dan node


(37)

Gambar 2.24 Flow Chart(a) dan Flow Graph(b) Cyclomatic Complexity

Cyclomatic complexity merupakan software metric yang menyediakan ukuran kuantitatif dari komplesitas logikal suatu program. Ketika digunakan dalam konteks metode ujicoba berbasis alur, nilai yang dikomputasi untuk kompleksitas

cyclomatic mendefinisikan jumlah independent path dalam himpunan basis suatu program dan menyediakan batas atas untuk sejumlah ujicoba yang harus dilakukan untuk memastikan bahwa seluruh perintah telah dieksekusi sedikitnya satu kali.

Independent path adalah alur manapun dalam program yang memperkenalkan sedikitnya satu kumpulan perintah pemrosesan atau kondisi baru. Contoh independent path dari gambar flow graph diatas:


(38)

Path 2 : 1 – 2 – 3 – 4 – 5 – 10 – 1 – 11 Path 3 : 1 – 2 – 3 – 6 – 8 – 9 – 10 – 1 – 11 Path 4 : 1 – 2 – 3 – 6 – 7 – 9 – 10 – 1 – 11

Misalkan setip path yang baru memunculkan edge yang baru, dengan path: 1 - 2 – 3 – 4 – 5 – 10 - 1 - 2 – 3 – 6 – 8 – 9 – 10 – 1 – 11

path diatas tidak dianggap sebagai independent path karena kombinasi path diatas telah didefinisikan sebelumnya Ketika ditetapkan dalam graf alur, maka independent path harus bergerak sedikitnya 1 edge yang belum pernah dilewati sebelumnya. Kompleksitas cyclomatic dapat dicari dengan salah satu dari 3 cara berikut :

1. Jumlah region dari graf alur mengacu kepada komplesitas cyclomatic 2. Kompleksitas cyclomatic untuk graf alur G didefinisikan:

V(G) = E – N + 2

Dimana E = jumlah edge, dan N = jumlah node

3. Kompleksitas cyclomatic untuk graf alur G didefinisikan: V(G) = P + 1

Dimana P = jumlah predicates nodes

Berdasarkan flow graph gambar (b) diatas, maka kompleksitas cyclomatic-nya dapat di hitung sebagai berikut:

1. Flow graph diatas mempunyai 4 region

2. V(G) = 11 edges – 9 nodes + 2 = 4 3. V(G) = 3 predicates nodes + 1 = 4

Hasil kompleksitas cyclomatic menggambarkan banyaknya path dan batas atas sejumlah ujicoba yang harus dirancang dan dieksekusi untuk seluruh perintah dalam program.


(39)

129

5.1. Kesimpulan

Berdasarkan penelitian mengenai implementasi algoritma Simplified Memory-Bounded A* untuk pencarian kata pada permainan word search puzzle

maka dapat dibuat kesimpulan:

1. Algoritma Simplified Memory-Bounded A* dapat digunakan untuk melakukan pencarian kata pada permainan word search puzzle.

2. Berdasarkan hasil pengujian bahwa semakin panjang karakter pada kata yang dicari maka waktu pencarian akan semakin lama dan penggunaan memori juga akan semakin besar. Semakin banyak simpul yang tersedia untuk melakukan pancarian maka waktu pencarian akan semakin cepat, dimana persentase peningkatan kecepatan pencarian dengan penambahan simpul sebanyak 100% dapat meningkat hingga 21,99% dibandingkan dengan tidak ada penambahan simpul.

5.2. Saran

Adapun saran yang dapat diberikan untuk pengembangan selanjutnya antara lain adalah sebagai berikut:

1. Menentukan persentase penambahan simpul yang optimal untuk setiap kasus pencarian.

2. Penambahan daftar kata dapat dilakukan secara otomatis oleh sistem dengan mengambil kata dari kamus Bahasa Indonesia.


(40)

Nama : Asih Joko Purnomo

NIM : 10111082

Tempat/Tanggal Lahir : Ngawi, 9 Mei 1993 Jenis Kelamin : Laki-laki

Agama : Islam

Alamat : Jl. Paledang RT004/RW002, Campaka, Andir, Bandung

No. Telp : +628982144684

Email : [email protected]

2. Riwayat Pendidikan

1998-2004 : SDN Tulakan I

2004-2007 : SMPN 1 Sine

2007-2010 : SMK Kosgoro I Sragen

2011-2015 : Universitas Komputer Indonesia (UNIKOM)

Demikian riwayat hidup ini saya buat dengan sebenar-benarnya dalam keadaan sadar tanpa paksaan.

Bandung, 19 Agustus 2015


(41)

SKRIPSI

Diajukan untuk Menempuh Ujian Akhir Sarjana

ASIH JOKO PURNOMO

10111082

PROGRAM STUDI TEKNIK INFORMATIKA

FAKULTAS TEKNIK DAN ILMU KOMPUTER

UNIVERSITAS KOMPUTER INDONESIA

2015


(42)

v

DAFTAR ISI

ABSTRAK ... i ABSTRACT ... ii KATA PENGANTAR ... iii DAFTAR ISI ... v DAFTAR GAMBAR ... viii DAFTAR TABEL ... xii DAFTAR SIMBOL ... xiii DAFTAR LAMPIRAN ... xv BAB 1 PENDAHULUAN ... 1 1.1. Latar Belakang Masalah ... 1 1.2. Rumusan Masalah ... 2 1.3. Maksud dan Tujuan ... 2 1.4. Batasan Masalah ... 2 1.5. Metodologi Penelitian ... 3 1.5.1. Metode Pengumpulan Data ... 3 1.5.2. Metode Pembangunan Perangkat Lunak... 3 1.6. Sistematika Penulisan ... 5 BAB 2 LANDASAN TEORI ... 7 2.1. Permainan Word Search Puzzle ... 7 2.2. Artificial Intelligence ... 8 2.3. Metode-metode Pencarian ... 10 2.3.1. Metode Pencarian Buta (Blind/Un-informed Search) ... 10 2.3.2. Metode Pencarian Heuristik (Informed Search) ... 11


(43)

vi

2.4. Algoritma A* (A Bintang) ... 11 2.5. Algoritma Simplified Memory-Bounded A* (SMA*)... 12

2.6. Fungsi Heuristik ... 24 2.7. Pemrograman Berorientasi Objek ... 24 2.8. UML (Unified Modelling Language) ... 25 2.8.1. Use Case Diagram ... 26 2.8.2. Use Case Scenario ... 27 2.8.3. ClassDiagram ... 28 2.8.4. Sequence Diagram ... 28 2.8.5. Activity Diagram ... 29 2.9. Java ... 29 2.10. Teknik Pengujian Perangkat Lunak ... 31 2.10.1. Alur Informasi Test (Test Information Flow) ... 33 2.10.2. Desain Kasus Ujicoba (Test Case Design) ... 33 2.10.3. White-Box Testing ... 35 BAB 3 ANALISIS DAN PERANCANGAN SISTEM ... 39 3.1. Analisis ... 39 3.1.1. Analisis Sistem ... 39 3.1.2. Analisis Masalah ... 41 3.1.3. Analisis Game Word Search Puzzle... 42 3.1.4. Analisis Masukan ... 46 3.1.5. Analisis Algoritma ... 47 3.1.6. Analisis Kebutuhan Non-Fungsional ... 81 3.1.7. Analisis Kebutuhan Fungsional ... 82 3.1.8. Activity Diagram ... 91


(44)

vii

3.1.9. ClassDiagram ... 96 3.1.10. SequenceDiagram ... 98 3.2. Perancangan Sistem ... 103 3.2.1. Perancangan Antarmuka ... 103 3.2.2. Jaringan Semantik ... 106 BAB 4 IMPLEMENTASI DAN PENGUJIAN SISTEM ... 107 4.1. Implementasi ... 107 4.1.1. Perangkat Keras Yang Digunakan ... 107 4.1.2. Perangkat Lunak Yang Digunakan ... 107 4.1.3. Implementasi Class ... 108 4.1.4. Implementasi Antarmuka ... 110 4.2. Pengujian Sistem ... 113 4.2.1. Rencana Pengujian ... 113 4.2.2. Pengujian Black Box ... 114 4.2.3. Pengujian White Box ... 117 4.2.4. Pengujian Algoritma ... 123 4.2.5. Kesimpulan Pengujian ... 128 BAB 5 KESIMPULAN DAN SARAN ... 129 5.1. Kesimpulan ... 129 5.2. Saran ... 129 DAFTAR PUSTAKA ... 130


(45)

130

[1] A. Rojali, "Analisis Perbandingan Algoritma Knuthmorris-Pratt dengan Algoritma Boyer-Moore Pada Permainana Word Search Puzzle," Skripsi Teknik Informatika, Universitas Komputer Indonesia, 2014.

[2] Suyanto, Artificial Intelligence Searching, Reasoning, Planning dan Learning, Bandung: Informatika Bandung, 2014.

[3] M. Nazir, Metodologi Penelitian, Bogor: Ghalia Indonesia, 2005.

[4] R. S. Pressman, Rekayasa Perangkat Lunak Pendekatan Praktis, Yogyakarta: Andi, 2012.

[5] A. Sukstrienwong and P. Vongsumedh, "Software Development of Word Search Game on Smart Phones in English Vocabulary Learning,"

International Conference on Education and Modern Educational Technologies, 2013.

[6] S. Russel and P. Norvig, Artificial Intelligence: A Modern Approach, Prentice Hall International, Inc, 1995.

[7] B. Hariyanto, Esensi-esensi Bahasa Pemrograman Java, Bandung: Informatika, 2014.

[8] A. Nugroho, Rational Rose Untuk Pemodelan Berorientasi Objek, Bandung: Informatika, 2005.

[9] Munawar, Pemodelan Visual dengan UML, Yogyakarta: Graha Ilmu, 2005. [10] K. Hamilton and R. Miles, Learning UML 2.0, Sebastopol: O'Reilly Media,

Inc., 2006.

[11] Ayuliana, "Teknik Pengujian Perangkat Lunak," Jurnal Teknik Informatika, Universitas Gunadarma, 2009.


(46)

PERMAINAN WORD SEARCH PUZZLE

Asih Joko Purnomo1 1 Program Studi Teknik Informatika

Fakultas Teknik dan Ilmu Komputer Universitas Komputer Indonesia Jl. Dipatiukur No 112-116 Bandung - Indonesia

E-mail : [email protected]

ABSTRAK

Permainan word search puzzle adalah permainan untuk mencari kata yang tersembunyi pada papan permainan yang disusun dalam bentuk matriks. Kata-kata tersebut dapat disusun secara horizontal, vertikal maupun tersusun dengan lebih dari satu ruas garis yang terhubung secara horizontal dan vertikal. Pencarian kata yang tersusun dengan lebih dari satu ruas garis memiliki karakteristik yang sama dengan permasalahan pathfinding, sehingga membutuhkan suatu algoritma pathfinding untuk melakukan pencarian.

Algoritma Simplified Memory-Bounded A* (SMA*) adalah salah satu algoritma pathfinding

yang dapat digunakan untuk melakukan pencarian kata pada pada permainan word search puzzle. Algoritma SMA* memiliki kelebihan pada penggunan memori yang lebih sedikit, hal ini dikarenakan penggunaan memori dibatasi hingga jumlah simpul tertentu.

Berdasarkan hasil pengujian bahwa semakin panjang karakter pada kata yang dicari maka waktu pencarian akan semakin lama dan penggunaan memori juga akan semakin besar. Semakin banyak simpul yang tersedia untuk melakukan pancarian maka waktu pencarian akan semakin cepat, dimana persentase peningkatan kecepatan pencarian dengan penambahan simpul sebanyak 100% dapat meningkat hingga 21,99% dibandingkan dengan tidak ada penambahan simpul.

Kata kunci : Pencarian Jalur, Teka-teki pencarian kata, Simplified Memory-Bounded A* (SMA*)

1. PENDAHULUAN

Permainan word search puzzle atau permainan pencarian kata adalah permainan berbasis puzzle

untuk mencari kata-kata yang disusun dalam bentuk matriks. Kata-kata tersebut dapat disusun secara horizontal, vertikal maupun tersusun dengan lebih dari satu ruas garis yang terhubung secara horizontal dan vertikal. Penyelesaian dari permainan word search puzzle ini adalah menemukan semua kata

yang tersembunyi pada papan permainan yang berbentuk matriks. Permasalahan yang dihadapi adalah bagaimana sistem dapat menemukan semua kata yang tersembunyi di dalam puzzle yang telah tersusun secara random baik secara horizontal, vertikal maupun tersusun dengan lebih dari satu ruas garis yang terhubung secara horizontal dan vertikal.

Sebelumnya telah ada penelitian tentang analisis perbandingan algoritma Knuth-Morris-Pratt dengan algoritma Boyer-Moore pada permainan word search puzzle [1]. Dari penelitian tersebut diketahui bahwa algoritma Boyer-Moore efisien untuk pencarian secara horizontal dan vertikal, sedangkan algoritma Knuth-Morris-Pratt lebih efisien pada pencarian secara diagonal. Akan tetapi algoritma ini tidak dapat digunakan dalam penyelesaian permainan ini karena aturan pencarian pada kata yang tersusun tidak hanya horizontal, vertikal dan diagonal saja.

Maka dari itu dalam penelitian ini digunakan algoritma Simplified Memory-Bounded A* untuk melakukan pencarian kata pada permainan word search puzzle. Algoritma ini dipilih karena melihat karakteristik permasalahan word search puzzle

tersebut sama dengan permasalahan pada

pathfinding. Algoritma ini adalah algoritma yang sering digunakan pada pencarian jalur terpendek dan merupakan algoritma pencarian heuristic. Algoritma ini memiliki kelebihan yaitu membutuhkan memori yang lebih kecil dibandingkan dengan algoritma A* [2].

Berdasarkan penjelasan yang telah dipaparkan diatas, maka diharapkan solusi pada permainan word search puzzle dapat ditemukan dan diketahui bahwa algoritma yang dipilih merupakan algoritma yang efektif untuk melakukan pencarian kata pada permainan word search puzzle tersebut.

Tujuan yang diharapkan akan dicapai dalam penelitian ini adalah:

1. Mengetahui apakah algoritma Simplified Memory-Bounded A* dapat digunakan untuk mencari solusi pada permainan word search puzzle.

2. Mengetahui performansi dalam kecepatan dan penggunaan memori dari algoritma Simplified


(47)

2. ISI PENELITIAN

2.1Permainan Word Search Puzzle

Permainan word search puzzle dikenal sebagai

word find game, yang terkenal karena membantu siswa untuk mengenali kata-kata. Pada permainan ini huruf dari sebuah kata terletak pada grid dan biasanya memiliki bentuk persegi. Untuk memainkan game ini, pemain mencari dan menandai semua kata-kata tersembunyi di dalam grid. Dalam permainan word search puzzle, daftar kata tersembunyi disediakan. Biasanya banyak kata yang terkait mudah bagi pemain untuk dicari. Kata terdaftar dapat diatur dalam arah horizontal, vertikal atau diagonal dalam grid. Semakin cepat penyelesaian setiap tingkat, maka skor yang lebih tinggi akan didapatkan. Dalam mencari kata-kata, pengguna membaca dan menghafal kata-kata saat mereka bermain game yang membantu mereka mempelajari kata-kata dan ejaan, huruf demi huruf, dalam teka-teki [5]. Berikut ini adalah gambar dari salah satu permainan word search puzzle:

Gambar 1 Word Search Puzzle [5]

2.2Metode Pencarian Heuristik (Informed

Search)

Kata heuristic berasal dari sebuah kata kerja bahasa Yunani, heuriskein, yang berarti ‘mencari’

atau ‘menemukan’. Dalam dunia pemrograman, sebagian orang menggunakan kata heuristik sebagai lawan kata dari algoritmik, dimana kata heuristik ini diartikan sebagai ‘suatu proses yang mungkin dapat menyelesaikan suatu masalah tetapi tidak ada jaminan bahwa solusi yang dicari selalu dapat ditemukan’. Di dalam mempelajari metode-metode pencarian ini, kata heuristik diartikan sebagai suatu fungsi yang memberikan suatu nilai berupa biaya perkiraan (estimasi dari suatu solusi) [2].

Metode-metode yang termasuk dalam teknik pencarian yang berdasarkan pada fungsi heuristik adalah: Generate and Test, Hill Climbing (Simple Hill Climbing dan Steepest-Ascent Hill Climbing),

2.3Algoritma Simplified Memory-Bounded A* (SMA*)

Untuk masalah tertentu, di mana memori komputer terbatas, algoritma A* mungkin tidak mampu menemukan solusi karena sudah tidak tersedia memori untuk menyimpan simpul-simpul yang dibangkitkan. Algoritma IDA* dapat digunakan untuk kondisi seperti ini karena IDA* hanya membutuhkan sedikit memori. Tetapi, satu kelemahan IDA* adalah bahwa pencarian yang dilakukan secara iteratif akan membutuhkan waktu yang lama karena harus membangkitkan simpul berulang kali [2].

Berlawanan dengan IDA* yang hanya mengingat satu f-limit, algoritma SMA* mengingat f-Cost dari setiap iterasi sampai sejumlah simpul yang ada di dalam memori. Karena batasan memori dalam jumlah tertentu, maka dapat membatasi pencarian hanya sampai pada simpul-simpul yang dapat dicapai dari root sepanjang suatu jalur yang memorinya masih mencukupi. Kemudian mengembalikan suatu rute terbaik diantara rute-rute yang ada dalam batasan jumlah simpul tersebut. Jika memori komputer hanya mampu menyimpan 100 simpul, maka bisa membatasi proses pencarian sampai level 99.

Pada algoritma SMA* terdapat sebuah senarai yang digunakan untuk memanipulasi antrian simpul yang terurut berdasarkan f-cost. Di sini yang dimaksud f-cost adalah gabungan biaya sebenarnya dan biaya perkiraan, yang secara matematika dinyatakan seperti pada persamaan 2.1 berikut:

f(n) = g(n) + h(n) (2.1)

Dengan:

n = simpul saat ini

g(n) = biaya (cost) dari simpul awal ke simpul n

sepanjang jalur pencarian

h(n) = perkiraan cost dari simpul n ke simpul tujuan (nilai heuristic)

f(n) = total cost dari simpul n ke simpul tujuan Berikut ini adalah algoritma Simplified Memory-Bounded A* [2]:

function SMA*(masalah) returns solusi inputs : masalah, sebuah masalah

local variables : Queue, antrian nodes yang terurut berdasarkan f-cost

Queue 

MAKE-QUEUE({MAKE-SIMPUL(INITIAL-STATE[masalah])}) loop do

if Queue kosong then return gagal

n  simpul di Queue yang memiliki f-cost terkecil dan level terdalam

if GOAL-TEST(n) then return sukses suk  NEXT-SUCCESSOR(n)


(48)

else

f(suk)  MAX(f(n), g(n) + h(n)) end

if semua suksesor dari n sudah dibangkitkan then

Ganti f-cost pada n dengan nilai f(suk) yang terkecil. Gantikan nilai f(suk) terkecil ini ke semua ancestors dari n(ayah, kakek, dan seterusnya keatas) kecuali ancestors yang memiliki f-cost lebih kecil daripada f(suk)terkecil itu.

if semua SUCCESSOR(n) sudah di memori then

Keluarkan n dari Queue (tetapi tidak dihapus secara fisik di memori)

if memori penuh then

if suk = Goal and f(suk) = f(start) then return sukses dan exit

Hapus simpul terburuk di dalam Queue yang memiliki f-cost terbesar dan level terdangkal. Keluarkan simpul terburuk tersebut dari daftar suksesor parent-nya.

Masukkan parent dari simpul terburuk tersebut ke Queue jika parent tersebut tidak ada di Queue. end

insert suk in Queue

Gambar 2 Algoritma Simplified Memory-Bounded A*

Misalnya terpadat masalah pencarian rute terpendek seperti pada gambar berikut:

Gambar 3 Masalah Pencarian Rute

Berikut ini adalah langkah-langkah penyelesaian menggunakan algoritma Simplified Memory-Bounded A*:

S 80

Gambar 4 Langkah 1 Pencarian Rute

S B C D E 10 25 30 35 10 84(120)

f(B) = 85

f(C) = 100

f(D) = 120

f(E) = 84

Gambar 5 Langkah 2 Pencarian Rute

S A B C E D 10 25 30 10 15 f(A) = 90

f(B) = 85

f(C) = 100

f(D) = MAX(f(E), g(D)+h(D)) = MAX(84, 110) = 110 84(100, 120)

84

Gambar 6 Langkah 3a Pencarian Rute

S A B E D 10 25 10 15 f(A) = 90

f(B) = 85

f(D) = 110 85(100, 120)

J 20

f(J) = MAX(f(E), g(J)+h(J)) = MAX(84, 130) = 130 110 (110)

Gambar 7 Langkah 3b Pencarian Rute

S

A

10

90 (100, 110, 120)

f(G) = MAX(f(K), g(G)+h(G)) = MAX(95, 95) = 95 95 (100) B 10 F 5 95 K 40 95 G 30 95

Gambar 8 Langkah 8 Pencarian Rute (hasil akhir pencarian)


(49)

Proses pengacakan kata yaitu mengisi papan permainan dengan kata yang tersusun secara acak dan mengisi huruf acak pada matriks yang kosong. Proses pencarian kata yaitu melakukan pencarian kata pada papan permainan yang telah terisi kata yang tersusun secara acak. Berikut ini adalah

flowchart dari permainan word search puzzle: Mulai Pengacakan Kata Daftar Kata Pencarian Kata Solusi Permainan Selesai

Gambar 9 Flowchart Word Search Puzzle

Pada permainan word search puzzle terdapat beberapa aturan yang berbeda antara satu permainan dengan permainan lainnya. Untuk aturan yang ada pada permainan ini antara lain sebagai berikut: a. Pencarian kata dapat dilakukan secara horizontal

dan vertikal, dan tidak bisa secara diagonal.

A G H X C D W N S A F K J D C F G M X S D L X G B E L A J A R J E A Q M N W A S X C W K O P C C B Z B H N N M E X D Z T E D K E L B E L X Q Z R L Q C V L K V A W T S S A F K D M A G J A Z D G J Z H X L K J U R I L Z A C W V E B I A T N Y A R S Z B D Z E H R J R S E F N V L B X H K J V

W 0 1 2 3 4 5 6 7 8 9 10 11 0 1 2 3 4 5 6 7 8 9 10 11

Dapat dilakukan pencarian Tidak dapat dilakukan pencarian

Gambar 10 Aturan Pencarian Kata

lainnya harus terhubung secara horizontal atau vertikal.

A G H X C D W N S A F K J D C F G M X S D L X G F K L Z C V B J E A Q M N B E S X C B K O P C C H Z L H N N E E X D Z T K D A J L B L L X Q Z R B Q C A G K A J A R S S V F K R M D G J A Z D G B Z H X L K S U R I L Z E C W J E B I K T N Y A X L A B A Z E H A J R S E F N V R B X H K J V

W

0 1 2 3 4 5 6 7 8 9 10 11

0 1 2 3 4 5 6 7 8 9 10 11

Dapat dilakukan pencarian

Tidak dapat dilakukan pencarian

Gambar 11 Aturan Pencarian Kata(2) c. Pencarian dapat dimulai dari manapun antara

koordinat (0,0) hingga koordinat (19,19) pada matriks.

d. Panjang karakter pada kata yang dicari antara 5 hingga 30 karakter.

2.5Analisis Masalah

Permasalahan yang muncul pada permainan

word search puzzle adalah bagaimana sistem dapat menemukan semua kata yang tersembunyi di dalam matriks. Pertama dilakukan pencarian huruf pertama pada kata yang akan dicari, kemudian dicari huruf kedua dengan mencari ke atas, bawah, kiri dan kanan yang mengelilingi huruf pertama tersebut. Metode tersebut diulang hingga kata yang dicari ditemukan.

Untuk melakukan pencarian kata pada permainan

word search puzzle dapat menggunakan algoritma

path finding. Terdapat beberapa algoritma path finding yang bisa digunakan. Algoritma yang digunakan adalah algoritma Simplified

Memory-Bounded A*. Algoritma Simplified

Memory-Bounded A* (SMA*) merupakan pengembangan dari algoritma A* yang mengatasi masalah untuk melakukan pencarian kata pada permainan word search puzzle. Algoritma ini mengatasi kelemahan yang dimiliki oleh algoritma A* yaitu penggunaan memori yang besar.

Oleh karena itu , yang akan diteliti untuk mengukur efektifitas penggunaan algoritma SMA* adalah sebagai berikut:

1. Jumlah simpul yang dibangkitkan dan dihapus selama proses pencarian.


(50)

waktu eksekusi dan jumlah simpul yang dibangkitkan dan dihapus. Dalam mengimplementasikan algoritma SMA* akan dibangun sebuah prototype dengan gambaran game

word search puzzle adalah sebagai berikut:

1. Game terdiri dari matriks dengan ukuran minimal yaitu 3 baris x 3 kolom dan maksimal 20 baris x 20 kolom.

2. Penerapan algoritma yang dipilih yaitu algoritma SMA*.

3. Nilai masukan parameter yaitu jumlah simpul maksimum.

4. Kata yang dicari diletakkan pada matriks secara

random.

5. Pencarian hanya bisa dilakukan secara horizontal, vertikal, dan gabungan antara horizontal dan vertikal yang terhubung dengan lebih dari satu ruas garis.

Papan permainan pada word search puzzle dibuat dengan skala pixel yang berukuran panjang 500 pixel

dan lebar 500 pixel. Dalam papan permainan tersebut disimpan beberapa grid ukuran panjang 25

pixel dan lebar 25 pixel, didapatkan 20 grid

horizontal dan 20 grid vertikal. Jika dijumlahkan keseluruhan grid-nya menjadi 400 grid.

Papan permainan seperti pada gambar berikut:

Gambar 12 Papan Permainan

Pada permainan ini terdapat 2 proses besar yang dilakukan antara lain:

1. Pengacakan Kata 2. Pencarian Kata

Proses pengacakan kata dilakukan dengan mengisi matriks dengan kata-kata yang dicari dengan aturan sesuai dengan yang telah dijelaskan diatas, kemudian mengisi matriks yang kosong dengan huruf acak. Proses pencarian kata dilakukan dengan melakukan pencarian kata sesuai dengan

Untuk lebih jelasnya berikut ini adalah flowchart

dari proses pengacakan kata: Mulai

Menempatkan kata pada papan permainan secara

acak Mengambil kata dari file

teks

Menempatkan karakter secara acak pada matriks

yang kosong Papan permainan telah terisi kata acak Selesai

Gambar 13 Flowchart Pengacakan Kata Pada penelitian ini proses yang akan dibahas lebih dalam adalah proses pencarian kata menggunakan algoritma Simplified Memory-Bounded A*. Pada proses pencarian kata terdapat beberapa langkah, antara lain seperti pada flowchart

berikut:

Mulai

Mencari posisi awal pencarian Kata yang dicari

Melakukan pencarian kata dengan algoritma SMA*

Hasil pencarian

kata

Selesai

Gambar 14 Flowchart Pencarian Kata 2.7Analisis Masukan

Analisis data masukan yang dibutuhkan pada algoritma SMA* yaitu posisi huruf pertama dari kata yang dicari (initial state), kata yang dicari (goal state). Posisi huruf pertama dicari secara sekuensial dari kolom pertama dan baris pertama hingga kolom terakhir dan baris terakhir atau sampai posisi Papan Permainan

20 grid horizontal

20 grid vertikal


(1)

Jurnal Ilmiah Komputer dan Informatika (KOMPUTA)

53

Edisi. .. Volume. .., Bulan 20.. ISSN : 2089-9033

Image 29 Tree Search Interface

3

CLOSING

3.1 Conclusion

Based on research on implementation of Simplified Memory-Bounded A* algorithm to searching words on the word search puzzle game, it can be concluded:

1. Simplified Memory-Bounded A* algorithm can be used to perform a word search on the word search puzzle game.

2. Based on test results that longer of characters on the search terms so the search time will be longer and also memory usage will be increase. More nodes are available to search so it will be faster, wherein the percentage of search speed increase with adding nodes 100% it can be up to 21.99% than it does not add the nodes.

3.2 Suggestions

The suggestions that can be given to further development, among others things, are as follows: 1. Determine the percentage of node additions are

optimal for each case of search.

2. The addition of the word list can be done automatically by the system by taking words of Indonesian dictionary.

DAFTAR PUSTAKA

[1] A. Rojali, "Analisis Perbandingan Algoritma Knuthmorris-Pratt dengan Algoritma Boyer-Moore Pada Permainana Word Search Puzzle,"

Skripsi Teknik Informatika, Universitas Komputer Indonesia, 2014.

[2] Suyanto, Artificial Intelligence Searching, Reasoning, Planning dan Learning, Bandung: Informatika Bandung, 2014.

[3] M. Nazir, Metodologi Penelitian, Bogor: Ghalia Indonesia, 2005.

[4] R. S. Pressman, Rekayasa Perangkat Lunak Pendekatan Praktis, Yogyakarta: Andi, 2012. [5] A. Sukstrienwong and P. Vongsumedh,

"Software Development of Word Search Game on Smart Phones in English Vocabulary Learning," International Conference on

Education and Modern Educational

Technologies, 2013.

[6] S. Russel and P. Norvig, Artificial Intelligence: A Modern Approach, Prentice Hall International, Inc, 1995.

[7] B. Hariyanto, Esensi-esensi Bahasa Pemrograman Java, Bandung: Informatika, 2014.

[8] A. Nugroho, Rational Rose Untuk Pemodelan Berorientasi Objek, Bandung: Informatika, 2005.

[9] Munawar, Pemodelan Visual dengan UML, Yogyakarta: Graha Ilmu, 2005.

[10] K. Hamilton and R. Miles, Learning UML 2.0, Sebastopol: O'Reilly Media, Inc., 2006. [11] Ayuliana, "Teknik Pengujian Perangkat

Lunak," Jurnal Teknik Informatika, Universitas Gunadarma, 2009.


(2)

iii

KATA PENGANTAR

Puji syukur penulis panjatkan kepada

ALLAH SWT karena berkat dan

anugerah-

Nya sehingga penyusunan skripsi yang berjudul “

Implementasi

Algoritma Simplified Memory-Bounded A* Untuk Pencarian Kata Pada

Permainan Word Search Puzzle

” dapat diselesaikan dengan baik. Penulisan skripsi

ini merupakan salah satu syarat dalam menyelesaikan studi jenjang strata satu (S1)

pada Program Studi Teknik Informatika, Universitas Komputer Indonesia.

Penulis menyadari bahwa dalam penyelesaian skripsi ini bukanlah dari hasil

kerja keras penulis sendiri, melainkan berkat bantuan, dorongan dan bimbingan dari

berbagai pihak sehingga skripsi ini dapat selesai tepat pada waktunya. Oleh karena

itu, penulis ingin mengucapkan terima kasih kepada:

1.

Kedua orang tua yang telah membesarkan dan mendidik penulis dengan

penuh kasih sayang.

2.

Bapak Galih Hermawan, S.Kom, M.T. selaku dosen pembimbing yang telah

banyak meluangkan waktu dan membimbing penulis serta memberikan

petunjuk, saran, dan kemudahan kepada penulis untuk menyelesaikan

skripsi ini.

3.

Ibu Kania Evita Dewi, S.Pd., M.Si. selaku dosen reviewer yang memberikan

petunjuk, saran, dan kemudahan kepada penulis.

4.

Bapak Irawan Afrianto, S.T., M.T., selaku Ketua Program Studi Teknik

Informatika, Fakultas Teknik dan Ilmu Komputer, UNIKOM.

5.

Ibu Dian Dharmayanti, S.T., M.Kom., selaku dosen wali IF3/2011 yang

telah memberikan saran, arahan dan bimbingan kepada penulis.

6.

Bapak dan Ibu dosen serta seluruh staff pegawai Program Studi Teknik

Informatika Universitas Komputer Indonesia yang telah memberikan ilmu

untuk menyelesaikan skripsi ini serta telah banyak membantu kepada

penulis.

7.

Untuk rekan-rekan IBM(Indonesia Belajar Mengajar) yang tidak bisa saya

sebutkan satu persatu.


(3)

iv

9.

Kepada rekan-rekan Informatika khususnya IF-3 terima kasih sudah

menjadi bagian dari perjuangan.

10.

Terima kasih juga kepada semua pihak yang telah membantu dalam

penyelesaian skripsi ini yang tidak dapat disebutkan satu per satu.

Akhir kata, semoga skripsi ini dapat bermanfaat bagi para pembaca.

Bandung, 19 Agustus 2015


(4)

(5)

(6)