125
IMPLEMENTASI MOBILE TRACKING MENGGUNAKAN METODE ANT COLONY OPTIMIZATION DAN GOOGLE MAPS API SKRIPSI DONNY SANJAYA 111421056 PROGRAM STUDI EKSTENSI S1 ILMU KOMPUTER FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA MEDAN 2014 Universitas Sumatera Utara

DONNY SANJAYA

Embed Size (px)

DESCRIPTION

DONNY SANJAYA

Citation preview

Page 1: DONNY SANJAYA

IMPLEMENTASI MOBILE TRACKING MENGGUNAKAN METODE ANT COLONY OPTIMIZATION

DAN GOOGLE MAPS API

SKRIPSI

DONNY SANJAYA 111421056

PROGRAM STUDI EKSTENSI S1 ILMU KOMPUTER FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI

UNIVERSITAS SUMATERA UTARA MEDAN

2014

Universitas Sumatera Utara

Page 2: DONNY SANJAYA

IMPLEMENTASI MOBILE TRACKING MENGGUNAKAN METODE ANT COLONY OPTIMIZATION

DAN GOOGLE MAPS API

SKRIPSI

Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh ijazah Sarjana Ilmu Komputer

DONNY SANJAYA 111421056

PROGRAM STUDI EKSTENSI S1 ILMU KOMPUTER FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI

UNIVERSITAS SUMATERA UTARA MEDAN

2014

Universitas Sumatera Utara

Page 3: DONNY SANJAYA

iii

PERSETUJUAN

Judul : IMPLEMENTASI MOBILE TRACKING MENGGUNAKAN METODE ANT COLONY OPTIMIZATION DAN GOOGLE MAPS API

Kategori : SKRIPSI Nama : DONNY SANJAYA Nomor Induk Mahasiswa : 111421056 Program Studi : EKSTENSI S1 ILMU KOMPUTER Departemen : ILMU KOMPUTER Fakultas : FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI

INFORMASI UNIVERSITAS SUMATERA UTARA Komisi Pembimbing: Dosen Pembimbing II Dosen Pembimbing I Drs. Dahlan Sitompul, M.Eng Ade Candra S.T, M.Kom NIP. 19670725 200501 1 002 NIP. 19790904 200912 1 002 Diketahui/Disetujui oleh Program Studi S1 Ilmu Komputer Ketua, Dr. Poltak Sihombing, M.Kom NIP. 19620217 199103 1 001

Universitas Sumatera Utara

Page 4: DONNY SANJAYA

iv

PERNYATAAN

IMPLEMENTASI MOBILE TRACKING MENGGUNAKAN METODE ANT COLONY OPTIMIZATION DAN GOOGLE MAPS API

SKRIPSI

Saya mengakui bahwa skripsi ini adalah hasil karya saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing disebutkan sumbernya. Medan, Januari 2014 Donny Sanjaya 111421056

Universitas Sumatera Utara

Page 5: DONNY SANJAYA

v

PENGHARGAAN

Alhamdulillah saya ucapkan kepada Allah SWT yang telah melimpahkan rahmat dan karunia-NYA serta salawat dan salam kepada junjungan atas Nabi Muhammad SAW karena skripsi ini telah berhasil diselesaikan dalam waktu yang telah ditentukan.

Dalam penulisan skripsi ini penulis banyak mendapatkan bantuan serta dorongan dari pihak lain. Sehingga dengan segala kerendahan hati penulis mengucapkan terimakasih kepada:

1. Bapak Prof Dr Syahril Pasaribu, DTMH, MSc (CTM), SpA(K) selaku Rektor

Universitas Sumatera Utara. 2. Bapak Prof. Dr. Muhammad Zarlis selaku Dekan Fakultas Ilmu Komputer dan

Teknologi Informasi. 3. Bapak Drs. Poltak Sihombing, M.Kom selaku Ketua Program Studi Ilmu

Komputer Universitas Sumatera Utara dan sekaligus sebagai Dosen Pembanding I.

4. Ibu Dian Rachmawati S.Si, M.Kom selaku koordinator Ekstensi S1 Ilmu Komputer Universitas Sumatera Utara.

5. Dosen Pembimbing Bapak Ade Candra, ST, M.Kom dan Drs. Dahlan Sitompul, M.Eng yang bersedia meluangkan waktu, pikiran, saran, panduan serta memberikan pengetahuan dan motivasi dalam penyelesaian skripsi ini.

6. Dosen Pembanding II Bapak Drs. Marihat Situmorang, M.Kom. 7. Seluruh staf-staf Pengajar (Dosen) Fakultas Ilmu Komputer dan Teknologi

Informasi Universitas Sumatera Utara. 8. Ayahanda Sunardi dan ibunda Nadrah selaku orang tua kandung penulis yang

telah memberikan semangat, dorongan, serta doanya dalam menyelesaikan skripsi ini.

9. Sahabat-sahabat penulis dan semua sahabat seangkatan yang sudah membantu dan memberi semangat kepada penulis selama ini.

Dalam penyusunan skripsi ini, penulis menyadari bahwa masih banyak kekurangan, untuk itu penulis mengharapkan saran dan kritik yang bersifat membangun dari semua pihak demi kesempurnaan skripsi ini. Akhir kata penulis mengharapkan semoga skripsi ini dapat bermanfaat dan membantu semua pihak yang memerlukannya. Penulis

Universitas Sumatera Utara

Page 6: DONNY SANJAYA

vi

ABSTRAK

Mobile tracking adalah suatu kemajuan teknologi dalam perangkat lunak ponsel yang memungkinkan bagi pengguna ponsel untuk melacak individu mendapatkan posisi melalui teknologi Global Positioning System (GPS) yang dimilikinya. Koordinat yang diterima oleh GPS ponsel akan disimpan kedalam database dan ditampilkan pada sebuah peta menggunakan Google Maps API, kemudian dicari route terpendeknya. Dalam pencarian route terpendek ini digunakan algoritma Ant Colony Optimization (ACO). Algoritma ACO merupakan teknik probabilistik untuk menyelesaikan masalah komputasi yang terinspirasi oleh perilaku semut dalam menemukan jalur dari koloninya menuju makanan. Dalam algoritma ACO terdapat sejumlah semut buatan, yang ditugaskan untuk mencari solusi terhadap suatu masalah optimisasi. Hasil uji coba pada tugas akhir ini juga menunjukkan adanya efisiensi waktu dengan menggunakan aplikasi karena terdapat perkiraan waktu yang disediakan oleh Google Map sehingga berguna bagi user. Algoritma ACO adalah salah satu algoritma alternatif yang dapat digunakan untuk penentuan jalur terpendek. Kecepatan menampilkan suatu rute sebuah map tergantung pada jumlah kota yang diinputkan, provider dan kestabilan koneksi internet. Katakunci : Ant Colony Optimization, Global Positioning System, Google Maps API, Mobile Tracking.

Universitas Sumatera Utara

Page 7: DONNY SANJAYA

vii

IMPLEMENTATION OF MOBILE TRACKING USING ANT COLONY OPTIMIZATION AND GOOGLE MAPS API

ABSTRACT

Mobile tracking is a technological advancement in mobile phone software that makes it possible for mobile users to track individuals gain positions througlh the technology of Global Positioning System (GPS). Coordinates received by the GPS phone will be stored into the database and displayed on a map using the Google Maps API, then look for the shortest path. In the search for the shortest path is used Ant Colony Optimization algorithm (ACO). ACO algorithm is a probabilistic technique for solving computational problems that are inspired by the behavior of ants in finding paths from the colony to the food. In ACO algorithms are a number of artificial ants, which is assigned to find a solution to an optimization problem. Results of trials in this final project also shows the time efficiency by using the application because there are an estimated time provided by Google Map so useful for the user. ACO algorithm is one of the alternative algorithm that can be used to determine the shortest path. Speed display a map of a route depends on the number of cities is entered, the provider and the stability of the internet connection. Keywords : Ant Colony Optimization. Google Maps API, Global Positioning System, Mobile Tracking.

Universitas Sumatera Utara

Page 8: DONNY SANJAYA

viii

DAFTAR ISI

PERSETUJUAN ........................................................................................................ iii PERNYATAAN ........................................................................................................ iv PENGHARGAAN ..................................................................................................... v ABSTRAK ................................................................................................................. vi ABSTRACT ............................................................................................................... vii DAFTAR ISI .............................................................................................................. viii DAFTAR TABEL ...................................................................................................... x DAFTAR GAMBAR ................................................................................................. xi BAB 1 PENDAHULUAN ........................................................................................ 1

1.1 Latar Belakang .......................................................................................... 1 1.2 Rumusan Masalah ..................................................................................... 2 1.3 Batasan Masalah ....................................................................................... 2 1.4 Tujuan Penelitian ..................................................................................... 3 1.5 Manfaat Penelitian .................................................................................... 3 1.6 Metodologi Penelitian ............................................................................... 3 1.7 Sistematika Penulisan ............................................................................... 4

BAB 2 TINJAUAN PUSTAKA ............................................................................... 6

2.1 Teori Graf .................................................................................................. 6 2.1.1 Defenisi Graf ............................................................................ 6 2.1.2 Graf Berbobot .......................................................................... 8 2.1.3 Representasi Graf Pada Komputer ........................................... 8

2.2 Algoritma Ant colony Optimization ......................................................... 10 2.2.1 Ant Colony Optimization ......................................................... 10

2.2.1.1 Aturan transisi status ..................................................... 13 2.2.1.2 Aturan pembaruan feromone global ............................. 14 2.2.1.3 Aturan pembaruan feromone lokal ............................... 15

2.3 Google Maps API ..................................................................................... 15 2.3.1 Request URL Google Map ....................................................... 16 2.3.2 Geocoding ................................................................................ 16 2.3.3 Waypoint .................................................................................. 17

2.3.3.1 Perhitungan jarak antara dua waypoints ....................... 17 2.4 GPS ........................................................................................................... 18

2.4.1 Sumber Kesalahan ................................................................... 19 2.4.2 Kesalahan pada GPS ................................................................ 20 2.4.3 Tracking ................................................................................... 20

BAB 3 ANALISIS DAN PERANCANGAN SISTEM .......................................... 21

3.1 Analisis Sistem .......................................................................................... 21 3.1.1 Analisis Masalah ..................................................................... 22 3.1.2 Analisis Kebutuhan Sistem ...................................................... 22

3.1.2.1 Analisis Kebutuhan Fungsional .................................... 23

Universitas Sumatera Utara

Page 9: DONNY SANJAYA

ix

3.1.2.2 Analisis Kebutuhan Non-Fungsional ........................... 23 3.1.3 Pemodelan ................................................................................ 24

3.1.3.1 Use Case Diagram ......................................................... 24 3.1.3.2 Activity Diagram .......................................................... 25 3.1.3.3 Class Diagram ............................................................... 27 3.1.3.4 Sequence Diagram ........................................................ 27

3.2 Perancangan Sistem .................................................................................. 28 3.2.1 Flowchart Sistem ..................................................................... 28 3.2.2 Pseudocode Algorima ACO ..................................................... 30 3.2.3 Perancangan Database.............................................................. 31 3.2.4 Perancangan Tampilan ............................................................. 32

3.2.4.1 Halaman Login .............................................................. 32 3.2.4.2 Halaman User ................................................................ 33 3.2.4.3 Halaman Admin ............................................................ 34 3.2.4.4 Halaman Data User ....................................................... 36 3.2.4.5 Halaman About ............................................................. 37

BAB 4 IMPLEMENTASI DAN PENGUJIAN SISTEM ..................................... 38

4.1 Implementasi Sistem ................................................................................. 38 4.1.1 Implementasi Algoritma Ant Colony Optimization................. 38

4.2 Pengujian sistem ....................................................................................... 53 4.2.1 Pengujian Aplikasi User .......................................................... 54 4.2.2 Pengujian Aplikasi Admin ....................................................... 56 4.2.3 Pengujian Sistem Dengan 3 Buah Koordinat ........................... 60

BAB 5 KESIMPULAN DAN SARAN .................................................................... 62

5.1 Kesimpulan ............................................................................................... 62 5.2 Saran ......................................................................................................... 62

DAFTAR PUSTAKA LAMPIRAN

Universitas Sumatera Utara

Page 10: DONNY SANJAYA

x

DAFTAR TABEL

Tabel 3.1 Pseudocode Algoritma ACO................................................................... 30 Tabel 3.2 Table Admin ........................................................................................... 31 Tabel 3.3 Tabel Client ............................................................................................. 31 Tabel 3.4 Tabel Track ............................................................................................. 32 Tabel 4.1. Koordinat Ponsel Yang Terlacak Oleh Apliaksi Mobile Tracking ........ 39 Tabel 4.2 Jarak Antar Kota ..................................................................................... 41 Tabel 4.3 Visibilitas Antar Kota ............................................................................. 42 Tabel 4.4 Feromon Antar Titik ............................................................................... 42 Tabel 4.5 Hasil Siklus I Algoritma Semut .............................................................. 48 Tabel 4.6 Feromon Antar Titik Pada Graf .............................................................. 48 Tabel 4.7 Kode Program Untuk Penentuan Route Terpendek ................................ 45

Universitas Sumatera Utara

Page 11: DONNY SANJAYA

xi

DAFTAR GAMBAR

Gambar 2.1 Graf G .................................................................................................... 7 Gambar 2.2 Graf Berbobot ........................................................................................ 8 Gambar 2.3 Diagram dan Matriks Keterhubungan Graf G ........................................ 9 Gambar 2.4 Mekanisme Pergerakan Koloni Semut ................................................... 12 Gambar 2.5 Flowchart Request URL Google Maps .................................................. 16 Gambar 2.6 Konstelasi Dua Puluh Empat GPS Satelit Dalam Enam Bidang Orbit. . 18 Gambar 3.1 Ilustrasi Jalur Terpendek dengan Jarak .................................................. 21 Gambar 3.2 Diagram Ishikawa Untuk Analisis Permasalahan Sistem ...................... 22 Gambar 3.3 Use-Case Diagram Pada Sistem ............................................................. 24 Gambar 3.4 Activity Diagram Pada Sistem ............................................................... 26 Gambar 3.5 Class Diagram Pada Sistem ................................................................... 27 Gambar 3.6 Sequence Diagram Pada Sistem ............................................................. 28 Gambar 3.7 Flowchart Sistem .................................................................................... 29 Gambar 3.8 Halaman Login ....................................................................................... 33 Gambar 3.9 Halaman User ......................................................................................... 34 Gambar 3.10 Halaman Admin ................................................................................... 35 Gambar 3.11 Halaman Data User .............................................................................. 36 Gambar 3.12 Halaman About .................................................................................... 37 Gambar 4.1 Graf Dengan Empat Vertex .................................................................... 41 Gambar 4.2 Tampilan Posisi Koordinat Dalam Google Maps .................................. 52 Gambar 4.3 Tampilan Route Perjalanan .................................................................... 53 Gambar 4.4 Tampilan Eksport ................................................................................... 53 Gambar 4.5 Tampilan Login ...................................................................................... 54 Gambar 4.6 Tampilan Pendaftaran ............................................................................ 54 Gambar 4.7 Tampilan Pemberitahuan Aktifasi.......................................................... 54 Gambar 4.8 Tampilan Halaman User ........................................................................ 55 Gambar 4.9 Tampilan Halaman Perubahan Data User .............................................. 56 Gambar 4.10 Tampilan Login Admin ........................................................................ 56 Gambar 4.11 Tampilan Halaman Admin ................................................................... 57 Gambar 4.12 Tampilan Hasil Tracking Koordinat User ........................................... 57 Gambar 4.13 Tampilan Hasil Perhitungan ................................................................. 58 Gambar 4.14 Tampilan Urutan Titik Sebelum Perhitungan ...................................... 58

Gambar 4.15 Tampilan Urutan Titik Setelah Perhitungan ........................................ 59

Gambar 4.16 Tampilan Hasil Perhitungan Dalam Matrix ......................................... 59

Gambar 4.17 Pengujian 3 buah Koordinat ................................................................. 60

Gambar 4.18 Fitur Oneway Trip dan Directions ....................................................... 60 Gambar 4.19 Fitur Oneway Trip by Walking dan Directions.................................... 61

Universitas Sumatera Utara

Page 12: DONNY SANJAYA

vi

ABSTRAK

Mobile tracking adalah suatu kemajuan teknologi dalam perangkat lunak ponsel yang memungkinkan bagi pengguna ponsel untuk melacak individu mendapatkan posisi melalui teknologi Global Positioning System (GPS) yang dimilikinya. Koordinat yang diterima oleh GPS ponsel akan disimpan kedalam database dan ditampilkan pada sebuah peta menggunakan Google Maps API, kemudian dicari route terpendeknya. Dalam pencarian route terpendek ini digunakan algoritma Ant Colony Optimization (ACO). Algoritma ACO merupakan teknik probabilistik untuk menyelesaikan masalah komputasi yang terinspirasi oleh perilaku semut dalam menemukan jalur dari koloninya menuju makanan. Dalam algoritma ACO terdapat sejumlah semut buatan, yang ditugaskan untuk mencari solusi terhadap suatu masalah optimisasi. Hasil uji coba pada tugas akhir ini juga menunjukkan adanya efisiensi waktu dengan menggunakan aplikasi karena terdapat perkiraan waktu yang disediakan oleh Google Map sehingga berguna bagi user. Algoritma ACO adalah salah satu algoritma alternatif yang dapat digunakan untuk penentuan jalur terpendek. Kecepatan menampilkan suatu rute sebuah map tergantung pada jumlah kota yang diinputkan, provider dan kestabilan koneksi internet. Katakunci : Ant Colony Optimization, Global Positioning System, Google Maps API, Mobile Tracking.

Universitas Sumatera Utara

Page 13: DONNY SANJAYA

vii

IMPLEMENTATION OF MOBILE TRACKING USING ANT COLONY OPTIMIZATION AND GOOGLE MAPS API

ABSTRACT

Mobile tracking is a technological advancement in mobile phone software that makes it possible for mobile users to track individuals gain positions througlh the technology of Global Positioning System (GPS). Coordinates received by the GPS phone will be stored into the database and displayed on a map using the Google Maps API, then look for the shortest path. In the search for the shortest path is used Ant Colony Optimization algorithm (ACO). ACO algorithm is a probabilistic technique for solving computational problems that are inspired by the behavior of ants in finding paths from the colony to the food. In ACO algorithms are a number of artificial ants, which is assigned to find a solution to an optimization problem. Results of trials in this final project also shows the time efficiency by using the application because there are an estimated time provided by Google Map so useful for the user. ACO algorithm is one of the alternative algorithm that can be used to determine the shortest path. Speed display a map of a route depends on the number of cities is entered, the provider and the stability of the internet connection. Keywords : Ant Colony Optimization. Google Maps API, Global Positioning System, Mobile Tracking.

Universitas Sumatera Utara

Page 14: DONNY SANJAYA

BAB 1

PENDAHULUAN

1.1 Latar Belakang

Mobile Tracking adalah suatu kemajuan teknologi dalam perangkat lunak ponsel yang

dapat membuat telepon bukan hanya alat untuk sekedar menelpon atau sms saja.

Namun ponsel telah menjadi alat multifungsi dengan berbagai fitur dan telah menjadi

kebutuhan yang wajib dimiliki berbagai lapisan masyarakat. Teknologi GPS terbaru

telah memungkinkan bagi pengguna ponsel untuk melacak individu mendapatkan

posisi mobile user.

Google Maps (GM) merupakan sebuah aplikasi pemetaan on-line yang cukup

popular. Pada GM, titik koordinat suatu tempat ditunjukan dengan sistem koordinat

geografis. Saat ini Google Maps adalah layanan pemetaan berbasis web yang populer.

Layanan Google Maps dapat ditambahkan kedalam sebuah website menggunakan

Google Maps API (Application Programming Interface). Google Maps API dapat

ditambahkan ke website menggunakan JavaScript. API tersebut menyediakan banyak

fasilitas dan utilitas untuk memanipulasi peta dan menambahkan konten ke peta

melalui berbagai layanan, memungkinkan untuk membuat aplikasi peta yang kuat

pada sebuah website.[8]

Ant Colony Optimization (ACO) diadopsi dari perilaku koloni semut yang

dikenal sebagai sistem semut. Secara alamiah koloni semut mampu menemukan rute

Universitas Sumatera Utara

Page 15: DONNY SANJAYA

2

terpendek dalam perjalanan dari sarang ke tempat-tempat sumber makanan. Koloni

semut dapat menemukan rute terpendek antara sarang dan sumber makanan

berdasarkan jejak kaki pada lintasan yang telah dilalui. Semakin banyak semut yang

melalui suatu lintasan, maka akan semakin jelas bekas jejak kakinya. Hal ini akan

menyebabkan lintasan yang dilalui semut dalam jumlah sedikit, semakin lama akan

semakin berkurang kepadatan semut yang melewatinya, atau bahkan akan tidak

dilewati sama sekali. Sebaliknya, lintasan yang dilalui semut dalam jumlah banyak,

semakin lama akan semakin bertambah kepadatan semut yang melewatinya, atau

bahkan semua semut akan melalui lintasan tersebut.[3]

Ant Colony Optimization (ACO) adalah salah satu algoritma alternatif yang

dapat digunakan untuk penentuan jalur terdekat. Selain prosesnya cepat dan

memberikan hasil yang bisa diterima, ACO juga mampu memberikan suatu solusi

pada waktu kapanpun. Mengingat prinsip algoritma yang didasarkan pada perilaku

koloni semut dalam menemukan jarak perjalanan paling pendek tersebut, ACO sangat

tepat digunakan untuk diterapkan dalam penyelesaian masalah optimasi, salah satunya

adalah untuk pengguna perangkat mobile dalam penentuan posisi dan jarak terdekat.

1.2 Rumusan masalah

Bagaimana menentukan jarak terdekat antara mobile user satu dengan yang lain pada

