Pencarian rute distribusi barang menggunakan algoritma semut (studi kasus PT.Circleka Indonesia Utama Region Yogyakarta).

(1)

INTISARI

Distribusi adalah kegiatan penyaluran barang dan jasa yang dibuat dari produsen ke konsumen agar tersebar luas. Kegiatan distribusi merupakan penghubung antara kegiatan produksi dan konsumsi. Begitu pula yang dilakukan oleh PT.Circleka Indonesia Utama, perusahaan ini bertanggung jawab untuk mendistribusikan barang ke toko – toko Circle K yang ada. Hal tersebut bertujuan agar para konsumen lebih mudah untuk menjangkau produk – produk yang dijual oleh produsen. Dalam prosesnya, PT.Circleka Indonesia Utama memerlukan kurir yang mengantarkan barang dari gudang ke toko – toko yang ada. Dalam tugas tersebut seorang kurir akan mencari rute pendistribusian secara manual, tentu saja hal tersebut kurang efektif.

Pada tugas akhir ini akan dibuat sistem yang dapat membantu kurir dalam memilih rute pendistribusian barang. Dimana sistem tersebut akan menerapkan algoritma semut yang akan membantu pencarian rute. Algoritma semut merupakan salah satu metode yang dapat membantu memecahkan masalah pencarian rute.

Hasil dari sistem ini tentu saja sistem dapat menampilkan rute terpendek yang dilalui oleh kurir untuk mengantarkan barang – barang ke toko cricle k. Dimana hasil tersebut diharapkan dapat membantu kerja kurir dan juga PT.Circleka Indonesia Utama region Yogyakarta menjadi lebih efektif.


(2)

Distribution is activities that link of goods and services that are made from producers to consumers. Distribution activities is a link between production and consumption. Similarly, conducted by PT.Circleka Utama Indonesia, the company responsible for distributing the goods to the store - the existing Circle K stores. It is intended that consumers are more likely to reach a product - a product that is sold by the manufacturer. In the process, PT.Circleka Indonesia Utama require a courier delivering goods from the warehouse to the store - the existing store. In the task will be looking for a courier service distribution manually, of course it is less effective.

In this final project will created a system that can help in choosing the courier service distribution of goods. Where the system would apply ant algorithms that will help the search route. Ant is one method that can help solve the problem of route search.

The results of this system of course the system can display the shortest route traversed by courier to deliver the goods to store cricle k. Where the results are expected to help work courier and also PT.Circleka Utama Indonesia Yogyakarta region becomes more effective.


(3)

i

PENCARIAN RUTE DISTRIBUSI BARANG MENGGUNAKAN

ALGORITMA SEMUT

(Studi Kasus PT.Circleka Indonesia Utama Region Yogyakarta)

Halaman Utama

SKRIPSI

Diajukan untuk Memenuhi Salah Satu Syarat

Memperoleh Gelar Sarjana Komputer

Program Studi Teknik Informatika

Disusun oleh

R ALEXANDER PURBO WIDYANTO

125314069

PROGRAM STUDI TEKNIK INFORMATIKA JURUSAN TEKNIK INFORMATIKA FAKULTAS SAINS DAN TEKNOLOGI

UNIVERSITAS SANATA DHARMA YOGYAKARTA


(4)

ii

SEARCH DISTRIBUTION ROUTE USING ANT

ALGORITHM

(Case Study PT.Circleka Indonesia Utama Region Yogyakarta)

Halaman Utama

THESIS

Presented as Partial Fullfillment of the Requirments

To Obtain Sarjana Komputer Degree

In Department of Informatics Engineering

By

R. ALEXANDER PURBO WIDYANTO

125314069

INFORMATICS ENGINEERING STUDY PROGRAM DEPARTMENT OF INFORMATICS ENGINEERING

FACULTY OF SCIENCE AND TECHNOLOGY SANATA DHARMA UNIVERSITY

YOGYAKARTA 2017


(5)

iii


(6)

iv


(7)

v


(8)

vi


(9)

vii INTISARI

Distribusi adalah kegiatan penyaluran barang dan jasa yang dibuat dari produsen ke konsumen agar tersebar luas. Kegiatan distribusi merupakan penghubung antara kegiatan produksi dan konsumsi. Begitu pula yang dilakukan oleh PT.Circleka Indonesia Utama, perusahaan ini bertanggung jawab untuk mendistribusikan barang ke toko – toko Circle K yang ada. Hal tersebut bertujuan agar para konsumen lebih mudah untuk menjangkau produk – produk yang dijual oleh produsen. Dalam prosesnya, PT.Circleka Indonesia Utama memerlukan kurir yang mengantarkan barang dari gudang ke toko – toko yang ada. Dalam tugas tersebut seorang kurir akan mencari rute pendistribusian secara manual, tentu saja hal tersebut kurang efektif.

Pada tugas akhir ini akan dibuat sistem yang dapat membantu kurir dalam memilih rute pendistribusian barang. Dimana sistem tersebut akan menerapkan algoritma semut yang akan membantu pencarian rute. Algoritma semut merupakan salah satu metode yang dapat membantu memecahkan masalah pencarian rute.

Hasil dari sistem ini tentu saja sistem dapat menampilkan rute terpendek yang dilalui oleh kurir untuk mengantarkan barang – barang ke toko cricle k. Dimana hasil tersebut diharapkan dapat membantu kerja kurir dan juga PT.Circleka Indonesia Utama region Yogyakarta menjadi lebih efektif.


(10)

viii

ABSTRAK

Distribution is activities that link of goods and services that are made from producers to consumers. Distribution activities is a link between production and consumption. Similarly, conducted by PT.Circleka Utama Indonesia, the company responsible for distributing the goods to the store - the existing Circle K stores. It is intended that consumers are more likely to reach a product - a product that is sold by the manufacturer. In the process, PT.Circleka Indonesia Utama require a courier delivering goods from the warehouse to the store - the existing store. In the task will be looking for a courier service distribution manually, of course it is less effective.

In this final project will created a system that can help in choosing the courier service distribution of goods. Where the system would apply ant algorithms that will help the search route. Ant is one method that can help solve the problem of route search.

The results of this system of course the system can display the shortest route traversed by courier to deliver the goods to store cricle k. Where the results are expected to help work courier and also PT.Circleka Utama Indonesia Yogyakarta region becomes more effective.


(11)

ix

Kata Pengantar

Puji dan Syukur kepada Tuhan Yang Maha Esa yang telah senantiasa memberikan berkat dan rahmat yang tak berkesudahan serta kesempatan yang sangat berharga sehingga penulis dapat menyelesaikan skripsi dengan judul “Pencarian Rute Distibusi Barang Menggunakan Algoritma Semut (Studi Kasus PT.Circleka Indonesia Utama Region Yogyakarta)”.

Dalam kesempatan ini, penulis ingin mengucapkan terima kasih yang sebesar besarnya kepada seluruh pihak yang telah memberi dukungan dan semangat sehingga skripsi ini dapat selesai:

1. Bapak Sudi Mungkasi, S.Si.,M.Math.Sc.,Ph.D selaku Dekan Fakultas Sains dan Teknologi Universitas Sanata Dharma Yogyakarta.

2. Ibu Dr. Anastasia Rita Widiarti, S.Si.,M.Kom selaku Kaprodi Teknik Informatika Universitas Sanata Dharma Yogyakarta dan juga Selaku Panitia Penguji yang telah memberikan kritik dan saran dalam penulisan tugas akhir.

3. Bapak Albertus Agung Hadhiatma, S.T.,M.T selaku Dosen Pembimbing, yang telah sabar dalam memberikan bimbingan dan segala masukan sehingga penulis dapat menyelesaikan tugas akhir ini.

4. Bapak JB. Budi Darmawan S.T., M.Sc. selaku panitia penguji yang telah memberikan kritik dan saran dalam penulisan tugas akhir.

5. Seluruh dosen dan staff karyawan Program Studi Teknik Informatika Universitas Sanata Dharma yang telah memberikan bekal ilmu, bimbingan serta pengalaman dan fasilitas selama saya menempuh studi.


(12)

(13)

xi

Daftar Isi

Halaman Utama ... i

Halaman Utama ... ii

HALAMAN PERSETUJUAN ... iii

HALAMAN PERSEMBAHAN SKRIPSI ... iv

PERNYATAAN KEASLIAN KARYA... v

LEMBAR PERNYATAAN PERSETUJUAN PUBLIKASI... vi

INTISARI ... vii

ABSTRAK ... viii

Kata Pengantar ... ix

Daftar Isi ... xi

Daftar Gambar ... xiv

Daftar Tabel ... xvi

BAB I ... 1

1.1 Latar Belakang ... 1

1.2 Rumusan Masalah ... 2

1.3 Tujuan Penelitian... 3

1.4 Batasan Masalah ... 3

1.5 Metodologi Penelitian ... 3

1.6 Sistematika penulisan ... 4

Bab II ... 6

2.1 Distribusi ... 6

2.2 Graph... 6

2.3 Traveling Salesman Problem ... 7

2.3.1 Aplikasi TSP ... 8

2.4. Algoritma Semut ... 9

2.4.1. Tentang Algorima Semut... 9

2.4.2. Konsep Dasar ... 10


(14)

xii

2.4.4 Contoh Penerapan Algoritma Semut ... 12

BAB III ... 19

3.1 Analisis Sistem ... 19

3.1.1 Analisis Masalah ... 19

3.1.2 Aturan Pencarian Rute ... 20

3.1.3 Sumber Data ... 21

3.2 Permodelan Algoritma Semut untuk Pencarian Rute ... 24

3.2.1 Inisialisasi Parameter ... 24

3.2.2 Mencari Urutan Node ... 25

3.2.3 Update Solusi ... 26

3.3 Perancangan Sistem ... 26

3.3.1 Diagram Use case ... 26

3.3.2 Ringkasan Use Case ... 27

3.3.3 Narasi Use Case... 27

3.3.4 Diagram Aktivitas ... 29

3.4 Perancangan Basisdata ... 29

3.4.1 ER Diagram ... 29

3.4.2 Model Fisikal... 30

3.5 Design Interface ... 31

BAB IV ... 36

4.1 Implementasi Proses ... 36

4.1.1 Implementasi Algoritma Semut ... 36

4.2 Implementasi Tampilan Antar Muka ... 43

4.2.1 Implementasi Antar Muka Awal (Home) ... 43

4.2.2 Implementasi Antar Muka Cari Rute ... 43

4.2.3 Implementasi Antar Muka Lihat Data ... 47

4.2.4 Implementasi Antar Muka Tambah Data ... 48

4.2.5 Implementasi Antar Muka Perbarui Data ... 51

4.2.6 Implementasi Antar Muka Hapus Data ... 53

BAB V ... 56


(15)

xiii

5.1.1 Analisa Hasil untuk Pencarian Rute dengan Tujuan 3 Toko ... 56

5.1.2 Analisa Hasil untuk Pencarian Rute dengan Tujuan 4 Toko ... 61

5.1.3 Analisa Hasil untuk Pencarian Rute dengan Tujuan 5 Toko ... 66

5.2 Analisis Perbandingan Jumlah Semut... 71

5.2.1 Perbandingan Jumlah Semut... 71

5.2.2 Kesimpulan Perbandingan ... 78

BAB VI ... 79

6.1 KESIMPULAN ... 79

6.2 SARAN ... 79

DAFTAR PUSTAKA ... 80


(16)

xiv

Daftar Gambar

Gambar 2. 1 Graph antar Kota ... 7

Gambar 2. 2 Rumus Intensitas Jejak ... 11

Gambar 2. 3 Rumus Penguapan Jejak ... 11

Gambar 2. 4 Rumus mencari jejak yang ditinggalkan ... 11

Gambar 2. 5 Rumus Probabilitas ... 11

Gambar 2. 6 Graph ... 12

Gambar 3. 1 Peta Persebaran Toko Circle K di Yogyakarta... 20

Gambar 3. 2 Pencarian rute dengan google maps ... 24

Gambar 3. 3 Diagram Usecase ... 26

Gambar 3. 4 Diagram Aktifitas Cari Rute ... 29

Gambar 3. 5 ER Diagram ... 29

Gambar 3. 6 Tampilan Home ... 31

Gambar 3. 7 Tampilan Cari Rute ... 32

