• Tidak ada hasil yang ditemukan

BAB 2 LANDASAN TEORI

2.4. Kecerdasan Buatan(Artificial Intelegence)

2.4.1 Pengertian AI

2.4.1.1 Algoritma A*(A Star)

Algoritma A* (dibaca A Star) merupakan perbaikan dari metode BFS

(Breadth First Seacrh) dengan memodifikasi fungsi heuristiknya. Pada kondisi

yang tepat, A* akan memberikan solusi yang terbaik dalam waktu yang optimal. Pada pencarian tute kasus sederhana, dimana tidak terdapat halangan pada peta, A* bekerja secepat dan seefisien BFS. Pada kasus peta dengan halangan, A* dapat menemukan solusi rute tanpa terjebak oleh halangan yang ada.

Pencarian menggunakan algoritma A* mempunyai prinsip yang sama dengan algoritma BFS hanya saja dengan dua faktor tambahan yaitu[9]:

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

2. Cost dari setiap simpul ke simpul tujuan bisa diperkirakan. Ini

membantu pencarian sehingga lebih kecil kemungkunan 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.

2. Simpul di list “tertutup” bisa dimasukan ke list”terbuka” bila jalan terpendek (cost lebih kecil) menuju simpul tersebut ditemukan.

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 kira sendiri. Bila cost-nya adalah jarak, akan menjadi lebih mudah.

Cost antara simpul adalah jaraknya dan perkiraan cost dari suatu simpul ke simpul tujuan adalah penjumlahan jarak dari simpul tersebut ke simpul tujuan. Untuk lebih mudah di mengerti, dapat dilihat pada rumus berikut :

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

Keterangan :

f(n) : fungsi evaluasi.

g(n) : biaya yang sudah dikeluarkan dari keadaan awal sampai keadaan n.

h(n) : estimasi biaya untuk sampai pada suatu tujuan mulai dari n. Node dengan nilai terendah merupakan solusi terbaik untuk diperiksa pertama kali pada g(n)+h(n). Dengan fungsi heuristik yang memenuhi kondisi tersebut maka pencarian dengan algoritma A* dapat optimal.Keoptimalan dari A* dapat dilihat jika h(n) adalah admissibe heuristic yaitu nilai h(n) tidak akan memberikan penilaian lebih pada cost untuk mencapai tujuan. Salah satu contoh

dari admissable heuristic adalah jarak dengan menarik garis lurus karena jarak terdekat dari dia titik adalah dengan menarik garis lurus.[9]

Adapun pseudocode pada algoritma A* adalah sebagai berikut : function A*(start,goal)

closedset := the empty set // The set of nodes already evaluated.

openset := {start} //The set of tentative nodes to be evaluated, initially containing the start node

came_from := the empty map // The map of navigated nodes.

g_score[start] := 0 // Cost from start along best known path.

// Estimated total cost from start to goal through y.

f_score[start] := g_score[start] + heuristic_cost_estimate(start, goal)

while openset is not empty

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

return reconstruct_path(came_from, goal)

remove current from openset add current to closedset

for each neighbor in neighbor_nodes(current)

if neighbor in closedset continue

tentative_g_score := g_score[current] + dist_between(current,neighbor)

if neighbor not in openset or tentative_g_score < g_score[neighbor] came_from[neighbor] := current

g_score[neighbor] := tentative_g_score

f_score[neighbor] := g_score[neighbor] + heuristic_cost_estimate(neighbor, goal)

if neighbor not in openset add neighbor to openset return failure

function reconstruct_path(came_from, current_node)

if current_node in came_from

p := reconstruct_path(came_from, came_from[current_node])

return (p + current_node)

else

return current_node

2.5. UML

UML singkatan dari Unified Modeling Language yang berarti bahasa pemodelan standard. (Chonoles, 2003:bab 1) mengatakan sebagai bahasa, berarti

UML memiliki sitak dan semantic. Ketika kita membuat model menggunakan konsep UML ada aturan-aturan yang harus diikuti. Bagaimana elemen pada model-model yang kita buat berhubungan satu dengan yang lainnya harus mengikuti standar yang ada. UML bukan hanya sekedar diagram, tetapi juga menceritakan konteksnya[11].

UML diaplikasikan untuk maksud tertentu, biasanya antara lain untuk : 1. Merancang perangkat lunak

2. Sarana komunikasi antara perangkat lunak dengan proses bisnis.

3. Menjabarkan sistem secara rinci untuk analisa dan mencari apa yang diperlukan sistem.

4. Mendokumentasi sistem yang ada, proses-proses dan organisasinya.

2.5.1 Diagram-Diagram UML