aplikasi mobile tracking menggunakan Google Maps API dengan Algoritma ACO.

1.3 Batasan masalah

Batasan masalah pada aplikasi ini sebagai berikut:

1. Mendeteksi posisi mobile user (Handphone).

2. Menentukan jarak terdekat antara mobile user satu dengan yang lain

dengan ACO.

3. Bahasa pemrograman yang digunakan adalah PHP menggunakan

framework CodeIgniter & Mysql, JavaScript, Jquery.

Universitas Sumatera Utara

Page 16: DONNY SANJAYA

3

1.4 Tujuan penelitian

Menerapkan konsep dan cara kerja algoritma Ant Colony Optimization (ACO) pada

aplikasi mobile tracking untuk menentukan jarak terdekat.

1.5 Manfaat penelitian

Diharapkan dapat membantu pengguna perangkat mobile dalam penentuan posisi

dan jarak terdekat.

1.6 Metodologi Penelitian

Penelitian ini akan dilaksanakan dengan mengikuti beberapa langkah yang akan

digunakan penulis, yaitu:

1. Studi Literatur

Tahap ini dilakukan dengan mencari jurnal, buku, tulisan ilmiah, e-book,

maupun artikel lain yang berhubungan dengan Algoritma Ant Colony, Google

Maps API, serta Pemrograman PHP pada Framework Codeigniter.

2. Analisis dan Perancangan Sistem

Dengan tahap ini digunakan untuk mengolah data dari hasil studi literatur dan

kemudian melakukan analisis dan perancangan sistem yang sudah disimpulkan

pada tahap analisis kedalam algoritma program, flowchart sistem, rancangan

aplikasi, dan pembuatan user interface aplikasi.

3. Implementasi Sistem

Mengimplemntasikan model dan skema pada tahap perancangan sistem. Model

dan skema diimplementasikan kedalam bahasa pemrograman PHP

menggunakan framework codeigniter yang dipadukan dengan penggunaan

Universitas Sumatera Utara

Page 17: DONNY SANJAYA

4

javascript sebagai pemrograman Google Maps API. Program yang dihasilkan

merupakan sebuah aplikasi berbasis web untuk mendeteksi latitude dan

longitude sebuah handphone.

4. Pengujian Sistem

Menguji apakah aplikasi yang dibuat telah berhasil berjalan sesuai dengan

keinginan dan melakukan perbaikan kesalahan jika masih terdapat error pada

aplikasi.

5. Dokumentasi

Tahap akhir dari penelitian yang dilakukan, yaitu membuat kesimpulan dan

laporan tentang penelitian yang telah dilakukan.

1.7 Sistematika Penulisan

Sistematika penulisan dari skripsi ini terdiri dari:

BAB 1 : PENDAHULUAN

Bab ini menjelaskan mengenai latar belakang pemilihan judul skripsi

”Implementasi Mobile Tracking Menggunakan Metode Ant Colony

Optimazion Dan Google Maps API”, rumusan masalah, batasan masalah,

tujuan penelitian, manfaat penelitian, metode penelitian dan sistematika

penulisan.

BAB 2 : TINJAUAN PUSTAKA

Bab ini membahas teori-teori yang berkaitan dengan Teori graf, Algoritma

Ant Colony, Google Maps API, serta Global Positioning System.

BAB 3 : ANALISIS DAN PERANCANGAN SISTEM

Bab ini akan membahas mengenai analisis kebutuhan sistem yang meliputi

analisis masalah, analisis kebutuhan sistem, pemodelan dan perancangan

sistem.

Universitas Sumatera Utara

Page 18: DONNY SANJAYA

5

BAB 4 : IMPLEMENTASI DAN PENGUJIAN

Bab ini akan membahas mengenai implementasi sistem dan pengujian

sistem agar aplikasi yang dirancang berjalan dengan baik.

BAB 5 : KESIMPULAN DAN SARAN

Bab ini memuat kesimpulan dari uraian bab-bab sebelumnya dan hasil

penelitian yang diperoleh. Bab ini juga memuat saran yang diharapkan

dapat bermanfaat untuk pengembangan selanjutnya.

Universitas Sumatera Utara

Page 19: DONNY SANJAYA

BAB 2

TINJAUAN PUSTAKA

2.1. Teori Graf

2.1.1 Definisi Graf

Graf G adalah pasangan (V(G),E(G)) dengan (V(G)) adalah himpunan tidak kosong

dan berhingga dari objek-objek yang disebut titik, (E(G)) adalah himpunan (mungkin

kosong) pasangan tak berurutan dari titik- titik berbeda di (V(G)) yang disebut sisi.

Banyaknya unsur di V(G) disebut order dari G dan dilambangkan dengan p(G), dan

banyaknya unsur di E(G) disebut ukuran dari G dan dilambangkan dengan q(G). Jika

graf yang dibicarakan hanya graf G, maka order dan ukuran dari G masing-masing

cukup ditulis p dan q. Graf dengan order p dan q disebut graf-(p,q).[1]

Nama “Graf” diberikan karena graf dapat disajikan secara grafik atau gambar,

dan justru dengan bentuk gambar inilah sifat-sifat graf dapat dikenali secara detail.

Titik disajikan dalam bentuk noktah atau lingkaran kecil dan sisi disajikan dalam

bentuk garis atau kurva yang memasangkan dua titik. [1]

Perhatikan graf G yang memuat himpunan titik V(G) dan himpunan sisi E(G)

seperti berikut ini.

V(G) = {a,b,c,d,e}

E(G) = {(a, b), (a, c), (a, d), (b, d), (b, c), (d, e)}

Universitas Sumatera Utara

Page 20: DONNY SANJAYA

7

Graf G tersebut secara lebih jelas dapat digambar sebagai berikut.

Gambar 2.1 Graf G

Graf G mempunyai 5 titik sehingga order G adalah p = 5. Graf G mempunyai 6 sisi

sehingga ukuran graf G adalah 6.

Graf G dengan himpunan titik dan sisi masing-masing

V(G) = {a, b, c, d, e}

E(G) = {(a, b), (a, c), (a, d), (b, d), (b, c), (d, e)}

Dapat juga ditulis dengan

V(G) = {a, b, c, d, e}

E(G) = {e1, e2, e3, e4, e5, e6}

Dengan

e1 = (a, b)

e2 = (a, c)

e3 = (a, d)

e4 = (b, d)

e5 = (b, c)

e6 = (d, e)

Sisi e = (a, b) dikatakan menghubungkan titik a dan b. Jika e = (a, b) adalah

sisi graf G, maka a dan b disebut terhubung langsung (adjacent), a dan e serta b dan e

disebut terkait langsung (incident), dan titik a dan b disebut ujung dari e. Dua sisi

G :

a c

d b

e

e1

e2

e3

e4 e6

Universitas Sumatera Utara

Page 21: DONNY SANJAYA

8

berbeda e1 dan e2 disebut terhubung langsung (adjacent), jika terkait langsung pada

satu titik yang sama. Untuk selanjutnya, sisi e = (a, b) akan ditulis e = ab.

2.1.2 Graf Berbobot

Graf berbobot adalah graf yang setiap sisinya diberi sebuah nilai atau bobot. Bobot

pada setiap sisi graf dapat berbeda-beda bergantung pada masalah yang dimodelkan.

Bobot dapat menyatakan jarak antara dua buah kota, biaya perjalanan antara dua buah

kota, waktu tempuh antara dua buah kota, waktu tempuh pesan antara simpul

komunikasi dengan simpul komunikasi lainya, ongkos produksi dan sebagainya. Graf

berbobot juga sering dikaitkan dengan istilah graf berlabel.[7]

Untuk membuat label, masing-masing vertex diberi sebuah label dan setiap

edge diberikan sebuah nilai atau bobot. Tampilan graf berlabel dapat dilihat pada

Gambar 2.2.

Gambar 2.2 Graf Berbobot

2.1.3 Representasi Graf Pada Komputer

Meskipun menggambar merupakan cara yang mudah untuk menjelaskan suatu graf,

cara ini tentunya mempunyai kelemahan ketika akan menyimpan data tentang graf

dalam komputer, atau ketika akan mengkaji sifat-sifat sutau graf melalui hitungan

matematis. Merepresentasikan graf dalam bentuk matriks akan memberikan

P Q

R S

T

6

9

12 7

9

6

Universitas Sumatera Utara

Page 22: DONNY SANJAYA

9

V1 V2

V3 V4

v1 v2 v3 v4

v1

v2

v3

v4

kemudahan bagi sesorang yang senang menggunakan komputer ketika mengkaji

informasi atau menyelesaikan permasalahan yang melibatkan graf.[1]

Matriks keterhubungan suatu graf G adalah matriks simetri dengan unsur 0 dan

1 dan memuat nilai 0 pada diagonal utamanya. Hal ini karena graf tidak memuat lup

dan tidak memuat sisi parallel.

Perhatikan contoh berikut. Misalkan graf G dengan himpunan titik

V(G) = {v1, v2, v3, v4}

Dan himpunan sisi

E(G) = {v1v2, v1v4, v2v3, v2v4, v3v4 }

Maka, diagram dan matriks keterhubungan graf G sebagai berikut.

���� = �0 1 0 11 0 1 10 1 0 11 1 1 0

Gambar 2.3 Diagram dan Matriks Keterhubungan Graf G

Derajat suatu simpul deg(v) adalah banyaknya ruas yang menghubungkan suatu

simpul. Secara umum, jika graf G dengan order p (p ≥ 1) dengan himpunan titik V(G)

= {v 1,v2, … vp} dan A (G) = [aij], 1 ≤ i, j ≤ p adalah matriks keterhubungan dari G,

maka

deg (vi) = ∑ � �����

Hal yang sama juga berlaku jika menghitung derajat titik melalui kolom, yaitu

deg (vi) = ∑ �� ����

Universitas Sumatera Utara

Page 23: DONNY SANJAYA

10

Dengan melihat matriks keterhubungan dari graf G dapat diperoleh bahwa

a11 + a12 + a13 + a14 = 0 + 1 + 0 + 1 = 2 = deg(v1),

a21 + a22 + a23 + a24 = 1 + 0 + 1 + 1 = 3 = deg(v2),

a31 + a32 + a33 + a34 = 0 + 1 + 0 + 1 = 2 = deg(v3), dan

a41 + a42 + a43 + a44 = 1 + 1 + 1 + 0 = 3 = deg(v4).

Dari diagram terlihat bahwa

deg(v1) = 2,

deg(v2) = 3,

deg(v3) = 2, dan

deg(v4) = 3.

2.2 Algoritma Ant Colony Optimization

Algoritma semut (Ant Colony) yang terinspirasi oleh tingkah laku semut dalam suatu

koloni. Semut mampu menemukan jalur terpendek dari sumber makanan ke sarang

mereka tanpa menggunakan isyarat visual dengan memanfaatkan informasi feromon.

Sambil berjalan, semut meninggalkan jejak feromon di tanah, dan feromon ini akan

membimbing semut lain untuk menemukan sumber makanan. [6]

2.2.1 Ant Colony Optimization

Ant Colony Optimization (ACO) melakukan pendekatan menggunakan model

probabilistik untuk membangun kombinasi baru. Dalam pendekatannya, model

probabilistik berkembang selama proses pencarian dengan mengacu pada kombinasi

sebelumnya yang dibangun berulang selama proses pembelajaran.[11]

Kontribusi utama algoritma ACO adalah yang meniru dari perilaku kolektif

seekor semut untuk memperbarui model probabilistik. Kemungkinan memilih

Universitas Sumatera Utara

Page 24: DONNY SANJAYA

11

komponen tergantung pada kualitas feromon yang merepresentasikan perjalanan

koloni semut. Jumlah feromon berkembang dengan menggabungkan dua mekanisme.

mekanisme pertama adalah langkah meletakkan feromon. Jejak feromon berhubungan

dengan kombinasi terbaik yang memungkinan untuk memilih jalur tersebut.

Mekanisme kedua adalah penguapan feromon. Jejak feromon akan semakin menurun

pada peninggalan jejak yang tidak dikunjungi. [11]

Marco Dorigo (1992) menyatakan “Ant Colony Optimization (ACO) adalah

pendekatan metaheuristik baru yang diusulkan untuk memecahkan masalah optimasi

kombinatorial yang sulit. Sumber inspirasi dari ACO adalah jejak feromon peletakan

dan mengikuti perilaku semut nyata yang menggunakan feromon sebagai media

komunikasi. Dalam analogi dengan contoh biologi, ACO didasarkan pada komunikasi

tidak langsung dari koloni agen sederhana, disebut (buatan) semut, dimediasi oleh

(buatan) jejak feromon. Jalan feromon di ACO berfungsi sebagai penyampai

informasi numerik yang semut gunakan untuk probabilistik membangun solusi untuk

masalah yang sedang diselesaikan dan dimana semut beradaptasi selama eksekusi

algoritma untuk mencerminkan pengalaman pencarian”.[5]

Perilaku semut yang cukup menarik adalah ketika mereka mencari makan, di

mana mereka dapat menemukan jalur terpendek antara sumber makanan dan sarang

mereka. Semut sampai pada titik keputusan di mana mereka harus memutuskan

apakah akan belok kiri atau kanan. Karena mereka tidak memiliki petunjuk yang

merupakan pilihan terbaik, mereka memilih acak. Hal ini dapat diharapkan bahwa

rata-rata, setengah dari semut memutuskan untuk berbelok ke kiri dan yang lainnya

berbelok ke kanan. Hal ini terjadi baik untuk semut bergerak dari kiri ke kanan (L)

dan untuk mereka yang pindah dari kanan ke kiri (R). Ketika berjalan dari sumber

makanan ke sarang dan sebaliknya, semut meletakkan suatu zat (yang disebut

feromon) di sepanjang jalur yang mereka lalui. Ketika zat tersebut disekresikan

sebagai isyarat seekor semut, maka semut yang lain dapat mengenalinya. Ketika

mencari makan, pada awalnya semut akan berkeliling di daerah sekitar sarangnya

secara acak. Begitu mengetahui ada makanan, semut akan menganalisa kualitas dan

kuantitas makanan tersebut dan membawa beberapa bagian ke sarangnya. Dalam

perjalanannya, mereka meninggalkan jejak berupa zat kimia, yang disebut feromon.

Universitas Sumatera Utara

Page 25: DONNY SANJAYA

12

Feromon ini akan membimbing semut lain untuk menemukan sumber makanan.

Jumlah feromon yang ditinggalkan oleh semut bergantung pada jumlah makanan yang

ditemukan. Semakin banyak makanan yang didapat, semakin banyak pula jumlah

feromon yang ditinggalkan. Sehingga semakin banyak semut yang melewati suatu

jalur, semakin kuat pula jejak feromon yang terkumpul di jalur tersebut. Cara semut

memanfaatkan feromon untuk menemukan jalur terpendek antara dua titik

ditunjukkan pada Gambar 2.4[6].

Gambar 2.4 Mekanisme Pergerakan Koloni Semut.

Inisialisasi parameter-parameter algoritma.

1. Intensitas jejak semut antar kota dan perubahannya (τij).

2. Banyak kota (n) termasuk koordinat (x,y)atau jarak antar kota (dij) serta

kota berangkat dan kota tujuan.

3. Tetapan siklus-semut (Q).

4. Tetapan pengendali intensitas jejak semut(α), nilai α ≥ 0.

5. Tetapan pengendali visibilitas (β), nilai β≥ 0.

6. Visibilitas antar kota = 1/dij (ηij).

7. Banyak semut (m).

8. Tetapan penguapan jejak semut (ρ) , nilai ρ harus > 0 dan < 1 untuk

mencegah jejak pheromone yang tak terhingga.

9. Jumlah siklus maksimum (NCmax) bersifat tetap selama algoritma

dijalankan, sedangkan τij akan selalu diperbaharui harganya pada setiap

Universitas Sumatera Utara

Page 26: DONNY SANJAYA

13

siklus algoritma mulai dari siklus pertama (NC=1) sampai tercapai jumlah

siklus maksimum(NC=NCmax) atau sampai terjadi konvergensi.

Aturan transisi digunakan oleh sistem semut, disebut sebagai random-proportional

rule diberikan oleh persamaan (1), yang memberikan probabilitas semut k di kota r

memilih untuk pindah ke kota s.

����, �� = � ����,����.����,��� ∑ ����,!���.����,!�� "#$%�&� 0 '()� � * '���� (1)

Dimana :

Pk(r, s) : Probabilitas semut k memilih untuk berpindah dari kota r ke kota s

τ(r,s) : jumlah feromon pada sisi dari simpul r ke simpul s.

η (r,s) : (panjang sisi dari simpul r ke simpul s)-1

τ(r,u) : jumlah feromon pada sisi dari simpul r ke simpul u.

η(r,u) : (panjang sisi dari simpul r ke simpul u)-1

Jk : himpunan yang berisi simpul – simpul yang telah dikunjungi oleh

semut

u : simpul yang berada dalam Jk

2.2.1.1 Aturan Transisi Status

Dalam ACS (Ant Colony System) aturan transisi status adalah sebagai berikut: semut

diposisikan pada node r memilih kota s untuk berpindah dengan menerapkan aturan

yang diberikan oleh persamaan (2).[4]

� = +max/�0��, 1��. �2��, 1��345 '()� 6 ≤ 68 (2)

Dimana :

τ(r,u) : jumlah feromon pada sisi dari simpul r ke simpul s.

η(r,u) : (panjang sisi dari simpul r ke simpul s )-1

Universitas Sumatera Utara

Page 27: DONNY SANJAYA

14

β : parameter perbandingan jumlah feromon relatif terhadap jarak

(merupakan parameter yang telah ditentukan sebelumnya)

q : bilangan random

q0 : parameter perbandingan terhadap simpul yang belum ditemuinya

S : simpul berikutnya yang dipilih berdasarkan persamaan (1).

2.2.1.2 Aturan Pembaruan Feromone Global

Dalam ACS hanya semut terbaik secara global (yaitu, perjalanan semut yang

terpendek dari awal sebuah jejak) yang diperbolehkan untuk meninggalkan feromon.

Pilihan ini, bersama-sama dengan penggunaan aturan pseudo-random-proportional,

dimaksudkan untuk membuat pencarian yang lebih terarah. Semut mencari di

lingkungan pada tour terbaik ditemukan sampai akhir iterasi algoritma. Pembaharuan

feromon global dilakukan setelah semua semut telah menyelesaikan tour mereka.

Tingkat feromon diperbarui dengan menerapkan aturan memperbarui persamaan

global (3).[4]

0��, �� ← �1 − ;�. 0��, �� + ;. ∆0��, �� (3)

Dimana:

τ(r,s) : nilai feromon akhir setelah mengalami pembaruan

α : tetapan pengendali feromon.

Δτ : perubahan intensitas feromon.

Seperti halnya dalam sistem semut, pembaharuan feromon global dimaksudkan untuk

menyediakan sejumlah besar feromon untuk kunjungan terpendek. Persamaan. (3)

menyatakan bahwa hanya sebuah edge tour terbaik secara global akan menerima

penguatan. Jenis lain aturan pembaharuan feromon global, yang disebut iteration-best,

sebagai lawan di atas yang disebut global-best. Dalam persamaan (3). Juga, dengan

iterasi-terbaik edge yang menerima penguatan adalah yang termasuk tour terbaik dari

iterasi saat ini. Percobaan telah menunjukkan bahwa perbedaan antara dua skema

Universitas Sumatera Utara

Page 28: DONNY SANJAYA

15

minimal, dengan preferensi sedikit untuk global terbaik, karena yang digunakan dalam

percobaan berikutnya.

2.2.1.3 Aturan Pembaruan Feromone Lokal

Ketika membangun solusi (yaitu, tour) sebuah TSP, semut mengunjungi edge dan

mengubah tingkat feromon mereka dengan menerapkan aturan memperbarui lokal

persamaan (4).[4]

0��, �� ← �1 − >�. 0��, �� + >. ∆0��, �� (4)

dimana:

τ(r,s) : jumlah feromon pada sisi dari simpul r ke simpul s

ρ : tetapan penguapan feromon.

Δτ : perubahan intensitas feromon.

Peran aturan memperbarui lokal ACS adalah untuk mengacak tour, sehingga kota-kota

di awal tour seekor semut dapat dieksplorasi selanjutnya oleh tour semut lain. Dengan

kata lain, efek dari pembaruan feromon lokal adalah untuk membuat edge berubah

secara dinamis. setiap kali semut menggunakan edge ini menjadi sedikit kurang

diinginkan (karena kehilangan beberapa feromon nya). Dengan cara ini semut akan

membuat lebih baik menggunakan informasi feromon. tanpa pembaruan feromon

lokal semua semut akan mencari di lingkungan yang terbatas pada tour terbaik

sebelumnya.

2.3 Google Maps API

Google Maps API merupakan aplikasi antarmuka yang dapat diakses lewat javascript

agar Google Maps dapat ditampilkan pada halaman web yang sedang dibangun.[8]

Universitas Sumatera Utara

Page 29: DONNY SANJAYA

16

Developer merumuskan sebuah request URL menggunkanan PHP di remote server

Aplikasi PHP membuat request ke Google Maps

Request Valid

Google Maps mengirimkan data ke user menggunakan format data JSON

Google Maps mengirimkan error atau hasil nol

PHP dapat menggunkanan fungsi cURL untuk mengambil dan melakukan pengelolahan data JSON

Y

N

Ada 2 cara untuk mengakses data Google Maps, tergantung dari data yang

ingin diambil dan diuraikan dari Google Maps.

1. Mengakses data Google Maps tanpa menggunakanAPI key.

2. Mengakses data Google Maps menggunakan API key.

Pendaftaran API key dilakukan dengan data pendaftaran berupa nama domain web

yang kita bangun.

2.3.1 Request URL Google Map

Gambar 2.5 Flowchart Request URL Google Maps