Gambar 3. 8 Tampilan Lihat Data ... 32

Gambar 3. 9 Tampilan Tambahan Data... 33

Gambar 3. 10 Tampilan Tambahan Data... 34

Gambar 3. 11 Tampilan Hapus Data ... 35

Gambar 4. 1 Tampilan Home ... 43

Gambar 4. 2 Antar Muka Cari Data ... 44

Gambar 4. 3 Pemberitahuan ... 45

Gambar 4. 4 Pemberitahuan(2) ... 45

Gambar 4. 5 Antar Muka Lihat Data ... 47

Gambar 4. 6 antar muka tambah data ... 49

Gambar 4. 7 Pemberitahuan berhasil menambah data toko ... 50

Gambar 4. 8 Pemberitauan rute berhasil ditambah ... 50

Gambar 4. 9 Antar Muka Perbarui Data ... 51

Gambar 4. 10 Pemberitauan Data berhasil diperbarui ... 52

Gambar 4. 11 Pemberitauan rute berhasil diperbarui ... 53

Gambar 4. 12 Antar muka hapus data ... 53

Gambar 4. 13 Persetujuan menghapus data ... 55

Gambar 4. 14 Pemberitahuan data berhasil dihapus ... 55

Gambar 5. 1 Hasil Pencarian Pertama oleh Sistem ... 56

Gambar 5. 2 Rute yang dilalui oleh pencarian pertama ... 56

Gambar 5. 3 Hasil Pencarian Kedua oleh Sistem ... 57

Gambar 5. 4 Rute yang dilalui oleh pencarian kedua ... 57

Gambar 5. 5 Hasil Pencarian Ketiga Oleh Sistem ... 58

Gambar 5. 6 Rute yang dilalui oleh pencarian Ketiga ... 58

Gambar 5. 7 Hasil Pencarian Keempat oleh Sistem ... 59


(17)

xv

Gambar 5. 9 Hasil Pencarian Kelima oleh Sistem ... 60

Gambar 5. 10 Rute yang dilalui oleh pencarian Kelima ... 60

Gambar 5. 11 Hasil Pencarian Rute Keenam Menggunakan Sistem ... 61

Gambar 5. 12 Rute yang didapat dalam pencarian Keenam ... 61

Gambar 5. 13 Hasil Pencarian Ketujuh oleh Sistem ... 62

Gambar 5. 14 Rute yang didapat dalam pencarian Ketujuh... 63

Gambar 5. 15 Hasil Pencarian Kedelapan oleh Sistem ... 63

Gambar 5. 16 Rute yang didapat dalam pencarian Kedelapan ... 64

Gambar 5. 17 Hasil Pencarian Kesembilan oleh Sistem ... 65

Gambar 5. 18 Rute yang didapat dalam pencarian Kesembilan ... 65

Gambar 5. 19 Hasil Pencarian Sistem Kesepuluh ... 66

Gambar 5. 20 Rute yang didapat pada pencarian kesepuluh ... 66

Gambar 5. 21 Hasil Pencarian Kesebelas oleh Sistem... 67

Gambar 5. 22 Rute yang didapat pada pencarian Kesebelas ... 67

Gambar 5. 23 Hasil Pencarian Keduabelas oleh Sistem ... 68

Gambar 5. 24 Rute yang didapat pada pencarian Keduabelas ... 68

Gambar 5. 25 Hasil Pencarian Ketigabelas Oleh Sistem ... 69

Gambar 5. 26 Rute yang didapat pada pencarian Ketigabelas ... 69

Gambar 5. 27 Hasil Pencarian Keempatbelas Oleh Sistem ... 70

Gambar 5. 28 Rute yang didapat pada pencarian Keempatbelas ... 70

Gambar 5. 29 Hasil Pencarian Kelimabelas oleh Sistem ... 71

Gambar 5. 30 Rute yang didapat pada pencarian Kelimabelas ... 71

Gambar 5. 31 Hasil Percobaan Pertama dengan 2 semut ... 72

Gambar 5. 32 Hasil Percobaan Pertama dengan 3 semut ... 72

Gambar 5. 33 Hasil Percobaan Pertama dengan 5 semut ... 72

Gambar 5. 34 Hasil Percobaan Kedua dengan 2 semut ... 73

Gambar 5. 35 Hasil Percobaan Kedua dengan 3 semut ... 73

Gambar 5. 36 Hasil Percobaan Kedua dengan 5 semut ... 73

Gambar 5. 37 Hasil Percobaan Ketiga dengan 2 semut ... 74

Gambar 5. 38 Hasil Percobaan Ketiga dengan 3 semut ... 74

Gambar 5. 39 Hasil Percobaan Ketiga dengan 5 semut ... 74

Gambar 5. 40 Hasil Percobaan Keempat dengan 2 semut ... 75

Gambar 5. 41 Hasil Percobaan Keempat dengan 3 semut ... 75

Gambar 5. 42 Hasil Percobaan Keempat dengan 5 semut ... 76

Gambar 5. 43 Hasil Percobaan Kelima dengan 2 semut ... 76

Gambar 5. 44 Hasil Percobaan Kelima dengan 3 semut ... 76

Gambar 5. 45 Hasil Percobaan Kelima dengan 5 semut ... 77

Gambar 5. 46 Hasil Percobaan Keenam dengan 2 semut ... 77

Gambar 5. 47 Hasil Percobaan Keenam dengan 3 semut ... 77


(18)

xvi

Daftar Tabel

Tabel 2. 1 Tabel Matrix antar titik ... 13

Tabel 2. 2 Visibilitas ... 13

Tabel 2. 3 Tabel intensitas jejak semut awal ... 14

Tabel 2. 4 pengisian node awal ... 14

Tabel 2. 5 probabilitas ... 15

Tabel 2. 6 Probabilitas (2) ... 16

Tabel 2. 7 Probabilitas (3) ... 17

Tabel 2. 8 Tabel intensitas jejak semut untuk semut ke 1 ... 18

Tabel 3. 1 Data Toko... 22

Tabel 3. 2 Data Toko yang Digunakan ... 23

Tabel 3. 3 Tabel data rute ... 23

Tabel 3. 4 Inisialisasi Parameter... 24

Tabel 3. 5 Ringkasan Usecase ... 27

Tabel 3. 6 Narasi Cari Rute ... 28

Tabel 3. 11 Design Tabel toko ... 30

Tabel 3. 12 Design Tabel Rute ... 30

Tabel 3. 13 Design Tabel Hasil ... 30

Tabel 3. 7 Narasi Cetak Hasil ... 83

Tabel 3. 8 Narasi Ubah Data ... 85

Tabel 3. 9 Narasi Tambah Data ... 86

Tabel 5. 1 Tabel Hasil Pencarian Konvensional Pertama ... 56

Tabel 5. 2 Hasil Pencarian konvensional kedua ... 57

Tabel 5. 3 Hasil pencarian Konvensional Ketiga ... 58

Tabel 5. 4 Hasil Pencarian konvensional Keempat ... 59

Tabel 5. 5 Hasil Pencarian Konvensional Kelima ... 60

Tabel 5. 6 Tabel Hasil Pencarian Rute Secara Konvensional Keenam ... 61

Tabel 5. 7 Hasil Pencarian Secara Konvensional Ketujuh ... 62

Tabel 5. 8 Hasil Pencarian Rute Secara Konvensional Kedelapan ... 63

Tabel 5. 9 Hasil Pencarian Secara Konvensional Kesembilan ... 64

Tabel 5. 10 Hasil Pencarian Secara Konvensional Kesepuluh ... 65

Tabel 5. 11 Hasil Pencarian Konvensional Kesebelas ... 66

Tabel 5. 12 Hasil pencarian Konvensional Keduabelas ... 67

Tabel 5. 13 Tabel hasil pencarian Konvensional Ketigabelas ... 68

Tabel 5. 14 Tabel hasil pencarian Konvensional Keempatbelas ... 70

Tabel 5. 15 Hasil pencarian Konvensional Kelimabelas ... 70


(19)

1

BAB I

PENDAHULUAN

1.1 Latar Belakang

PT.CIRCLELKA INDONESIA UTAMA adalah badan usaha yang membawahi toko ritel modern Circle K yang berada di Indonesia. PT CIRCLEKA INDONESIA UTAMA sendiri memiliki kantor pusat yang terletak di Jakarta Timur, lebih tepatnya berada di Jalan Jatinegara Barat No. 124. Sedangkan untuk di Yogyakarta sendiri memiliki kantor di Jl. Magelang km.7 No.09 Mlatijati, Sendangadi, Mlati, Sleman. Perusahaan ini memiliki beberapa tugas, dan salah satunya adalah mengatur pendistribusian barang dari gudang ke toko - toko circle K yang tersebar di berbagai tempat di Yogyakarta. Untuk kantor regional Yogyakarta sendiri terdapat 34 toko di yogyakarta dan 2 lainya masing masing berada di kota solo dan semarang.

Pendistribusian barang pada umumnya merupakan hal yang sangat penting bagi setiap perusahaan, terlebih bagi toko seperti Circle K. Hal ini tentu saja dikarenakan Circle K merupakan sebuah convension store yang menjual berbagai produk makanan dan minuman kemasan dan keperluan sehari – hari. Pendistibusian barang ke toko – toko circle K tersebut di atur oleh PT.CIRCLEKA INDONESIA UTAMA melalui tiap regionalnya. Dan dalam pendistribusiannya dibutuhkan kurir untuk mengantarkan stock barang – barang tersebut. Dalam sekali jalan seorang kurir biasanya akan mengantar barang – barang tersebut kurang lebih ke 3 hingga 4 toko Circle K. Dan tentu saja dalam mengantar barang tersebut seorang kurir akan memiliki banyak opsi rute. Sedangkan, dalam pendistribusian barang tentu pendistribusian diharapkan bisa efisien, baik dari segi waktu maupun biaya.


(20)

Melihat hal tersebut, muncul sebuah gagasan untuk membuat suatu aplikasi yang dapat membantu dalam hal pendistibusian barang, khususnya dalam pencarian rute pendistribusian barang. Dimana aplikasi tersebut diharapkan dapat membantu dalam mencari jalur terpendek dalam pendistribusian barang. Sehingga dalam pendistribusian barang ke gerai – gerai Circle K dapat lebih efisien dan juga membantu kurir dalam mencari rute.

Permasalahan pendistribusian barang tersebut termasuk dalam sebuah Traveling Salesman Problem (TSP), dimana terdapat banyak macam cara untuk menyelsaikan masalah ini. Terdapat dua macam dalam penyelsaiannya, yaiutu dengan penghitungan secara konvensional (Manual, mencari semua kemungkinan) ataupun dengan metode heuristik (algoritma). Dalam kasus ini sistem akan menggunakan Algoritma Semut. Algoritma Semut sendiri merupakan salah satu pendekatan dalam penyelesaian masalah TSP. Algoritma semut merupakan salah satu algoritma dalam metode heuristic. Dengan demikian diharapkan permasalahan tersebut dapat diselsaikan dengan hasil yang maksimal. Dan diharapkan aplikasi yang dibuat dapat membantu PT Circelka Indonesia Utama khususnya regional Yogyakarta dalam melakukan kegiatan pendistribusian barang.

1.2 Rumusan Masalah

Berdasarkan latar belakang yang telah di jabarkan pada bagian sebelumnya, maka di dapatlah rumusan permasalahan berikut:

1. Bagaimana menerapkan algoritma semut dalam sistem yang akan membantu dalam mencari jalur terpendek untuk pendistribusian barang?


(21)

1.3 Tujuan Penelitian

Tujuan penelitian yang ingin dicapai melalui penulisan Tugas Akhir ini adalah sebagai berikut:

1. Mengimplementasikan algoritma semut dalam sistem yang berguna

untuk mencari jalur terpendek untuk melakukan pendistribusian barang.

1.4 Batasan Masalah

Batasan Masalah pada sistem ini adalah sebagai berikut:

1. Data yang digunakan hanya mencakup circle k regional yogyakarta saja. 2. Penentuan jalur terpendek dari sistem ini berdasarkan dari letak gerai

Circle k yang ada.

3. Sistem ini hanya mampu menampilkan urutan – urutan tempat yang akan dituju saja

4. Data Circle K yang dimasukan kedalam Sistem adalah data yang telah

di Update pada bulan April 2016.