Beberapa literatur menyebutkan bahwa UML menyediakan sembilan jenis diagram, yang lain menyebutkan delapan karena ada beberapa diagram yang digabung, misalnya diagram komunikasi, diagram urutan dan diagram pewaktuan digabung menjadi diagram interaksi. Namun demikian model-model itu dapat dikelompokan berdasarkan sifatnya yaitu statis atau dinamis. Jenis diagram itu antara lain :

1. Diagram Kelas. Bersifat statis. Diagram ini memperlihatkan himpunan kelas-kelas, antarmuka-antarmuka, kolaborasi-kolaborasi, serta relasi-relasi. Diagram ini umum dijumpai pada pemodelan sistem berorientasi objek. Meskipun bersifat statis, sering pula diagram kelas memuat kelas-kelas aktif.

2. Diagram Paket (Package Diagram). Bersifat statis. Diagram ini memperlihatkan kumpulan kelas-kelas, merupakan bagian dari diagram komponen.

3. Diagram Use-Case. Bersifat statis. Diagram ini memperlihatkan himpunan use-case dan aktor-aktor (suatu jenis khusus dari kelas). Diagram ini

terutama sangat penting untuk mengordinasikan dan memodelkan perilaku suatu sistem yang dibutuhkan serta diharapkan pengguna.

4. Diagram interaksi dan sequence (urutan). Bersifat dinamis. Diagram urutan adalah diagram interaksi yang menekankan pada pengiriman pesan dalam suatu waktu tertentu.

5. Diagram Komunikasi (Communication Diagram). Bersifat dinamis. Diagram sebagai pengganti diagramkolaborasi UML 1.4 yang menekankan organisasi struktural dari objek-objek yang menerima serta mengirim pesan.

6. Diagram Statechart (Statechart Diagram). Bersifat dinamis. Diagram status memperlihatkan keadaan-keadaan pada sistem, memuat status (state), transisi, kejadian serta aktifitas. Diagram ini terutama penting untuk memperlihatkan sifat dinamis dari antarmuka (interface), kelas, kolaborasi dan terutama penting pada pemodelan sistem-sistem yang reaktif.

7. Diagram Aktivitas (Activity Diagram). Bersifat dinamis. Diagram aktivitas adalah tipe khusus dari diagram status yang memperlihatkan aliran dari suatu aktivitas ke aktivitas lainnya dalam suatu sistem. Diagram ini terutama penting dalam pemodelan fungsi-fungsi suatu sistem dan memberi tekanan pada aliran kendali antar objek.

8. Diagram komponen (Component Diagram). Bersifat statis. Diagram komponen ini memperlihatkan organisasi serta kebergantungan sistem/perangkat lunak pada komponen-komponen yang telah ada sebelumnya. Diagram ini berhubungan dengan diagram kelas dimana komponen secara tipikal dipetakan kedalam satu atau lebih kelas-kelas, antaramuka-antarmuka serta kolaborasi-kolaborasi.

9. Diagram Deployment (Deployment Diagram). Bersifat statis. Diagram ini memperlihatkan konfigurasi saat aplikasi dijalankan (run-time). Memuat simpul-simpul beserta komponen-komponen yang ada di dalamnya. Diagram deployment berhubungan erat dengan diagram komponen dimana diagram ini memuat satu atau lebih komponen-komponen. Diagram ini

sangat berguna saat aplikasi kita berlaku sebagai aplikasi yang dijalankan pada banyak mesin (distributed computing).

Kesembilan diagram ini tidak mutlak harus digunakan dalam pengembangan perangkat lunak, semuanya dibuat sesuai dengan kebutuhan. Pada UML dimungkinkan menggunakan diagram-diagram lain (misalnya data flow

diagram, Entity Relationship diagram dan sebagainya) [11].

2.6. Android

Android adalah sebuah system operasi untuk perangkat mobile berbasis linux yang mencakup sistem operasi, middleware dan aplikasi. Android menyediakan platform terbuka bagi para pengembang untuk menciptakan aplikasi mereka. Android merupakan generasi baru platform mobile, platform yang memberikan pengembangan untuk melakukan pengembangan sesuai dengan yang diharapkan. Pengembangan aplikasi Android diperbolehkan untuk mendistribusikan aplikasi mereka di bawah skema lisensi apapun yang mereka inginkan. Pengembang memiliki beberapa pilihan ketika membuat aplikasi yang berbasis android. Sebagian besar pengembang menggunakan eclipse yang tersedia secara bebas untuk merancang dan mengembangkan aplikasi android, karena memiliki android plug-in yang tersedia untuk memfasilitasi pengembangan android. Selain itu, eclipse juga mendapat dukungan langsung dari google untuk menjadi IDE pengembangan aplikasi Android,ini terbukti dengan adanya penambahan plug-in untuk eclipse untuk membuat project android dimana source software langsung dari situs resminya google [12].

Dokumen terkait