2.3.2 Geocoding

Geocoding adalah proses mengubah alamat (seperti “1600 Amphitheatre Parkway,

Mountain View, CA”) ke koordinat geografis (lintang 37,423021 dan bujur -

122,08379), yang dapat digunakan untuk menempatkan penanda atau posisi peta.

Universitas Sumatera Utara

Page 30: DONNY SANJAYA

17

Geocoding API Google menyediagakn cara langsung untuk mengakses geocoder

melalui HTTP. Selain itu, layanan ini memungkinkan kita untuk melakukan operasi

sebaliknya (berubah koordinat menjadi alamat), proses ini dikenal sebagai reverse

geocoding.[8]

2.3.3 Waypoint

Waypoint adalah titik referensi dalam ruang fisik yang digunakan untuk tujuan

navigasi. Waypoint merupakan koordinat yang mengidentifikasi titik dalam ruang

fisik. Koordinat yang digunakan dapat bervariasi tergantung pada aplikasi. Untuk

navigasi darat koordinat berupa bujur dan lintang, sedangkan untuk navigasi udara

juga mencakup ketinggian. Waypoint biasanya digunakan untuk sistem navigasi pada

GPS dan jenis-jenis tertentu dari radio navigasi. Waypoint yang terletak di permukaan

bumi biasanya didefinisikan dalam dua dimensi (misalnya, bujur dan lintang),

sedangkan yang digunakan dalam atmosfer bumi atau di luar angkasa didefinisikan

dalam setidaknya tiga dimensi atau empat jika waktu merupakan salah satu koordinat

untuk beberapa titik yang berada di luar bumi. Waypoint ini digunakan untuk

membantu menentukan jalur routing yang tak terlihat untuk navigasi. Misalnya,

artificial airways " highways in the sky" yang diciptakan khusus untuk keperluan

navigasi udara dan hanya terdiri dari serangkaian waypoint abstrak di langit dimana

pilot menavigasi airways ini dirancang untuk memudahkan kontrol lalu lintas udara

dan routing lalu lintas antara lokasi pada saat bepergian. Waypoints abstrak semacam

ini telah dibuat praktis dengan teknologi navigasi modern, seperti land-based radio

beacons dan satelit berbasis GPS.[8]

2.3.3.1 Perhitungan Jarak Antara Dua Waypoints

Untuk melakukan perhitungan jarak antara dua waypoints pada Google Maps

menggunakan persamaan hukum kosinus koordinat bola (spherical law of cosines).

? = �@A��sin�E�� . sin�EF� + cos�EF�� . cos�EF� . cos�IF − I�� . J……()

Universitas Sumatera Utara

Page 31: DONNY SANJAYA

18

Dimana :

D : Jarak antar dua titik (km) E� : Posisi titik i(1,2,…n) pada garis lintang dalam derajat I� : Posisi titik i(1,2,…n) pada garis bujur dalam derajat J : Jari-jari bumi (6371 km)

Karena untuk menggunakan persamaan ini nilai lintang dan bujur harus dalam radian,

sedangkan data masukan dari pengguna dalam derajat, maka terlebih dahulu

mengubah nilai derajat menjadi radian dengan membagi dengan 180 / π . π adalah

konstanta matematika yaitu 3,14.[8]

2.4 GPS

Rancangan terbaru dari GPS dikembangkan dari sebuah prototype pada akhir 1960.

Rancangan ini berdasarkan pada rasi dua puluh empat satelit buatan manusia yang

mengorbit bumi setiap dua belas jam pada ketinggian 20.000 km dari permukaan laut.

Secara kolektif, ini berdasarkan konstelasi membentuk Segmen angkasa, seperti yang

ditunjukkan pada Gambar 2. setiap satelit terus mengirimkan pesan posisi, dengan

ketepatan waktu antara semua komponen sistem dan antar satelit. Waktu tersebut

dikelola oleh pemantauan transmisi satelit di lima stasiun darat yang dapat mengirim

pembaharuan ke satelit ketika penyimpangan yang tidak diinginkan terdeteksi.

Seperangkat stasiun membuat segmen ground.[10]

Gambar 2.6 Konstelasi Dua Puluh Empat GPS Satelit Dalam Enam Bidang Orbit.

Universitas Sumatera Utara

Page 32: DONNY SANJAYA

19

Segmen ketiga adalah pengguna segmen peralatan yaitu terdiri dari apa yang telah

menjadi berbagai jenis penerima GPS yang dirancang untuk memanfaatkan sinyal

berbasis ruang untuk posisi akurat dan penentuan waktu. semua penerima tersebut

beroperasi pada prinsip yang sama yaitu estimasi waktu kedatangan sinyal dari

sedikitnya empat satelit terpisah, kemudian untuk mengetahui transmisi waktu dan

kecepatan cahaya untuk memperkirakan jarak antara pengguna dan satelit. Penerima

GPS kemudian menggunakan rentang untuk menghitung posisi pengguna.[10]

Setiap sinyal GPS dirancang untuk membawa waktu yang tertera memungkinkan

penerima untuk mengetahui kapan sinyal meninggalkan satelit GPS. Sebuah peralatan

penerima yang dilengkapi dengan baik kemudian dapat mengukur ketika sinyal

menjangkau pengguna. Jika jam satelit dan jam pengguna secara sempurna

disinkronkan, jarak antara mereka dapat dihitung sebagai waktu tunda dikalikan

dengan kecepatan cahaya. Namun, meskipun jam GPS semua sangat tepat dan

disinkronkan dengan satu sama lain, jam pengguna juga dapat memiliki bias relatif

yang tidak diketahui terhadap waktu sistem GPS. Istilah pseudorange digunakan

untuk mengenali bahwa pengguna hanya dapat memperkirakan setiap sinyal GPS

waktu kedatangan relatif terhadap jam bias.[10]

2.4.1 Sumber Kesalahan

Sumber kesalahan dari GPS pada umumnya diakibatkan oleh:[9]

a. Ionosphere and troposphere delays, signal satelite lambat dalam menembus

atmosfer. Pada GPS yang baru telah dilengkapi oleh perhitungan rata-rata

delays (waktu tunda) untuk mengoreksi kesalahan yang terjadi.

b. Signal multipath, Kesalahan yang terjadi akibat signal dipantulkan oleh gedung

atau batuan besar, sebelum mencapai receiver.

c. Penerimaan satelite yang terganggu akibat gedung, interferensi gelombang

elektro magnetik, blok signal, sehingga GPS tidak bekerja dalam rumah

(indoor), dibawah permukaan air atau di bawah tanah.

Universitas Sumatera Utara

Page 33: DONNY SANJAYA

20

2.4.2 Kesalahan pada GPS

Kesalahan-kesalahan satelite, antara lain:[9]

a. Receiver clock errors,

b. Orbital Error,

c. Satellite geometry/shading dan

d. Intentional degradation of the satellite signal.

2.4.3 Tracking

Tracking dalam per-istilahan GPS adalah melakukan kuisisi data koordinat secara

otomatis berdasarkan jalur yang kita lalui dan data tersebut disimpan dalam kartu

memori GPS secara otomatis.[9]

Universitas Sumatera Utara

Page 34: DONNY SANJAYA

BAB 3

ANALISIS DAN PERANCANGAN SISTEM

3.1 Analisis Sistem

Persoalan penentuan jarak terdekat merupakan salah satu permasalahan optimasi. Graf

yang digunakan adalah suatu graf berbobot jarak antar user yang merupakan tempat-

tempat yang akan dilintasi. Untuk meminimumkan waktu atau biaya dalam melintasi

tempat-tempat, diperlukan informasi lintasan yang terpendek yang harus dilalui.

Permasalahan pencarian lintasan yang terpendek antar lokasi dapat diselesaikan

dengan algoritma ACO yang bekerja sebagai penentuan jalur terpendek antar titik,

untuk selanjutnya dapat diterapkan pada pencarian jalur terpendek pada berbagai

lokasi yang ingin diketahui. Contoh kasus yang akan diambil adalah pencarian jalur

terpendek antara titik A dan titik D.

Gambar 3.1 Ilustrasi Jalur Terpendek dengan Jarak

Universitas Sumatera Utara

Page 35: DONNY SANJAYA

22

Pada Gambar 3.1 diketahui koordinat pengguna yang digunakan sebagai banyak

kota yang dikunjungi kemudian sistem ini akan mencari jarak terdekat menggunakan

algoritma ant colony optimization (ACO) dalam penentuan jarak terdekatnya.

3.1.1 Analisis Masalah

Untuk mengidentifikasi masalah menggunakan diagram ishikawa (fishbone diagram).

Masalah yang akan diidentifikasi yaitu sebuah perangkat mobile yang memiliki

fasilitas GPS belum digunakan secara maksimal. Bahkan untuk membeli sebuah

perangkat GPS saat ini masih relatif mahal sehingga hanya orang tertentu saja yang

menggunakanya. Dengan adanya fasilitas GPS jarak yang akan ditempuh dapat

dihitung secara komputasi, sehingga waktu yang digunakan akan jauh lebih efektif

daripada perhitungan secara manual. Permasalahan tersebut dapat dilihat melalui

sebuah diagram ishikawa pada Gambar 3.2.

Gambar 3.2 Diagram Ishikawa Untuk Analisis Permasalahan Sistem

3.1.2 Analisis Kebutuhan Sistem

Analisis Kebutuhan Sistem meliputi analisis kebutuhan fungsional sistem dan analisis

kebutuhan non-fungsional sistem.

Penentuan jarak terdekat dari sebuah koordinat ponsel

Method Machine

Materials Man

Kesulitan dalam pembuatan peta terbaru

Pencarian jarak terdekat masih manual

Memiliki keterbatasan dalam memproses data

Harga perangkat GPS relatif mahal

Universitas Sumatera Utara

Page 36: DONNY SANJAYA

23

3.1.2.1 Kebutuhan Fungsional Sistem

Kebutuhan fungsional yang harus dimiliki oleh aplikasi mobile tracking dalam

penentuan jarak terdekat yaitu :

1. Fasilitas gps sebuah ponsel untuk membaca koordinat.

2. Sistem akan melakukan perhitungan jarak terdekat pada google maps

menggunakan algoritma ant colony optimization.

3. Sistem dapat menampilkan route yang akan dilalui sebagai jarak terdekat.

3.1.2.2 Kebutuhan Non-Fungsional Sistem

Kebutuhan non-fungsional adalah kebutuhan yang harus dipenuhi agar aplikasi yang

dirancang mendapat umpan-balik yang baik dari pengguna aplikasi. Kebutuhan non-

fungsional yang harus dipenuhi aplikasi yang dirancang adalah sebagai berikut:

a. Performa

Sistem harus mampu melaksanakan setiap tugas secara utuh dalam selang

waktu yang tidak terlalu lama sesuai dengan ukuran data input yang

diberikan.

b. Informasi

Sistem harus mampu menyediakan informasi tentang data-data yang akan

digunakan pada sistem.

c. Ekonomi

Sistem harus dapat bekerja dengan baik tanpa harus mengeluarkan biaya

tambahan dalam penggunaan perangkat keras maupun perangkat lunak.

d. Kontrol

Sistem yang telah dibangun harus tetap dikontrol setelah selesai dirancang

agar fungsi dan kinerja sistem tetap terjaga dan dapat memberikan hasil

yang sesuai dengan keinginan pengguna.

e. Efisiensi

Sistem harus dirancang sesederhana mungkin agar memudahkan pengguna

dalam menggunakan atau menjalankan aplikasi tersebut.

f. Pelayanan

Universitas Sumatera Utara

Page 37: DONNY SANJAYA

24

Sistem yang telah dirancang bisa dikembangkan ke tingkat yang lebih

kompleks lagi bagi pihak-pihak yang ingin mengembangkan sistem

tersebut.

3.1.3 Pemodelan

Pemodelan aplikasi yang dirancang bertujuan untuk menggambarkan semua kondisi

dan bagian-bagian yang berperan dalam sistem yang dirancang. Pemodelan aplikasi

dilakukan dengan membuat use-case diagram, activity diagram, class diagram, dan

sequence diagram.

3.1.3.1 Use-Case Diagram

Untuk menganalisa komponen-komponen yang berperan dalam sistem yang

dirancang, penulis menggunakan use-case diagram agar proses penganalisaan

komponen dapat dilakukan dengan mudah. Use-case diagram sistem pada aplikasi

yang dirancang dapat dilihat pada Gambar 3.3.

Gambar 3.3. Use-Case Diagram Pada Sistem

User

Daftar

Login

Admin

Hitung Perjalanan

Eksport data

Kordinat Ponsel

Profil User

Data User << Extends >>

Long-Lat << Extends >>

Hasil Perhitungan

<< include >> << Include >>

Durasi Dalam Matriks

<< include >>

Peta Graph

<< include >>

Universitas Sumatera Utara

Page 38: DONNY SANJAYA

25

3.1.3.2 Activity Diagram

Untuk menganalisa aktivitas-aktivitas yang akan berlangsung selama aplikasi

dijalankan diperlukan sebuah activity diagram. Activity diagram sistem pada aplikasi

yang dirancang dapat dilihat pada Gambar 3.4.

Universitas Sumatera Utara

Page 39: DONNY SANJAYA

26

Activity diagram

Gambar 3.4. Activity Diagram Pada Sistem

Universitas Sumatera Utara

Page 40: DONNY SANJAYA

27

3.1.3.3 Class Diagram

Class diagram untuk sistem yang dirancang dapat dilihat seperti pada Gambar 3.5.

Gambar 3.5. Class Diagram Pada Sistem

3.1.3.4 Sequence Diagram

Sequence diagram untuk sistem yang dirancang dapat dilihat seperti pada Gambar 3.6.

Universitas Sumatera Utara

Page 41: DONNY SANJAYA

28

Gambar 3.6. Sequence Diagram Pada Sistem

3.2 Perancangan Sistem 3.2.1 Flowchart Sistem

Flowchart merupakan bagan yang menunjukkan arus pekerjaan secara keseluruhan

dari sistem. Flowchart menjelaskan tentang urutan-urutan dari prosedur yang ada di

dalam sistem dengan menggunakan simbol-simbol.

Flowchart pembuatan aplikasi mobile tracking dapat dilihat seperti pada

Gambar 3.7.

Universitas Sumatera Utara

Page 42: DONNY SANJAYA

29

Gambar 3.7. Flowchart Sistem

Universitas Sumatera Utara

Page 43: DONNY SANJAYA

30

3.2.2 Pseudocode Algoritma ACO

Pseudocode adalah teknik untuk menuliskan algoritma secara hight-level tanpa

tergantung pada sebuah bahasa pemrograman. Penulisan pseudocode biasanya ditulis

dengan menggunakan bahasa inggris dan diberi tambahan notasi matematika.

Pseudeocode Algoritma ACO ditunjukkan oleh tabel 3.1 dibawah ini:

Tabel 3.1 Pseudocode Algoritma ACO

Baris Kode

Pseudocode

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

ALGORITMA Ant Colony Optimization

{ algortima untuk menghitung jarak terpendek menggunakan ACO }

DEKLARASI

alfa,beta,asF:double;

i,j,m,Q:integer;

DESKRIPSI

Set parameter(alfa,beta,asF,m,Q)

while stopping criterion not satisfied do

position each ant in a starting node

repeat

for each ant do

choose next node by applying the state

transition rule

apply local pheromone update

end for

until every ant has built a solution

update best solution

apply global pheromone update

end while

Output (Jarak terpendek)

Universitas Sumatera Utara

Page 44: DONNY SANJAYA

31

3.2.3 Perancangan Database

Tabel yang penulis gunakan dalam pembuatan aplikasi mobile tracking yaitu

tb_admin, tb_client dan tb_track. Rincian masing-masing table diuraikan pada

table dibawah ini.

1. Tabel Admin

Tabel admin merupakan table yang digunakan untuk menyimpan account

admin yaitu username dan password sebagai autentikasi untuk masuk ke

menu admin.

Tabel 3.2 Tabel Admin

Field Type

id_admin int(10)

Nama varchar(200)

Username varchar(200)

Password varchar(200)

2. Tabel Client Tabel Client digunakan untuk menyimpan data user dan melacak koordinatnya. Dimana setiap kali user melakukan login maka koordinat pada database selalu diperbaharui

Tabel 3.3 Tabel Client

Field Type

id_client int(10)

Nama varchar(200)

username varchar(200)

password varchar(200)

Universitas Sumatera Utara

Page 45: DONNY SANJAYA

32

Field Type

jenis_kelamin enum('Pria', 'Wanita')

no_hp varchar(15)

Alamat varchar(200)

Lat double

Long double

Gambar varchar(120)

id_session varchar(100)

Aktif enum('Y', 'N')

3. Tabel Track Tabel track digunakan untuk menyimpan semua data perjalanan masing-masing user.

Table 3.4 Tabel Track

Field Type

id_track int(10)

id_client int(10)

Lat double

Long double

Time datetime

session_login varchar(160)

3.2.4 Perancangan Tampilan

3.2.4.1 Halaman Login

Halaman login merupakan sebagai authentikasi data untuk mengakses halaman utama

aplikasi. Halaman ini digunakan sebagai pembatasan hak akses terhadap fitur-fitur

yang ada di aplikasi. Agar dapat masuk kedalam aplikasi, maka pengguna harus

Universitas Sumatera Utara

Page 46: DONNY SANJAYA

33

memiliki username dan password yang sudah terdaftar sebelumnya. Kemudian setelah

pengguna dapat melakukan proses login maka sistem akan mendapatkan koordinat

ponsel kemudian disimpan kedalam database. Tampilan dapat dilihat pada gambar 3.8

Gambar 3.8 Halaman login

Keterangan:

1. Label yang berisi logo aplikasi

2. Label Username.

3. Label File Tujuan.

4. Text box untuk menampilkan input username.

5. Text box untuk menampilkan input password.

6. Tombol untuk memproses input login.

7. Tombol untuk menampilkan dialog pendaftaran.

3.2.4.2 Halaman User

Halaman User adalah halaman yang digunakan sebagai antar-muka user setelah

berhasil melakukan proses login. Halaman ini juga akan menampilkan posisinya

berada berdasarkan koordinat yang diterima. Rancangan halaman user dapat dilihat

seperti pada Gambar 3.7

Mobile Tracking(1)

Username(2)

Text Box(3)

Password(4)

Text Box(5)

Login(6) daftar(7)

Universitas Sumatera Utara

Page 47: DONNY SANJAYA

34

Gambar 3.9 Halaman User

Keterangan:

1. Label untuk menampilkan text proses pelacakan koordinat ponsel.

2. Label untuk menampilkan map.

3. Label untuk menampilkan alamat latitude dan longitude.

4. Tombol untuk menampilkan form edit profile.

5. Tombol untuk menampilkan form logout.

3.2.4.3 Halaman Admin

Halaman admin adalah halaman yang digunakan sebagai antar-muka admin setelah

berhasil melakukan proses login. Pada halaman ini digunakan untuk melakukan

pelacakan posisi user dan perhitungan jarak terdekatnya. Rancangan halaman admin

dapat dilihat seperti pada Gambar 3.10

Tracking location pocessing... (1)

YYYY-mm-dd

Edit profile(4) LogOut(5)

Lat : (3)

Long :

Map(2)

Universitas Sumatera Utara

Page 48: DONNY SANJAYA

35

Gambar 3.10 Halaman Admin

Keterangan:

1. Label untuk menampilkan tujuan.

2. Text box untuk menampilkan input tujuan.

3. Tombol untuk menampilkan form add.

4. Label untuk menampilkan pilih jalur.

5. checkbox untuk menampilkan jalur yang akan dilalui.

6. Label untuk menampilkan eksport.

7. Label untuk menampilkan edit route.

8. Label untuk menampilkan mobile tracking.

9. Tombol untuk menampilkan form perhitungan jalur yang dilewati.

10. Tombol untuk menampilkan data client.

11. Tombol untuk mengulangi proses.

12. Tombol untuk melakukan refresh halaman.

13. Tombol untuk melakukan pengujian javascript.

14. Tombol untuk menampilkan halaman about.

15. Tombol untuk keluar dari halaman login.

16. Label untuk menampilkan maps.

17. Label untuk menampilkan hasil perhitungan.

18. Label untuk menampilkan jalur yang akan dilalui.

Map(16)

Tujuan(1)

Text box(2) add(3)

Pilih jalur(4)

Walking (Jalan kaki) (5)

Bicycling (Naik sepeda)

Avoid highways (Hindari jalan raya)

Avoid toll roads (Hindari jalan tol)

Eksport(6)

Edit Route(7)

Mobile Tracking(8)

Tracking Mobile(9)

Hitung Perjalanan TSP

Hitung Perjalanan A - Z

Data Client(10)

Ulangi lagi(11)

Refresh Halaman(12)

Pengujian javascript(13)

About(14)

Logout(15)

Lama perjalanan dan panjang perjalanan(17)

Jalan yang dilalui(18)

Universitas Sumatera Utara

Page 49: DONNY SANJAYA

36

3.2.4.4 Halaman Data User

Halaman data user ini merupakan rancangan yang digunakan untuk manajemen data

user yang sudah terdaftar sebagai user, form ini hanya ditampilkan pada menu admin

sebagai manajemen data user.

Gambar 3.11 Halaman Data User

Keterangan:

1. Label untuk menampilkan tujuan.

2. Text box untuk menampilkan input tujuan.

3. Tombol untuk menampilkan form add.

4. Label untuk menampilkan pilih jalur.

5. checkbox untuk menampilkan jalur yang akan dilalui.

6. Label untuk menampilkan eksport.

7. Label untuk menampilkan edit route.

8. Label untuk menampilkan mobile tracking.

9. Tombol untuk menampilkan form perhitungan jalur yang dilewati.

10. Tombol untuk menampilkan data user.

11. Tombol untuk mengulangi proses.

12. Tombol untuk melakukan refresh halaman.