1.5 Metodologi Penelitian

Metode yang digunakan dalam menyelsaikan traveling salesman problem ini adalah metode System Development Life Cycle (paradigma Waterfall). Tahap dari metode ini adalah sebagai berikut:

1. Analisa kebutuhan

Tahap ini akan menidentifikasi dan menganalisa kebutuhan dari sistem. Selain itu pada tahap ini juga akan dilakukan pengumpulan data yang diperlukan dalam pencarian jalur terpendek.


(22)

Pada tahap ini akan dilakukan perancangan dari sistem yang akan dibuat. Proses perancangan tersebut meliputi: Perancangan sistem, design user interface dan implementasi program.

3. Penulisan Program

Pada tahap ini, akan dilakukan implementasi rancangan yang sudah dibuat kedalam bahasa pemrograman yang akan digunakan.

4. Pengujian

Tahap ini merupakan tahap dimana sistem akan diujicoba untuk mengetahui tingkat keberhasilan Sistem dan juga kesalahan – kesalahan yang ada. Tujuannya agar diketahui tingkat keberhasilan dari aplikasi yang dibuat.

1.6 Sistematika penulisan

Secara umum, dalam menyelesaikan laporan Tugas Akhir ini, sistematika penulisan yang akan digunakan adalah sebagai berikut :

BAB I : PENDAHULUAN

Berisi tentang latar belakang masalah, rumusan masalah, tujuan penelitian, batasan masalah, metodologi penelitian, dan sistematika penulisan.

BAB II : LANDASAN TEORI

Pada bab ini, akan dibahas tentang berbagai landasan teori yang mendasari pembuatan Aplikasi pencari jalur terpendek ini

BAB III : ANALISA DAN PERANCANGAN SISTEM

Pada bab ini, penulis akan menjelaskan tentang analisa permasalahan yang ada dan menjelaskan tentang rancangan sistem yang akan dibuat.


(23)

BAB IV : IMPLEMENTASI SISTEM

Bab ini berisi implementasi dari rancangan yang sudah dibuat pada bab sebelumnya.

BAB V : PENGUJIAN SISTEM

Bab ini berisi penjelasan tentang pengujian sistem yang telah dibuat.

BAB VI : PENUTUP

Merupakan bab yang berisi kesimpulan dari penulis, kemudian juga memberikan beberapa saran yang mungkin dapat bermanfaat untuk pengembangan aplikasi yang telah dibuat.


(24)

6

Bab II

LANDASAN TEORI

Bab ini berisikan landasan dari penelitian ini, Seperti tentang Distribusi, Algoritma Semut, Traveling Salesman Problem, maupun Grap. Setiap hal tesebut menjadi Landasan dari penelitian yang dilakukan. Berikut adalah uraian dari landasan – landasan tersebut:

2.1 Distribusi

Menurut para ahli, pengertian distribusi adalah kegiatan penyaluran barang dan jasa yang dibuat dari produsen ke konsumen agar tersebar luas. Kegiatan distribusi merupakan penghubung antara kegiatan produksi dan konsumsi. Sedangkan untuk pelaku kegiatan distribusi sendiri dinamakan distributor.

1.1.1 Jenis – Jenis Distribusi: a. Distribusi Langsung:

Adalah Distribusi yang dilakukan secara langsung oleh prosdusen ke konsumen yang dilakukan tanpa perantara.

b. Distribusi Tak Langsung:

Adalah penyaluran atau penjualan barang dari produsen kepada konsumen melalui perantara. Perantara tersebut diantaranya adalah pedagang, agen, makelar dan juga toko – toko.