Data User[16] Tujuan(1)

Text box(2) add(3)

Pilih jalur(4)

Walking (Jalan kaki) (5)

Bicycling (Naik sepeda)

Avoid highways (Hindari jalan raya)

Avoid toll roads (Hindari jalan tol)

Eksport(6)

Edit Route(7)

Mobile Tracking(8)

Tracking Mobile(9)

Hitung Perjalanan TSP

Hitung Perjalanan A - Z

Data Client(10)

Ulangi lagi(11)

Refresh Halaman(12)

Pengujian javascript(13)

About(14)

Logout(15)

Universitas Sumatera Utara

Page 50: DONNY SANJAYA

37

13. Tombol untuk melakukan pengujian javascript.

14. Tombol untuk menampilkan halaman about.

15. Tombol untuk keluar dari halaman login.

16. Label untuk menampilkan data user.

3.2.4.5 Halaman About

Halaman about berfungsi untuk menampilkan informasi tentang profil penulis. Profil

penulis meliputi biodata penulis serta data akademik. Rancangan about dapat dilihat

seperti pada Gambar 3.12.

Gambar 3.12 Halaman About

Judul Skripsi

Tentang Penulis

Fakultas

Universitas Sumatera Utara

Page 51: DONNY SANJAYA

BAB 4

IMPLEMENTASI DAN PENGUJIAN SISTEM

4.1 Implementasi Sistem

4.1.1 Implementasi Algoritma Ant Colony Optimization

Proses yang dilakukan pertama kali adalah yaitu melacak posisi koordinat

sebuah ponsel. Koordinat yang berhasil dilacak kemudian akan disimpan kedalam

database. Data dapat dilihat seperti pada Tabel 4.1.

Tabel 4.1. Koordinat Ponsel Yang Terlacak Oleh Apliaksi Mobile Tracking

ID NAMA Lat Long Alamat 1 Donny Sanjaya 3,5855251 98,6312905 Jl. Merpati 2 Ridho Satrya Akbar 3,5678042 98,6422931 Jl. Setia Budi 3 Rajab Sihotang 3,5731014 98,6535551 Jl. Mesjid 4 Chandra Kurniawan 3,5673288 98,6607754 Jl. Jamin Ginting

Jika masing-masing koordinat diatas digambarkan pada tampilan graf maka

dapat kita lihat titik yang akan dilewati dalam pencarian jarak terdekat. Waypoint

menunjukkan lokasi dari suatu tempat, dan dihitung menggunakan latitude (lintang)

dan longitude (bujur). Untuk perhitungan yang lebih tepat dari jarak antara dua tempat

yang jauh, rumus jarak lingkaran besar dapat digunakan. Rumus yang menggunakan

sifat trigonometri dari suatu koordinat termasuk sinus, cosinus, arccosinus dan

perkiraan jari-jari bumi, maka jarak dari suatu tempat dapat dihitung.

Universitas Sumatera Utara

Page 52: DONNY SANJAYA

39

Langkah-langkah untuk menghitung jarak antara dua waypoint adalah sebagai

berikut :

Mengkonversi bujur dan lintang dua waypoint dari representasi desimal ke radian

dibagi dengan 180 / π, atau 57,29578.

1. Jarak antara Jl. Merpati(1) dan Jl. Setia Budi(2)

Pengukuran lintang dan bujur untuk Jalan Merpati adalah

Lintang 3,5855251, Bujur 98,6312905

Pengukuran bujur dan lintang untuk Jalan Setia Budi adalah

Lintang 3,5678042, Bujur 98,6422931

Bagi dengan 180 / π, sehingga diperoleh

Jalan Merpati : Lintang radian = 0,062579218

Bujur radian = 1,721440765

Jalan Setia Budi : Lintang radian = 0,06226993

Bujur radian = 1,721632796

Hitung jarak dua waypoints dengan rumus

� = ����(sin(� � . sin(��� + cos(�� � . cos(��� . cos(�� − � � . � D = Acos(sin(0,062579218) . sin(0,06226993) +

cos(0,062579218) .cos(0,06226993) .

cos(1,721632796-1,721440765)) . 6371

Maka jarak = 2,318 km

2. Jarak antara Jalan Setia Budi(2) dan Jalan Mesjid(3)

Pengukuran bujur dan lintang untuk Jalan Setia Budi adalah

Lintang 3,5678042, Bujur 98,6422931

Pengukuran lintang dan bujur untuk Jalan Mesjid adalah

Lintang 3,5731014, Bujur 98,6535551

Universitas Sumatera Utara

Page 53: DONNY SANJAYA

40

Bagi dengan 180 / π, sehingga diperoleh

Jalan Setia Budi : Lintang radian = 0,06226993

Bujur radian = 1,721632796

Jalan Mesjid : Lintang radian = 0,062362384

Bujur radian = 1,721829355

Hitung jarak dua waypoints dengan rumus

� = ����(sin(� � . sin(��� + cos(� � . cos(��� . cos(�� − � � . � D = Acos(sin(0,06226993) . sin(0,062362384)+

cos(0,06226993) .cos(0,062362384) .

cos(1,721829355-1,721632796)) . 6371

Maka jarak = 1,382 km

3. Jarak antara Jalan Mesjid(3) dan Jalan Jamin Ginting(4)

Jalan Mesjid : Lintang radian = 0,062362383938

Bujur radian = 1,721829355293

Jalan Jamin Ginting : Lintang radian = 0,062261633061

Bujur radian = 1,721955373301

Maka jarak = 1,027 km

4. Jarak antara Jalan Merpati(1) dan Jalan Jamin Ginting(4)

Jalan Merpati : Lintang radian = 0,062579218408

Bujur radian = 1,721440764716

Jalan Jamin Ginting : Lintang radian = 0,062261633061

Bujur radian = 1,721955373301

Maka jarak = 3,847 km

5. Jarak antara Jalan Setia Budi (2) dan Jalan Jamin Ginting (4)

Jalan Setia Budi : Lintang radian = 0,062269930356

Bujur radian = 1,721632796312

Universitas Sumatera Utara

Page 54: DONNY SANJAYA

41

Jalan Jamin Ginting : Lintang radian = 0,062261633061

Bujur radian = 1,721955373301

Maka jarak = 2,052 km

6. Jarak antara Jalan Merpati (1) dan Jalan Mesjid (3)

Jalan Merpati : Lintang radian = 0,062579218408

Bujur radian = 1,721440764716

Jalan Mesjid : Lintang radian = 0,062362383938

Bujur radian = 1,721829355293

Maka jarak = 2,830 km

Tampilan graf dapat dilihat pada Gambar 4.1.

Gambar 4.1 Graf Dengan Empat Vertex

Dari graf diatas, jarak antar kota dapat ditampilkan dimasukan kedalam sebuah tabel.

Kemudian akan dicari route terpendeknya.

Tabel 4.2 Jarak Antar Kota

Kota ke- 1 2 3 4

1 0 2,318 2,830 3,847

2 2,318 0 1,381 2,052

3 2,830 1,381 0 1,027

4 3,847 2,052 1,027 0

1 2

4 3

2,318 km

2,830 km

3,847 km

2,052 km

1,027 km

1,381 km

Universitas Sumatera Utara

Page 55: DONNY SANJAYA

42

Berikut ini langkah-langkah perhitungan route terpendek menggunakan algoritma

semut.

Parameter–parameter yang digunakan adalah:

Alfa (α) = 1.00

Beta (β) = 1.00

Rho (ρ) = 0.50

τij awal = 0.01

Maksimum siklus (NCmax) = 1

Tetapan siklus semut (Q) = 1

Banyak semut (m) = 3

Dari jarak kota yang telah diketahui dapat dihitung visibilitas antar kota (ηij) = 1/dij

Tabel 4.3 Visibilitas Antar Kota

Kota ke- 1 2 3 4

1 0 0,431406 0,353357 0,259943

2 0,431406 0 0,724113 0,487329

3 0,353357 0,724113 0 0,97371

4 0,259943 0,487329 0,97371 0

Intensitas feromon antar titik (τij) akan diperlihatkan pada table 4.4 dibawah ini :

Tabel 4.4 Feromon Antar Titik

Kota ke- 1 2 3 4

1 0 0,01 0,01 0,01

2 0,01 0 0,01 0,01

3 0,01 0,01 0 0,01

4 0,01 0,01 0,01 0

Nilai dari parameter visibilitas (η) dan intensitas feromon (τ) ini nantinya akan

digunakan dalam persamaan probabilitas dan merupakan parameter yang

mempengaruhi semut dalam pemilihan titik berikutnya ( aturan transisi).

Universitas Sumatera Utara

Page 56: DONNY SANJAYA

43

Mencari titik tujuan berikutnya dengan perhitungan probabilitas :

Siklus ke-1

Semut ke – 1:

- Daftar semut 1 ke tujuan

- Probabilitas dari kota 1 ke setiap kota berikutnya dapat dihitung dengan persamaan

��(�, �� = � ��(�, ����. �η(�, ���!∑ ��(�, #���. �η(�, #��!$%&'((� 0

Σ[τ(r,u)]α.[η(r,u)]β = (0.01*0) + (0.01*0,431406) + (0.01*0,353357) + (0.01*0,259943)

= 0,01045

dengan demikian dapat dihitung probabilitas dari kota 1 menuju setiap kota =

Kota 1 = 0.00

Kota 2 = (0.01)1.00 . (0,431406)1.00 / 0,01045 = 0,412829

Kota 3 = (0.01)1.00 . (0,353357)1.00/ 0,01045 = 0,338141

Kota 4 = (0.01)1.00 . (0,259943)1.00/ 0,01045 = 0.248749

- Probabilitas Komulatif = 0,000 0,413 0,751 1,000

- Bilangan Random = 0.679

- Memeriksa qk-1 < r ≤ qk → Kota yang dipilih adalah 3

- Daftar semut = 1 3

- Melakukan pembaruan lokal feromon menggunakan persamaan (3):

τ (t,v) ← (1−ρ ).τ (t,v)+Δτ (t,v)

Δτ ( t,v )= *++.,

Δτ (1,3 )= �,-./ . 0 =

,.�=0,088

τ (1,3) ← (1−0,50 ).(0,01)+(0,088)

τ (1,3) ← 0,093

Menghitung probabilitas dari titik 3 ke titik berikutnya:

��(�, �� = � ��(�, ����. �η(�, ���!∑ ��(�, #���. �η(�, #��!$%&'((� 0

Σ[τ(r,u)]α.[η(r,u)]β = (0.01*0,353357) + (0.01*0,724113) + (0.01*0,97371)

= 0,0205118

Universitas Sumatera Utara

Page 57: DONNY SANJAYA

44

Kota 1 = (0.01)1.00 . (0, 353357)1.00 / 0,0205118 = 0,172270

Kota 2 = (0.01)1.00 . (0,724113)1.00 / 0,0205118 = 0,353023

Kota 3 = 0

Kota 4 = (0.01)1.00 . (0, 97371)1.00/ 0,0205118 = 0,474707

- Probabilitas Komulatif = 0,172270 0,525292758 0,525292758 1,000

- Bilangan Random = 0.479

- Memeriksa qk-1 < r ≤ qk → Kota yang dipilih adalah 2

- Daftar semut = 1 3 2

- Melakukan pembaruan lokal feromon menggunakan persamaan (3):

τ (t,v) ← (1−ρ ).τ (t,v)+Δτ (t,v)

Δτ ( t,v )= *++.,

Δτ (3,2 )= ,.- . 0 =

1,1�0=0,1810

τ (3,2) ← (1−0,50 ).(0,01)+(0,1810)

τ (3,2) ← 0,186

Titik tujuan selanjutnya hanya ke titik 4

- Daftar semut = 1 3 2 4

- Melakukan pembaruan lokal feromon menggunakan persamaan (3):

τ (t,v) ← (1−ρ ).τ (t,v)+Δτ (t,v)

Δτ ( t,v )= *++.,

Δτ (2,4 )= �,/1� . 0 =

-,�/-=0,1218

τ (2,4) ← (1−0,50 ).(0,01)+( 0,1218)

τ (2,4) ← 0,1268

Semut ke – 2:

- Daftar semut 1 ke tujuan

- Probabilitas dari kota 1 ke setiap kota berikutnya dapat dihitung dengan persamaan

��(�, �� = � ��(�, ����. �η(�, ���!∑ ��(�, #���. �η(�, #��!$%&'((� 0

Universitas Sumatera Utara

Page 58: DONNY SANJAYA

45

Σ[τ(r,u)]α.[η(r,u)]β = (0.01*0) + (0.01*0,431406) + (0.01*0,353357) + (0.01*0,259943)

= 0,01045

dengan demikian dapat dihitung probabilitas dari kota 1 menuju setiap kota =

Kota 1 = 0.00

Kota 2 = 0,412829

Kota 3 = 0,338141

Kota 4 = 0.248749

- Probabilitas Komulatif = 0,000 0,413 0,751 1,000

- Bilangan Random = 0.497

- Memeriksa qk-1 < r ≤ qk → Kota yang dipilih adalah 2

- Daftar semut = 1 2

- Melakukan pembaruan lokal feromon menggunakan persamaan (3):

τ (t,v) ← (1−ρ ).τ (t,v)+Δτ (t,v)

Δτ ( t,v )= *++.,

Δτ (1,2 )= �,. - . 0 =

2,�3�=0,1078

τ (1,2) ← (1−0,50 ).(0,01)+(0,1078)

τ (1,2) ← 0,1128

Menghitung probabilitas dari titik 2 ke titik berikutnya:

��(�, �� = � ��(�, ����. �η(�, ���!∑ ��(�, #���. �η(�, #��!$%&'((� 0

Σ[τ(r,u)]α.[η(r,u)]β = (0.01*0,431406) + (0.01*0) + (0.01*0,724113) + (0.01*0,487329)

= 0,01643

Kota 1 = (0.01)1.00 . (0,431406)1.00 / 0,01643 = 0,0087

Kota 2 = 0.00

Kota 3 = (0.01)1.00 . (0,724113)1.00 / 0,01643 = 0,5926

Kota 4 = (0.01)1.00 . (0,487329)1.00 / 0,01643 = 0.3988

- Probabilitas Komulatif = 0,263 0,263 0,703 1,000

- Bilangan Random = 0.598

- Memeriksa qk-1 < r ≤ qk → Kota yang dipilih adalah 3

- Daftar semut = 1 2 3

- Melakukan pembaruan lokal feromon menggunakan persamaan (3):

τ (t,v) ← (1−ρ ).τ (t,v)+Δτ (t,v)

Universitas Sumatera Utara

Page 59: DONNY SANJAYA

46

Δτ ( t,v )= *++.,

Δτ (2,3 )= , .- . 0 =

0,11�0=0,21966

τ (2,3) ← (1−0,50 ).(0,01)+(0,21966)

τ (2,3) ← 0,2247

Titik tujuan selanjutnya hanya ke titik 4

- Daftar semut = 1 2 3 4

- Melakukan pembaruan lokal feromon menggunakan persamaan (3):

τ (t,v) ← (1−ρ ).τ (t,v)+Δτ (t,v)

Δτ ( t,v )= *++.,

Δτ (3,4 )= ,/�3 . 0 =

0, /-=0,2434

τ (3,4) ← (1−0,50 ).(0,01)+( 0,2434)

τ (3,4) ← 0,2484

Semut ke – 3:

- Daftar semut 1 ke tujuan

- Probabilitas dari kota 1 ke setiap kota berikutnya dapat dihitung dengan persamaan

��(�, �� = � ��(�, ����. �η(�, ���!∑ ��(�, #���. �η(�, #��!$%&'((� 0

Σ[τ(r,u)]α.[η(r,u)]β = (0.01*0) + (0.01*0,431406) + (0.01*0,353357) + (0.01*0,259943)

= 0,01045

dengan demikian dapat dihitung probabilitas dari kota 1 menuju setiap kota =

Kota 1 = 0.00

Kota 2 = 0,412829

Kota 3 = 0,338141

Kota 4 = 0.248749

- Probabilitas Komulatif = 0,000 0,413 0,751 1,000

- Bilangan Random = 0.721

- Memeriksa qk-1 < r ≤ qk → Kota yang dipilih adalah 3

- Daftar semut = 1 3

- Melakukan pembaruan lokal feromon menggunakan persamaan (3):

τ (t,v) ← (1−ρ ).τ (t,v)+Δτ (t,v)

Universitas Sumatera Utara

Page 60: DONNY SANJAYA

47

Δτ ( t,v )= *++.,

Δτ (1,3 )= �,-./ . 0 =

,.�=0,088

τ (1,3) ← (1−0,50 ).(0,01)+(0,088)

τ (1,3) ← 0,093

Menghitung probabilitas dari titik 3 ke titik berikutnya:

��(�, �� = � ��(�, ����. �η(�, ���!∑ ��(�, #���. �η(�, #��!$%&'((� 0

Σ[τ(r,u)]α.[η(r,u)]β = (0.01*0,353357) + (0.01*0,724113) + (0.01*0,97371)

= 0,0205118

Kota 1 = 0,172270

Kota 2 = 0,353023

Kota 3 = 0

Kota 4 = 0,474707

- Probabilitas Komulatif = 0,172270 0,525292758 0,525292758 1,000

- Bilangan Random = 0.519

- Memeriksa qk-1 < r ≤ qk → Kota yang dipilih adalah 2

- Daftar semut = 1 3 2

- Melakukan pembaruan lokal feromon menggunakan persamaan (3):

τ (t,v) ← (1−ρ ).τ (t,v)+Δτ (t,v)

Δτ ( t,v )= *++.,

Δτ (3,2 )= ,.- . 0 =

1,1�0=0,1810

τ (3,2) ← (1−0,50 ).(0,01)+(0,1810)

τ (3,2) ← 0,186

Titik tujuan selanjutnya hanya ke titik 4

- Daftar semut = 1 3 2 4

- Melakukan pembaruan lokal feromon menggunakan persamaan (3):

τ (t,v) ← (1−ρ ).τ (t,v)+Δτ (t,v)

Δτ ( t,v )= *++.,

Universitas Sumatera Utara

Page 61: DONNY SANJAYA

48

Δτ (2,4 )= �,/1� . 0 =

-,�/-=0,1218

τ (2,4) ← (1−0,50 ).(0,01)+( 0,1218)

τ (2,4) ← 0,1268

Hasil rute semut pada siklus 1 adalah rute:

Hasil pencarian dari siklus pertama seperti yang terlihat pada tabel 4.5 berikut:

Tabel 4.5 Hasil Siklus I Algoritma Semut

Semut Route Panjang

Semut 1 1 3 2 4 6,263 Km

Semut 2 1 2 3 4 4,726 Km

Semut 3 1 3 2 4 6,263 Km

Melakukan pembaruan global feromon menggunakan persamaan (4)

τ (t,v)←(1−α ).τ (t,v) +α.Δτ (t,v)

Δτ ( t,v )= 4 5678 9:;< (=, >� ∈ ��#=@ =@�A<:;0

Melakukan pembaruan global untuk rute terbaik pada siklus I:

Rute terbaik adalah 1 2 3 4 dengan panjang 567 = 4,726 FG, sehingga diperoleh

Δτ ( t,v )= 0,3�H = 0,2116

τ (t,v)←(1−α ).τ (t,v) +α.Δτ (t,v)

τ (1,2)←(1−0,1 ).( 0,1128) +(0,1).( 0,2116)

τ (1,2)←0,12268

τ (2,3)←(1−0,1 ).( 0,2247) +(0,1).( 0,2116)

τ (2,3)← 0,22339

τ (3,4)←(1−0,1 ).( 0,248) +(0,1).( 0,2116)

τ (3,4)← 0,24436

Melakukan pembaruan global untuk rute lainnya:

τ (t,v)←(1−α ).τ (t,v) +α.Δτ (t,v)

Δτ (t,v) = 0

τ (1,3)←(1− 0,1) (0,093) +(0,1).(0)

τ (1,3)←0,0837

Universitas Sumatera Utara

Page 62: DONNY SANJAYA

49

τ (2,4)←(1− 0,1) (0,126) +(0,1).(0)

τ (2,4)←0,1143

Intensitas feromon pada setiap titik setelah diperbaharui (τij hasil dari siklus I) akan

ditunjukkan oleh tabel 4.6 di bawah ini.

Tabel 4.6 Feromon Antar Titik Pada Graf

1 2 3 4 1 - 0,12268 0,0837 0 2 0,12268 - 0,22339 0,1143 3 0,0837 0,22339 - 0,24436 4 0 0,1143 0,24436 -

Dari tabel diatas terlihat bahwa terjadi perubahan nilai feromon. Untuk titik

yang sering dikunjungi oleh semut terjadi penambahan intensitas feromon, sedangkan

pada titik yang jarang dikunjungi semut terjadi pengurangan nilai intensitas feromon

(evaporasi). Nilai intensitas feromon yang baru inilah yang akan digunakan untuk

melakukan perhitungan pada siklus berikutnya.

Untuk melakukan perhitungan perjalanan, kemudian melakukan pencarian

jalur terdekat, penulis melakukannya dengan cara mengimplementasikan kode

program yang dapat dilihat seperti pada Tabel 4.7.

Tabel 4.7. Kode Program Untuk Penentuan Route Terpendek

Baris Kode

Kode Program

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

function AntColony(mode) { var alfa = 1.0; var beta = 1.0; var rho = 0.5; var asymptoteFactor = 0.01; var pher = new Array(); var nextPher = new Array(); var prob = new Array(); var numAnts = 20; var numWaves = 20; for (var i = 0; i < numActive; ++i) { pher[i] = new Array(); nextPher[i] = new Array(); }

Universitas Sumatera Utara

Page 63: DONNY SANJAYA

50

17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

for (var i = 0; i < numActive; ++i) { for (var j = 0; j < numActive; ++j) { pher[i][j] = 1; nextPher[i][j] = 0.0; } } var lastNode = 0; var startNode = 0; var numSteps = numActive - 1; var numValidDests = numActive; if (mode == 1) { lastNode = numActive - 1; numSteps = numActive - 2; numValidDests = numActive - 1; } for (var wave = 0; wave < numWaves; ++wave) { for (var ant = 0; ant < numAnts; ++ant) { var curr = startNode; var currDist = 0; for (var i = 0; i < numActive; ++i) { visited[i] = false; } currPath[0] = curr; for (var step = 0; step < numSteps; ++step) { visited[curr] = true; var cumProb = 0.0; for (var next = 1; next < numValidDests; ++next) { if (!visited[next]) { prob[next] = Math.pow(pher[curr][next], alfa) * Math.pow(dur[curr][next], 0.0 - beta); cumProb += prob[next]; } } var guess = Math.random() * cumProb; var nextI = -1; for (var next = 1; next < numValidDests; ++next) { if (!visited[next]) { nextI = next; guess -= prob[next]; if (guess < 0) { nextI = next; break; } } } currDist += dur[curr][nextI]; currPath[step+1] = nextI; curr = nextI; } currPath[numSteps+1] = lastNode; currDist += dur[curr][lastNode]; // k2-rewire:

Universitas Sumatera Utara

Page 64: DONNY SANJAYA

51

77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136

var lastStep = numActive; if (mode == 1) { lastStep = numActive - 1; } var changed = true; var i = 0; while (changed) { changed = false; for (; i < lastStep - 2 && !changed; ++i) { var cost = dur[currPath[i+1]][currPath[i+2]]; var revCost = dur[currPath[i+2]][currPath[i+1]]; var iCost = dur[currPath[i]][currPath[i+1]]; var tmp, nowCost, newCost; for (var j = i+2; j < lastStep && !changed; ++j) { nowCost = cost + iCost + dur[currPath[j]][currPath[j+1]]; newCost = revCost + dur[currPath[i]][currPath[j]] + dur[currPath[i+1]][currPath[j+1]]; if (nowCost > newCost) { currDist += newCost - nowCost; // Reverse the detached road segment. for (var k = 0; k < Math.floor((j-i)/2); ++k) { tmp = currPath[i+1+k]; currPath[i+1+k] = currPath[j-k]; currPath[j-k] = tmp; } changed = true; --i; } cost += dur[currPath[j]][currPath[j+1]]; revCost += dur[currPath[j+1]][currPath[j]]; } } } if (currDist < bestTrip) { bestPath = currPath; bestTrip = currDist; } for (var i = 0; i <= numSteps; ++i) { nextPher[currPath[i]][currPath[i+1]] += (bestTrip - asymptoteFactor * bestTrip) / (numAnts * (currDist - asymptoteFactor * bestTrip)); } } for (var i = 0; i < numActive; ++i) {

Universitas Sumatera Utara

Page 65: DONNY SANJAYA

52

137 138 139 140 141 142 143 144

for (var j = 0; j < numActive; ++j) { pher[i][j] = pher[i][j] * (1.0 - rho) + rho * nextPher[i][j]; nextPher[i][j] = 0.0; } } } }

Keterangan:

1. Baris 1 s/d 144: Blok Algoritma Ant Colony Optimization dalam penentuan

route terpendek .

Sebagai contoh, beberapa koordinat ponsel yang digunakan dapat dilihat pada

Gambar 4.1, kemudian dihitung menggunakan algortima ACO untuk menhgasilkan

rute perjalanan tercepat, output yang dihasilkan dapat dilihat seperti pada Gambar 4.2.

Gambar 4.2 Posisi Koordinat Dalam Google Maps

Universitas Sumatera Utara

Page 66: DONNY SANJAYA

53

Gambar 4.3 Route Perjalanan

Pada tampilan Export merupakan hasil perhitungan jarak terdekat antar kota

sesuai urutan pada menu export to csv, merupakan durasi perjalanan masing-masing

kota yang ditampilkan dalam matrix. Tampilan Export dapat dilihat pada Gambar 4.4.

Gambar 4.4 Export

4.2. Pengujian Sistem

Perangkat lunak yang dirancang memerlukan pengujian data dengan melakukan

pengujian dari sisi user untuk mendapatkan koordinat ponsel dan menentukan jarak

Universitas Sumatera Utara

Page 67: DONNY SANJAYA

54

terdekatnya. Hal tersebut betujuan untuk mengetahui bagaimana kinerja aplikasi

secara garis besar sebelum aplikasi dijalankan.

4.2.1 Pengujian Aplikasi User

Untuk melakukan pengujian aplikasi yang dirancang, saat aplikasi ini pertama kali

dijalankan, akan muncul sebuah form login. Form login digunakan sebagai autentikasi

untuk masuk ke menu utama user, tampilan dapat dilihat pada Gambar 4.5.

Gambar 4.5 Login

Jika belum terdaftar di aplikasi, user dapat mendaftarkan ke dengan menekan tombol

daftar, kemudian user harus mengisi data pada form pendaftaran seperti Gambar 4.6.

Gambar 4.6 Pendaftaran

Universitas Sumatera Utara

Page 68: DONNY SANJAYA

55

Setelah data sudah terisi dengan benar maka, data akan diverifikasi oleh admin agar

user dapat melakukan login, tampilan setelah melakukan pendaftaran dilihat pada

gambar 4.7.

Gambar 4.7 Pemberitahuan Aktifasi

Setelah mengisikan username dan password pada form login, aplikasi akan

melakukan authentikasi data kemudian akan diarahkan pada tampilan utama, dapat

dilihat pada gambar 4.8

Gambar 4.8 Halaman User

Universitas Sumatera Utara

Page 69: DONNY SANJAYA

56

Menu yang tersedia pada aplikasi user hanya edit profile dan logout. Untuk

melakukan perubahan data dapat dilihat pada gambar 4.9.

Gambar 4.9. Halaman Perubahan Data User

4.2.2 Pengujian Aplikasi Admin

Untuk masuk ke tampilan utama admin terlebih dahulu akan melakukan pengisian

username dan password sebagai autentikasi untuk masuk ke admin, tampilan login

admin dapat dilihat pada Gambar 4.10.

Gambar 4.10 Login Admin

Universitas Sumatera Utara

Page 70: DONNY SANJAYA

57

Apabila proses login admin berhasil maka, akan diarahkan pada bagian menu utama

dmin. Tampilan dapat dilihat pada gambar 4.11.

Gambar 4.11 Halaman Admin

Untuk melacak posisi user, pilih tombol lacak user maka peta akan menampilkan

posisi user berdasarkan koordinat yang sudah tersimpan didatabase sebelumnya.

Tampilan dapat dilihat pada gambar 4.12.

Gambar 4.12 Hasil Tracking Koordinat User

Universitas Sumatera Utara

Page 71: DONNY SANJAYA

58

Setelah posisi user sudah dilacak, kemudian dapat dilakukan perhitungan untuk

penentuan jarak terdekat. untuk melihat hasil perhitungan perjalanan dapat dilihat

pada gambar 4.13

Gambar 4.13 Hasil Perhitungan

Route awal untuk melalui semua titik yaitu 1->2->3->4->5->6->7->8. Hasil dapat

dilihat pada Gambar 4.14.

Gambar 4.14 Urutan Titik Sebelum Perhitungan

Universitas Sumatera Utara

Page 72: DONNY SANJAYA

59

Untuk melihat route tercepat yang harus dilalui setelah perhitungan dengan

menggunakan algoritma ACO untuk yaitu 1->4->6->7->2->3->5->8. Hasil dapat

dilihat pada Gambar 4.15.

Gambar 4.15 Urutan Titik Setelah Perhitungan.

Menekan tombol durasi dalam matrix untuk memulai melihat hasil perhitungan yang

disajikan dalam sebuah matrix. tampilan dapat dilihat seperti pada Gambar 4.16.

Gambar 4.16 Hasil Perhitungan Dalam Matrix.

Universitas Sumatera Utara

Page 73: DONNY SANJAYA

60

4.2.3 Pengujian Sistem Dengan 3 Buah Koordinat

Pengujian dengan 3 buah koordinat adalah pengujian dalam melakukan proses

penentuan jarak antar pengguna sejumlah 3 tempat dengan lokasi titik dapat

ditentukan melalui tombol. Pengujian pemasukan data dengan 3 tempat dapat dilihat

pada Gambar 4.17.

Gambar 4.17 Pengujian 3 buah Koordinat

4.2.4 Fungsi Fitur One Way Trip Setelah titik lokasi yang ingin dituju telah diinputkan pada layar maka user dapat

memilih fitur pencarian. Fitur one way trip akan mencari rute terpendek dimana lokasi

yang pertama diinputkan adalah lokasi awal dan lokasi terakhir menjadi lokasi tujuan.

Ujicoba dilakukan dengan 3 node. Hasilnya sebagai berikut :

Universitas Sumatera Utara

Page 74: DONNY SANJAYA

61

Gambar 4.18 Fitur Oneway Trip dan Directions

Selain itu fitur ini bisa ditempuh dengan jalan (by walking). Hasilnya sebagai berikut:

Gambar 4.19 Fitur Oneway Trip by Walking dan Directions

Dari Gambar diatas dapat dilihat jarak tempuh total dan rute yang ditempuh dari fitur

one way trip by walking lebih kecil dibandingkan fitur one way trip by driving hal ini

disebabkan berbedanya akses jalan yang dapat ditempuh oleh keduanya.

Universitas Sumatera Utara

Page 75: DONNY SANJAYA

BAB 5

KESIMPULAN DAN SARAN

5.1 Kesimpulan

Dari penelitian tentang penentuan jalur terpendek menggunakan algoritma Ant Colony

Optimization, dapat diambil kesimpulan sebagai berikut:

1. Aplikasi mobile tracking dalam penentuan jarak terdekat dengan dukungan

Sistem Informasi Geografis ini dapat menunjukkan rute terpendek antara

ponsel.

2. Kecepatan menampilkan suatu rute pada map tergantung pada jumlah kota

yang diinputkan, provider dan kestabilan koneksi internet.

5.2 Saran

Adapun saran yang dapat penulis berikan untuk mengembangkan penelitian ini adalah

sebagai berikut:

Universitas Sumatera Utara

Page 76: DONNY SANJAYA

63

1. Diharapkan pengembangan pada aplikasi ini supaya memiliki fitur yang lebih

banyak dan lebih menarik. Contohnya fitur untuk melacak truk pengiriman

barang, melacak sebuah lokasi toko, restoran dan tempat-tempat lainya.

2. Diharapkan pengembangan pada aplikasi ini menggunakan platform yang

berbeda (android, iOS, dll) untuk melacak koordinat ponsel.

Universitas Sumatera Utara

Page 77: DONNY SANJAYA

DAFTAR PUSTAKA

Sumber Dari Buku

[1] Abdusakir, Azizah,N.N. & Novandika, F.F. 2009. Teori graf. Malang.UIN-Malang Press.

[2] Basuki,A.P, 2011. Membangun Web Berbasis PHP dengan Framework

Codeigniter, Lokomedia:Yogyakarta. [3] Dorigo, M. & Gambardella, L.M .1997. Ant Colony for the Travelling Salesman

Problem. Cambridge. Massachussets. London. England . [4] Dorigo, M. & Stutzle,T. 2004. Ant Colony Optimization. The MIT Press,

Massachusetts. [5] Dorigo, M. 1996. The Ant Colony Optimization Metaheuristic: Algorithms,

Applications, and Advances. Université Libre de Bruxelles. [6] Dorigo, M. 1996. Ant Colony System: A Cooperative Learning Approach to the

Traveling Salesman Problem. Université Libre de Bruxelles [7] Munir, Rinaldi. 2005. Matematika Diskrit. Edisi ketiga. Bandung: Informatika. [8] Sirenden,B.H. & Dachi, E.L. 2012. Buat Sendiri Aplikasi Petamu Menggunakan

Codeigniter dan Google Maps API.Andi:Yogyakarta. [9] Siswanto. 2005. Pengantar Sistem Informasi Geografik.UPN Press:Surabaya. [10] Sklar. J,R. 2003. Interference Mitigation Approaches for the Global Positioning

System. Lincoln Laboratory Journal Volume 14. 167-180. [11] Solnon, Christine. 2010. Ant Colony Optimization and Constraint Programming.

ISBN :987-1-84821-130-8. England :Wiley. [12] Wardhana. 2010. Menjadi master PHP dengan Framework Codeigniter. Elex

Media Komputindo:Jakarta.

Sumber Dari Jurnal Online

[13] Google Developers. Getting Started - Google Maps JavaScript API v3 (online).

https://developers.google.com/maps/documentation/javascript/tutorial

(5 Mei 2013).

[14] CodeIgniter User Guide. (online). http://www.codeigniter.com (5 Mei 2013).

Universitas Sumatera Utara

Page 78: DONNY SANJAYA

LISTING PROGRAM

1. Halaman Admin

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" itemscope itemtype="http://schema.org/Product"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <meta itemprop="name" content="OptiMap"> <meta itemprop="description" content="Fastest roundtrip solver with ACO"> <title>SANJAYA - Ant Colony Optimazion for Google Maps API</title> <link rel="stylesheet" href="<?php echo base_url().'media/style.css'; ?>" type="text/css" media="screen"> <link rel="stylesheet" href="<?php echo base_url().'media/print.css'; ?>" type="text/css" media="print"> <link type="text/css" href="<?php echo base_url().'media/jquery-ui-1.8.16.custom.css'; ?>" rel="stylesheet" /> <script type="text/javascript" src="<?php echo base_url().'media/jquery.min.js'; ?>"></script> <script type="text/javascript" src="<?php echo base_url().'media/jquery-ui.min.js'; ?>"></script> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript" src="<?php echo base_url().'media/BpTspSolver.js'; ?>"></script> <script type="text/javascript" src="<?php echo base_url().'media/tsp.js'; ?>"></script> <script type="text/javascript" src="<?php echo base_url().'media/directions-export.js'; ?>"></script> <script type="text/javascript"> </script> <script type="text/javascript"> jQuery.noConflict(); function onBodyLoad() { google.load("maps", "3", {callback: init, other_params:"sensor=false"}); } function loadAtStart(lat, lng, zoom) { var center = new google.maps.LatLng(lat, lng); initMap(center, zoom, document.getElementById("map")); directionsPanel = document.getElementById("my_textual_div"); tsp = new BpTspSolver(gebMap, directionsPanel); tsp.setDirectionUnits("m"); <?php foreach ($mobile->result() as $row){?>

Universitas Sumatera Utara

Page 79: DONNY SANJAYA

tsp.addWaypoint(new google.maps.LatLng(<?php echo "$row->lat"; ?>, <?php echo "$row->long"; ?>)); <?php }?> google.maps.event.addListener(tsp.getGDirectionsService(), "error", function() { alert("Request failed: " + reasons[tsp.getGDirectionsService().getStatus().code]); }); } function init() { if (google.loader.ClientLocation != null) { latLng = new google.maps.LatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude); loadAtStart(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude, 8); } else { loadAtStart(3.5855598,98.67395720000002, 14); } } function toggle(divId) { var divObj = document.getElementById(divId); if (divObj.innerHTML == "") { divObj.innerHTML = document.getElementById(divId + "_hidden").innerHTML; document.getElementById(divId + "_hidden").innerHTML = ""; } else { document.getElementById(divId + "_hidden").innerHTML = divObj.innerHTML; divObj.innerHTML = ""; } } jQuery(function() { jQuery( "#accordion" ).accordion({ collapsible: true, autoHeight: false, clearStyle: true }); jQuery("input:button").button(); jQuery("#dialogProgress" ).dialog({ height: 140, modal: true, autoOpen: false }); jQuery("#progressBar").progressbar({ value: 0 }); jQuery("#dialogTomTom" ).dialog({ height: 480, width: 640, modal: true, autoOpen: false }); jQuery("#dialogGarmin" ).dialog({ height: 480, width: 640,

Universitas Sumatera Utara

Page 80: DONNY SANJAYA

modal: true, autoOpen: false }); }); (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })(); </script> </head> <body onLoad="onBodyLoad()"> <h2>Ant Colony Optimization - Untuk Menentukan Jalur Terdekat</h2> <table class='mainTable'> <tr> <td class='left' style='vertical-align: top'> <div id="leftPanel"> <div id="accordion" style='width: 300pt'> <h3><a href="#" class='accHeader'>Tujuan</a></h3> <div> <form name="address" onSubmit="clickedAddAddress(); return false;"> Tambah alamat tujuan : <table> <tr> <td><input name="addressStr" type="text"></td> <td><input type="button" value="Add!" onClick="clickedAddAddress()"></td> </tr> </table> </form> Atau <a href="#" onClick="toggle('bulkLoader'); document.listOfLocations.inputList.focus(); document.listOfLocations.inputList.select(); return false;"> Berapa Alamat or (lat, lng)</a>. <div id="bulkLoader"></div> </div> <h3><a href="#" class='accHeader'>Pilihan Jalur</a></h3> <div> <form name="travelOpts"> <input id="walking" type="checkbox"/> Walking (Jalan kaki)<br> <input id="bicycling" type="checkbox"/> Bicycling (Naik sepeda)<br> <input id="avoidHighways" type="checkbox"/> Avoid highways (Hindari jalan raya)<br> <input id="avoidTolls" type="checkbox"/> Avoid toll roads (Hindari jalan tol) </form> </div>

Universitas Sumatera Utara

Page 81: DONNY SANJAYA

<h3><a href="#" class='accHeader'>Export</a></h3> <div> <div id="exportGoogle"></div> <div id="exportDataButton"></div> <div id="exportData"></div> <div id="exportLabelButton"></div> <div id="exportLabelData"></div> <div id="exportAddrButton"></div> <div id="exportAddrData"></div> <div id="exportOrderButton"></div> <div id="exportOrderData"></div> <div id="garmin"></div> <div id="tomtom"></div> <div id="durations" class="pathdata"></div> <div id="durationsData"></div> </div> <h3><a href="#" class='accHeader'>Edit Route</a></h3> <div> <div id="routeDrag"></div> <div id="reverseRoute"></div> </div> <h3><a href="#" class='accHeader'>Mobile Tracking</a></h3> <div> <input id='button3' class="calcButton" type='button' value='Lacak User' onClick='TrackMobile()'> <input id="button1" class="calcButton" type="button" value="Hitung Perjalanan TSP" onClick="directions(0, document.forms['travelOpts'].walking.checked, document.forms['travelOpts'].bicycling.checked, document.forms['travelOpts'].avoidHighways.checked, document.forms['travelOpts'].avoidTolls.checked)"> <input id="button2" class="calcButton" type="button" value="Hitung Perjalanan dari A - Z" onClick="directions(1, document.forms['travelOpts'].walking.checked, document.forms['travelOpts'].bicycling.checked, document.forms['travelOpts'].avoidHighways.checked, document.forms['travelOpts'].avoidTolls.checked)"> </div> </div> <input id='button3' class="calcButton" type='button' value='Data Clinet' onClick="popup('<?php echo base_url() ?>adminweb/data', 'Win1', 1500, 600); return false"> <input id='button3' class="calcButton" type='button' value='Ulangi Lagi' onClick='startOver()'> <input id='button3' class="calcButton" type='button' value='Refresh Halaman' onClick='RefreshPage()'> <input id='button3' class="calcButton" type='button' value='Pengujian Javascript' onClick='testJS()'> <input id='button3' class="calcButton" type='button' value='About' onClick="popup('http://www.sanjayamediatama.com/templates/default/img/index.html', 'Win1', 600, 600); return false"> <input id='button3' class="calcButton" type='button' value='Logout' onclick="window.location='<?php echo base_url() ?>adminweb/logout';"> </td> <td class='right' style='vertical-align: top'> <?php echo ! empty($kanan) ? $this->load->view($kanan) : ''; ?> </td> </tr>

Universitas Sumatera Utara

Page 82: DONNY SANJAYA

</table> <!-- Hidden stuff --> <div id="bulkLoader_hidden" style="visibility: hidden;"> <form name="listOfLocations" onSubmit="clickedAddList(); return false;"> <textarea name="inputList" rows="10" cols="70">Isikan tujuan perbarisnya</textarea><br> <input type="button" value="Tambahkan daftar Tujuan" onClick="clickedAddList()"> </form></div> <div id="exportData_hidden" style="visibility: hidden;"></div> <div id="exportLabelData_hidden" style="visibility: hidden;"></div> <div id="exportAddrData_hidden" style="visibility: hidden;"></div> <div id="exportOrderData_hidden" style="visibility: hidden;"></div> <div id="durationsData_hidden" style="visibility: hidden;"></div> <div id="dialogProgress" title="Hitung perjalanan..."> <div id="progressBar"></div> </div> <div id="dialogTomTom" title="Export to TomTom"> <iframe name='tomTomIFrame' style='width: 580px; height: 400px'></iframe> </div> <div id="dialogGarmin" title="Export to Garmin"> <iframe name='garminIFrame' style='width: 580px; height: 400px'></iframe> </div> </body> </html>

2. Admin Controller <?php class Adminweb extends CI_Controller { function __construct(){ parent::__construct(); $this->load->model('M_mobile', '', TRUE); } function index(){ $this->load->view('loginadmin'); } function aco(){ $this->auth->restrict_admin(); $data['mobile'] = $this->M_mobile->all_track(); $data['kanan'] = "map"; $this->load->view('adminweb',$data); } function data(){ $data['mobile'] = $this->M_mobile->all_track();

Universitas Sumatera Utara

Page 83: DONNY SANJAYA

$data['query'] = $this->M_mobile->data_client(); $data['kanan'] = "data"; $this->load->view('adminweb',$data); } /** * Pindah ke halaman update */ function edit($id_client) { $data['mobile'] = $this->M_mobile->all_track(); $client = $this->M_mobile->get_client_by_id($id_client)->row(); $data['default']['id_client'] = $client->id_client; $data['default']['nama'] = $client->nama; $data['default']['username'] = $client->username; $data['default']['password'] = $client->password; $data['default']['jenis_kelamin'] = $client->jenis_kelamin; $data['default']['no_hp'] = $client->no_hp; $data['default']['alamat'] = $client->alamat; $data['default']['aktif'] = $client->aktif; $data['default']['lat'] = $client->lat; $data['default']['long'] = $client->long; $data['kanan'] = "editclient"; $this->load->view('adminweb',$data); } function proses_simpan(){ $id_client = $this->input->post('id_client'); $password = $this->input->post('password'); if (empty($password)){ $profile = array( 'username' => $this->input->post('username'), 'nama' => $this->input->post('nama'), 'jenis_kelamin' => $this->input->post('jenis_kelamin'), 'no_hp' => $this->input->post('no_hp'), 'aktif' => $this->input->post('aktif'),

Universitas Sumatera Utara

Page 84: DONNY SANJAYA

'alamat' => $this->input->post('alamat') ); }else{ $profile = array( 'username' => $this->input->post('username'), 'password' => md5($password), 'nama' => $this->input->post('nama'), 'jenis_kelamin' => $this->input->post('jenis_kelamin'), 'no_hp' => $this->input->post('no_hp'), 'aktif' => $this->input->post('aktif'), 'alamat' => $this->input->post('alamat') ); } $this->M_mobile->update_profile($id_client,$profile); $this->session->set_flashdata('message', 'profile berhasil diupdate!'); redirect('adminweb/data'); } /** * Hapus data */ function hapus($id_data) { $this->M_mobile->hapus($id_data); redirect('adminweb/data'); } /** * Memproses login */ function proses_login() { $username = $this->input->post('username'); $password = $this->input->post('password'); $success = $this->auth->admin_login($username,$password); if($success) { redirect('adminweb/aco'); } else { $this->session->set_flashdata('message', 'Maaf, username dan atau password

Universitas Sumatera Utara

Page 85: DONNY SANJAYA

Anda salah, Atau Account anda sedang diblokir, silahkan Hubungi administrator untuk mengaktifkan kembali!!'); redirect('adminweb'); } } /** * Memproses logout */ function logout() { $this->session->sess_destroy(); redirect('adminweb', 'refresh'); }

}

3. Halaman User

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <!-- <script type="text/javascript" src="jquery-1.6.2.min.js"></script> --> <script type="text/javascript" src="<?php echo base_url().'media/jquery-1.7.2.js'; ?>"></script> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <style> html{ height:100%; } body{ height:100%; } #canvas{ height:80%; } </style> <title>Peta Dinamis Pertamaku</title> <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=AIzaSyCeCAhmBV1aJRpEyTpQzwZV-NS_zIfGdSE&sensor=false&language=id"></script> <script type="text/javascript"> //Mendeklarasikan Array untuk menampung marker dan balloon yang ada sehiingga mempermudah saat memanggilnya kembali var markers = new Array(); var infowindows = new Array(); var refreshId = setInterval(function() { $('#tracking').fadeOut("slow").load('<?php echo base_url(); ?>index.php/tracking/proses').fadeIn("slow"); }, 1000);

Universitas Sumatera Utara

Page 86: DONNY SANJAYA

var refreshId2 = setInterval(function() { $('#koordinat').fadeOut("slow").load('<?php echo base_url(); ?>index.php/tracking/koordinat').fadeIn("slow"); }, 1000); var refreshId3 = setInterval(function(){ navigator.geolocation.getCurrentPosition(foundLocation, noLocation); }, 10000); function noLocation() { alert("Sensor GPS tidak ditemukan"); } function foundLocation(position) { var lat = position.coords.latitude; var lon = position.coords.longitude; $('#koordinat2').fadeOut("slow").html("Latitude: " + lat + "<br>Longitude: " + lon).fadeIn("slow"); var uri = "<?php echo base_url().'index.php/tracking/simpanlokasi'; ?>"; $.ajax({ type: 'POST', async: false, dataType: "html", url: uri, data: "lat="+lat+"&long="+lon, success: function(data) { } }); } /* Melakukan refresh setiap beberapa detik sekali */ var refreshId4 = setInterval(function(){updatedata();}, 12000); function updatedata(){ var lat = 0; var long = 0; for(var i=0;i<markers.length;i++){ var uri = "<?php echo base_url().'index.php/tracking/ambildata1'; ?>"; $.ajax({ type: 'POST', async: false, dataType: "html", url: uri, data: "id="+i, success: function(data) { lat=data; } }); var uri = "<?php echo base_url().'index.php/tracking/ambildata2'; ?>";

Universitas Sumatera Utara

Page 87: DONNY SANJAYA

$.ajax({ type: 'POST', async: false, dataType: "html", url: uri, data: "id="+i, success: function(data) { long = data; } }); var myLatLng = new google.maps.LatLng(lat,long); markers[i].setPosition(myLatLng); infowindows[i].setPosition(myLatLng); } } function initialize(){ var myLatLng = new google.maps.LatLng(3.5674094, 98.66089480000005); var myOptions = { zoom: 14, center:myLatLng, mapTypeId: google.maps.MapTypeId.ROADMAP } map = new google.maps.Map( document.getElementById('canvas'),myOptions); <?php foreach ($tampil->result() as $row){?> var marker= new google.maps.Marker({ position:new google.maps.LatLng(<?php echo "$row->lat"; ?>, <?php echo "$row->long"; ?>), map:map, title:"Saya disini <?php echo "$row->nama"; ?>" }); marker.setIcon({ url: "http://4.bp.blogspot.com/-hNcYtcecKTs/T82Sd4ZNn7I/AAAAAAAABWc/l4P-UrOR4rg/s400/Blackberry.png", scaledSize: new google.maps.Size(30, 24) , anchor: new google.maps.Point(15, 12)}); markers.push(marker); var infowindow= new google.maps.InfoWindow({ content:"<img src='http://www.sanjayamediatama.com/templates/default/img/trackaco.png' width='100' align='left' /><?php echo "$row->nama <br> $row->alamat<br>HP : $row->no_hp" ?>", size: new google.maps.Size(50,50), position:new google.maps.LatLng(<?php echo "$row->lat"; ?>, <?php echo "$row->long"; ?>) }); infowindow.open(map); infowindows.push(infowindow); <?php }?>

Universitas Sumatera Utara

Page 88: DONNY SANJAYA

} </script> </head> <div id="tracking"></div> <div id="koordinat"></div> <?php $message = $this->session->flashdata('message'); echo $message == '' ? '' : '<p id="message" align="center">' . $message . '</p>'; ?> <body onLoad="initialize()"> <div id="canvas"></div> <div id="koordinat2"></div> <?php echo anchor('tracking/profile', 'Edit Profile', 'title="Keluar dari Halaman"');?> | <?php echo anchor('client/logout', 'LogOut', 'title="Keluar dari Halaman"');?> </body> </html>

4. User Controller

<?php class Client extends CI_Controller { function __construct(){ parent::__construct(); $this->load->model('M_mobile', '', TRUE); } public function index() { if($this->auth->is_logged_in() == false) { $this->load->view('login'); } else { redirect('tracking'); } } function login(){ $this->load->view('login'); } function daftar(){ $this->load->view('daftar'); } function proses_daftar(){ $password = $this->input->post('password'); $username = $this->input->post('username'); if (empty($password) || empty($username)){ $this->session->set_flashdata('message', 'username atau password masih kosong!'); redirect('client/daftar'); }else{ $daf = array(

Universitas Sumatera Utara

Page 89: DONNY SANJAYA

'id_client' => $this->input->post('id_client'), 'username' => $username, 'password' => md5($password), 'nama' => $this->input->post('nama'), 'jenis_kelamin' => $this->input->post('jenis_kelamin'), 'no_hp' => $this->input->post('no_hp'), 'aktif' => $this->input->post('aktif'), 'alamat' => $this->input->post('alamat') ); $this->M_mobile->tambah_client($daf); } $this->session->set_flashdata('message', 'data berhasil disimpan, tunggu max 2x24 jam. data akan segera diaktifkan!'); redirect('client/login'); } /** * Memproses login */ function proses_login() { $username = $this->input->post('username'); $password = $this->input->post('password'); $success = $this->auth->do_login($username,$password); if($success) { redirect('tracking'); } else { $this->session->set_flashdata('message', 'Maaf, username dan atau password Anda salah, Atau Account anda sedang diblokir, silahkan Hubungi administrator untuk mengaktifkan kembali!!'); redirect('client'); } } /** * Memproses logout */ function logout() {

Universitas Sumatera Utara

Page 90: DONNY SANJAYA

$this->session->sess_destroy(); redirect('client/login', 'refresh'); }

}

5. Tracking Controller <?php class Tracking extends CI_Controller { function __construct(){ parent::__construct(); $this->load->model('M_mobile', '', TRUE); } function index(){ $data['tampil'] = $this->M_mobile->get_track(); $this->load->view('track',$data); } function profile(){ $client = $this->M_mobile->get_client_by_id($this->session->userdata('id_client'))->row(); $data['default']['id_client'] = $client->id_client; $data['default']['username'] = $client->username; $data['default']['password'] = $client->password; $data['default']['nama'] = $client->nama; $data['default']['jenis_kelamin'] = $client->jenis_kelamin; $data['default']['no_hp'] = $client->no_hp; $data['default']['alamat'] = $client->alamat; $this->load->view('profile',$data); } function proses_simpan(){ $id_client = $this->input->post('id_client'); $password = $this->input->post('password'); if (empty($password)){ $profile = array( 'username' => $this->input->post('username'), 'nama' => $this->input->post('nama'), 'jenis_kelamin' => $this->input->post('jenis_kelamin'), 'no_hp' => $this->input->post('no_hp'),

Universitas Sumatera Utara

Page 91: DONNY SANJAYA

'alamat' => $this->input->post('alamat') ); }else{ $profile = array( 'username' => $this->input->post('username'), 'password' => md5($password), 'nama' => $this->input->post('nama'), 'jenis_kelamin' => $this->input->post('jenis_kelamin'), 'no_hp' => $this->input->post('no_hp'), 'alamat' => $this->input->post('alamat') ); } $this->M_mobile->update_profile($id_client,$profile); $this->session->set_flashdata('message', 'profile berhasil diupdate!'); redirect('tracking'); } function simpanlokasi(){ $id_client = $this->session->userdata('id_client'); $lat = $this->input->post('lat'); $long = $this->input->post('long'); $tangal = date("Y-m-d H:i:s"); $session_login = $this->session->userdata('session_id'); $latlong = array( 'id_track' => $this->input->post('id_track'), 'id_client' => $id_client, 'lat' => $lat, 'long' => $long, 'time' => $tangal, 'session_login' => $session_login ); $jml = $this->M_mobile->valid_lokasi($session_login)->num_rows(); if($jml == 0){ $this->M_mobile->track_lokasi($latlong);

Universitas Sumatera Utara

Page 92: DONNY SANJAYA

} $this->M_mobile->update_lokasi($id_client,$lat,$long); } function ambildata1(){ $id = $this->input->post('id'); $lat = $this->M_mobile->get_LatLong($id)->row(); echo $lat->lat; } function ambildata2(){ $id = $this->input->post('id'); $long = $this->M_mobile->get_LatLong($id)->row(); echo $long->long; } function proses(){ echo "tracking location processing ..."; } function koordinat(){ $this->load->view('koordinat'); }

}

6. Ant Colony (function() { var tsp; // singleton var gebMap; // The map DOM object var directionsPanel; // The driving directions DOM object var gebDirectionsResult; // The driving directions returned from GMAP API var gebDirectionsService; var gebGeocoder; // The geocoder for addresses var maxTspSize = 100; // A limit on the size of the problem, mostly to save Google servers from undue load. var maxTspBF = 0; // Max size for brute force, may seem conservative, but ma var maxTspDynamic = 15; // Max size for brute force, may seem conservative, but many browsers have limitations on run-time. var maxSize = 10; // Max number of waypoints in one Google driving directions request. var maxTripSentry = 2000000000; // Approx. 63 years., this long a route should not be reached... var avoidHighways = false; // Whether to avoid highways. False by default. var avoidTolls = false; // Whether to avoid toll roads. False by default. var travelMode; var distIndex; var waypoints = new Array(); var addresses = new Array();

Universitas Sumatera Utara

Page 93: DONNY SANJAYA

var GEO_STATUS_MSG = new Array(); var DIR_STATUS_MSG = new Array(); var labels = new Array(); var addr = new Array(); var wpActive = new Array(); var addressRequests = 0; var addressProcessing = false; var requestNum = 0; var currQueueNum = 0; var wayArr; var legsTmp; var distances; var durations; var legs; var dist; var dur; var visited; var currPath; var bestPath; var bestTrip; var nextSet; var numActive; var costForward; var costBackward; var improved = false; var chunkNode; var okChunkNode; var numDirectionsComputed = 0; var numDirectionsNeeded = 0; var cachedDirections = false; var requestLimitWait = 1000; var fakeDirResult; // Object used to store travel info like travel mode etc. Needed for route renderer. var onSolveCallback = function(){}; var onProgressCallback = null; var originalOnFatalErrorCallback = function(tsp, errMsg) { alert("Request failed: " + errMsg); } var onFatalErrorCallback = originalOnFatalErrorCallback; var doNotContinue = false; var onLoadListener = null; var onFatalErrorListener = null; var directionunits; /* Computes a near-optimal solution to the TSP problem, * using Ant Colony Optimization and local optimization * in the form of k2-opting each candidate route. * Run time is O(numWaves * numAnts * numActive ^ 2) for ACO * and O(numWaves * numAnts * numActive ^ 3) for rewiring? * * if mode is 1, we start at node 0 and end at node numActive-1. */ function AntColony(mode) { var alfa = 0.1; // Pentingnya jalan sebelumnya var beta = 2.0; // Pentingnya jangka waktu var rho = 0.1; // Tingkat pembusukan jalan feromon

Universitas Sumatera Utara

Page 94: DONNY SANJAYA

var asymptoteFactor = 0.9; // Ketajaman dari reward sebagai solusi mendekati solusi terbaik var pher = new Array(); var nextPher = new Array(); var prob = new Array(); var numAnts = 20; var numWaves = 20; for (var i = 0; i < numActive; ++i) { pher[i] = new Array(); nextPher[i] = new Array(); } for (var i = 0; i < numActive; ++i) { for (var j = 0; j < numActive; ++j) { pher[i][j] = 1; nextPher[i][j] = 0.0; } } var lastNode = 0; var startNode = 0; var numSteps = numActive - 1; var numValidDests = numActive; if (mode == 1) { lastNode = numActive - 1; numSteps = numActive - 2; numValidDests = numActive - 1; } /*perhitungan ACO sesuai jumlah semut dan siklus*/ for (var wave = 0; wave < numWaves; ++wave) { for (var ant = 0; ant < numAnts; ++ant) { var curr = startNode; var currDist = 0; for (var i = 0; i < numActive; ++i) { visited[i] = false; } currPath[0] = curr; for (var step = 0; step < numSteps; ++step) { visited[curr] = true; var cumProb = 0.0; /* probabiitas semut*/ for (var next = 1; next < numValidDests; ++next) { if (!visited[next]) { prob[next] = Math.pow(pher[curr][next], alfa) * Math.pow(dur[curr][next], 0.0 - beta); cumProb += prob[next]; } } /*Mengambil bilangan random untuk menentukan kota yg akan ditempuh selanjutnya*/ var guess = Math.random() * cumProb; var nextI = -1; for (var next = 1; next < numValidDests; ++next) { if (!visited[next]) { nextI = next;

Universitas Sumatera Utara

Page 95: DONNY SANJAYA

guess -= prob[next]; if (guess < 0) { nextI = next; break; } } } currDist += dur[curr][nextI]; currPath[step+1] = nextI; curr = nextI; } currPath[numSteps+1] = lastNode; currDist += dur[curr][lastNode]; // k2-rewire: var lastStep = numActive; if (mode == 1) { lastStep = numActive - 1; } var changed = true; var i = 0; while (changed) { changed = false; for (; i < lastStep - 2 && !changed; ++i) { var cost = dur[currPath[i+1]][currPath[i+2]]; var revCost = dur[currPath[i+2]][currPath[i+1]]; var iCost = dur[currPath[i]][currPath[i+1]]; var tmp, nowCost, newCost; for (var j = i+2; j < lastStep && !changed; ++j) { nowCost = cost + iCost + dur[currPath[j]][currPath[j+1]]; newCost = revCost + dur[currPath[i]][currPath[j]] + dur[currPath[i+1]][currPath[j+1]]; if (nowCost > newCost) { currDist += newCost - nowCost; // Membalikkan ruas jalan terpisah for (var k = 0; k < Math.floor((j-i)/2); ++k) { tmp = currPath[i+1+k]; currPath[i+1+k] = currPath[j-k]; currPath[j-k] = tmp; } changed = true; --i; } cost += dur[currPath[j]][currPath[j+1]]; revCost += dur[currPath[j+1]][currPath[j]]; } } } if (currDist < bestTrip) { bestPath = currPath;

Universitas Sumatera Utara

Page 96: DONNY SANJAYA

bestTrip = currDist; } /*Local Update And Decay Pheromone*/ for (var i = 0; i <= numSteps; ++i) { nextPher[currPath[i]][currPath[i+1]] += (bestTrip - asymptoteFactor * bestTrip) / (numAnts * (currDist - asymptoteFactor * bestTrip)); } } /*Apply global pheromone update */ for (var i = 0; i < numActive; ++i) { for (var j = 0; j < numActive; ++j) { pher[i][j] = pher[i][j] * (1.0 - rho) + rho * nextPher[i][j]; nextPher[i][j] = 0.0; } } } } function makeLatLng(latLng) { return(latLng.toString().substr(1,latLng.toString().length-2)); } function makeDirWp(latLng, address) { if (address != null && address != "") return ({ location: address, stopover: true }); return ({ location: latLng, stopover: true }); } function getWayArr(curr) { var nextAbove = -1; for (var i = curr + 1; i < waypoints.length; ++i) { if (wpActive[i]) { if (nextAbove == -1) { nextAbove = i; } else { wayArr.push(makeDirWp(waypoints[i], addresses[i])); wayArr.push(makeDirWp(waypoints[curr], addresses[curr])); } } } if (nextAbove != -1) { wayArr.push(makeDirWp(waypoints[nextAbove], addresses[nextAbove])); getWayArr(nextAbove); wayArr.push(makeDirWp(waypoints[curr], addresses[curr])); } } function getDistTable(curr, currInd) { var nextAbove = -1; var index = currInd; for (var i = curr + 1; i < waypoints.length; ++i) { if (wpActive[i]) { index++; if (nextAbove == -1) {

Universitas Sumatera Utara

Page 97: DONNY SANJAYA

nextAbove = i; } else { legs[currInd][index] = legsTmp[distIndex]; dist[currInd][index] = distances[distIndex]; dur[currInd][index] = durations[distIndex++]; legs[index][currInd] = legsTmp[distIndex]; dist[index][currInd] = distances[distIndex]; dur[index][currInd] = durations[distIndex++]; } } } if (nextAbove != -1) { legs[currInd][currInd+1] = legsTmp[distIndex]; dist[currInd][currInd+1] = distances[distIndex]; dur[currInd][currInd+1] = durations[distIndex++]; getDistTable(nextAbove, currInd+1); legs[currInd+1][currInd] = legsTmp[distIndex]; dist[currInd+1][currInd] = distances[distIndex]; dur[currInd+1][currInd] = durations[distIndex++]; } } // membuat jalur function directions(mode) { if (cachedDirections) { // Bypass Google directions lookup if we already have the distance and duration matrices. // Melewati jalur pencarian arah Google jika kita sudah memiliki matriks jarak dan durasi. doTsp(mode); } wayArr = new Array(); numActive = 0; numDirectionsComputed = 0; for (var i = 0; i < waypoints.length; ++i) { if (wpActive[i]) ++numActive; } numDirectionsNeeded = numActive * (numActive - 1); for (var i = 0; i < waypoints.length; ++i) { if (wpActive[i]) { wayArr.push(makeDirWp(waypoints[i], addresses[i])); getWayArr(i); break; } } // Roundtrip if (numActive > maxTspSize) { alert("Too many locations! You have " + numActive + ", but max limit is " + maxTspSize); } else { legsTmp = new Array(); distances = new Array(); durations = new Array(); chunkNode = 0; okChunkNode = 0; if (typeof onProgressCallback == 'function') { onProgressCallback(tsp); }

Universitas Sumatera Utara

Page 98: DONNY SANJAYA

nextChunk(mode); } } function nextChunk(mode) { // alert("nextChunk"); chunkNode = okChunkNode; if (chunkNode < wayArr.length) { var wayArrChunk = new Array(); for (var i = 0; i < maxSize && i + chunkNode < wayArr.length; ++i) { wayArrChunk.push(wayArr[chunkNode+i]); } var origin; var destination; origin = wayArrChunk[0].location; destination = wayArrChunk[wayArrChunk.length-1].location; var wayArrChunk2 = new Array(); for (var i = 1; i < wayArrChunk.length - 1; i++) { wayArrChunk2[i-1] = wayArrChunk[i]; } chunkNode += maxSize; if (chunkNode < wayArr.length-1) { chunkNode--; } var myGebDirections = new google.maps.DirectionsService(); myGebDirections.route({ origin: origin, destination: destination, waypoints: wayArrChunk2, avoidHighways: avoidHighways, avoidTolls: avoidTolls, unitSystem: directionunits, travelMode: travelMode }, function(directionsResult, directionsStatus) { if (directionsStatus == google.maps.DirectionsStatus.OK) { requestLimitWait = 1000; //alert("Request completed!"); // Save legs, distances and durations fakeDirResult = directionsResult; for (var i = 0; i < directionsResult.routes[0].legs.length; ++i) { ++numDirectionsComputed; legsTmp.push(directionsResult.routes[0].legs[i]); durations.push(directionsResult.routes[0].legs[i].duration.value); distances.push(directionsResult.routes[0].legs[i].distance.value); } if (typeof onProgressCallback == 'function') { onProgressCallback(tsp); } okChunkNode = chunkNode; nextChunk(mode);

Universitas Sumatera Utara

Page 99: DONNY SANJAYA

} else if (directionsStatus == google.maps.DirectionsStatus.OVER_QUERY_LIMIT) { requestLimitWait *= 2; setTimeout(function(){ nextChunk(mode) }, requestLimitWait); } else { var errorMsg = DIR_STATUS_MSG[directionsStatus]; var doNotContinue = true; alert("Request failed: " + errorMsg); } }); } else { readyTsp(mode); } } function readyTsp(mode) { //alert("readyTsp"); // Get distances and durations into 2-d arrays: distIndex = 0; legs = new Array(); dist = new Array(); dur = new Array(); numActive = 0; for (var i = 0; i < waypoints.length; ++i) { if (wpActive[i]) { legs.push(new Array()); dist.push(new Array()); dur.push(new Array()); addr[numActive] = addresses[i]; numActive++; } } for (var i = 0; i < numActive; ++i) { legs[i][i] = null; dist[i][i] = 0; dur[i][i] = 0; } for (var i = 0; i < waypoints.length; ++i) { if (wpActive[i]) { getDistTable(i, 0); break; } } doTsp(mode); } function doTsp(mode) { visited = new Array(); for (var i = 0; i < numActive; ++i) { visited[i] = false; } currPath = new Array(); bestPath = new Array(); nextSet = new Array(); bestTrip = maxTripSentry; visited[0] = true; currPath[0] = 0; cachedDirections = true;

Universitas Sumatera Utara

Page 100: DONNY SANJAYA

//hanya menggunakan metode ant colony AntColony(mode); prepareSolution(); } // solusi akhir function prepareSolution() { var wpIndices = new Array(); for (var i = 0; i < waypoints.length; ++i) { if (wpActive[i]) { wpIndices.push(i); } } var bestPathLatLngStr = ""; var directionsResultLegs = new Array(); var directionsResultRoutes = new Array(); var directionsResultOverview = new Array(); var directionsResultBounds = new google.maps.LatLngBounds(); for (var i = 1; i < bestPath.length; ++i) { directionsResultLegs.push(legs[bestPath[i-1]][bestPath[i]]); } for (var i = 0; i < bestPath.length; ++i) { bestPathLatLngStr += makeLatLng(waypoints[wpIndices[bestPath[i]]]) + "\n"; directionsResultBounds.extend(waypoints[wpIndices[bestPath[i]]]); directionsResultOverview.push(waypoints[wpIndices[bestPath[i]]]); } directionsResultRoutes.push({ legs: directionsResultLegs, bounds: directionsResultBounds, copyrights: "Map data ©2013 Google", overview_path: directionsResultOverview, warnings: new Array(), }); gebDirectionsResult = fakeDirResult; gebDirectionsResult.routes = directionsResultRoutes; if (onFatalErrorListener) google.maps.event.removeListener(onFatalErrorListener); onFatalErrorListener = google.maps.event.addListener(gebDirectionsService, 'error', onFatalErrorCallback); if (typeof onSolveCallback == 'function') { onSolveCallback(tsp); } } function reverseSolution() { for (var i = 0; i < bestPath.length / 2; ++i) { var tmp = bestPath[bestPath.length-1-i]; bestPath[bestPath.length-1-i] = bestPath[i];

Universitas Sumatera Utara

Page 101: DONNY SANJAYA

bestPath[i] = tmp; } prepareSolution(); } function reorderSolution(newOrder) { var newBestPath = new Array(bestPath.length); for (var i = 0; i < bestPath.length; ++i) { newBestPath[i] = bestPath[newOrder[i]]; } bestPath = newBestPath; prepareSolution(); } function removeStop(number) { var newBestPath = new Array(bestPath.length - 1); for (var i = 0; i < bestPath.length; ++i) { if (i != number) { newBestPath[i - (i > number ? 1 : 0)] = bestPath[i]; } } bestPath = newBestPath; prepareSolution(); } function addWaypoint(latLng, label) { var freeInd = -1; for (var i = 0; i < waypoints.length; ++i) { if (!wpActive[i]) { freeInd = i; break; } } if (freeInd == -1) { if (waypoints.length < maxTspSize) { waypoints.push(latLng); labels.push(label); wpActive.push(true); freeInd = waypoints.length-1; } else { return(-1); } } else { waypoints[freeInd] = latLng; labels[freeInd] = label; wpActive[freeInd] = true; } return(freeInd); } function addAddress(address, label, callback) { addressProcessing = true; gebGeocoder.geocode({ address: address }, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { addressProcessing = false; --addressRequests; ++currQueueNum; if (results.length >= 1) { var latLng = results[0].geometry.location;

Universitas Sumatera Utara

Page 102: DONNY SANJAYA

var freeInd = addWaypoint(latLng, label); address = address.replace("'", ""); address = address.replace("\"", ""); addresses[freeInd] = address; if (typeof callback == 'function') callback(address, latLng); } } else if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) { setTimeout(function(){ addAddress(address, label, callback) }, 100); } else { --addressRequests; alert("Failed to geocode address: " + address + ". Reason: " + GEO_STATUS_MSG[status]); ++currQueueNum; addressProcessing = false; if (typeof(callback) == 'function') callback(address); } }); } function swapWaypoints(i, j) { var tmpAddr = addresses[j]; var tmpWaypoint = waypoints[j]; var tmpActive = wpActive[j]; var tmpLabel = labels[j]; addresses[j] = addresses[i]; addresses[i] = tmpAddr; waypoints[j] = waypoints[i]; waypoints[i] = tmpWaypoint; wpActive[j] = wpActive[i]; wpActive[i] = tmpActive; labels[j] = labels[i]; labels[i] = tmpLabel; } BpTspSolver.prototype.startOver = function() { waypoints = new Array(); addresses = new Array(); labels = new Array(); addr = new Array(); wpActive = new Array(); wayArr = new Array(); legsTmp = new Array(); distances = new Array(); durations = new Array(); legs = new Array(); dist = new Array(); dur = new Array(); visited = new Array(); currPath = new Array(); bestPath = new Array(); bestTrip = new Array(); nextSet = new Array(); travelMode = google.maps.DirectionsTravelMode.DRIVING; numActive = 0; chunkNode = 0; okChunkNode = 0;

Universitas Sumatera Utara

Page 103: DONNY SANJAYA

addressRequests = 0; addressProcessing = false; requestNum = 0; currQueueNum = 0; cachedDirections = false; onSolveCallback = function(){}; onProgressCallback = null; doNotContinue = false; directionunits = google.maps.UnitSystem.METRIC; GEO_STATUS_MSG[google.maps.GeocoderStatus.OK] = "Success."; GEO_STATUS_MSG[google.maps.GeocoderStatus.INVALID_REQUEST] = "Request was invalid."; GEO_STATUS_MSG[google.maps.GeocoderStatus.ERROR] = "There was a problem contacting the Google servers."; GEO_STATUS_MSG[google.maps.GeocoderStatus.OVER_QUERY_LIMIT] = "The webpage has gone over the requests limit in too short a period of time."; GEO_STATUS_MSG[google.maps.GeocoderStatus.REQUEST_DENIED] = "The webpage is not allowed to use the geocoder."; GEO_STATUS_MSG[google.maps.GeocoderStatus.UNKNOWN_ERROR] = "A geocoding request could not be processed due to a server error. The request may succeed if you try again."; GEO_STATUS_MSG[google.maps.GeocoderStatus.ZERO_RESULTS] = "No result was found for this GeocoderRequest."; DIR_STATUS_MSG[google.maps.DirectionsStatus.INVALID_REQUEST] = "The DirectionsRequest provided was invalid."; DIR_STATUS_MSG[google.maps.DirectionsStatus.MAX_WAYPOINTS_EXCEEDED] = "Too many DirectionsWaypoints were provided in the DirectionsRequest. The total allowed waypoints is 8, plus the origin and destination."; DIR_STATUS_MSG[google.maps.DirectionsStatus.NOT_FOUND] = "At least one of the origin, destination, or waypoints could not be geocoded."; DIR_STATUS_MSG[google.maps.DirectionsStatus.OK] = "The response contains a valid DirectionsResult."; DIR_STATUS_MSG[google.maps.DirectionsStatus.OVER_QUERY_LIMIT] = "The webpage has gone over the requests limit in too short a period of time."; DIR_STATUS_MSG[google.maps.DirectionsStatus.REQUEST_DENIED] = "The webpage is not allowed to use the directions service."; DIR_STATUS_MSG[google.maps.DirectionsStatus.UNKNOWN_ERROR] = "A directions request could not be processed due to a server error. The request may succeed if you try again."; DIR_STATUS_MSG[google.maps.DirectionsStatus.ZERO_RESULTS] = "No route could be found between the origin and destination."; } /* end (edited) OptiMap code */ /* start public interface */ function BpTspSolver(map, panel, onFatalError) { if (tsp) { alert('You can only create one BpTspSolver at a time.'); return; } gebMap = map; directionsPanel = panel; gebGeocoder = new google.maps.Geocoder(); gebDirectionsService = new google.maps.DirectionsService();

Universitas Sumatera Utara

Page 104: DONNY SANJAYA

onFatalErrorCallback = onFatalError; // only for fatal errors, not geocoding errors tsp = this; } BpTspSolver.prototype.addAddressWithLabel = function(address, label, callback) { ++addressRequests; ++requestNum; tsp.addAddressAgain(address, label, callback, requestNum - 1); } BpTspSolver.prototype.addAddress = function(address, callback) { tsp.addAddressWithLabel(address, null, callback); }; BpTspSolver.prototype.addAddressAgain = function(address, label, callback, queueNum) { if (addressProcessing || queueNum > currQueueNum) { setTimeout(function(){ tsp.addAddressAgain(address, label, callback, queueNum) }, 100); return; } addAddress(address, label, callback); }; BpTspSolver.prototype.addWaypointWithLabel = function(latLng, label, callback) { ++requestNum; tsp.addWaypointAgain(latLng, label, callback, requestNum - 1); }; BpTspSolver.prototype.addWaypoint = function(latLng, callback) { tsp.addWaypointWithLabel(latLng, null, callback); }; BpTspSolver.prototype.addWaypointAgain = function(latLng, label, callback, queueNum) { if (addressProcessing || queueNum > currQueueNum) { setTimeout(function(){ tsp.addWaypointAgain(latLng, label, callback, queueNum) }, 100); return; } addWaypoint(latLng, label); ++currQueueNum; if (typeof(callback) == 'function') { callback(latLng); } } BpTspSolver.prototype.getWaypoints = function() { var wp = []; for (var i = 0; i < waypoints.length; i++) { if (wpActive[i]) { wp.push(waypoints[i]); } } return wp; };

Universitas Sumatera Utara

Page 105: DONNY SANJAYA

BpTspSolver.prototype.getAddresses = function() { var addrs = []; for (var i = 0; i < addresses.length; i++) { if (wpActive[i]) addrs.push(addresses[i]); } return addrs; }; BpTspSolver.prototype.getLabels = function() { var labs = []; for (var i = 0; i < labels.length; i++) { if (wpActive[i]) labs.push(labels[i]); } return labs; }; BpTspSolver.prototype.removeWaypoint = function(latLng) { for (var i = 0; i < waypoints.length; ++i) { if (wpActive[i] && waypoints[i].equals(latLng)) { wpActive[i] = false; return true; } } return false; }; BpTspSolver.prototype.removeAddress = function(addr) { for (var i = 0; i < addresses.length; ++i) { if (wpActive[i] && addresses[i] == addr) { wpActive[i] = false; return true; } } return false; }; BpTspSolver.prototype.setAsStop = function(latLng) { var j = -1; for (var i = waypoints.length - 1; i >= 0; --i) { if (j == -1 && wpActive[i]) { j = i; } if (wpActive[i] && waypoints[i].equals(latLng)) { for (var k = i; k < j; ++k) { swapWaypoints(k, k + 1); } break; } } } BpTspSolver.prototype.setAsStart = function(latLng) { var j = -1; for (var i = 0; i < waypoints.length; ++i) { if (j == -1 && wpActive[i]) { j = i; }

Universitas Sumatera Utara

Page 106: DONNY SANJAYA

if (wpActive[i] && waypoints[i].equals(latLng)) { for (var k = i; k > j; --k) { swapWaypoints(k, k - 1); } break; } } } BpTspSolver.prototype.getGDirections = function() { return gebDirectionsResult; }; BpTspSolver.prototype.getGDirectionsService = function() { return gebDirectionsService; }; // Returns the order that the input locations was visited in. // getOrder()[0] is always the starting location. // getOrder()[1] gives the first location visited, getOrder()[2] // gives the second location visited and so on. BpTspSolver.prototype.getOrder = function() { return bestPath; } // Methods affecting the way driving directions are computed BpTspSolver.prototype.getAvoidHighways = function() { return avoidHighways; } BpTspSolver.prototype.setAvoidHighways = function(avoid) { avoidHighways = avoid; } BpTspSolver.prototype.getAvoidTolls = function() { return avoidTolls; } BpTspSolver.prototype.setAvoidTolls = function(avoid) { avoidTolls = avoid; } BpTspSolver.prototype.getTravelMode = function() { return travelMode; } BpTspSolver.prototype.setTravelMode = function(travelM) { travelMode = travelM; } BpTspSolver.prototype.getDurations = function() { return dur; } // Helper functions BpTspSolver.prototype.getTotalDuration = function() { return gebDirections.getDuration().seconds; } // we assume that we have enough waypoints

Universitas Sumatera Utara

Page 107: DONNY SANJAYA

BpTspSolver.prototype.isReady = function() { return addressRequests == 0; }; BpTspSolver.prototype.solveRoundTrip = function(callback) { if (doNotContinue) { alert('Cannot continue after fatal errors.'); return; } if (!this.isReady()) { setTimeout(function(){ tsp.solveRoundTrip(callback) }, 20); return; } if (typeof callback == 'function') onSolveCallback = callback; directions(0); }; // menghitung jarak sekali jalan BpTspSolver.prototype.solveAtoZ = function(callback) { if (doNotContinue) { alert('Cannot continue after fatal errors.'); return; } if (!this.isReady()) { setTimeout(function(){ tsp.solveAtoZ(callback) }, 20); return; } if (typeof callback == 'function') onSolveCallback = callback; directions(1); }; BpTspSolver.prototype.setDirectionUnits = function(mOrKm) { if (mOrKm == "m") { directionunits = google.maps.UnitSystem.IMPERIAL; } else { directionunits = google.maps.UnitSystem.METRIC; } } BpTspSolver.prototype.setOnProgressCallback = function(callback) { onProgressCallback = callback; } BpTspSolver.prototype.getNumDirectionsComputed = function () { return numDirectionsComputed; } BpTspSolver.prototype.getNumDirectionsNeeded = function () { return numDirectionsNeeded; } BpTspSolver.prototype.reverseSolution = function () {

Universitas Sumatera Utara

Page 108: DONNY SANJAYA

reverseSolution(); } BpTspSolver.prototype.reorderSolution = function(newOrder, callback) { if (typeof callback == 'function') onSolveCallback = callback; reorderSolution(newOrder); } BpTspSolver.prototype.removeStop = function(number, callback) { if (typeof callback == 'function') onSolveCallback = callback; removeStop(number); } window.BpTspSolver = BpTspSolver; })();

7. Javascript Solver /* This should serve as an example on how to use the more general BpTspSolver.js from http://code.google.com/p/google-maps-tsp-solver/ Author: Geir K. Engdahl */ var tsp; // The BpTspSolver object which handles the TSP computation. var mode; var markers = new Array(); // Need pointers to all markers to clean up. var dirRenderer; // Need pointer to path to clean up. var base_url = "http://localhost/aco/media/iconsnew/"; /* Returns a textual representation of time in the format * "N days M hrs P min Q sec". Does not include days if * 0 days etc. Does not include seconds if time is more than * 1 hour. */ function formatTime(seconds) { var days; var hours; var minutes; days = parseInt(seconds / (24*3600)); seconds -= days * 24 * 3600; hours = parseInt(seconds / 3600); seconds -= hours * 3600; minutes = parseInt(seconds / 60); seconds -= minutes * 60; var ret = ""; if (days > 0) ret += days + " hari ";

Universitas Sumatera Utara

Page 109: DONNY SANJAYA

if (days > 0 || hours > 0) ret += hours + " jam "; if (days > 0 || hours > 0 || minutes > 0) ret += minutes + " menit "; if (days == 0 && hours == 0) ret += seconds + " detik"; return(ret); } /* Returns textual representation of distance in the format * "N km M m". Does not include km if less than 1 km. Does not * include meters if km >= 10. */ function formatLength(meters) { var km = parseInt(meters / 1000); meters -= km * 1000; var ret = ""; if (km > 0) ret += km + " km "; if (km < 10) ret += meters + " m"; return(ret); } /* Returns textual representation of distance in the format * "N.M miles". */ function formatLengthMiles(meters) { var sMeters = meters * 0.621371192; var miles = parseInt(sMeters / 1000); var commaMiles = parseInt((sMeters - miles * 1000 + 50) / 100); var ret = miles + "." + commaMiles + " miles"; return(ret); } /* Returns two HTML strings representing the driving directions. * Icons match the ones shown in the map. Addresses are used * as headers where available. * First string is suitable for use in reordering the directions. * Second string is suitable for printed directions. */ function formatDirections(gdir, mode) { var addr = tsp.getAddresses(); var labels = tsp.getLabels(); var order = tsp.getOrder(); var retStr = "<table class='gebddir' border=0 cell-spacing=0>\n"; var dragStr = "tarik untuk merubah urutan:<br><ul class='unsortable'>"; var retArr = new Array(); for (var i = 0; i < gdir.legs.length; ++i) { var route = gdir.legs[i]; var colour = "g"; var number = i+1; //untuk menampilkan list perjalanan pada panel

Universitas Sumatera Utara

Page 110: DONNY SANJAYA

retStr += "\t<tr class='heading'><td class='heading' width=40>" + "<div class='centered-directions'><img src='"+base_url+"black" + number + ".png'></div></td>" + "<td class='heading'><div class='centered-directions'>"; //untuk tampilan pada menu kiri var headerStr; if (labels[order[i]] != null && labels[order[i]] != "") { headerStr = labels[order[i]]; } else if (addr[order[i]] != null) { headerStr = addr[order[i]]; } else { var prevI = (i == 0) ? gdir.legs.length - 1 : i-1; var latLng = gdir.legs[prevI].end_location; headerStr = gdir.legs[i].start_location.toString(); } //menampilkan pada menu kiri dragStr += "<li id='" + i + "' class='ui-state-" + (i ? "default" : "disabled") + "'>" + "<table class='dragTable'><tr><td class='left'><img src='"+base_url+"black" + number + ".png' /></td><td class='middle'>" + headerStr + "</td><td class='right'>" + (i ? "<button id='dragClose" + i + "' value='" + i + "'></button>" : "") + "</td></tr></table></li>"; if (i == 0) { dragStr += "</ul><ul id='sortable'>"; } retStr += headerStr + "</div></td></tr>\n"; for (var j = 0; j < route.steps.length; ++j) { var classStr = "odd"; if (j % 2 == 0) classStr = "even"; retStr += "\t<tr class='text'><td class='" + classStr + "'></td>" + "<td class='" + classStr + "'>" + route.steps[j].instructions + "<div class='left-shift'>" + route.steps[j].distance.text + "</div></td></tr>\n"; } } dragStr += "</ul><ul class='unsortable'>"; /*jika menggunakan pulang pergi */ if (mode == 0) { var headerStr;

Universitas Sumatera Utara

Page 111: DONNY SANJAYA

if (labels[order[0]] != null && labels[order[0]] != "") { headerStr = labels[order[0]]; } else if (addr[order[0]] != null) { headerStr = addr[order[0]]; } else { var prevI = gdir.legs.length - 1; var latLng = gdir.legs[prevI].end_location; headerStr = latLng.toString(); } dragStr += "<li id='" + 0 + "' class='ui-state-disabled'>" + "<table class='dragTable'><tr><td><img src='"+base_url+"black" + 1 + ".png' /></td><td>" + headerStr + "</td></tr></table></li>"; retStr += "\t<tr class='heading'><td class='heading'>" + "<div class='centered-directions'><img src='"+base_url+"black1.png'></div></td>" + "<td class='heading'>" + "<div class='centered-directions'>" + headerStr + "</div></td></tr>\n"; /* untuk sekali jalan */ }else if (mode == 1) { var headerStr; if (labels[order[gdir.legs.length]] != null && labels[order[gdir.legs.length]] != "") { headerStr = labels[order[gdir.legs.length]]; } else if (addr[order[gdir.legs.length]] == null) { var latLng = gdir.legs[gdir.legs.length - 1].end_location; headerStr = latLng.toString(); } else { headerStr = addr[order[gdir.legs.length]]; } dragStr += "<li id='" + gdir.legs.length + "' class='ui-state-disabled'>" + "<table class='dragTable'><tr><td><img src='"+base_url+"black" + (gdir.legs.length + 1) + ".png' /></td><td>" + headerStr + "</td></tr></table></li>"; retStr += "\t<tr class='heading'><td class='heading'>" + "<div class='centered-directions'><img src='"+base_url+"black" + (gdir.legs.length + 1) + ".png'></div></td>" + "<td class='heading'>" + "<div class='centered-directions'>" + headerStr + "</div></td></tr>\n"; } dragStr += "</ul>"; retStr += "</table>"; retArr[0] = dragStr;

Universitas Sumatera Utara

Page 112: DONNY SANJAYA

retArr[1] = retStr; return(retArr); } function createTomTomLink(gdir) { var addr = tsp.getAddresses(); var labels = tsp.getLabels(); var order = tsp.getOrder(); var addr2 = new Array(); var label2 = new Array(); for (var i = 0; i < order.length; ++i) { addr2[i] = addr[order[i]]; if (order[i] < labels.length && labels[order[i]] != null && labels[order[i]] != "") label2[i] = labels[order[i]]; } var itn = createTomTomItineraryItn(gdir, addr2, label2); var retStr = "<form method='GET' action='tomtom.php' target='tomTomIFrame'>\n"; retStr += "<input type='hidden' name='itn' value='" + itn + "' />\n"; retStr += "<input id='tomTomButton' class='calcButton' type='submit' value='Send to TomTom' onClick='jQuery(\"#dialogTomTom\").dialog(\"open\");'/>\n"; retStr += "</form>\n"; return retStr; } function createGarminLink(gdir) { var addr = tsp.getAddresses(); var labels = tsp.getLabels(); var order = tsp.getOrder(); var addr2 = new Array(); var label2 = new Array(); for (var i = 0; i < order.length; ++i) { addr2[i] = addr[order[i]]; if (order[i] < labels.length && labels[order[i]] != null && labels[order[i]] != "") label2[i] = labels[order[i]]; } var gpx = createGarminGpx(gdir, addr2, label2); var gpxWp = createGarminGpxWaypoints(gdir, addr2, label2); var retStr = "<form method='POST' action='garmin.php' target='garminIFrame'>\n"; retStr += "<input type='hidden' name='gpx' value='" + gpx + "' />\n"; retStr += "<input type='hidden' name='gpxWp' value='" + gpxWp + "' />\n"; retStr += "<input id='garminButton' class='calcButton' type='submit' value='Send to Garmin' onClick='jQuery(\"#dialogGarmin\").dialog(\"open\");'/>\n"; retStr += "</form>\n"; return retStr; } function createGoogleLink(gdir) { var addr = tsp.getAddresses(); var order = tsp.getOrder(); var ret = "http://maps.google.com/maps?saddr="; for (var i = 0; i < order.length; ++i) {

Universitas Sumatera Utara

Page 113: DONNY SANJAYA

if (i == 1) { ret += "&daddr="; } else if (i >= 2) { ret += " to:"; } if (addr[order[i]] != null && addr[order[i]] != "") { ret += escape(addr[order[i]]); } else { if (i == 0) { ret += gdir.legs[0].start_location.toString(); } else { ret += gdir.legs[i-1].end_location.toString(); } } } return ret; } function getWindowHeight() { if (typeof(window.innerHeight) == 'number') return window.innerHeight; if (document.documentElement && document.documentElement.clientHeight) return document.documentElement.clientHeight; if (document.body && document.body.clientHeight) return document.body.clientHeight; return 800; } function getWindowWidth() { if (typeof(window.innerWidth) == 'number') return window.innerWidth; if (document.documentElement && document.documentElement.clientWidth) return document.documentElement.clientWidth; if (document.body && document.body.clientWidth) return document.body.clientWidth; return 1200; } function onProgressCallback(tsp) { jQuery('#progressBar').progressbar('value', 100 * tsp.getNumDirectionsComputed() / tsp.getNumDirectionsNeeded()); } function setMarkerAsStart(marker) { marker.infoWindow.close(); tsp.setAsStart(marker.getPosition()); drawMarkers(false); } function setMarkerAsStop(marker) { marker.infoWindow.close(); tsp.setAsStop(marker.getPosition()); drawMarkers(false); } function removeMarker(marker) {

Universitas Sumatera Utara

Page 114: DONNY SANJAYA

marker.infoWindow.close(); tsp.removeWaypoint(marker.getPosition()); drawMarkers(false); } function drawMarker(latlng, addr, label, num) { var icon; icon = new google.maps.MarkerImage(""+base_url+"red" + (num + 1) + ".png"); var marker = new google.maps.Marker({ position: latlng, icon: icon, title:"Mobile "+(num + 1), map: gebMap }); google.maps.event.addListener(marker, 'click', function(event) { var addrStr = (addr == null) ? "" : addr + "<br>"; var labelStr = (label == null) ? "" : "<b>" + label + "</b><br>"; var markerInd = -1; for (var i = 0; i < markers.length; ++i) { if (markers[i] != null && marker.getPosition().equals(markers[i].getPosition())) { markerInd = i; break; } } var infoWindow = new google.maps.InfoWindow({ content: labelStr + addrStr + "<a href='javascript:setMarkerAsStart(markers[" + markerInd + "]" + ")'>" + "Set sebagai lokasi awal" + "</a><br>" + "<a href='javascript:setMarkerAsStop(markers[" + markerInd + "])'>" + "Set sebagai lokasi akhir" + "</a><br>" + "<a href='javascript:removeMarker(markers[" + markerInd + "])'>" + "Hapus lokasi</a>", position: marker.getPosition() }); marker.infoWindow = infoWindow; infoWindow.open(gebMap); // tsp.removeWaypoint(marker.getPosition()); // marker.setMap(null); }); markers.push(marker); } function setViewportToCover(waypoints) { var bounds = new google.maps.LatLngBounds(); for (var i = 0; i < waypoints.length; ++i) { bounds.extend(waypoints[i]); } gebMap.fitBounds(bounds);

Universitas Sumatera Utara

Page 115: DONNY SANJAYA

} function initMap(center, zoom, div) { var myOptions = { zoom: zoom, center: center, mapTypeId: google.maps.MapTypeId.ROADMAP }; gebMap = new google.maps.Map(div, myOptions); google.maps.event.addListener(gebMap, "click", function(event) { tsp.addWaypoint(event.latLng, addWaypointSuccessCallback); }); } function addWaypointWithLabel(latLng, label) { tsp.addWaypointWithLabel(latLng, label, addWaypointSuccessCallbackZoom); } function addWaypoint(latLng) { addWaypointWithLabel(latLng, null, addWaypointSuccessCallbackZoom); } function addAddressAndLabel(addr, label) { tsp.addAddressWithLabel(addr, label, addAddressSuccessCallbackZoom); //alert (addr); } function addAddress(addr) { addAddressAndLabel(addr, null); //alert (addr); } function clickedAddAddress() { addAddress(document.address.addressStr.value); } function addAddressSuccessCallback(address, latlng) { if (latlng) { drawMarkers(false); } else { alert('Gagal Menemukan Lokasi : ' + address); } } function addAddressSuccessCallbackZoom(address, latlng) { if (latlng) { drawMarkers(true); } else { alert('Gagal Menemukan Lokasi: ' + address); } } function addWaypointSuccessCallback(latlng) { if (latlng) { drawMarkers(false);

Universitas Sumatera Utara

Page 116: DONNY SANJAYA

} } function addWaypointSuccessCallbackZoom(latlng) { if (latlng) { drawMarkers(true); } } function drawMarkers(updateViewport) { removeOldMarkers(); var waypoints = tsp.getWaypoints(); var addresses = tsp.getAddresses(); var labels = tsp.getLabels(); for (var i = 0; i < waypoints.length; ++i) { drawMarker(waypoints[i], addresses[i], labels[i], i); } if (updateViewport) { setViewportToCover(waypoints); } } function startOver() { document.getElementById("my_textual_div").innerHTML = ""; document.getElementById("path").innerHTML = ""; var center = gebMap.getCenter(); var zoom = gebMap.getZoom(); var mapDiv = gebMap.getDiv(); initMap(center, zoom, mapDiv); tsp.startOver(); // doesn't clearOverlays or clear the directionsPanel } function TrackMobile() { drawMarkers(true); } function RefreshPage() { javascript:location.reload(true); } function testJS() { alert ('javaScript berfungsi dengan baik ...'); } function popup(url, name, width, height) { settings= "toolbar=yes,location=yes,directories=yes,"+ "status=no,menubar=no,scrollbars=yes,"+ "resizable=yes,width="+width+",height="+height; MyNewWindow=window.open(url,name,settings); } function directions(m, walking, bicycling, avoidHighways, avoidTolls) { jQuery('#dialogProgress').dialog('open');

Universitas Sumatera Utara

Page 117: DONNY SANJAYA

mode = m; tsp.setAvoidHighways(avoidHighways); tsp.setAvoidTolls(avoidTolls); if (walking){ tsp.setTravelMode(google.maps.DirectionsTravelMode.WALKING); }else if (bicycling){ tsp.setTravelMode(google.maps.DirectionsTravelMode.BICYCLING); }else{ tsp.setTravelMode(google.maps.DirectionsTravelMode.DRIVING); tsp.setOnProgressCallback(onProgressCallback); } if (m == 0){ tsp.solveRoundTrip(onSolveCallback); }else{ tsp.solveAtoZ(onSolveCallback); } } function getTotalDuration(dir) { var sum = 0; for (var i = 0; i < dir.legs.length; i++) { sum += dir.legs[i].duration.value; } return sum; } function getTotalDistance(dir) { var sum = 0; for (var i = 0; i < dir.legs.length; i++) { sum += dir.legs[i].distance.value; } return sum; } function removeOldMarkers() { for (var i = 0; i < markers.length; ++i) { markers[i].setMap(null); } markers = new Array(); } function onSolveCallback(myTsp) { jQuery('#dialogProgress').dialog('close'); //alert ('solve'); var dirRes = tsp.getGDirections(); var dir = dirRes.routes[0]; // Print shortest roundtrip data: var pathStr = "<p>Lama Perjalanan : " + formatTime(getTotalDuration(dir)) + "<br>";

Universitas Sumatera Utara

Page 118: DONNY SANJAYA

pathStr += "Panjang Perjalanan : " + formatLength(getTotalDistance(dir)) + " (" + formatLengthMiles(getTotalDistance(dir)) + ")</p>"; document.getElementById("path").innerHTML = pathStr; document.getElementById("exportDataButton").innerHTML = "<input id='rawButton' class='calcButton' type='button' value='Data Koordinat' onClick='toggle(\"exportData\"); document.getElementById(\"outputList\").select();'>"; var durStr = "<input id='csvButton' class='calcButton' type='button' value='Durasi dalam Matrix' onClick='toggle(\"durationsData\");'>"; document.getElementById("durations").innerHTML = durStr; document.getElementById("exportLabelButton").innerHTML = "<input id='rawLabelButton' class='calcButton' type='button' value='Koordinat dengan Label' onClick='toggle(\"exportLabelData\"); document.getElementById(\"outputLabelList\").select();'>" document.getElementById("exportAddrButton").innerHTML = "<input id='rawAddrButton' class='calcButton' type='button' value='Urutan Alamat Optimal' onClick='toggle(\"exportAddrData\"); document.getElementById(\"outputAddrList\").select();'>" document.getElementById("exportOrderButton").innerHTML = "<input id='rawOrderButton' class='calcButton' type='button' value='Urutan label Optimal' onClick='toggle(\"exportOrderData\"); document.getElementById(\"outputOrderList\").select();'>" var formattedDirections = formatDirections(dir, mode); document.getElementById("routeDrag").innerHTML = formattedDirections[0]; /*untuk menampilkan list perjalanan */ document.getElementById("my_textual_div").innerHTML = formattedDirections[1]; /* untuk menampilkan panel perjalanan */ document.getElementById("reverseRoute").innerHTML = "<input id='reverseButton' value='Reverse' type='button' class='calcButton' onClick='reverseRoute()' />"; jQuery('#reverseButton').button(); jQuery('#rawButton').button(); jQuery('#rawLabelButton').button(); jQuery('#csvButton').button(); jQuery('#googleButton').button(); jQuery('#tomTomButton').button(); jQuery('#garminButton').button(); jQuery('#rawAddrButton').button(); jQuery('#rawOrderButton').button(); jQuery("#sortable").sortable({ stop: function(event, ui) { var perm = jQuery("#sortable").sortable("toArray"); var numPerm = new Array(perm.length + 2); numPerm[0] = 0; for (var i = 0; i < perm.length; i++) { numPerm[i + 1] = parseInt(perm[i]); } numPerm[numPerm.length - 1] = numPerm.length - 1; tsp.reorderSolution(numPerm, onSolveCallback); } });

Universitas Sumatera Utara

Page 119: DONNY SANJAYA

jQuery("#sortable").disableSelection(); for (var i = 1; i < dir.legs.length; ++i) { var finalI = i; jQuery("#dragClose" + i).button({ icons: { primary: "ui-icon-close" }, text: false }).click(function() { tsp.removeStop(parseInt(this.value), null); }); } removeOldMarkers(); // Add nice, numbered icons. if (mode == 1) { var myPt1 = dir.legs[0].start_location; var myIcn1 = new google.maps.MarkerImage(""+base_url+"black1.png"); var marker = new google.maps.Marker({ position: myPt1, icon: myIcn1, map: gebMap }); markers.push(marker); } for (var i = 0; i < dir.legs.length; ++i) { var route = dir.legs[i]; var myPt1 = route.end_location; var myIcn1; if (i == dir.legs.length - 1 && mode == 0) { myIcn1 = new google.maps.MarkerImage(""+base_url+"black1.png"); } else { myIcn1 = new google.maps.MarkerImage(""+base_url+"black" + (i+2) + ".png"); } var marker = new google.maps.Marker({ position: myPt1, icon: myIcn1, map: gebMap }); markers.push(marker); } // Clean up old path. if (dirRenderer != null) { dirRenderer.setMap(null); } dirRenderer = new google.maps.DirectionsRenderer({ directions: dirRes, hideRouteList: true, map: gebMap, panel: null, preserveViewport: false, suppressInfoWindows: true, suppressMarkers: true }); // Raw path output var bestPathLatLngStr = dir.legs[0].start_location.toString() + "\n";

Universitas Sumatera Utara

Page 120: DONNY SANJAYA

for (var i = 0; i < dir.legs.length; ++i) { bestPathLatLngStr += dir.legs[i].end_location.toString() + "\n"; } document.getElementById("exportData_hidden").innerHTML = "<textarea id='outputList' rows='10' cols='40'>" + bestPathLatLngStr + "</textarea><br>"; // Raw path output with labels var labels = tsp.getLabels(); var order = tsp.getOrder(); var bestPathLabelStr = ""; if (labels[order[0]] == null) { bestPathLabelStr += order[0]; } else { bestPathLabelStr += labels[order[0]]; } bestPathLabelStr += ": " + dir.legs[0].start_location.toString() + "\n"; for (var i = 0; i < dir.legs.length; ++i) { if (labels[order[i+1]] == null) { bestPathLabelStr += order[i+1]; } else { bestPathLabelStr += labels[order[i+1]]; } bestPathLabelStr += ": " + dir.legs[i].end_location.toString() + "\n"; } document.getElementById("exportLabelData_hidden").innerHTML = "<textarea id='outputLabelList' rows='10' cols='40'>" + bestPathLabelStr + "</textarea><br>"; // Optimal address order var addrs = tsp.getAddresses(); var order = tsp.getOrder(); var bestPathAddrStr = ""; if (addrs[order[0]] == null) { bestPathAddrStr += dir.legs[0].start_location.toString(); } else { bestPathAddrStr += addrs[order[0]]; } bestPathAddrStr += "\n"; for (var i = 0; i < dir.legs.length; ++i) { if (addrs[order[i+1]] == null) { bestPathAddrStr += dir.legs[i].end_location.toString(); } else { bestPathAddrStr += addrs[order[i+1]]; } bestPathAddrStr += "\n"; } document.getElementById("exportAddrData_hidden").innerHTML = "<textarea id='outputAddrList' rows='10' cols='40'>" + bestPathAddrStr + "</textarea><br>"; // Optimal numeric order var bestOrderStr = ""; for (var i = 0; i < order.length; ++i) {

Universitas Sumatera Utara

Page 121: DONNY SANJAYA

bestOrderStr += "" + (order[i] + 1) + "\n"; } document.getElementById("exportOrderData_hidden").innerHTML = "<textarea id='outputOrderList' rows='10' cols='40'>" + bestOrderStr + "</textarea><br>"; /* mengubah ke matrix*/ var durationsMatrixStr = ""; var dur = tsp.getDurations(); for (var i = 0; i < dur.length; ++i) { for (var j = 0; j < dur[i].length; ++j) { durationsMatrixStr += dur[i][j]; if (j == dur[i].length - 1) { durationsMatrixStr += "\n"; } else { durationsMatrixStr += ", "; } } } document.getElementById("durationsData_hidden").innerHTML = "<textarea name='csvDurationsMatrix' rows='10' cols='40'>" + durationsMatrixStr + "</textarea><br>"; var hitung = tsp.getNumDirectionsComputed(); document.getElementById("HitungData_hidden").innerHTML = formatTime(hitung); } function clickedAddList() { var val = document.listOfLocations.inputList.value; val = val.replace(/\t/g, ' '); document.listOfLocations.inputList.value = val; addList(val); } function addList(listStr) { var listArray = listStr.split("\n"); for (var i = 0; i < listArray.length; ++i) { var listLine = listArray[i]; if (listLine.match(/\(?\s*\-?\d+\s*,\s*\-?\d+/) || listLine.match(/\(?\s*\-?\d+\s*,\s*\-?\d*\.\d+/) || listLine.match(/\(?\s*\-?\d*\.\d+\s*,\s*\-?\d+/) || listLine.match(/\(?\s*\-?\d*\.\d+\s*,\s*\-?\d*\.\d+/)) { // Line looks like lat, lng. var cleanStr = listLine.replace(/[^\d.,-]/g, ""); var latLngArr = cleanStr.split(","); if (latLngArr.length == 2) { var lat = parseFloat(latLngArr[0]); var lng = parseFloat(latLngArr[1]); var latLng = new google.maps.LatLng(lat, lng); tsp.addWaypoint(latLng, addWaypointSuccessCallbackZoom); } } else if (listLine.match(/\(?\-?\d*\.\d+\s+\-?\d*\.\d+/)) { // Line looks like lat lng

Universitas Sumatera Utara

Page 122: DONNY SANJAYA

var latLngArr = listline.split(" "); if (latLngArr.length == 2) { var lat = parseFloat(latLngArr[0]); var lng = parseFloat(latLngArr[1]); var latLng = new google.maps.LatLng(lat, lng); tsp.addWaypoint(latLng, addWaypointSuccessCallbackZoom); } } else if (listLine.match(/\S+/)) { // Non-empty line that does not look like lat, lng. Interpret as address. tsp.addAddress(listLine, addAddressSuccessCallbackZoom); } } } function reverseRoute() { tsp.reverseSolution(); }

8. Database Model

<?php class M_mobile extends CI_Model { /** * Constructor */ function __construct(){ parent::__construct(); } /* Inisialisasi nama tabel yang digunakan */ var $table = 'tb_client'; function all_track() { $this->db->select('*'); $this->db->from('tb_client'); $this->db->where('aktif','Y'); return $this->db->get(); } function data_client() { $this->db->select('*'); $this->db->from('tb_client'); return $this->db->get(); } function get_track() { $this->db->select('*'); $this->db->from('tb_client'); $this->db->limit(1); $this->db->where('id_client ',$this->session->userdata('id_client')); return $this->db->get(); }

Universitas Sumatera Utara

Page 123: DONNY SANJAYA

/** * Menghapus sebuah data kiba */ function hapus($id_client) { $this->db->delete('tb_client', array('id_client' => $id_client)); } /** * Tampilkan latitude */ function get_LatLong($id) { $this->db->select('*'); $this->db->from('tb_client'); $this->db->limit(1); $this->db->where('id_client ',$this->session->userdata('id_client')); return $this->db->get(); } /** * Menambah data */ function track_lokasi($long) { $this->db->insert('tb_track', $long); return TRUE; } /** * Menambah data client */ function tambah_client($profile) { $this->db->insert('tb_client', $profile); return TRUE; } /** * Update data lokasi */ function update_lokasi($id_client,$lat,$long) { $data = array('lat' => $lat, 'long' => $long); $this->db->where('id_client', $id_client); $this->db->update('tb_client', $data); return TRUE; } /** * Update data profile */ function update_profile($id_client,$profile) { $this->db->where('id_client', $id_client);

Universitas Sumatera Utara

Page 124: DONNY SANJAYA

$this->db->update('tb_client', $profile); return TRUE; } /** * Mendapatkan data sebuah kiba */ function get_client_by_id($id) { return $this->db->get_where('tb_client', array('id_client' => $id), 1); } /** * Validasi lokasi */ function valid_lokasi($session_login) { $query = $this->db->get_where('tb_track', array('session_login' => $session_login)); return $query; } }

Universitas Sumatera Utara

Page 125: DONNY SANJAYA

B-1

CURRICULUM VITAE

Nama : DONNY SANJAYA

Alamat Sekarang : JALAN MERPATI NO 8 A, KEC. MEDAN SUNGGAL

KOTA MEDAN

Alamat Orang Tua : JALAN SERITI NO 89 KEL. GAMBIR BARU,

KEC. KISARAN TIMUR KAB. ASAHAN

Telp/ HP : 085261180060

Email : [email protected]

Riwayat Pendidikan:

1997 – 2002 SEKOLAH DASAR (SD) NEGERI 010096 GAMBIR BARU KISARAN

2002 – 2005 SEKOLAH MENENGAH PERTAMA (SMP) NEGERI 1 KISARAN

2005 – 2008 SEKOLAH MENENGAH ATAS (SMA) NEGERI 1 KISARAN

2008 – 2011 D-III TEKNIK INFORMATIKA UNIVERSITAS SUMATERA UTARA

Keahlian/kursus yang diikuti:

Keahlian Bahasa Pemrograman:

- Berbasis Web: PHP Native dan Framework, HTML & CSS, JavaScript & Jquery

- Berbasis Windows: Visual Basic

- Database: MSSQL & MySQL

Kursus:

- Pemrograman, LBBTI

Universitas Sumatera Utara