(http://www.artikelsiana.com/2014/11/pengertian-distribusi-fungsi-fungsi-kegiatan.html)

2.2 Graph

Graph merupakan sebuah struktur data yang terdiri dari vertex(titik) dan edge(garis atau juga busur/arc). Dimana setiap vertex akan dihubungkan oleh edge sehingga membentuk suatu kesatuan yang disebut sebagai graf. Untuk lebih jelasnya coba perhatikan gambar graph dibawah ini yang menggambarkan sebuah kota


(25)

Gambar 2. 1 Graph antar Kota

Gambar diatas merupakan senuah peta kota yang di gambarkan dalam bentuk graph, diman kota merupakan titik(vertex) sedangkan garis yang menghubunhkan kota adalah jalan(edge).

Terdapat beberapa graph yang dapat digunakan, diantaranya adalah sebagai berikut:

• Graf berarah: adalah graf yang edgenya memiliki arah, misalnya vertex A dan B dihubungkan oleh edge AB, namun untuk hubungan vertex b ke A harus ada edge lain yaitu edge BA jika tidak ada maka B ke A tidak memiliki hubungan, walaupun A ke B erdapat hubungan.

• Graf tak berarah: berbeda dengan graf berarah, pada graf tidak berarah jika terdapat edge AB maka edge tersebut menghubungkan A ke B dan juga B ke A.

• Graf Berbobot : adalah sebuah graf yang memiliki edge yang bernilai

atau memiliki nilai tertentu.

• Graf tidak berbobot: adalah kebalikan dari graf berbobot.

2.3 Traveling Salesman Problem

Traveling Salesman Problem atau TSP sebenarnya adalah masalah klasik dalam pencarian jalur terpendek. Masalah ini mungkin terdengar sederhana, namun dalam pemecahanya sangatlah tidak sederhana. Banyak macam algoritma yang dapat mengatasinya, namun mencari algoritma yang optimal merupakan


(26)

permasalahanya. Terkadang suatu algoritma bisa sangat optimal dalam kasus A namun menjadi tidak optimal dalam kasus B. Biasanya TSP akan digambarkan dalam sebuah Graph.

Permasalahan matematika tentang Traveling Salesman Problem atau TSP sendiri dikemukakan pada tshun 1800 oleh Wiliam Rowan Hamilton dan Thomas Penyngton. Wiliam Rowan Hamilton adalah seorang maematikawan dari Irlandia sedangkan Thomas Penyngton adalah seorang matematikawan dari Inggris. Kemudian bentuk umum dari TSP mulai dipelajari oleh matematikawan pada tahun 1930 dimana Karl Menger di Vienna dan Harvad mengawalinya. Lalu TSP dipublikasikan oleh Hassler Whitney dan Merrill Flood di princeton.

Permasalahan TSP memiliki banyak teknik yang dapat digunakan dalam menanganinya. Salah satunya adalah teknik Heuristik, dimana teknik ini adalah teknik yang akan memberikan hasil yang mendekati optimal. Beberapa metode heuristik seperti algoritma genetika, simulated annealing dan algoritma semut sendiri merupakan suatu cara untuk mencari hasil traveling salesman problem yang baik namun belum bisa dikatakan yang terbaik.

2.3.1

Aplikasi TSP

Traveling Salesman Problem yang awalnya merupakan sebuah masalah pada akhirnya telah berkembang dan dapat dimanfaatkan dalam beberapa sektor. Berikut adalah beberapa contohnya:

a. Logistik dan Supply Chain:

Logistik dan supply Chain secara umum mengandung pengertian bahwa sistem tersebut dapat mengatur atau mengelola orang, suberdaya, aktifitas, teknologi dan lain – lain guna kepentingan untuk mengantar barang dari titik asal(suplier) kepada titik tujuan(pelanggan). Sehingga diharapkan pemasokan tersebut dapat berjalan secara tepat waktu, tepat jumlah, tepat lokasi, tepat sumber daya dan lain lain.

b. Transportasi:

Dalam bidang ini salah satu pionir yang memanfaatkan TSP adalah Merril Flood, beliau adalah matematikawan Amerika yang merumuskan


(27)

Rute bus sekolah di New Jersy pada tahun 1940an. Dalam hal transportasi memang TSP sangatlah berguna seperti untuk mencari jalur terpendek untuk perjalanan.

c. Manufaktur:

Dalam bidang manufaktur TSP dapat dimanfaatkan dalam pencarian jalur terpendek sehingga meningkatkan kecepatan produksi dan dapat menekan biaya produksi.

d. Bidang lainnya:

Pada bidang lain TSP juga dapat dimanfaatkan dalam pendjadwalan pengiriman koran, pengiriman surat oleh pos pemasangan jaringan telekomunikasi dan lain lain.

2.4. Algoritma Semut

Membahas tentang Algoritma semut, dasar algoritma semut dan algoritma semut itu sendiri.

2.4.1. Tentang Algorima Semut

Algoritma Semut merupakan simulasi multi agen yang menggunakan metafora alami semut untuk menyelesaikan problem ruang fisik. Algoritma ini merupakan algoritma yang diperkenalkan oleh Moyson dan Manderick dan secara meluas dikembangkan oleh Marco Dorigo. Algoritma semut merupakan teknik probabilistik untuk menyelesaikan masalah komputasi dengan menemukan jalur terbaik melalui grafik. Sesuai dengan namanya, algoritma ini adalah algoritma yang terinspirasi dari semut. Dimana perilaku semut yang meninspirasi algoritma ini adalah saat semut menemukan jalur dari koloninya menuju makanan.

Semut mampu mengindra lingkunganya yang kompleks untuk mencari makanan. Saat menemukan makanan semut akan kembali ke koloni atau sarangnya dengan meninggalkan zat feromon pada jalur – jalur yang mereka lewati. Zat Feromon adalah zat yang berasal dari kelenjar endokrim yang digunakan oleh makhluk hidup untuk mengenali sesama jenis, individu lain, klompok bahkan membantu untuk proses reproduksi. Berbeda dengan hormon, feromon meyebar keluar tubuh dan hanya dapat mempengaruhi dan dikendalikan oleh individu lain


(28)

yang sejenis (satu spesies). Peninggalan fermon merupakan cara dari semut untuk mengingat jalan pulang, selain itu hal tersebut juga berfungsi untuk berkomunikasi dengan koloninya.

Dalam kejadian sehari – hari, algoritma semut biasa diterapkan dalam beberapa persoalan seperti berikut:

1. Traveling Salesman Problem (TSP)

Merupakan sebuah permasalahan dalam pencarian jalur terpendek. Dimana dalam pencarian jalur terpendek semua titik harus dilewati. Contoh: pengantar surat yang harus mengantar semua surat pada alamat tujuan.

2. Quadratic Assigment Problem (QAP)

Merupakan masalah dalam meng-asign sejumlah n resources untuk ditempatkan pada sejumlah m lokasi dengan meminimalisir biaya assignment.

3. Job-shop Scheduling Problem (JSP)

Merupakan sebuah permasalahan dalam penjadwalan sejumlah j pekerjaan menggunakan sejumlah m mesin sedemikian rupa agar seluruh pekerjaan dapat diselesaikan dalam waktu yang minimal.

2.4.2. Konsep Dasar

Pada siklus semut, setiap semut akan berperan sebagai agen yang :

• Akan berpindah dari kota i ke kota j, pada interval antara t dan (t+1). Kota j dipilih atas dasar probabilitas terhadap jarak d(Ci , Cj) dan jumlah jejak pada edge(jalur) yang menghubungkan antara Ci dan Cj

• Akan mengunjungi kota yang belum pernah dikunjungi sebelumnya.

Hal ini diimplementasikan dengan cara menyimpan semua kota yang telah dikunjungi semut hingga semut tersebut menyelesaikan perjalanannya, dan akan mereset kembali setelah semut itu menyelesaikan satu siklus.

• Setelah selesai dalam satu siklus semut itu akan meninggalkan jejak pada setiap edge yang dilaluinya.


(29)

Misalkan Ʈ adalah intensitas jejak semut pada edge(i,j) pada saat t, maka setelah suatu semut menyelsaikan perjalanan dalam suatu siklus, intensitas jejak akan berubah menjadi:

Dengan ρ adalah koefisien dengan nilai 0 sampai 1, sedemikian hingga (1-ρ) menunjukan penguapan jejak, dan

∑� ΔƮ

− (t,t+N) adalah jejak yag ditingkalkan oleh semut k pada edge (i,j)

pada saat antara t sampai(t+1), yang dihitung sebagai berikut:

Q = Konstanta

� = panjang jalur untuk perjalanan semut k

Tabu List digunakan untuk menyimpan nama kota yang telah dikunjungi oleh semut. Tabu (s) adalah kota ke s yang dikunjngi oleh semut k. Sehingga jika kota sudah dilewati maka akan disimpan di Tabu (s) dan tidak boleh dipilih lagi. Sehingga Tabu (k= 1, 2,..,m) dikosongkan.

Probabilitas transisi dari kota i ke kota j diberikan dengan formula sebagai berikut:

Parameter dan digunakan untuk mengendalikan tingkat kepentingan

relatif dari jejak dan visibilitas.

Ʈ (t+N) = ρƮ (t) + ΔƮ (t,t+N)

ΔƮ (t,t+N) = ∑� ΔƮ (t,t+N)

ΔƮ (t,t+N) =

{ � � ; � �� � � � , � � � � � � �� ; � � �� � � � , � � � � � � �� � = {

[Ʈ t ] [� ]

∑[Ʈ t ] [� ] ; � � � ; � ∉ �

Gambar 2. 2 Rumus Intensitas Jejak

Gambar 2. 3 Rumus Penguapan Jejak

Gambar 2. 4 Rumus mencari jejak yang ditinggalkan


(30)

2.4.3 Cara Kerja Aloritma Semut

Urutan pengerjaan dalam algorima semut adalah sebagai berikut:

1. Inisialisasi Parameter α(tetapan intensitas jejak semut), β (tetapan visibilitas),

τ, m

(jumlah semut), iterasi, dan Q (konstanta).

2. Letakan semut ke salah satu node secara acak. 3. Selama dalam iterasi lakukan langkah 4- 6 4. Untuk setiap semut, lakukan :

• Memilih probabilitas (berdasarkan persamaan sebelumnya) untuk bergerak ke node berikutnya

• Tambahkan node yang sudah dilalui kedalam List

• Ulangi hingga semut menyelesaikan solusi

5. Untuk setiap semut yang telah menyelesaikan solusi lakukan: Update feromon τ untuk tiap node yang dilalui semut. 6. Jika solusi lokal terbaik lebih baik daripada solusi global

Simpan solusi lokal terbaik sebagai solusi global 7. Selesai.

2.4.4 Contoh Penerapan Algoritma Semut

Terdapat Sebuah travel yang harus mengantarkan penumpang ke kota A, B, C, D, E. Supir tersebut diminta untuk menemukan jalur terpendek yang harus dilaluinya. Sedangkan kota yang pertama dimasuki adalah kota A sehingga supir diminta menentukan tujuan selanjutnya agar dapat menjadi jalur terpendek. Berikut ini adalah graf dari kota tujuannya:


(31)

Gambar diatas adalah graph dari peta lokasi yang harus dikunjungi oleh supir travel tersebut. Kemudian jarak antar kota di gambarkan dalam bentuk tabel seperti berikut ini:

A B C D E

A 0 8 10 4 5

B 8 0 6 11 10

C 10 6 0 4 12

D 4 11 4 0 6

E 5 10 12 6 0

Tabel 2. 1 Tabel Matrix antar titik Langkah 1:

Inisialisasi parameter :

• α (intensitas jejak semut) = 1.00 • β (visibilitas) = 1.00

• ρ = 0.5

• Ʈ awal = 0.01

• m (jumlah siklus/semut) = 4

• Q = 1

Visibilitas antar kota (� = Q/jarak) :

A B C D E

A 0 0.125 0.100 0.250 0.200

B 0.125 0 0.167 0.091 0.100

C 0.100 0.167 0 0.250 0.083

D 0.250 0.091 0.250 0 0.167

E 0.200 0.100 0.083 0.167 0

Tabel 2. 2 Visibilitas

A B C D E

A 0 0.01 0.01 0.01 0.01


(32)

C 0.01 0.01 0 0.01 0.01

D 0.01 0.01 0.01 0 0.01

E 0.01 0.01 0.01 0.01 0

Tabel 2. 3 Tabel intensitas jejak semut awal Langkah 2:

Memasukan semut ke salah satu node secara acak, dalam kasus ini dimasukan kedalam kota A sebagai titik awal semua semut.

m1(semut1) Kota A

m2(semut2) Kota B

m3(semut3) Kota C

m4(semut4) Kota D

Tabel 2. 4 pengisian node awal Langkah 3:

Melakukan Langkah 4 sampai 5 Langkah 4

Mencari probabilitas tertinggi

[Ʈ t ] [� ] ∑[Ʈ t ] [� ]

Menghitung [Ʈ t ] [� ] :

Kota A – Kota B = [Ʈ t ] [� ] = ( . . ( . . = 0.00125

Kota A – Kota C = [Ʈ t ] [� ] = ( . . ( . . = 0.001

Kota A – Kota D = [Ʈ t ] [� ] = ( . . ( . . = 0.0025

Kota A – Kota E = [Ʈ t ] [� ] = ( . . ( . . = 0.002

Menghitung ∑[Ʈ t ] [� ] :


(33)

[Ʈ t ] [� ] ∑[Ʈ t ] [� ] :

Kota A – Kota B = [Ʈ t ] [� ]

∑[Ʈ t ] [� ] = 0.00125/0.00675 = 0.185185

Kota A – Kota C = [Ʈ t ] [� ]

∑[Ʈ t ] [� ] = 0.001/0.00675 = 0.148148

Kota A – Kota D = [Ʈ t ] [� ]

∑[Ʈ t ] [� ] = 0.0025/0.00675 = 0.37037

Kota A – Kota E = [Ʈ t ] [� ]

∑[Ʈ t ] [� ] = 0.002/0.00675 = 0.296296

Kota B Kota C Kota D Kota E

0.185185 0.148148 0.37037 0.296296

Tabel 2. 5 probabilitas Probabilitas terbesar adalah kota D maka :

A D

Lakukan hal yang sama untuk mendapat tujuan selanjutnya, dimana titik dimulai dari kota D:

Kota D – Kota A = [Ʈ t ] [� ] = ( . . ( . . = 0.0025

Kota D – Kota B = [Ʈ t ] [� ] = ( . . ( . . = 0.00091

Kota D – Kota C = [Ʈ t ] [� ] = ( . . ( . . = 0.0025

Kota D – Kota E = [Ʈ t ] [� ] = ( . . ( . . = 0.001667

Menghitung ∑[Ʈ t ] [� ] = 0.0025 + 0.00091 + 0.0025 + 0.001667

=0.007577 Probabilitas


(34)

Kota D – Kota B = [Ʈ t ] [� ]

∑[Ʈ t ] [� ] = 0.00091/0.007577= 0.120106

Kota D – Kota C = [Ʈ t ] [� ]

∑[Ʈ t ] [� ] = 0.0025/0.007577= 0.32996

Kota D – Kota E = [Ʈ t ] [� ]

∑[Ʈ t ] [� ] = 0.001667/0.007577= 0.219974

Kota B Kota C Kota E

0.120106 0.32996 0.219974

Tabel 2. 6 Probabilitas (2) Probabilitas tertinggi pada kota C

A D C

Lakukan hal yang sama untuk mendapat tujuan selanjutnya, dimana titik dimulai dari kota C :

Kota C – Kota A = [Ʈ t ] [� ] = ( . . ( . . = 0.001

Kota C – Kota B = [Ʈ t ] [� ] = ( . . ( . . = 0.00167

Kota C – Kota D = [Ʈ t ] [� ] = ( . . ( . . = 0.0025

Kota C – Kota E = [Ʈ t ] [� ] = ( . . ( . . = 0.000833

Menghitung ∑[Ʈ t ] [� ] = 0.001 + 0.00167+ 0.0025+ 0.000833 = 0.006

Probabilitas :

Kota C – Kota B = [Ʈ t ] [� ]

∑[Ʈ t ] [� ] = 0.00167/0.006= 0.278179

Kota C – Kota E = [Ʈ t ] [� ]


(35)

Kota B Kota E

0.278179 0.138812

Tabel 2. 7 Probabilitas (3) Probabilitas tertinggi pada kota B

A D C B

Karena yang belum terpilih adalah E maka tujuan terakhir adalah kota E

A D C B E

Langkah 5

Update intensitas jejak semut:

Ʈ (t+N) = ρƮ (t) + ΔƮ (t,t+N)

Kota A ke Kota D:

Ʈ = ρƮ + ΔƮ = (0.5*001)+(1/4)= 0.255

Kota E ke Kota C:

Ʈ = ρƮ + ΔƮ = (0.5*001)+(1/4)= 0.255

Kota C ke Kota B:

Ʈ = ρƮ + ΔƮ = (0.5*001)+(1/6)= 0.167167

Kota B ke Kota E:

Ʈ = ρƮ + ΔƮ = (0.5*001)+(1/10)= 0.105

A B C D E

A 0 0.01 0.01 0.255 0.01


(36)

C 0.01 0.167167 0 0.255 0.01

D 0.255 0.01 0.255 0 0.01

E 0.01 0.105 0.01 0.01 0

Tabel 2. 8 Tabel intensitas jejak semut untuk semut ke 1 Rute yang dilewati m1(semut1):

A D C B E

Selanjutnya ulangi Langkah 4 dan 5 untuk semut 2 sampai 4, selanjutnya bandingkan hasil jarak antara semut 1 – 4 dan cari solusi terbaik sebagai hasil akhir.


(37)

19

BAB III

ANALISIS DAN PERANCANGAN

3.1 Analisis Sistem

Sistem ini bertujuan untuk mencari rute terpendek untuk mendistribusikan barang dari gudang PT CIRCLEKA Indonesia Utama cabang Yogyakarta ke gerai – gerai Circle K yang ada di kota Yogyakarta. Dimana system ini akan menerapkan algoritma semut dalam pencarian rute tersebut. Dan diharapkan algoritma ini dapat membantu untuk mendapat hasil yang maksimal.

Dalam system ini akan terdapat data dari lokasi gudang dan gerai – gerai Circle K yang ada di kota Yogyakarta. Dimana data tersebut menunjukan jarak antara gerai dengan gudang dan juga jarak antara gerai satu dengan yang lainnya. Lalu pengguna system ini dapat memilih gerai – gerai yang akan di tuju untuk mendistribusikan barang. Lalu system akan mencari rute terpendek dalam menjangkau gerai – gerai yang dipilih.

3.1.1 Analisis Masalah

Pendistribusian stock barang oleh PT.Circleka Indonesia Utama region Yogyakarta meliputi 36 toko yang terdapat di wilayah Daerah Istimewa Yogyakarta dan beberapa oko yang terdapat di luar daerah. Dalam melakukan pendistribusian barang ke toko – toko Circle K tersebut digunakan sebuah mobil container berukuran sedang. Dimana dalam sekali tempuh mobil tersebut dapat mendistribusikan stock barang hingga mencakup 3 sampai 5 toko di Yogyakarta.dalam melakukan pendistribusian barang tersebut perjalanan akan dimulai dari Gudang milik PT Circleka Indonesia Utama region Yogyakarta. Gudang tersebut terletak di Jl. Raya Magelang KM 7 No. 9 Sendangadi Mlati Sleman yang mana juga merupakan alamat dari kantor region Yogyakarta.

Dalam pendistribusian barang biasanya akan membawa stock untuk 3 hingga 5 toko. Dimana untuk mengantar barang tersebut dilakukan dalam satu kali perjalanan. Dan dalam menempuh perjalanan tersebut seorang supir akan memutuskan ke toko mana dulu yang dituju. Lalu akan dilanjut dengan toko – toko


(38)

selanjutnya sehingga seluruh toko berhasil dituju dan seluruh barang terdistribusikan.

Gambar 3. 1 Peta Persebaran Toko Circle K di Yogyakarta 3.1.2 Aturan Pencarian Rute

Dalam pembuatan sistem pencari rute ini memiliki beberapa aturan yang harus dipenuhi agar sistem ini dapat dikatakan optimal. Aturan – aturan tersebut merupakan beberapa kendala yang mungkin terjadi dalam sistem. Dan kendala tersebut tentusaja harus dihindari uleh sistem. Kendala – kendala tersebut adalah sebagai berikut:

1. Dalam sekali perjalanan tidak boleh ada toko yang sama

2. Dalam sekali perjalanan Tidak boleh mengunjungi toko yang sudah dikunjungi.

3. Titik awal keberangkatan pendistribusian barang adalah Gudang yang terletak di tempat yang sama dengan kantor pusat cabang Yogyakarta.


(39)

3.1.3 Sumber Data

Sumber data yang diperoleh merupakan data dari PT.Circleka Indonesia Utama region Yogyakarta. Data tersebut merupakan data yang sudah diperbarui per April 2016. Data yang digunakan untuk sistem ini adalah Toko dan Data Rute. Data Toko meliputi 36 toko yang termasuk dalam region yogyakarta. Dimana data tiap toko adalah data nama toko, kode toko, alamat toko dan koordinat lokasi dari toko. Sedangkan untuk data rute merupakan data yang menyimpan data jalur antar toko yang ada. Dimana data tersebut mencakup jarak toko dan rute yang ditempuh antar toko. Berikut ini adalah data toko yang berada dibawah kantor region Yogyakarta:

Kode Nama Toko

YOG0101 YOG 0101 - CK 0101 Sosrowijayan YOG0102 YOG 0102 - CK 0102 Parangtritis YOG0104 YOG 0104 - CK 0104 Sudirman YOG0109 YOG 0109 - CK 0109 Sudirman Tugu YOG0111 YOG 0111 - CK 0111 Sosrowijayan II YOG0112 YOG 0112 - CK 0112 Timoho

YOG0113 YOG 0113 - CK 0113 Taman Siswa 136 YOG0114 YOG 0114 - CK 0114 Kusumanegara 46 YOG0116 YOG 0116 - CK 0116 Kota Baru

YOG0117 YOG 0117 - CK 0117 AM Sangaji YOG0209 YOG 0209 - CK 0209 Magelang KM.5 YOG0213 YOG 0213 - CK 0213 Ring Road

YOG0215 YOG 0215 - CK 0215 Magelang KM.7 No.9 (Gudang) YOG0216 YOG 0216 - CK 0216 Monjali 86 B 230

YOG0301 YOG 0301 - CK 0301 Godean YOG0201 YOG 0201 - CK 0201 Kaliurang YOG0205 YOG 0205 - CK 0205 Babarsari

YOG0207 YOG 0207 - CK 0207 Kaliurang Bawah YOG0210 YOG 0210 - CK 0210 Jl. Solo KM.8 YOG0211 YOG 0211 - CK 0211 Demangan YOG0214 YOG 0214 - CK 0214 Seturan Atas YOG0217 YOG 0217 - CK 0217 Kaliurang KM.8 YOG0221 YOG 0221 - CK 0221 Sorogenen I

YOG0222 YOG 0222 - CK 0222 Nologaten (Wahid Hasyim) YOG0223 YOG 0223 - CK 0223 Anggajaya

YOG0224 YOG 0224 - CK 0224 Nusa Indah YOG0227 YOG 0227 - CK 0227 Seturan YOG0228 YOG 0228 - CK 0228 Affandi

YOG0229 YOG 0229 - CK 0229 Gatic Condong Sari

YOG1101 YOG 1101 - CK 1101 Bandara Adi Sucipto Franchise 1 YOG1102 YOG 1102 - CK 1102 Bandara Adi Sucipto Franchise 2 YOG1103 YOG 1103 - CK 1103 Bandara Adi Sucipto Franchise 3 YOG1104 YOG 1104 - CK 1104 Bandara Ahmad Yani Semarang


(40)

YOG1106 YOG 1105 - CK 1105 Bandara Adi Sucipto Drop Zone Parkir Utara

YOG1107 YOG 1107 - CK 1107 Bandara Adi Sucipto/ Terminal B YOG1108 YOG 1108 - CK 1108 Bandara Adi Sumarmo SOLO

Tabel 3. 1 Data Toko

Data diatas adalah seluruh toko yang ada di regional Yogyakarta, namun tidak semua toko diatas masuk kedalam sistem ini. Terdapat 2 toko yang terletak di luar provinsi yogyakarta, yaitu CK 1108 Bandara Adi Sumarmo Solo dan CK 1104 Bandara Ahmad yani Semarang. 2 toko itu tidak dimasukan kedalam sistem karena dalam pengiriman stock biasanya hanya dilakukan sekali jalan. Dimana mobil yang mengantar stock barang tidak mengantar stock ke toko lain selain toko circle k yang berada diluar provinsi tersebut. Sehingga kedua toko tersebut tidak perlu dimasukan kedalam sistem ini. Selanjutnya terdapat 5 toko dalam ruang lingkup yang sama, yaitu CK 1101, CK 1102, CK 1103, CK1105 dan Ck1107. Kelima toko itu terdapat pada area yang sama, yaitu area Bandara Adisucipto. Sehingga dalam sistem kelima toko Circle K tersebut dijadikan 1 nama saja.dan setelah itu hanya terdapat 30 data toko saja yang digunakan dalam sistem ini. Namun data toko ini dapat diperbarui sesuai dengan apa yang terjadi. Berikut ini adalah data toko CK yang digunakan dalam sistem yang akan dibuat

kode Nama Toko

YOG0101 YOG 0101 - CK 0101 Sosrowijayan YOG0102 YOG 0102 - CK 0102 Parangtritis YOG0104 YOG 0104 - CK 0104 Sudirman YOG0109 YOG 0109 - CK 0109 Sudirman Tugu YOG0111 YOG 0111 - CK 0111 Sosrowijayan II YOG0112 YOG 0112 - CK 0112 Timoho

YOG0113 YOG 0113 - CK 0113 Taman Siswa 136 YOG0114 YOG 0114 - CK 0114 Kusumanegara 46 YOG0116 YOG 0116 - CK 0116 Kota Baru

YOG0117 YOG 0117 - CK 0117 AM Sangaji YOG0209 YOG 0209 - CK 0209 Magelang KM.5 YOG0213 YOG 0213 - CK 0213 Ring Road

YOG0215 YOG 0215 - CK 0215 Magelang KM.7 No.9 YOG0216 YOG 0216 - CK 0216 Monjali 86 B 230 YOG0301 YOG 0301 - CK 0301 Godean

YOG0201 YOG 0201 - CK 0201 Kaliurang YOG0205 YOG 0205 - CK 0205 Babarsari

YOG0207 YOG 0207 - CK 0207 Kaliurang Bawah YOG0210 YOG 0210 - CK 0210 Jl. Solo KM.8 YOG0211 YOG 0211 - CK 0211 Demangan YOG0214 YOG 0214 - CK 0214 Seturan Atas YOG0217 YOG 0217 - CK 0217 Kaliurang KM.8


(41)

YOG0221 YOG 0221 - CK 0221 Sorogenen I

YOG0222 YOG 0222 - CK 0222 Nologaten (Wahid Hasyim) YOG0223 YOG 0223 - CK 0223 Anggajaya

YOG0224 YOG 0224 - CK 0224 Nusa Indah YOG0227 YOG 0227 - CK 0227 Seturan YOG0228 YOG 0228 - CK 0228 Affandi

YOG0229 YOG 0229 - CK 0229 Gatic Condong Sari YOG1101 YOG 1101 - CK 1101 Bandara Adi Sucipto

Tabel 3. 2 Data Toko yang Digunakan Sedangkan untuk data Rute dari toko memiliki data sebagai berikut

Kode Toko Awal Kode Toko Tujuan Jarak Rute YOG0101 YOG0101 0 ... YOG0101 YOG0102 1000 ... ... ... ... ... ... ... ... ... YOGnnnn YOGnnn ... ...

Tabel 3. 3 Tabel data rute

Data diatas merupakan data rute yang digunakan sistem untuk mencari jarak dan jalur yang harus dilalui. Dimana data tersebut terdiri dari 4 entitas yaitu kode toko awal, kode toko tujuan, jarak dan rute. Kode toko awal merupakan titik awal dari semut, sedangkan kode toko tujuan adalah toko yang dituju selanjutnya. Lalu untuk data jarak adalah jarak antara toko awal dan toko tujuan. Sedangkan rute merupakan jalur yang dilalui oleh semut untuk mencapai tujuan dari toko awal menuju ke toko tujuan.

Untuk mendapatkan data diatas, diguanakan aplikasi google maps untuk mendapatkan data jarak dan jalur yang dilewati. Untuk mencarinya diperlukan data koordinat antar toko. Data koordinat tersebut dimasukan pada google maps maka akan muncul hasil jarak antar toko beserta jalur yang dilewati. Data yang didapat tersebut selanjutnya disimpan kedalam tabel data rute diatas. Berikut ini adalah gambar contoh pengambilan data rute dan jarak antar toko.


(42)

Gambar 3. 2 Pencarian rute dengan google maps 3.2 Permodelan Algoritma Semut untuk Pencarian Rute

Pada proses penerapan algoritma semut untuk pencarian rute distribusi barang, terdapat beberapa komponen yang harus diperhatikan

3.2.1 Inisialisasi Parameter

Inisialisasi parameter merupakan proses awal dalam penerapan algoritma semut. Beberapa parameter yang digunakan dalam algoritma semut adalah α(alfa), β(Beta),ρ(Rho), m(jumlah semut) dan Iterasi.

Parameter Nilai

α(alfa) 5

β(Beta) 2

ρ(Rho) 0.3

m(jumlah semut) 5

Iterasi 2

Tij 0.01

Tabel 3. 4 Inisialisasi Parameter

Data parameter diatas adalah data yang disesuaikan dengan buku refrensi dari Sri Kusumadewi dkk (2003) dan Skripsi dari Roy Wiranta(2015). Selain parameter diatas juga terdapat parameter visibilitas awal, dimana visibilitas awal diperoleh


(43)

dengan rumus η =1/Jarak. Sedangkan untuk mendapatkan nilai jarak digunakan method cariJarak() untuk mendapat nilai jarak antar toko. Data jarak antar toko sendiri disimpan didalam database.

Selanjutnya sebagai proses awal semut akn menuju ke node pertama secara random. Dari node pertama ini semut akan mencari node – node selanjutnya untuk dituju, sehingga membentuk senuah rute. Untuk menentukan node selanjutnya diperlukan nilai probabilitas, dimana titik yang memiliki nilai probabilitas tertinggi merupakan node selanjutnya. Untuk mendapat nilai probabilitas diperlukan nilai – nilai dari parameter diatas.setelah mendapat semua node yang dituju pencarian probabilitas akan dilakukan sesuai dengan banyaknya nilai iterasi.

3.2.2 Mencari Urutan Node

Proses Selanjutnya merupakan pencarian urutan node. Untuk mencari node diperlukan pencarian probabilitas, dimana nilai probabilitas adalah nilai yang digunakan untuk mencari titik node(toko) selanjutnya dalam pencarian rute. Langkah untuk mendapatkan nilai probabilitas tertinggi adalah sebagai berikut:

1) Cari visibilitas antar toko i ketoko j sebanyak jumlah toko yang dipilih, i merupakan toko yang disinggahi oleh semut sedangkan j adalah toko yang belum dikunjungi oleh semut

2) Setelah seluruh visibilitas ditemukan maka jumlahkan nilai seluruh visibilitas yang ada.

3) Langkah terakhir adalah membagi nilai visibilitas awal dengan nilai dari jumlah visibilitas.

4) Hasil dari pembagian merupakan nilai probabilitas.

Setelah mendapat nilai probabilitas maka akan dicari nilai probabilitas tertinggi. Nilai probabilitas tertinggi merupakan node selanjutnya yang akan dituju oleh semut. Setelah mendapat node selanjutnya maka dilakukan lagi langkah diatas hingga seluruh toko berhasil dikunjungi oleh semut. Disetiap kunjungan semut maka jejak dari semut(fromon) harus diupdate, dimana langkah untuk mengupdate feromon semut adalah:


(44)

Setelah semut berhasil mengunjungi seluruh toko maka lakukan langkah tersebut sebanyak iterasi, namun dengan nilai feromon yang telah diupdate. Setelah dilakukan pencarian node sebanyak iterasi maka hasil akhir dari pencarian rute tersebut akan disimpan sebagai data dari semut ke-m. Iterasi tersebut biasanya akan memiliki hasil yang konsisten antara ireasi terakhir dan iterasi sebelumnya. Kemudian Langkah tersebut akan dilakukan sebanyak jumlah semut yang di masukan. Proses yang dilakukan setiap semut untuk mendapat rute sama seperti cara diatas, hanya saja nilai dari node pertama setiap semut berbeda karena node pertama setiap semut didapat secara random. Setelah semua semut mendapatkan rutenya maka akan dilakukan update solusi sebagai berikut.

3.2.3 Update Solusi

Langkah terakhir adalah update solusi, dimana langkah ini menentukan jalur semut yang dipakai. Untuk melakukan update solusi maka langkah langkah sebelumnya haruslah sudah terpenuhi. Setelah seluruh semut mengunjungi seluruh node(toko) maka pada bagian ini akan ditentukan solusi terbaik.

3.3

Perancangan Sistem

3.3.1 Diagram Use case

Gambar 3. 3 Diagram Usecase

1) Selama cek lebih kecil dari jumlah semut maka lakukan langkah 2 dan 3 2) Bandingkan nilai jarak solusi akhir dengan nilai jarak semut ke-m 3) Jika nilai jarak semut ke-m tidak sama dengan 0 dan nilai jarak semut ke

m lebih kecil dari nilai solusi akhir maka: a. Solusi akhir = nilai jarak semut ke-m Jika tidak, maka:

b. Solusi akhir = solusi akhir 4) Selesai


(45)

3.3.2 Ringkasan Use Case

Nama Use Case Keterangan Pelaku

Cari Rute Use case ini merupakan fungsi utama dari

sistem dimana pada bagian ini sistem akan melakukan pencarian rute sesuai dengan tujuan yang diilih oleh pengguna, dimana sebelumya data sudah disimpan pada database

Admin

Cetak Hasil Use case ini merupakan proses pencetakan

hasil dari pencarian rute terpendek. Dimana rute terpendek akan dicetak dan dijadikan surat pengantar untuk pendistribusian

Admin

Ubah Data Toko Use Case ini merupakan pengubahan data

jikalau terjadi perubahan data dari data yang sudah ada dalam sistem

Admin

Tambah Data Toko Use case ini merupakan proses penambahan data baru kedalam sistem.

Admin

Hapus Data Toko Use Case ini merupakan proses penghapusan

data pada sistem yang dirasa sudah tidak diperlukan lagi.

Admin

Tabel 3. 5 Ringkasan Usecase 3.3.3 Narasi Use Case

Nama Use Case Cari Rute

Aktor Admin

Diskripsi Pengguna mencari rute terpendek

Prakondisi Sistem sudah dibukan dan dalam menu Home

Langkah Aksi Aktor Reaksi Sistem

Kerja Langkah 1:

Admin memilih tombol Cari


(46)

Langkah 3:

Admin memilih toko - toko yang akan dicari rutenya

Langkah 5:

Setelah semua toko yang diinginkan masuk tabel, admin klik tombol Mulai cari Rute

Langkah 7:

Admin menyetujui dengan memilih OK.

Sistem menampilkan menu Cari Rute.

Langkah 4:

Sistem memasukan toko –

toko yang dipilih kedalam tabel

Langkah 6:

Sisem menampilkan pesan persetujuan/konfirmasi

Langkah 8:

Sistem mencari rute

terpendek berdasarkan data yang ada

Langkah 9:

Menampilkan field hasil dari pencarian rute disertai urutan toko, jarak yang ditempuh beserta ruteny

Alternate Langkah 9:

Menampilkan pesan eror jika terdapat kesalahan.


(47)

3.3.4 Diagram Aktivitas a. Cari Rute

Admin memilih tombol Cari Rute

Sistem menampilkan menu Cari Rute.

Admin memilih toko - toko yang akan dicari rutenya

Sistem memasukan toko – toko yang dipilih kedalam tabel Setelah semua toko yang diinginkan

masuk tabel, admin klik tombol Mulai cari Rute

Sisem menampilkan pesan persetujuan/konfirmasi Admin menyetujui dengan memilih

OK.

Sistem mencari rute terpendek berdasarkan data yang ada

Menampilkan pesan rute terpendek berhasil didapat disertai urutan rutenya

Mulai

Selesai

Gambar 3. 4 Diagram Aktifitas Cari Rute

3.4

Perancangan Basisdata

3.4.1 ER Diagram


(48)

3.4.2 Model Fisikal

a) Tabel Toko

Field Name Type Size Key

Kode_Toko Varchar2 10 *

Nama_Toko Varchar2 100

Nomer Number

Alamat Varchar2 100

Koordinat Varchar2 100

Tabel 3. 7 Design Tabel toko b) Tabel Rute

Field Name Type Size Key

No_Rute Number *

Kode_Toko_Awal Varchar2 10

Kode_Tujuan Varchar2 10

Jarak Number 10

Rute_Tujuan Varchar2 4000

Tabel 3. 8 Design Tabel Rute c) Tabel Hasil

Field Name Type Size Key

Nomer Number *

Tanggal Date

Rute Varchar2 4000

Jarak_Tempuh Varchar2 100

Urutan_Toko Varchar2 100


(49)

3.5 Design Interface

a) Home

Gambar dibawah adalah menu Home dimana akan tampil saat pertama kali sistem dijalankan. Dalam menu tersebut terdapat tombol utama yaitu, Tombol tombol Cari Rute. Pada tombol Cari Rute sistem akan mengantarkan kedalam menu Cari Rute. Menu ini adalah fungsi utama dari sistem pencari jalur terpendek travel. Dimana sistem akan mencari jalur terpendek tersebut. Setelah itu terdapat juga pilihan keluar disudut kanan bawah. Pilihan tersebut berfungsi untuk menutup sistem atau keluar dari sistem pencari rute terpendek distribusi ini.

Gambar 3. 6 Tampilan Home b) Cari Rute

Menu Cari Rute merupakan menu yang menampilkan fungsi utama dari sistem, yaitu mencari rute terpendek untuk perjalanan travel. Menu ini akan muncul setelah Admin memilih tombol Cari Rute pada Menu Home. Dalam menu ini terdapat combo box yang digunakan untuk memilih toko – toko yang akan dituju. Selanjutnya nama – nama toko yang sudah terpilih akan muncul di tabel yang ada di bawah. Lalu terdapat tulisan home di bagian atas yang berguna untuk kembali ke dalam Menu Home dan Opsi keluar untuk langsung keluar dari sistem.sedangkan tombol cari rute akan membuat sistem mencari rute sesuai toko toko yang ada dalam tabel.


(50)

Gambar 3. 7 Tampilan Cari Rute

c) Lihat Data

Menu Lihat data adalah salah satu pilihan menu dari sistem ini. Menu ini dapat diakses dengan menekan tombol lihat data pada menu Home. Didalam menu ini akan ditampilkan data toko yang ada dalam sistem. Di menu ini juga terdapat pilihan tambah data, ubah data dan juga hapus data. Dengan memilih salah satu dari pilihan tersebut maka akan ditampilkan menu sesuai dengan yang dipilih.


(51)

d) Tambah Data

Menu ini juga merupakan menu tambahan dari sistem pencari rute distribusi barang. Dimana menu ini berfungsi untuk menambahkan data rute sekaligus data rute dari toko tersebut. Hal ini tentusaja mengantisipasi jika terdapat toko Circle K baru yang akan dibangun di kota Yogyakarta. Dalam sistem ini ada textfield untuk mengisi kode toko baru tersebut, lalu nama toko, alamat toko dan koordimat lokasi dari toko tersebut. Setelah data – data tersebut diisi maka selanjutnya akan mengisi data rute dari toko baru tersebut menuju toko lainyang sudah ada. Atribut yang dimasukan adalah jarak antar toko dan rute yang dilewati.

Gambar 3. 9 Tampilan Tambahan Data

e) Perbarui Data

Menu ini juga merupakan menu tambahan dari sistem pencari rute distribusu barang. Dimana menu ini berfungsi untuk mengubah data dari toko jikalau terjadi perpindahan lokasi ataupun data lain dari toko yang sudah ada didalam sistem. Hampir sama dengan tambah data hanya saja terdapat combo box yang digunakan untuk memilih nama toko yang akan di ubah. Selanjutnya proses pengubahan data toko yang dilanjut dengan pengubahan rute yang ditempuh dari toko yang ada menuju toko yang baru dubah dan juga sebaliknya.


(52)

Gambar 3. 10 Tampilan Tambahan Data

f) Hapus Data

Menu Hapus data merupakan menu tambahan dalam sistem ini, dimana sistem ini berguna untuk menghapus data toko yang sudah tidak digunakan lagi. Dimana menu ini memiliki combo box untuk memilih toko yang akan dihapus. Lalu textfield akan terisi data dari toko yang terpilih. Lalu terdapat button hapus untuk menghapus data toko tersebut beserta data rute – rute yang bersangkutan.


(53)

(54)

36

BAB IV

IMPLEMENTASI

Dalam bab ini akan dibahas mengenai implementasi dari sistem berdasarkan dari rancangan yang dibuat pada bab sebelumnya.

4.1 Implementasi Proses

4.1.1 Implementasi Algoritma Semut

Bagian ini menjelaskan pengimplementasian Algoritma semut kedalam program, dimana cara kerja dari algoritma semut sudah dijelaskan pada Bagian sebelumnya. Langkah pertama dari algoritma Semut adalah penentuan nilai dari Alpa, Beta, Iterasi, Pheronom, banyak Semut(m) dan beberapa atribut lainya. Berikut adalah penentuan nilai nilai atribut tersebut,

Nilai – nilai yang dimaskan kedalam atribut diatas adalah nilai yang dimasukan secara random.

private static double ALPHA = 5;//bebas private static double BETA = 2;//bebas

private static double RHO = 0.3;//antara 0 dan 1 int msemut = 5;//bebas

double TAU[][];//bebas

private static int iterasi = 2;//iterasi bebas double ETA[][];// bebas

double Tij = 0.01;

for (int i = 0; i < jumChecklist; i++) {

for (int j = 0; j < jumChecklist; j++) { if (i == j) {

feromonAwal[i][j] = 0; } else {

feromonAwal[i][j] = 0.01; }}}

for (int i = 0; i < jumChecklist; i++) { for (int j = 0; j < jumChecklist; j++) { System.out.print(feromonAwal[i][j] + " "); System.out.print("");

}

System.out.println(" "); }


(55)

Selanjutnya dalam melakukan Inisialisasi Parameter adalah menentukan nilai pheronome awal. Pheronome merupakan jejak yang dilalui oleh semut, sehingga nilai dari pheronome awal adalah nilai yang kecil, dan pada kasus ini dipilih 0,01 sebagai nilai pheronome awal. Pheronome tersebut akan dibentuk kedalam sebuah matrix dengan ukuran yang menyesuaikan dengan jumlah checklist(jumlah toko yang dipilih).

Bagian ini merupakan pencarian jarak antar toko yang dipilih, dimana jarak antar toko tersebut akan digunakan dalam pencarian Visibilitas yang juga merupakan salah satu parameter yang harus diidentifikasi pada langkah pertama.

Selanjutnya adalah identifikasi visibilitas antar toko, dimana rumus yang digunakan adalah (

= 1/jarak). Karena jarak menggunakan satuan meter maka rumus menjadi 1000/jarak. Dimana nilai jarak adalah jarak antar toko circle k.

for (int x = 0; x < jumChecklist; x++) {

for (int y = 0; y < jumChecklist; y++) { String baris = simpanTitik[x]; String kolom = simpanTitik[y];

String jarak = CariJarak.getJarakKoneksi().cari_jarak (baris, kolom);

getJarak[x][y] = Double.parseDouble(jarak); }}

for(int a=0; a<jumChecklist; a++){

for (int b=0; b<jumChecklist; b++){ if(a==b){

visibilitasAwal[a][b] = 0; }else{

visibilitasAwal[a][b] = 1000 / getJarak[a][b]; }

System.out.print(visibilitasAwal[a][b]+" "); }

System.out.println(" "); }


(56)

Data tersebut akan terbentuk kedalam matriks dengan ukuran yang disesuaikan dengan jumlah toko yang dipilih.

Bagian ini merupakan langkah selanjutnya dari algoritma semut, yaitu meletakan semut secara random. Semut diletakan berdasarkan atribut sem.

Selanjutnya bagian ini adalah langkah untuk menentukan nilai probabilitas, dimana rumus untuk mencari nilai probabilitas adalah sebagai berikut:

� = {

[Ʈ t ] [� ]

∑[Ʈ t ] [� ] ; � � �

; � ∉ �

Dimana langkah pertama adalah mencari nilai pheronom awal di pankat nilai alfa kemudian nilai visibilitas awal dipangkat nilai beta. Lalu nilai visibilitas tersebut di total kedalam variabel nextprob. Kemudian nilai nilai yang sudah didapat tersebut dimasukan kedalam rumus seperti diatas hingga didapat nilai probabilitas dari setiap titik yang dituju semut m.

for(j = 0; j< jumChecklist; j++){ if(x==0){

visibilitasAkhir[nextI][j] = Math.pow(feromonAwal[nextI][j], ALPHA) * Math.pow(visibilitasAwal[nextI][j], BETA);

}else{

visibilitasAkhir[nextI][j] = Math.pow(feromon[nextI][j], ALPHA) * Math.pow(visibilitasAwal[nextI][j], BETA); }

nextProb = nextProb + visibilitasAkhir[nextI][j]; }

System.out.println("Prob = " + nextProb); for (j = 0; j < jumChecklist; j++) {

probabilitas[nextI][j] = visibilitasAkhir[nextI][j] / nextProb;} For (int sem = 1; sem <= msemut; sem ++){

--- Tabu[1]=sem; }


(57)

Langkah selanjutnya setelah nilai probabilitas didapat adalah mencari nilai probabilitas tertinggi. Nilai probabilitas tertinggi menentukan tujuan selanjutnya dalam perjalanan semut. Pada langkah tersebut akan memeriksa apakah nilai max lebih kecil dari probabilitas[i][j]. Jika iya nilai max akan diisi dengan nilai dari probabilitas[i][j] dan nextIsementara diisi oleh nilai j dengan syarat nilai j tidak sama dengan nilai yang sudah disimpan didalam tabulist.

Setelah didapat nilai probabilitas tertinggi maka nilai yang disimpan kedalam nextIsementara akan disimpan kedalam tabulist. Langkah diatas adalah langkah dari penyimpanan nilai nextIsementara kedalam tabulist.nilai yang didapat tersebut merupakan node selanjutnya dalam perjalanan semut. Dan setiap node yang didapat akan disimpan kedalam tabu list secara urut berdasakan node pertama yang terpilih.

Selain menyimpan node selanjutnya yang didapat dari pencarian probabilitas, feronom dari node i menuju node j juga perlu di update. Untuk

for (j = 0; j < jumChecklist; j++) {

if (nilaiMax < probabilitas[nextI][j]) {

if (j!=tabu[0] && j!=tabu[1] && j!=tabu[2] && j!=tabu[3]

&& j!=tabu[4] && j!=tabu[5] && j!=tabu[6] ) { nilaiMax = probabilitas[nextI][j];

nextIsementara = j; } else {

nilaiMax = nilaiMax;

nextIsementara = nextIsementara; } } else {

nilaiMax = nilaiMax;

nextIsementara = nextIsementara; }}

nextI = nextIsementara; tabu[t]=nextI;

feromon[nextI][nextIsementara]=

((RHO*feromon[nextI][nextIsementara])+ (1000/getJarak[nextI][nextIsementara]));


(58)

menupdate feronome atau jejak yang dilalui semut maka nilai Rho dikalikan dengan nilai feronom awal kemudian ditambahkan dengan nilai visibilitas.

Setelah mengupdate nilai feronom sesuai dengan rute yang dilalui oleh semut ke m, maka data feronom akan diupdate. Dimana nilai feronom yang dilewati oleh semut nilainya akn disesuaikan dengan nilai feronom yang sudah diupdate sebelumnya, sedangkan yang tidak dilewati maka nilai akan tetap 0.01.

Langkah – langkah tersebut dilakukan berulang hingga semua node berhasil dikunjungi oleh semut ke m. Lalu semut yang lain juga akan mulai melakukan pencarian rute dengan cara yang sama namun dengan node awal yang berbeda.

Setiap selesai mencari seluruh node dan sudah melakukan pencarian sebanyak iterasi, maka hasil ddari pencarian tersebut akan disimpan. Bagian ini merupakan penyimpanan urutan node yang disimpan dalam variabel urutan. Data node yang disimpan kedalam urutan adalah data dari simpanTitik yang merupakan sebuah kode toko.

for (int iupdt = 0; iupdt < jumChecklist; iupdt++) {

for (int jupdt = 0; jupdt < jumChecklist; jupdt++) { if (iupdt == jupdt) {

feromon[iupdt][jupdt] = 0;

}else if(feromon[iupdt][jupdt] != 0){

feromon[iupdt][jupdt]=feromon[iupdt][jupdt]; feromon[jupdt][iupdt]=feromon[iupdt][jupdt]; }else {

feromon[iupdt][jupdt] = 0.01; }}}

for(int c=0; c<jumChecklist; c++){ int no=c+1;

urutan=urutan+no+"."+simpanTitik[tabu[c]]+" "; }

for(int r=1; r<jumChecklist; r++){

rute[r]= CariJarak.getJarakKoneksi().

get_Rute(simpanTitik[tabu[r-1]], simpanTitik[tabu[r]]); hitungtotal[r]=CariJarak.getJarakKoneksi().

cari_jarak(simpanTitik[tabu[r-1]], simpanTitik[tabu[r]]); hittot[r]=Double.parseDouble(hitungtotal[r]);


(59)

Selanjunya adalah menyimpan data rute yang akan digunakan untuk mencapai node atau toko toko yang didapat oleh semut. Untuk mendapatkan data rute yang dilalui dibutuhkan kode toko awal dan kode toko tujuan. Dimana dua atribut tersebut digunakan untuk mendapat data rute dari database. Selanjutnya data rute akan dirangkai kedalam ruteFix. Dimana ruteFix merupakan rangkaian ryte dari gudang hingga toko terakhir yang akan dikunjungi.

Selanjutnya data nama toko juga disimpan kedalam variabel nama toko, dimana data nama toko didapat dari database. Untuk mendapat nama toko diperlukan kode toko untuk mencari nama toko dalam database. Selanjutnya nama toko yang didapat dimasukan kedalam variabel namaToko.

Setelah data dari jarakTotal, urutanToko, ruteFix dan nama Toko diperoleh maka data tersebut dimasukan kedalam array. Dimana array tersebut disesuaikan dengan data semut. Sehingga data yang disimpan adalah data milik semut 1 hingga semut ke 5. Oleh karena itu proses yang dilakukan dari Gambar 4.5 meletakkan semut hingga proses pada Gambar 4.15 data fix akan dilakukan sebanyak jumlah semut yang sudah ditentukan pada gambar 4.1 Inisialisasi. Maka proses ini akan dilakukan dari semut ke 1 hingga semut ke 5. Sehingga setiap semut akan memiliki hasil rute, jarak, nama toko dan urutan yang berbeda beda.

for(int tk=0; tk<jumChecklist; tk++){

toko[tk]=CariJarak.getJarakKoneksi().get_Toko(simpanTitik[tabu[tk]]); int no = tk+1;

namaToko=namaToko+no+". "+toko[tk]+"\n"; }

JarakTotalAkhir[sem]=jaraktotal; urutanakhir[sem]=urutan;

ruteAkhir[sem]=ruteFix;

namaTokoAkhir[sem]=namaToko;

for(int s = 1; s<=msemut; s++){

if(jaraktotalFix > JarakTotalAkhir[s] &&JarakTotalAkhir[s]!=0){

simpanTitik[tabu[r]] +" melewati : "+rute[r]);

ruteFix=ruteFix+"\n"+"dari "+simpanTitik[tabu[r-1]]+" ke "+simpanTitik[tabu[r]] +" melewati : "+rute[r]; }


(60)

Setelah seluruh semut melakukan perjalanan dan menemukan rutenya masing masing dalam mengelilingi node, maka akan ditentukan nilai yang terkecil. Dimana nilai jarak menjadi acuan untuk dipilihnya rute untuk dilalui. Hal ini merupakan Langkah selanjutnya dari algoritma semut dalam menentukan rute. Program akan mencari jarak terpendek dari kelima semut yang disebar, dan jarak yang paling pendek akan digunakan sebagai rute yang dipilih. Sehingga data semut ke m akan menjadi hasil akhir dari pencarian rute dalam pendistribusian barang.

Langak terakhir adalah mencetak hasil dari pencarian rute, dan dengan demikian pencarian rute distribusi barang dengan pengopimalisasian algoritma semut berakhir. Data yang telah diperoleh tersebut kemudian disimpan kedalam database. Diana data tersebut dapat digunakan sebagai lampiran dan acuan dalam melakukan pendistribusian barang.

System.out.println("Hasil akhir");

System.out.println("Jarak: "+jaraktotalFix); System.out.println("uruan:");

System.out.println(urutanFix); System.out.println("nama Toko: "); System.out.println(namaTokoFix); System.out.println("Rute: ");

System.out.println(ruteFinal); jaraktotalFix=JarakTotalAkhir[s]; urutanFix=urutanakhir[s];

namaTokoFix=namaTokoAkhir[s]; ruteFinal = ruteAkhir[s];

}else{

jaraktotalFix=jaraktotalFix; urutanFix=urutanFix;

namaTokoFix=namaTokoFix; ruteFinal=ruteFinal; }}


(61)

4.2 Implementasi Tampilan Antar Muka 4.2.1 Implementasi Antar Muka Awal (Home)

Antar muka awal (Home) merupakan halaman pertama yang akan muncul saat pertama kali program dijalankan. Halaman tersebut menampilkan nama sistem dan juga logo dari Circle K dibagian atas. Selain itu terdapat juga 2 tombol cari rute dan juga lihat data toko. Tombol cari ute akan mengantar kedalam antar muka cari rute dan lihat data toko akan menampilkan antar muka lihat data toko.terdapat juga ikon keluar yang akan menutup sistem jika ikon tersebut dipilih.

Gambar 4. 1 Tampilan Home 4.2.2 Implementasi Antar Muka Cari Rute

Antar Muka cari rute adalah halaman yang ditampilkan jika dari antar muka awal dipilih tombol cari rute. Antar muka ini adalah antar muka yang disediakan untuk mencari rute pendistribusian barang. Antar muka ini dapat dilihat pada gambar 4.2


(62)

Gambar 4. 2 Antar Muka Cari Data

Pada antar muka ini erdapat combobox yang berisikan nama toko circle k yang terdapat di region yogyakarta. Untuk mencari rute toko maka pengguna akan memilih toko yang terdapat pada combo box dan kemudian nama-nama toko yang dipilih akan masuk kedalam tabel. Berikut adalah kode untuk memasukan nama - nama toko yang dipilih kedalam tabel.

if(comboNamaToko.getSelectedItem().toString().equals("pilih toko")){ //Nothing to do

}else{

simpanTitik[0]="YOG0215";

nama = (String) comboNamaToko.getSelectedItem(); try {

System.out.println(nama); List<DataRute> ListData =

CariJarak.getJarakKoneksi().cariToko(nama); DataRute rt = new DataRute();


(63)

Kode ini akan memerintahkan sistem untuk memasukan data dari toko yang dipilih dari combo box untuk masuk kedalam tableToko. Setelah semua toko yang akan dituju dimasukan kedalam tabel maka akan digunakan perintah cari rute untuk mencari rute yang akan menuju ke toko – toko yang sudah dipilih. Kode untuk mencari rute sudah dijelaskan pada bagian 4.1.1 Implementasi Algoritma semut. Jika dalam sstem belum ada toko yang dipilih maka sistem akan menampilkan pemberitahuan seperti berikut

Gambar 4. 3 Pemberitahuan

Dan jika sudah ada toko yang dipilih, namun baru 1 toko maka akan muncul pemberitahuan seperti berikut ini

Gambar 4. 4 Pemberitahuan(2) DefaultTableModel model = (DefaultTableModel) tableToko.getModel();

tableToko.setModel(model);

model.addRow(new Object[]{ListData.get(0).getKodeToko(), ListData.get(0).getNamaToko()});

} catch (Exception ex)

{Logger.getLogger(FormCariRute.class.getName()).log(Level.SEVERE, null, ex); }

jumChecklist=jumChecklist+1; } comboNamaToko.removeItem(nama);


(64)

Selanjutnya jika sistem telah berhasil mendapatkan rute maka data tersebut akan disimpan kedalam database. Berikut adalah kode untuk menyimpan data hasil tersebut.

Perintah tersebut akan menyimpan data hasil dari pencarian rute kedalam database hasil. Selain menyimpan hasil tersebut pada bagian ini juga dapat mencetak hasil dari pencarian tersebut dengan perintah berikut:

PreparedStatement pstmt = null; try{

conn.setAutoCommit(false);

String sql = "insert into hasil values(?,?,?,?,?)"; pstmt = conn.prepareStatement(sql);

pstmt.setString(1, rute.getNomer()); pstmt.setString(2, rute.getTgl_eksekusi()); pstmt.setString(3, rute.getRute());

pstmt.setDouble(4, rute.getJarak()); pstmt.setString(5, rute.getToko()); pstmt.executeQuery();

conn.commit();

}catch(SQLException ex){ conn.rollback();

throw ex; }

String reportSource = "./laporan/reportHasilRuteLndscp.jasper"; Map<String,Object> params = new

HashMap<String,Object>(); try {

JasperPrint jasperPrint =

JasperFillManager.fillReport(reportSource,params,kon); JasperViewer.viewReport(jasperPrint,false);

} catch (JRException ex) { ex.printStackTrace(); }


(65)

4.2.3 Implementasi Antar Muka Lihat Data

Antar muka Lihat Data adalah halaman yang akan menunjukan data toko yang terdapat pada sisem ini. Selain menampilkan datatoko yang dimiliki, sistem ini juga merupakan halaman yang dapat mengarahkan ke antar muka lain, yaitu Tambah Data, Perbarui Data dan Hapus Data. Antar muka Lihat Data dapat dilihat pada gambar 4.5

Gambar 4. 5 Antar Muka Lihat Data

Kode program untuk menampilkan data toko yang terdapat dalam sistem ini adalah sebagai berikut:

public List<DataRute> tampilToko() throws SQLException, Exception { PreparedStatement statement = null;

ResultSet result = null; try {

conn.setAutoCommit(false);

statement = conn.prepareStatement("select kode_toko," + "nama_toko "

+ "from toko_ck order by kode_toko"); result = statement.executeQuery();


(66)

Diatas merupakan kode untuk menampilkan data toko kedalam antar muka Lihat Data. Selain melihat data toko pada antar muka ini terdapat tombol Tambah data yang akan mengantar pada antar muka tambah data. Lalu terdapat tombol Perbarui data yang akan mengantar pada antarmuka perbarui data. Terdapat juga tombol hapus data yang akan mengantar pada antar muka hapus data. Selain itu juga terdapat tombol kembali yang akan mengantar kembali ke antar muka Lihat Data. 4.2.4 Implementasi Antar Muka Tambah Data

Antar muka ini merupakan antar muka yang menampilkan halaman tambah data, dimana tambah data berfungsi untuk menambahkan data toko jika terdapat toko circle k baru di region Yogyakarta. Selain menambahkan data toko baru pada halaman ini juga akan menambahkan data rute antara toko baru menuju ke toko yang sudah ada sebelumnya. Berikut adalah gambar dari antar muka tambah data

List<DataRute> datarute = new ArrayList<DataRute>(); while (result.next()) {

DataRute rute = new DataRute();

rute.setKodeToko(result.getString("kode_toko")); rute.setNamaToko(result.getString("nama_toko")); datarute.add(rute); }

conn.commit(); return datarute;

} catch (SQLException exception) { throw exception;

} finally { try {

conn.setAutoCommit(true); if (result != null) {

result.close();} if (statement != null) { statement.close();}

} catch (SQLException exception) { throw exception; }}}


(67)

Gambar 4. 6 antar muka tambah data Berikut ini adalah kode untuk menambahkan data toko baru:

public void tambahToko(Toko tk) throws SQLException{ PreparedStatement pstmt;

try{

conn.setAutoCommit(false);

String sql = "insert into toko_ck values(?,?,?,?,?)"; pstmt = conn.prepareStatement(sql);

pstmt.setString(1, tk.getNo_toko()); pstmt.setString(2, tk.getKode_toko()); pstmt.setString(3, tk.getNama_toko()); pstmt.setString(4, tk.getAlamat_toko()); pstmt.setString(5, tk.getKoor_toko()); pstmt.executeQuery();

conn.commit();

}catch (SQLException ex){ conn.rollback();


(68)

Kode diatas adalah kode untuk menambahkan data toko baru, kemudian jika data toko baru berhasil ditambahkan maka sistem akan menampilkan kode berikut ini

Gambar 4. 7 Pemberitahuan berhasil menambah data toko

Gambar 4.7 menunjukan pesan bahwa sistem berhasil menyimpan data mealui kode yang dibahas sebelumnya. Selain itu sistem dapat menyimpan rute antar toko baru dan toko yang sudah ada sebelumnya. Berikut adalah kode untuk menyimpan data rute tersebut:

Selanjutnya jika data rute telah berhasil disimpan menggunakan kode diatas maka akan muncul psan berikut:

Gambar 4. 8 Pemberitauan rute berhasil ditambah public void tambahRute(Rute rt) throws SQLException{

PreparedStatement pstmt; try{

conn.setAutoCommit(false);

String sql = "insert into rute_ck values(?,?,?,?,?)"; pstmt = conn.prepareStatement(sql);

pstmt.setString(1, rt.getNo()); pstmt.setString(2, rt.getKodeAwal()); pstmt.setString(3, rt.getKodeTujuan()); pstmt.setDouble(4, rt.getJarak()); pstmt.setString(5, rt.getRute()); pstmt.executeQuery();

conn.commit();

}catch (SQLException ex){ conn.rollback();


(69)

4.2.5 Implementasi Antar Muka Perbarui Data

Antar muka ini menampilkan halaman perbarui data yang berfungsi untuk memperbarui data toko dan rute yang sudah ada. Hal ini bisa saja dikarenakan kesalahan penginputan data sebelumnya atau juga perpindahan toko ke tempat lain. Berikut ini merupakan gambar dari antar muka perbarui data:

Gambar 4. 9 Antar Muka Perbarui Data

Sebelum memperbari data maka pengguna harus memilih nama toko yang akan diperbarui dari combo box, berikut adalah kode untuk menampilkan toko yang dipilih dari combo box:

nama = (String) comboNamaToko.getSelectedItem();

System.out.println(nama); kode = nama.substring(0, 8).replace(" ", ""); System.out.println(kode);

try {

textKodeLama.setText(kode);

labelKodeNamaToko.setText(nama.substring(0, 19)); textNamaLama.setText(nama.substring(19));

textAlamatLama.setText(KontrolUpdate.getKoneksiKontrolUpdate().AlamatToko(k ode));


(1)

Langkah 17:

Sistem mengubah data toko dalam database

Alternate Langkah 9:

Menampilkan pesan eror jika terdapat kesalahan.

Tabel 3. 11 Narasi Ubah Data

Nama Use Case Tambah Data

Aktor Admin

Diskripsi Pengguna menambahkan data Toko

Prakondisi Sistem sudah dibukan dan dalam menu Home

Langkah Aksi Aktor Reaksi Sistem

Kerja Langkah 1:

Admin memilih tombol Lihat Data

Langkah 3:

Admin memilih tombol Tambah data pada menu Lihat Data

Langkah 5:

Admin memasukan data toko yang baru

Langkah 6:

Admin menekan tombol tambah data

Langkah 9:

Admin memasukan data rute antar toko lama dan toko yang baru saja ditambahkan Langkah 10:

Langkah 2:

Sistem menampilkan menu Lihat Data.

Langkah 4:

Sistem menampilkan menu untuk menambah data

Langkah 7:

Sistem Menambahkan data toko baru kedalam database Langkah 8:

Menampilkan Pesan data berhasil disimpan dan meminta untuk


(2)

Admin menekan tombol Tambah

Langkah 12:

Admin memasukan data Jarak dan Rute sesuai dengan toko dan koordinat yang ditampilkan sistem Langkah 13:

Admin menekan tombol Tambah

Langkah 11:

Sistem meminta admin untuk menambahkan data rute dari seluruh toko yang sudah ada menuju ke toko yan baru ditambah, begitupun sebaliknya

Langkah 14:

Sistem menyimpan data rute kedalam database

Langkah 15:

Sistem menampilkan pesan data berhasil ditambah

Alternate Langkah 8:

Menampilkan pesan eror jika terdapat kesalahan.

Tabel 3. 12 Narasi Tambah Data

Nama Use Case Hapus Data Toko

Aktor Admin

Diskripsi Pengguna Menghapus Data Toko

Prakondisi Sistem sudah dibukan dan dalam menu Home

Langkah Aksi Aktor Reaksi Sistem

Kerja Langkah 1:

Admin memilih tombol Lihat data pada menu Home Langkah 3:

Admin memilih tombol Hapus data

Langkah 2:

Menampilkan menu Lihat data


(3)

Langkah 5:

Admin memilih data yang akan dihapus

Langkah 7:

Admin menekan tombol Hapus

Langkah 9:

Admin memilih Yes

Sistem akan menampilkan menu Hapus Data

Langkah 6:

Sistem menampilkan data yang akan dihapus

Langkah 8:

Sistem menampilkan Pesan untuk memastikan apakah akan menghapus Data Langkah 10:

Sistem menghapus data toko pada databese

Langkah 11:

Sistem menampilkan pesan data berhasil dihapus.

Alternate Langkah 8:

Admin memilih NO

Langkah 9:

Sistem membatalkan penghapusan data Langkah 10:

Sistem tidak menampilkan data dari toko yang tidak jadi dihapus pada menu hapus.


(4)

Diagram Aktivitas

a. Cetak Hasil

Menampilkan file yang akan dicetak

Sistem akan mencetak file Admin memilih tombol cetak pada

pesan

Admin memilih perintah print file

Mulai

Selesai

b. Hapus Data Toko

Admin memilih tombol Lihat Data Sistem menampilkan menu Lihat Data.

Admin memilih tombol Hapus data Sistem akan menampilkan menu Hapus Data

Admin memilih data yang akan dihapus

Sistem menampilkan data yang akan dihapus

Admin menekan tombol Hapus

Selesai Mulai

Sistem menghapus data toko pada databese

Sistem menampilkan Pesan untuk memastikan apakah akan

menghapus Data

Admin memilih Yes

Sistem menampilkan pesan data berhasil dihapus.


(5)

c. Ubah Data Toko

Admin memilih tombol Lihat Data Sistem menampilkan menu Lihat Data.

Admin memilih tombol ubah data pada menu Lihat Data

Sistem menampilkan menu untuk mengubah data

Admin memilih toko yang akan di ubah

Sistem akan menampilkan data dari toko yang akan di ubah

Admin mengubah data roko lama sesuai dengan kebutuhan

Admin menekan tombol Perbarui Menampilkan pesan data toko berhasil di ubah Sistem meminta admin untuk

mengubah data Rute dan menampilkan data toko beserta

koordinatnya Admin memasukan data Jarak dan

Rute sesuai dengan toko dan koordinat yang ditampilkan sistem

Admin menekan tombol Perbarui Sistem mengubah data rute dalam database

Sistem akan meminta admin untuk mengubah seluruh data rute yang terhubung dengan data toko yang

diubah Admin mengubah data rute hingga

sistem berhasil seluruh data rute yang terhubung dengan data toko

yang diubah

Sistem akan menampilkan pesan seluruh rute berhasil diubah Sistem akan menampilkan pesan

seluruh rute berhasil diubah

Selesai Mulai


(6)

d. Tambah Data Toko

Admin memilih tombol Lihat Data Sistem menampilkan menu Lihat Data.

Admin memilih tombol Tambah data pada menu Lihat Data

Sistem menampilkan menu untuk menambah data

Admin memilih toko yang akan di ubah

Sistem akan menampilkan data dari toko yang akan di ubah

Admin memasukan data toko yang baru

Admin menekan tombol tambah data

Sistem Menambahkan data toko baru kedalam database

Menampilkan Pesan data berhasil disimpan dan meminta untuk

menambahkan data rute Admin memasukan data rute antar

toko lama dan toko yang baru saja ditambahkan

Admin menekan tombol Tambah

Sistem meminta admin untuk menambahkan data rute dari seluruh toko yang sudah ada menuju ke toko yan baru ditambah,

begitupun sebaliknya Admin memasukan data Jarak dan

Rute sesuai dengan toko dan koordinat yang ditampilkan sistem

Sistem menyimpan data rute kedalam database

Selesai Mulai

Admin menekan tombol Tambah

Sistem menampilkan pesan data berhasil ditambah