Aplikasi Penggunaan Algoritma Tabu Search Pada Pencarian Jalur Terpendek

(1)

SKRIPSI

FAJRUL HUKMI POETRA

060803009

DEPARTEMEN MATEMATIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS SUMATERA UTARA

MEDAN

2010


(2)

APLIKASI PENGGUNAAN ALGORITMA TABU SEARCH PADA PENCARIAN JALUR TERPENDEK

SKRIPSI

Diajukan untuk melengkapi tugas dan memenuhi syarat mencapai gelar Sarjana Sains

FAJRUL HUKMI POETRA 060803009

DEPARTEMEN MATEMATIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA

MEDAN 2010


(3)

PERSETUJUAN

Judul : APLIKASI PENGGUNAAN ALGORITMA TABU

SEARCH PADA PENCARIAN JALUR TERPENDEK

Kategori : SKRIPSI

Nama : FAJRUL HUKMI POETRA

Nomor Induk Mahasiswa : 060803009

Program Studi : SARJANA (S1) MATEMATIKA

Departemen : MATEMATIKA

Fakultas : MATEMATIKA DAN ILMU PENGETAHUAN ALAM (FMIPA) UNIVERSITAS SUMATERA UTARA

Medan, 21 Juli 2010

Komisi Pembimbing :

Pembimbing 2 Pembimbing 1

Syahril Efendi, S.Si, M.IT Dra. Normalina Napitupulu, M.Sc NIP. 196711101996021001 NIP. 196311061989022001

Diketahui oleh

Departemen Matematika FMIPA USU Ketua,

Dr. Saib Suwilo, M.Sc NIP. 196401091988031004


(4)

ii

PERNYATAAN

APLIKASI PENGGUNAAN ALGORITMA TABU SEARCH PADA PENCARIAN JALUR TERPENDEK

SKRIPSI

Saya mengakui bahwa Skripsi ini adalah hasil kerja saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing disebutkan sumbernya.

Medan, 21 Juli 2010

FAJRUL HUKMI POETRA 060803009


(5)

PENGHARGAAN

Alhamdulillahirabbila’alamin, segala puji dan syukur ke hadirat allah SWT yang telah memberikan rahmat dan nikmat-Nya kepada seluruh mahluk hidup, sehingga penulis dapat menyelesaikan Skripsi yang berjudul ”Aplikasi Penggunaan Algoritma Tabu Search Pada Pencarian Jalur Terpendek” ini dengan baik. Skripsi ini merupakan salah satu mata kuliah wajib yang harus diselesaikan oleh seluruh mahasiswa Departemen Matematika, Fakultas Matematika dan Ilmu Pengetahuan Alam, Universitas Sumatera Utara.

Pada kesempatan ini penulis mengucapkan terima kasih kepada Ibu Dra. Normalina Napitupulu, M.Sc selaku Dosen Pembimbing I dan Bapak Syahril Efendi, S.Si, M.IT selaku Dosen Pembimbing II yang telah memberikan dukungan moral, motivasi dan ilmu pengetahuan bagi penulis dalam menyelesaikan penelitian ini. Penulis juga mengucapkan terima kasih kepada Bapak Dr. Eddy Marlianto, M.Sc, selaku Dekan Fakultas Matematika dan Ilmu Pengetahuan Alam, Universitas Sumatera Utara. Bapak Dr. Saib Suwilo, M.Sc dan Bapak Henry Rani Sitepu, M.Si selaku Ketua dan Sekretaris Departemen Matematika FMIPA USU Medan. Seluruh Staf Pengajar Departemen Matematika dan Ilmu Pengetahuan Alam, Universitas Sumatera Utara. Juga kepada keluarga tercinta, kedua orang tua, serta kepada istri tersayang yang selalu memberi dukungan, motivasi baik secara moril maupun materil dan doa yang tiada hentinya kepada penulis.

Tak lupa, penulis juga mengucapkan terima kasih kepada rekan-rekan mahasiswa Departemen Matematika Stambuk 2006, khususnya kepada saudara Novi Yuanda Lbs, Muhammad Haikal, Dicky Agung Andryan, Mahater Muhammad dan Sandra Rizal yang telah memberikan perhatian, nasihat dan motivasi kepada penulis dalam penyelesaian Skripsi ini. Juga untuk para junior di stambuk 2007, stambuk 2008 dan lainnya yang tidak dapat disebutkan satu persatu oleh penulis. Semoga Allah SWT memberikan balasan atas kebaikan yang telah mereka berikan kepada penulis.

Penulis menyadari masih banyak terdapat kekurangan dalam penulisan skripsi ini, karena itu penulis mengharapkan saran dan kritik yang membangun dari pembaca sekalian.

Akhir kata penulis mengucapkan terima kasih atas perhatiannya, semoga tulisan ini berguna bagi siapa saja yang membutuhkan.


(6)

iv

ABSTRAK

Penelitian ini membahas tentang penggunaan salah satu teknik heuristik yaitu algoritma Tabu Search untuk menyelesaikan masalah optimasi. Algoritma tersebut akan di aplikasikan ke dalam sebuah perangkat lunak sederhana dengan format GUI (Graphical User Interface) yang dibangun dengan menggunakan bahasa pemrograman Visual Basic 6.0. Algoritma ini diujikan untuk melakukan proses optimasi dalam pencarian lintasan ataupun jalur terpendek dari suatu model graf. Lalu dilakukan analisis kinerja perangkat lunak dalam proses optimasi pada pencarian lintasan ataupun jalur terpendek dan kecepatan waktu eksekusinya.


(7)

APLICATION OF USED TABU SEARCH ALGORITHM TO FIND SHORTEST PATH PROBLEM

ABSTRACT

This research study about usage one of the heuristic technic that is Tabu Search algorithm to finishing problem of optimation. The Algorithm will be applied into a simple software with GUI (Graphical User Interface) format which developed to use the Visual Basic 6.0 programming language. This algorithm is experimented to execute the optimation process in searching the shortest path problem from a graph model. After that, doing analysis performance of the simple software in optimation process at searching the shortest path and speed of the execution time.


(8)

vi

DAFTAR ISI

Halaman

PERSETUJUAN i

PERNYATAAN ii

PENGHARGAAN iii

ABSTRAK iv

ABSTRACT v

DAFTAR ISI vi

DAFTAR GAMBAR vii DAFTAR TABEL viii BAB 1. PENDAHULULUAN 1

1.1 Latar Belakang 1

1.2 Perumusan Masalah 2

1.3 Pembatasan Masalah 2

1.4 Tinjauan Pustaka 3

1.5 Tujuan Penelitian 6

1.6 Manfaat Penelitian 6

1.7 Metode Penelitian 7

2. LANDASAN TEORI 8

2.1 Teori Graf 8

2.2 Permasalahan Optimasi 14

2.3 Algoritma Tabu Search 16

2.4 Kompleksitas Algoritma 20

3. HASIL DAN PEMBAHASAN 22 3.1Perancangan Perangkat Lunak 22

3.2Pengujian Aplikasi 31

4. KESIMPULAN DAN SARAN 40

4.1 Kesimpulan 42

4.2 Saran 43

DAFTAR PUSTAKA 44

LAMPIRAN 45


(9)

DAFTAR GAMBAR

Halaman 1.1 Graf Berarah dan Berbobot 123456 4 2.1 Graf Tak Berarah dan Berbobot 9

2.2 Graf Berarah dan Berbobot 10

2.3 Graf Tidak Berarah dan Tidak Berbobot 10 2.4 Graf Berarah dan Tidak Berbobot 11

2.5 Graf Berarah ABCDEF 13

2.6 Graf Berarah ABCDEF 15

2.7 Graf Tidak Berarah 123456 17

3.1 Visual Basic Versi 6.0 23

3.2 Form Aplikasi Pencarian Jalur Terpendek 26

3.3 Form Layar Iterasi 26

3.4 Tampilan Awal Aplikasi 27

3.5 Diagram Penggunaan Aplikasi 29

3.6 Flowchart Proses Iterasi Algoritma Tabu Search 30 3.7 Model Graf A Berarah dan Berbobot Jarak (km) 31 3.8 Tampilan Hasil Pencarian Jalur Terpendek 33 3.9 Tampilan iterasi pada layar aplikasi 33 3.10 Hasil proses iterasi pada aplikasi notepad 34 3.11 Model graf Aberarah dan berbobot waktu (jam) 34 3.12 Tampilan hasil pencarian jalur terpendek 36 3.13 Tampilan iterasi pada layar aplikasi 36 3.14 Hasil proses iterasi pada aplikasi notepad 37 3.15 Model graf Aberarah dan berbobot jarak (km) 38 3.16 Tampilan hasil proses pencarian jalur terpendek 40 3.17 Tampilan iterasi pada layar aplikasi 41 3.18 Tampilan hasil iterasi pada aplikasi notepad 41


(10)

viii

DAFTAR TABEL

Halaman 2.1 Matriks Tetanggaan Graf ABCDEF 12 2.2 Matriks bersisian graf ABCDEF 14 2.3 Matriks jarak pada graf tidak berarah 123456 18

3.1 Jarak antar titik dalam km 32

3.2 Waktu tempuh antar titik dalam jam 35


(11)

ABSTRAK

Penelitian ini membahas tentang penggunaan salah satu teknik heuristik yaitu algoritma Tabu Search untuk menyelesaikan masalah optimasi. Algoritma tersebut akan di aplikasikan ke dalam sebuah perangkat lunak sederhana dengan format GUI (Graphical User Interface) yang dibangun dengan menggunakan bahasa pemrograman Visual Basic 6.0. Algoritma ini diujikan untuk melakukan proses optimasi dalam pencarian lintasan ataupun jalur terpendek dari suatu model graf. Lalu dilakukan analisis kinerja perangkat lunak dalam proses optimasi pada pencarian lintasan ataupun jalur terpendek dan kecepatan waktu eksekusinya.


(12)

v

APLICATION OF USED TABU SEARCH ALGORITHM TO FIND SHORTEST PATH PROBLEM

ABSTRACT

This research study about usage one of the heuristic technic that is Tabu Search algorithm to finishing problem of optimation. The Algorithm will be applied into a simple software with GUI (Graphical User Interface) format which developed to use the Visual Basic 6.0 programming language. This algorithm is experimented to execute the optimation process in searching the shortest path problem from a graph model. After that, doing analysis performance of the simple software in optimation process at searching the shortest path and speed of the execution time.


(13)

PENDAHULUAN

1.1 Latar Belakang

Dalam kehidupan sehari hari, selalu dilakukan perjalanan dari satu titik atau lokasi ke lokasi yang lain dengan mempertimbangkan efisiensi waktu dan biaya sehingga diperlukan ketepatan dalam menentukan jalur terpendek antar suatu titik atau lokasi yang diinginkan. Hasil penentuan jalur terpendek nantinya akan menjadi pertimbangan dalam pengambilan keputusan untuk menunjukkan jalur yang akan ditempuh. Hasil yang nantinya akan didapatkan juga membutuhkan kecepatan dan keakuratan dengan bantuan komputer.

Secara umum pencarian jalur terpendek dapat dibagi menjadi dua metode, yaitu metode konvensional dan metode heuristik. Metode konvensional diterapkan dengan menggunakan perhitungan matematika murni, sedangkan metode heuristik diterapkan dengan menggunakan perhitungan kecerdasan buatan. Metode heuristik terdiri dari beberapa macam algortima seperti Generate and Test, Hill Climbing, Genetika, Semut dll. Salah satunya adalah algoritma tabu search (TS). Tabu Search (TS) merupakan bagian dari heuristik. Heuristik merupakan metode pencarian untuk penyelesaian masalah optimasi. Sedangkan TS merupakan suatu algoritma untuk penyelesaian masalah optimasi yang menggunakan short-term memoryuntuk menjaga agar proses pencarian tidak terjebak pada nilai optimum lokal.

Metode ini menggunakan tabu list untuk menyimpan sekumpulan solusi yang baru saja dievaluasi. Selama proses optimasi, pada setiap iterasi, solusi yang akan dievaluasi akan dicocokkan terlebih dahulu dengan isi pada tabu list untuk melihat apakah solusi tersebut sudah ada atau tidak. Bila solusi tersebut sudah ada maka solusi


(14)

2

tersebut tidak akan dievaluasi lagi pada iterasi berikutnya. Apabila sudah tidak ada lagi solusi yang tidak menjadi anggota tabu list, maka nilai terbaik yang baru saja diperoleh merupakan solusi yang sebenarnya. Mengingat prinsip algoritma TS dalam menemukan jarak perjalanan paling pendek tersebut, maka TS merupakan salah satu metode yang tepat digunakan untuk diterapkan dalam penyelesaian masalah optimasi, salah satunya adalah untuk menentukan jalur terpendek.

Berdasarkan uraian tersebut penulis mengambil judul “Aplikasi Penggunaan Algoritma Tabu Search Pada Pencarian Jalur Terpendek”.

1.2 Perumusan Masalah

Pembuatan sebuah sistem dengan memanfaatkan salah satu jenis dari metode heuristik yaitu Tabu Search(TS) yang diharapkan dapat menyelesaikan masalah pencarian jalur terpendek

1.3 Pembatasan Masalah

Dari latar belakang dan rumusan masalah yang telah di jelaskan, pencarian jalur terpendek dibatasi pada salah satu jenis algoritma yang digunakan dalam metode heuristik, yaitu Tabu Search(TS). Batasan masalah yang diperlukan dalam penelitian yaitu :

1. Model graf yang digunakan adalah graf berarah (directed graph ataudigraph) dan berbobot (weighted graph) serta jenis lintasanya tertutup (Sirkuit).

2. Masukan yang diperlukan berupa jumlah titik yang akan dicari beserta namanya.

3. Bobot antar titik yang ditentukan merupakan bobot jarak dan bobot kendala waktu tempuh antar titik. Sehingga jalur terpendek akan ditentukan berdasarkan 2 hal yaitu, jarak terpendek antar titik dan waktu tempuh yang tercepat.


(15)

5. Fungsi – fungsi yang dibutuhkan adalah : a. Fungsi untuk menentukan titik selanjutnya b. Fungsi untuk menyeleksi jarak terpendek

c. Fungsi untuk menyeleksi kendala terhadap waktu

6. Sistem dibangun menggunakan bahasa pemrograman Visual Basic 6.0.

1.4 Tinjauan Pustaka

1. Menurut Rinaldi Munir (2009) dalam bukunya yang berjudul “Matematika Diskrit”Edisi ketiga, Masalah mencari lintasan terpendek dalam graf merupakan salah satu persoalan optimasi. Graf yang digunakan dalam pencarian lintasan terpendek adalah graf berbobot (weighted graph), yaitu graf yang setiap sisinya diberikan suatu nilai atau bobot. Bobot pada sisi graf dapat menyatakan jarak antar kota, waktu pengiriman pesan, jalur komunikasi dan sebagainya.

2. Menurut Kusumadewi dan Purnomo (2005) dalam bukunya yang berjudul “Penyelesaian Masalah Optimasi dengan Teknik Heuristik” , Tabu Search (TS) merupakan metode optimasi yang menggunakan short-term memory untuk menjaga agar proses pencarian tidak terjebak pada nilai optimum lokal. TS merupakan pendekatan meta-heuristik yang pertama kalinya diusulkan oleh Fred Glover (1986), untuk menyelesaikan masalah optimasi dengan seakurat mungkin.

Beberapa elemen utama pada Tabu Searchadalah sebagai berikut : 1. Representasi resolusi

Setiap solusi yang mungkin pada suatu permasalahan optimasi harus direpresentasikan secara unik.

2. Fungsi Cost

Setiap fungsi costakan memetakan setiap solusi feasibleke nilai cost-nya. 3. Tetangga

Suatu fungsi yang memetakan setiap solusi feasible S ke solusi-solusi yang lain.


(16)

4

Suatu daftar yang berisikan T gerakan terakhir. 5. Jumlah elemen yang harus ada pada suatu solusi.

Dalam hal ini TS akan menentukan jarak terpendek dari permasalahan lintasan yang diketahui jarak antar titik dengan diketahui titik awal A dan titik tujuan D. Sebagai contoh sederhana perhatikan gambar 1.1 dari graf 123456 berikut ini :

Senarai ketetanggaan untuk graf pada gambar 1.1 : 1 : 2, 3, 4, 5, 6

2 : 3, 5, 6 3 : 4 5 : 4 6 : 3, 4

Proses pencarian menggunakan TS dengan maksimum iterasi 5, diperoleh : Jalur awal :

1 2 3 4 Panjang jalur = 23 Iterasi ke-1 :

Tabu List :

1 2 3 4 Panjang jalur = 23

Gambar 1.1 graf berarah dan berbobot 123456 5

10 6

13

5

6 13

6

19

4

8 9

3

6

4 5 2


(17)

Tetangga (Jalur alternatif berikutnya) :

Jalur ke-1 : 1 2 3 4 Panjang jalur = 23

Jalur ke-2 : 1 5 4 Panjang jalur = 14

Jalur ke-3 : 1 6 3 4 Panjang jalur = 21

Jalur ke-4 : 1 4 Panjang jalur = 19

Jalur ke-5 : 1 2 5 4 Panjang jalur = 30

Jalur ke-6 : 1 2 6 3 4 Panjang jalur = 30

Iterasi ke-2 : Tabu List :

1 2 3 6 4 Panjang jalur = 23 1 5 4 Panjang jalur = 14

Tetangga (Jalur alternatif berikutnya) :

Jalur ke-1 : 1 3 4 Panjang jalur = 23

Jalur ke-2 : 1 5 4 Panjang jalur = 14

Jalur ke-3 : 1 6 3 4 Panjang jalur = 21

Jalur ke-4 : 1 4 Panjang jalur = 19

Jalur ke-5 : 1 3 4 Panjang jalur = 23

Jalur ke-6 : 1 3 4 Panjang jalur = 23

Jalur ke-7 : 1 3 4 Panjang jalur = 23

Seterusnya hingga 5 iterasi, dan pada iterasi ke-4 akan diperoleh suatu jalur terpendek, yaitu :

Jalur ke-7 : 1 6 4 Panjang jalur = 11

Gambar 1.1 merupakan sampel lintasan yang diketahui terdapat 6 titik lokasi dengan masing-masing jaraknya. Maka dengan menggunakan algoritma Tabu Search akan didapat suatu lintasan yang minimum atau terpendek. Dengan asumsi bahwa titik-1 merupakan titik awal dan titik-4 merupakan titik tujuan. Sehingga didapatkan lintasan terpendek dengan hasil : 1 – 3 – 4 dengan total jarak 7 km.


(18)

6

Algoritma Tabu Searchsecara garis besar dapat ditulis sebagai berikut :

Langkah 0 : Tetapkan :

X = Matriks input berukuran (n x m). MaxItr = Maksimum Iterasi.

Langkah 1 : S = bangkitkan solusi secara random. Langkah 2 : GlobalMin = FCost(S).

Langkah 3 : Best = S.

Langkah 4 : TabuList = [ ].

Langkah 5 : Kerjakan dari k = 1 sampai MaxItr: Langkah 6 : BestSoFar = Cost.

Langkah 7 : BestMove = S.

Langkah 8 : Kerjakan dari i = 1 sampai MaxItr: Langkah 9 : Kerjakan dari j = i sampai n: Langkah 10: L = Tukar(S[i],S[j]). Langkah 11: Cost = FCost(L).

Langkah 12: Jika(L TabuList)atau(Cos<GlobalMin),kerjakan : Langkah 13: Jika (Cost < BestSoFar), kerjakan :

Langkah 14: BestSoFar = Cost. Langkah 15: BestMove = L. Langkah 16: S = BestMove.

Langkah 17: Tambahkan S ke Tabu List.

Langkah 18: Jika BestSoFar < GlobalMin, kerjakan : Langkah 19: GlobalMin = BestSoFar.

Langkah 20: Best = BestMove.

Solusi Akhir adalah Best, dengan cost sebesar GlobalMin.

1.5 Tujuan Penelitian

Tujuan yang diharapkan dari penulisan skripsi ini adalah membuat suatu perangkat lunak yang dapat mengaplikasikan Tabu Search dalam kasus pencarian jalur terpendek antar titik atau lokasi dan juga mengetahui kecepatan waktu yang diperlukan.

1.6 Manfaat Penelitian

Aplikasi ini diharapkan dapat dimanfaatkan untuk :

1. Membantu masyarakat terutama yang berhubungan langsung dengan transportasi seperti perusahaan bus, travel dan jasa sopir dalam menentukan jalur terpendek


(19)

saat mereka melaksanakan perjalanan sehingga dapat menghemat waktu, tenaga dan biaya.

2. Menambah perbendaharaan mengenai jalur terpendek.

1.7 Metode Penelitian

Salah satu metode penyelesaian permasalahan yang cukup efektif adalah metode algoritma heuristik (Heuristic Algorithm), yaitu suatu jenis algoritma yang termasuk ke dalam jenis algoritma sub-optimal.

Metode yang digunakan dalam penelitian ini meliputi metode pengumpulan data dan pengembangan system.

1. Metode Pengumpulan Data

Pengumpulan data yang diperlukan menggunakan metode sebagai berikut : a. Studi Literatur

Menggunakan berbagai macam literatur yang berhubungan dengan Tabu Search(TS) dan permasalahan jalur terpendek.

b. Referensi Internet

Mencari referensi dan bahan-bahan melalui media internet

2. Metode Pengembangan Sistem

Metode pengembangan sistem yang digunakan meliputi : a. Perancangan Perangkat Lunak

Perangkat lunak adalah rangkaian perintah untuk menjalankan suatu fungsi pada perangkat keras. Dalam penelitian ini dibutuhkan perangkat lunak sebagai media perancangan, yaitu:

1. Sistem Operasi Windows XP SP2 2. Microsoft Visual Basic 6.0

b. Aplikasi perangkat lunak dan analisis kinerja perangkat lunak

Aplikasi merupakan tahap dimana sistem siap untuk dioperasikan pada tahap yang sebenarnya, sehingga akan diketahui apakah sistem yang dibuat telah sesuai. Pada aplikasi Tabu Searchini telah dibatasi hanya pada pencarian jalur terpendek dari graphyang telah di input oleh user.


(20)

BAB II

LANDASAN TEORI

2.1 Teori Graf

2.1.1 Defenisi Graf

Graf G didefenisikan sebagai pasangan himpunan (V,E), ditulis dengan notasi G = (V,E), yang dalam hal ini V adalah himpunan tidak kosong dari simpul-simpul (vertices atau node) dan E adalah himpunan sisi (edges atau arcs) yang menghubungkan sepasang simpul (Munir, 2009).

Simpul pada graf dapat dinomori dengan huruf, seperti a,b,c,d,..., atau dengan bilangan asli 1,2,3, … atau juga gabungan dengan keduanya. Sedangkan untuk sisi yang menghubungkan antara simpul u dan v dinyatakan dengan (u,v) atau dapat dinyatakan dengan lambang e1,e2,e3, … dengan 1,2,3 adalah indeks. Dapat dikatakan

bahwa jika e merupakan sisi yang menghubungkan simpul u dengan v, maka e dapat ditulis sebagai e= (u,v).

Dalam aplikasinya, setiap simpul pada graf dapat dijadikan sebagai objek kehidupan, yaitu sebagai objek titik jaringan pesan atau komunikasi, lokasi penempatan kerja, titik kota, jalur transportasi dan lain sebagainya. Sedangkan untuk sisi graf dijadikan sebagai bobot jarak, waktu, biaya dan kendala lainnya. Dan juga busur (arcs) adalah yang menunjukan hubungan atau relasi dari sepasang simpul.


(21)

2.1.2 Jenis Graf

Berdasarkan orientasi arah pada sisi dan bobotnya, maka secara umum graf dibedakan atas empat jenis :

1. Graf tidak berarah dan berbobot (undirected graph)

Graf yang setiap sisinya tidak mempunyai arah anak panah tetapi memiliki bobot pada setiap sisinya. Urutan pasangan simpul yang terhubung oleh sisi tidak diperhatikan. Sehingga (u,v) = (v,u) adalah sisi yang sama.

Sehingga graf tak berarah sering dipakai pada jaringan saluran telepon karena sisi pada graf tak berarah menyatakan bahwa saluran telepon dapat beroperasi pada dua arah. Perhatikan contoh graf tak berarah pada Gambar 2.1 dengan enam buah simpul dan sebelas buah sisi.

2. Graf berarah dan berbobot (directed graph)

Graf yang setiap sisinya diberikan orientasi arah disebut sebagai graf berarah. Secara umum sisi berarah disebut dengan busur (arc). Pada graf berarah (u,v) dan (v,u) menyatakan dua buah busur yang berbeda, dalam arti kata bahwa (u,v)  (v,u). Jadi

Gambar 2.1 Graf tak berarah dan berbobot 5

3 3

6 2

6

10 1

8

C

E A

F B

D

7


(22)

10

untuk busur (u,v) simpul u dinamakan simpul asal dan simpul v dinamakan simpul terminal atau simpul tujuan.

Graf berarah sering dipakai untuk menggambarkan aliran proses, peta lintas kota dan lain sebagainya. Sehingga pada graf berarah gelang atau looping diperbolehkan tetapi sisi ganda tidak diperbolehkan. Perhatikan contoh graf berarah pada Gambar 2.2 dengan enam buah simpul dan sebelas buah sisi.

3. Graf tidak berarah dan tidak berbobot

Graf yang setiap sisinya tidak mempunyai arah dan tidak mempunyai bobot apapun. Perhatikan contoh graf tidak berarah dan tidak berbobot pada Gambar 2.3

Gambar 2.2 Graf berarah dan berbobot 3 5

3

6 2

6

10 1

8

C

E A

F B

D

7

4

Gambar 2.3 Graf tidak berarah dan tidak berbobot C

E A

F B


(23)

4. Graf berarah dan tidak berbobot

Graf yang setiap sisinya mempunyai arah tetapi tidak mempunyai bobot apapun. Perhatikan contoh graf berarah dan tidak berbobot pada Gambar 2.4

2.1.3 Representasi Graf

Terdapat beberapa cara mempresentasikan graf, tiga diantaranya yang sering digunakan adalah matriks ketetanggaan, matriks bersisian dan senarai ketetanggaan.

1. Matriks Ketetanggan (adjacency matrix)

Misalkan G = (V,E) adalah graf dengan n simpul, n1. Matriks ketetanggaan G adalah matriks yang berukuran nn. Bila matriks tersebut dinamakan A[aij], maka aij 1 jika simpul i dan j bertetangga atau terhubung, sebaliknya aij 0 jika simpul idan jtidak bertetangga atau tidak terhubung. Matriks bertetanggaan hanya berisi 0 dan 1, selain dengan angka 0 dan 1, elemen matriks dapat juga dinyatakan dengan nilai false(menyatakan 0) dan true(menyatakan 1).

Gambar 2.4 Graf berarah dan tidak berbobot C

E A

F B


(24)

12

Matriks ketetanggaan nol-satu tidak dapat digunakan untuk mempresentasikan graf yang mempunyai sisi ganda (graf ganda). Untuk graf semu, gelang pada simpul dinyatakan dengan nilai 1 pada matriks tetanggaannya. Tabel matriks ketetanggaan untuk graf ABCDEF dapat dilihat pada Tabel 2.1

A B C D E F

A 0 1 1 1 0 0

B 0 0 0 1 1 0

C 0 1 0 0 0 1

D 0 0 0 0 1 1

E 0 0 1 0 0 0

F 0 0 0 0 1 0

Jumlah elemen matriks ketetanggaan untuk graf dengan nsimpul atau titik adalah 2

n . Jika setiap elemen membutuhkan ruang memori sebesar N, maka ruang memori yang diperlukan seluruhnya adalah 2

n N  .

Pada graf tidak berarah :

a. Ruang memori yang diperlukan adalah 2 2

n n

b. Derajat simpulnya adalah

  n j ij i a v d 1 ) ( Pada graf berarah :

a. Jumlah nilai pada baris i

  n j ij out a d 1

b. Jumlah nilai pada kolom j

  n i ij in a d 1

2. Matriks Bersisian (incidency matrix)


(25)

Matriks bersisian menyatakan kebersisian simpul dengan sisi. Misalkan G = (V,E) adalah graf dengan n simpul dan m buah sisi. Matriks bersisian G adalah matriks yang berukuran nm. Baris menunjukkan label simpul, sedangkan kolom menunjukkan label sisi. Bila matriks tersebut dinamakan A[aij], maka aij 1 jika simpul i bersisian dengan j, sebaliknya aij 0jika simpul i tidak bersisian dengan simpul j.

Matriks bersisian dapat digunakan untuk mempresentasikan graf yang mengandung sisi ganda atau sisi gelang. Derajat setiap simpul i dapat dihitung dengan menghitung jumlah seluruh elemen pada baris i (kecuali pada graf yang mengandung gelang atau looping). Jumlah elemen matriks bersisian adalah nm.

Jika setiap elemen membutuhkan ruang memori sebesar N, maka ruang memori yang diperlukan seluruhnya adalah Nnm. Perhatikan Gambar 2.5 menunjukkan graf berarah yang terdiri dari 6 simpul dan 10 sisi serta Tabel 2.2 yang menunjukkan matriks bersisian untuk graf ABCDEF.

e1 e2 e3 e4 e5 e6 e7 e8 e9 e10

A 1 0 0 1 0 0 0 0 0 0

B 0 0 1 0 0 0 0 0 0 0

C 0 1 0 0 1 0 0 0 0 0

Gambar 2.5 Graf berarah ABCDEF e9

e8

e7

e10

e6

e5

e4

e3

e2

e1 0

C B

F

D E


(26)

14

D 0 0 0 0 0 0 0 1 0 0

E 0 0 0 0 0 0 0 0 1 1

F 0 0 0 0 0 1 1 0 0 0

3. Senarai Ketetanggaan (adjacency list)

Jika dilihat dari segi implementasinya terhadap komputer matriks tetanggaan memiliki kebutuhan ruang memori yang boros. Hal ini dikarenakan matriksnya memiliki banyak elemen nol sedangkan didalam komputer elemen nol tidak perlu disimpan. Untuk mengatasi hal tersebut maka senarai ketetanggaan yang lebih baik. Senarai ketetanggaan mengurutkan simpul-simpul yang bertetangga dengan setiap simpul di dalam graf. Sebagai contoh perhatikan senarai ketetanggaan gambar 1.1 pada bab 1.

2.2 Permasalahan Optimasi

Secara umum pencarian jalur terpendek dapat dibagi menjadi dua metode, yaitu metode konvensional dan metode heuristik. Metode konvensional diterapkan dengan menggunakan perhitungan matematika murni, sedangkan metode heuristik diterapkan dengan menggunakan perhitungan kecerdasan buatan.

1. Metode Konvensional

Metode konvensional adalah metode yang diterapkan menggunakan perhitungan matematika murni. Ada beberapa metode konvensional yang sering digunakan untuk menyelesaikan masalah optimasi, diantaranya: algoritma Djikstra, algoritma Floyd-Warshall, dan algoritma Bellman-Ford.

2. Metode Heuristik

Metode heuristik adalah salah satu dari bidang kecerdasan buatan yang digunakan untuk menyelesaikan masalah optimasi. Terdapat beberapa algoritma dari metode heuristik yang sering digunakan dalam permasalahan


(27)

optimasi, diantaranya adalah algoritma genetika, algoritma pencarian tabu, jaringan saraf tiruan, algoritma semut dan lain-lain.

2.2.1 Permasalahan Lintasan Terpendek (Shortest Path Problem)

Menurut Munir, 2009 persoalan lintasan terpendek di dalam graf merupakan salah satu persoalan optimasi. Graf yang digunakan dalam pencarian lintasan terpendek adalah graf berbobot (weighted graph), yaitu graf yang setiap sisinya diberikan suatu nilai atau bobot. Bobot pada sisi graf dapat dinyatakan sebagai jarak antar kota, waktu pengiriman pesan dan lain-lain.

Dengan kata lain lintasan terpendek merupakan suatu jaringan atau kerangka jalur petunjuk perjalanan dari suatu simpul atau titik ke simpul lainnya atau yang menjadi tujuan perjalanan dengan beberapa pilihan jalur yang mungkin untuk di jalani. Gambar 2.6 menunjukkan graf berarah ABCDEF dan tidak berberbobot.

Dapat dilihat pada Gambar 2.6 untuk malakukan suatu perjalanan dari simpul awal A ke simpul tujuan F, maka terdapat beberapa pilihan jalur yang mungkin untuk di tempuh, yaitu :

Jalur ke-1 : A B C F

Jalur ke-2 : A B E F

Jalur ke-3 : A C F

Jalur ke-4 : A D E F

E D A

F C

B


(28)

16

Jalur ke-5 : A D E F

Dari uraian jalur diatas dapat ditentukan jalur atau lintasan terpendek dengan mencari jarak suatu jalur antara simpul-simpulnya kemudian membandingkan dengan jarak pada jalur yang lain dan menentukan total jarak yang terpendek atau yang paling kecil.

2.3 Algoritma Tabu Search(TS)

Tabu Search merupakan salah satu algoritma yang berada dalam ruang lingkup metode heuristik. Algoritma ini menggunakan short-term memoryuntuk menjaga agar proses pencarian tidak terjebak pada nilai optimum lokal. Algoritma ini menggunakan tabu list untuk menyimpan sekumpulan solusi yang baru saja dievaluasi. Selama proses optimasi, pada setiap iterasi, solusi yang akan dievaluasi akan dicocokkan terlebih dahulu dengan isi tabu list untuk melihat apakah solusi tersebut sudah ada pada tabu list.

Apabila solusi tersebut sudah ada pada tabu list, maka solusi tersebut tidak akan dievaluasi lagi pada iterasi berikutnya. Dan jika sudah tidak ada lagi solusi yang tidak akan menjadi anggota tabu list, maka nilai terbaik yang baru saja diperoleh merupakan solusi yang sebenarnya.

Beberapa elemen utama pada Tabu Searchadalah sebagai berikut :

1. Representasi solusi : setiap solusi yang mungkin pada suatu permasalahan optimasi harus direpresentasikan.

2. Fungsi cost : setiap fungsi cost akan memetakan setiap solusi yang mungkin ke nilai cost-nya

3. Neightbourhood (tetangga) : suatu fungsi yang memetakan setiap solusi yang mungkin ke solusi-solusi yang lainnnya.

4. Tabu list : suatu listatau daftar yang berisi solusi gerakan terakhir. 5. Jumlah elemen yang harus ada pada suatu solusi.


(29)

Langkah 0 : Tetapkan :

X = Matriks input berukuran (n x m). MaxItr = Maksimum Iterasi.

Langkah 1 : S = bangkitkan solusi secara random. Langkah 2 : GlobalMin = FCost(S).

Langkah 3 : Best = S.

Langkah 4 : TabuList = [ ].

Langkah 5 : Kerjakan dari k = 1 sampai MaxItr: Langkah 6 : BestSoFar = Cost.

Langkah 7 : BestMove = S.

Langkah 8 : Kerjakan dari i = 1 sampai MaxItr: Langkah 9 : Kerjakan dari j = i sampai n: Langkah 10: L = Tukar(S[i],S[j]). Langkah 11: Cost = FCost(L).

Langkah 12: Jika(L TabuList)atau(Cos<GlobalMin),kerjakan : Langkah 13: Jika (Cost < BestSoFar), kerjakan :

Langkah 14: BestSoFar = Cost. Langkah 15: BestMove = L. Langkah 16: S = BestMove.

Langkah 17: Tambahkan S ke Tabu List.

Langkah 18: Jika BestSoFar < GlobalMin, kerjakan : Langkah 19: GlobalMin = BestSoFar.

Langkah 20: Best = BestMove.

Solusi Akhir adalah Best, dengan cost sebesar GlobalMin.

Contoh penyelesaian kasus Travelling Sales Problem menggunakan algoritma TS : Misalkan pada kasus ini jalur yang ditetapkan dimulai dari kota ke-5 dan berakhir di kota ke-2. Menggunakan TS dengan maksimum 6 iterasi. Perhatikan Gambar 2.7 graf tidak berarah dan tidak berbobot 123456 dan Tabel 2.3 Matriks jarak antar titik.

6 5

2

4

3 1


(30)

18

1 2 3 4 5 6

1 0 20 21 25 30 36

2 20 0 25 21 36 30

3 21 25 0 10 11 18

4 25 21 10 0 18 11

5 30 36 11 18 0 20

6 36 30 18 11 20 0

Jalur awal :

5 1 3 4 6 2 Panjang jalur = 102

Iterasi ke-1 : Tabu List :

5 1 3 4 6 2 Panjang jalur = 102

Tetangga (Jalur alternatif berikutnya) :

Jalur ke-1 : 5 3 1 4 6 2 Panjang jalur = 98 BestSoFar = 98

Jalur ke-2 : 5 4 3 1 6 2 Panjang jalur = 115 Jalur ke-3 : 5 6 3 4 1 2 Panjang jalur = 93 BestSoFar = 93

Jalur ke-4 : 5 1 4 3 6 2 Panjang jalur = 113 Jalur ke-5 : 5 1 6 4 3 2 Panjang jalur = 112 Jalur ke-6 : 5 1 3 6 4 2 Panjang jalur = 101 BestSoFar = 93, yaitu pada jalur ke-3 diterima sebagai GlobalMin

GlobalMin = 93

Iterasi ke-2 : Tabu List :

5 1 3 4 6 2 Panjang jalur = 102 5 6 3 4 1 2 Panjang jalur = 93


(31)

Tetangga (Jalur alternatif berikutnya) :

Jalur ke-1 : 5 3 6 4 1 2 Panjang jalur = 85 BestSoFar = 85

Jalur ke-2 : 5 4 3 6 1 2 Panjang jalur = 102 Jalur ke-3 : 5 1 3 4 6 2 Panjang jalur = 102 Jalur ke-4 : 5 6 4 3 1 2 Panjang jalur = 82 BestSoFar = 82

Jalur ke-5 : 5 6 1 4 3 2 Panjang jalur = 116 Jalur ke-6 : 5 6 3 1 4 2 Panjang jalur = 105 BestSoFar = 82, yaitu pada jalur ke-4 diterima sebagai GlobalMin

GlobalMin = 82

Iterasi ke-3 : Tabu List :

5 1 3 4 6 2 Panjang jalur = 108 5 6 3 4 1 2 Panjang jalur = 93 5 6 4 3 1 2 Panjang jalur = 82

Tetangga (Jalur alternatif berikutnya) :

Jalur ke-1 : 5 4 6 3 1 2 Panjang jalur = 88 Jalur ke-2 : 5 3 4 6 1 2 Panjang jalur = 88 Jalur ke-3 : 5 1 4 3 6 2 Panjang jalur = 113 Jalur ke-4 : 5 6 3 4 1 2 Panjang jalur = 93 Jalur ke-5 : 5 6 1 3 4 2 Panjang jalur = 108 Jalur ke-6 : 5 6 4 1 3 2 Panjang jalur = 101 GlobalMin = 82

Seterusnya hingga 6 iterasi, dan pada iterasi ke-2 akan diperoleh suatu jalur terpendek, yaitu :


(32)

20

2.4 Kompleksitas Algoritma

Algoritma adalah urutan logis langkah-langkah penyelesaian masalah secara sistematis. Sebuah algoritma tidak saja harus benar tetapi juga harus efisien (Munir, 2009). Efisiensi algoritma dinilai berdasarkan kecepatan waktu eksekusi dan penggunaan struktur data yang menyebabkan banyaknya ruang memori komputer yang terpakai.

2.4.1 EfficiencyAlgoritma

Algorima yang terbaik adalah bukan karena algoritma itu harus benar, akan tetapi juga harus di pandang dari efisiensinya. Jadi algoritma yang terbaik adalah algoritma yang efisien dalam penggunaan waktu eksekusi dan ruang memori komputer. Efisiensi algoritma juga berguna dalam membandingkan algoritma. sebuah masalah dapat mempunyai lebih dari satu jenis algoritma. Misalkan untuk masalah pengurutan data dalam array, dapat digunakan berbagai macam algoritma seperti: bubble sort, selection sort, merge sortdan lain-lain.

2.4.2 Kebutuhan Waktu dan Ruang

Kebutuhan waktu suatu algoritma biasanya dihitung dalam satuan detik, milidetik dan lain sebagainya. Sedangkan untuk ruang memori yang digunakan dapat dihitung dalam satuan byte atau kilobyte. Biasanya seorang pengguna algoritma mengukur kebutuhan waktu sebuah algoritma dengan mengeksekusi langsung algoritma tersebut pada sebuah komputer, lalu dihitung berapa lama durasi waktu yang dibutuhkan untuk menyelesaikan sebuah persoalan yang berbeda-beda.

Keakuratan waktu eksekusi algoritma dapat diperoleh dengan tidak menghitung kebutuhan waktu untuk menampilkan antarmuka program, operasi input/outputdan sebagainya. Sehingga akan dihitung bagian inti dari programnya saja.


(33)

2.4.3 Kompleksitas Waktu

Setelah siap untuk menjalankan suatu program maka untuk mengukur kompleksitas waktunya adalah dengan menghitung banyaknya operasi yang dilakukan oleh algoritma, seperti: operasi penjumlahan, pengurangan, perkalian, pembagian dan lain sebagainya. Namun yang paling idealnya adalah cukup menghitung berapa kali operasi yang sama terjadi secara berulang dan mencatat waktu yang terjadi selama eksekusi.


(34)

BAB III

HASIL DAN PEMBAHASAN

Pada bab ini akan diperlihatkan hasil dan pembahasan dari penelitian yang diperoleh berdasarkan penjelasan-penjelasan yang telah dipaparkan pada bab-bab sebelumnya. Hasil dan pembahasan dari tulisan ini adalah mengenai aplikasi dari penggunaan algoritma pencarian tabu (Tabu Search) yang akan diujikan pada persoalan pencarian lintasan ataupun jalur terpendek, sehingga akan diketahui keakuratan hasil dan lamanya waktu eksekusi dari algorima tersebut.

3.1 Perancangan Perangkat Lunak

Perancangan perangkat lunak ini dikembangkan dengan salah satu bahasa pemrograman yaitu Visual Basic 6.0 Visual Basic 6.0 merupakan suatu bahasa pemrograman yang memberikan berbagai macam fasilitas pembuatan aplikasi visual. Keunggulan pada bahasa pemrograman ini terletak pada penggunaannya yang mudah dipahami karena didukung oleh banyak toolbaryang terfokus pada objek pembuatan visual serta bahasa pemrograman yang terstruktur secara umum seperti bahasa pemrograman lainnya.

Keunggulan lain yang didapat dari bahasa pemrograman ini adalah banyaknya referensi dan contoh materi ataupun program yang telah banyak dipaparkan serta hasil rancangan aplikasi dapat langsung di eksekusi dan menjadi bagian dari program lain yang berbasis pada sistem operasi windows.


(35)

Berikut proses langkah-langkah pembuatan perangkat lunak yang sedang diteliti :

1. Buatlah file baru dengan cara menekan menu file kemudian pilih New Project lalu pilih standart EXE.

2. Ganti Caption dari Form dengan Aplikasi Pencarian Jalur Terpendek dan Name pada kolom Propertis dengan Form_Aplikasi.

3. Tambahkan 15 buah Button pada Form_Aplikasi masing-masing : a. Name : Input_Nama

Caption : Input Enabled : True Visible : True

b. Name : Hapus_Nama Caption : Hapus


(36)

24

Enabled : False Visible : True

c. Name : Hapus_Daftar_Nama Caption : Hapus Daftar Enabled : False

Visible : True

d. Name : Tampil_Daftar_Nama Caption : Tampil/Urut

Enabled : False Visible : True e. Name : Ambil_Data

Caption : Ambil Data Enabled : False Visible : True

Dan Button lainnya adalah Name : Ganti_Jarak, Lanjut, Hapus_Daftar, Cek_Data, Proses, Hapus_Laporan, Simpan, Reset, Tampilkan_Proses, Keluar dengan tipe Caption, Enabled dan Visible yang sama. Sehingga jumlah semua button adalah lima belas.

4. Tambahkan lima buah ComboBox pada Form_Aplikasi masing-masing : a. Name : Jumlah_Titik

b. Name : Titik_Awal c. Name : Titik_Tujuan d. Name : Awal

e. Name : Akhir

Dengan tipe Caption sesuai Name, Enabled dan Visible bernilai False dan True

5. Tambahkan enam buah GroupBox pada Form_Aplikasi masing-masing : a. Name : Init_Titik

b. Name : Layar_Nama c. Name : Init_Jarak d. Name : Layar_Jarak


(37)

e. Name : Laporan_Jarak f. Laporan_Waktu

Dengan tipe Caption sesuai Name, Enabled dan Visible bernilai False dan True

6. Tambahkan dua buah TextBox pada Form_Aplikasi masing-masing : a. Name : Text_Nama

b. Name : Text_Jarak

Dengan tipe Caption sesuai Name, Enabled dan Visible bernilai False dan True

7. Tambahkan tiga buah ListBox pada Form_Aplikasi masing-masing : a. Name : Daftar_Nama

b. Name : Daftar_Jarak c. Name : Laporan_Hasil

Dengan tipe Caption sesuai Name, Enabled dan Visible bernilai False dan True

8. Tambakan enam buah Label pada Form_Aplikasi masing-masing : a. Name : Kepala_Judul

b. Name : Lbl_Menit c. Name : Lbl_Detik d. Name : Lbl_Milidetik e. Name : Label1 f. Name : Label2 g. Name : CopyRight

Dengan tipe Caption sesuai Name, Enabled dan Visible bernilai True dan True

9. Tambahkan satu buah Timer pada Form_Aplikasi yaitu dengan Name : Timer1, Enabled : False

10. Tambahkan dua buah ListBox dan dua buah Group serta satu buah CommonDialog pada Form_Layar_Iterasi masing-masing :

a. Name : Layar_Tabu b. Name : Layar_Iterasi c. Name : Tabu_List


(38)

26

d. Name : Iterasi

e. Name : CommonDialog1

Dengan tipe Caption sesuai Name, Enabled dan Visible bernilai False dan True

Gambar 3.2 Form Aplikasi Pencarian Jalur Terpendek


(39)

11. Berikan kode program pada jendela editor Visual Basic 6.0, kemudian simpan file project1 pada folder yang telah dipilih kemudian simpan juga Form_Aplikasi dan Form_Layar_Iterasi pada lokasi folder yang sama

12. Aplikasi yang sudah siap di berikan kode program dapat di jalankan melalui editor Visual Basic 6.0 atau juga dapat langsung dibuat File EXE nya lalu dapat langsung dijalankan.

3.1.1 Penjelasan Kinerja Aplikasi

Aplikasi yang telah di selesaikan dengan sempurna dapat segera dijalankan atau dieksekusi dengan meng-klik tombol start pada layer editor Visual Basic 6.0 atau dengan menekan tombol Ctrl + F5 pada keyboard komputer. Setelah itu akan muncul tampilan seperti pada gambar berikut :

Proses kinerjanya adalah jika seorang user atau pengguna ingin menghitung sebuah jarak dari suatu simpul atau titik ke sebuah titik tujuan atau akhir, maka user


(40)

28

cukup memberikan banyak titik yang akan dicari, kemudian menekan tombol input pada form aplikasi. Beberapa hal yang harus diperhatikan adalah bahwa jumlah titik awal pencarian minimum adalah lima buah dan dengan jumlah titik maksimum seratus buah. Karena kalau tidak maka data tidak akan diperoses nantinya. Lalu setelah tombol input ditekan maka ketik nama masing-masing titik dengan diakhir dengan tombol enter untuk masing-masing nama, setelah itu tekan tombol tampil/urut. Maka nama-nama titik yang diinput tersebut akan muncul pada layer daftar nama beserta dengan indeksnya masing-masing.

Disini aplikasi itu sendiri yang akan memberikan indeks dari masing-masing nama titik secara berurutan, yang gunanya adalah sebagai indeks dari proses iterasi nantinya. Setelah yakin bahwa jumlah titik dan nama yang kita input sudah benar maka tekan tombol ambil data lalu semua data yang diinput tadi akan muncul pada bagian list titik awal, titik tujuan, awal dan akhir. Kemudian pilih titik awal dan tujuan dari masing masing titik yang mempunyai jarak, lalu ketik pada daerah ketik jarak lalu tekan enter pada keyboard.

Setelah semua jarak telah di input pada masing-masing titik awal dan tujuan, kemudian tekan tombol lanjut lalu tekan tombol cek data untuk memeriksa data yang diinput apakah sudah memenuhi sarat atau tidak. Jika program aplikasi sudah selesai memeriksa data maka tombol pada bagian proses akan hidup dan siap untuk di jalankan. Pada saat proses iterasi berjalan pencatat waktu juga secara otomatis akan bergerak dan menghitung berapa lama proses iterasi dilakukan.

Setelah selesai maka hasil akhir dari jalur atau lintasan terpendek akan ditampilkan pada layer laporan hasil disebelah bawah tombol proses. Namun untuk melihat hasil dari proses iterasi maka dapat ditekan tombol tampilkan proses untuk mmembuka layer proses iterasi. Setelah itu jika user ingin menyimpan hasil dari semua laporan ke dalam bentuk file maka user hanya tinggal menekan tombol simpan, lalu program aplikasi akan mentranfer semua laporan ke dalam file ber-format txt.


(41)

Pengguna

Tentukan titik awal dan akhir

Cek data jarak dan titik

Proses

Tampilkan layer proses

Simpan data proses

Keluar/tutup aplikasi Input data index awal

Ambil data nama Tampilkan nama Input nama titik Tentukan banyak titik


(42)

30

Tidak

Ya Tidak

Ya Mulai Pencatat Waktu

Mulai

Berhenti Inisial Variabel

Inisial Solusi Awal Inisial MaxItr

Tabu list = Solusi awal

Tukar Solusi

Tampilkan Solusi Index = MaxItr

Tabu list = Solusi Solusi < Tabu list

Stop Waktu


(43)

3.2 Pengujian Aplikasi

Adapun yang menjadi keunggulan dari suatu aplikasi adalah penggunaan algoritma yang memiliki kinerja sangat efektif, yaitu dinilai dari segi waktu eksekusi dan pemakaian memori komputer. Karena setiap user tentunya bukan hanya ingin mendapatkan hasil yang benar tetapi juga harus dalam waktu yang relatif singkat serta penggunaan dari aplikasi yang cukup sederhana.

Dalam penelitian ini akan dilakukan pencarian jalur terpendek berdasarkan jarak tempuh yang data-data jarak antar titiknya telah diketahui. Namun jika pencarian jalur terpendek berdasarkan waktu tempuhnya maka cukup menggunakan data-data waktu tempuh antar titik yang telah diketahui. Hanya saja dalam penelitian ini aplikasi telah dibuat dan dirancang tampilannya berdasarkan jarak sehingga jika ingin menghitung berdasarkan waktu tempuh maka tampilan pada layer iterasi dan laporannya masih tetap berada pada kondisi jarak, namun hasil dari proses tetap berdasarkan data-data waktu tempuh.

3.2.1 Pengujian Pertama

Berikut pada gambar di bawah adalah contoh sebuah model lintasan atau jalur yang terdiri dari 10 titik. Jika diketahui sebuah lintasan ataupun jalur dari suatu titik ke titik lainnya yang di modelkan dalam bentuk graf A berarah dan berbobot jarak pada gambar 3.7 dibawah ini :

8 5 4 10 10 5 11 8 13 7 15 9 8 14 13 7 7 9 15 16 A6 A1 A4 A5 A10 A7 A8 A3 A9 A2


(44)

32

Di bawah ini adalah representasi jarak antar titik yang di tabulasikan dalam tabel berikut :

No Titik Awal Titik Tujuan Total Jarak (Km)

1 A1 A2 9

2 A1 A3 9

3 A1 A4 16

4 A1 A6 15

5 A2 A6 13

6 A3 A4 7

7 A3 A5 7

8 A3 A6 11

9 A4 A5 5

10 A4 A8 15

11 A5 A6 10

12 A5 A7 8

13 A5 A8 13

14 A6 A7 5

15 A7 A9 7

16 A8 A7 14

17 A8 A9 10

18 A8 A10 8

19 A9 A10 4

Maka dengan menggunakan aplikasi algoritma tabu search, akan dicari lintasan ataupun jalur terpendek berdasarkan jarak tempuh dengan titik awal berada pada A1 dan titik akhir berada pada A10. Setelah semua nama titik dan jarak yang mungkin telah diinput maka hasil yang didapat dengan menggunakan aplikasi adalah seperti yang ditunjukkan pada gambar dibawah ini.


(45)

Seperti yang terlihat pada Gambar 3.8 hasil pencarian jalur terpendek berdasarkan jarak tempuh dari titik awal A1 ke titik akhir A10 adalah A1,A6,A7,A9,A10 dengan total jarak 31 km. Dan tampilan hasil iterasi saat proses dijalankan adalah seperti yang di tunjukkan pada gambar dibawah ini.

Setelah itu simpan semua hasil laporan aplikasi dengan menekan tombol simpan pada form aplikasi dan menyimpan ke dalam file aplikasi notepad dengan nama file Hasil Iterasi Jarak 10 titik.

Gambar 3.8 Tampilan hasil pencarian jalur terpendek


(46)

34

Berikut pada gambar di bawah adalah contoh sebuah model lintasan atau jalur. Jika diketahui sebuah lintasan ataupun jalur dari suatu titik ke titik lainnya yang di modelkan dalam bentuk graf Aberarah dan berbobot jarak pada gambar 3.11 dibawah ini :

3

3

1 4 5

8 4

8

4

2 4

2

6

6 3

5 5

1

4 5

A6 A1

A4

A5

A10

A7

A8

A3

A9 A2

Gambar 3.11 Model graf Aberarah dan berbobot waktu (jam) Gambar 3.10 Hasil proses iterasi pada aplikasi notepad


(47)

Di bawah ini adalah representasi jarak antar titik yang di tabulasikan dalam tabel berikut :

No Titik Awal Titik Tujuan Total Waktu (Jam)

1 A1 A2 2

2 A1 A3 1

3 A1 A4 5

4 A1 A6 4

5 A2 A6 4

6 A3 A4 5

7 A3 A5 5

8 A3 A6 4

9 A4 A5 3

10 A4 A8 4

11 A5 A6 5

12 A5 A7 3

13 A5 A8 3

14 A6 A7 8

15 A7 A9 2

16 A8 A7 6

17 A8 A9 4

18 A8 A10 6

19 A9 A10 1

Maka dengan menggunakan aplikasi algoritma tabu search, akan dicari lintasan ataupun jalur terpendek berdasarkan waktu tempuh dengan titik awal berada pada A1 dan titik akhir berada pada A10. Setelah semua nama titik dan waktu telah diinput maka hasil yang didapat dengan menggunakan aplikasi adalah seperti yang ditunjukkan pada gambar dibawah ini.


(48)

36

Seperti yang terlihat pada Gambar 3.12 hasil pencarian jalur terpendek berdasarkan waktu tempuh dari titik awal A1 ke titik akhir A10 adalah A1,A4,A8,A9,A10 dengan total waktu 14 jam. Dan tampilan hasil iterasi saat proses dijalankan adalah seperti yang di tunjukkan pada gambar dibawah ini.

Setelah itu simpan semua hasil laporan aplikasi dengan menekan tombol simpan pada form aplikasi dan menyimpan ke dalam file aplikasi notepad dengan nama file Hasil Iterasi Waktu 10 titik.

Gambar 3.12 Tampilan hasil pencarian jalur terpendek


(49)

3.2.2 Pengujian Kedua

Berikut ini adalah contoh hasil dari kinerja aplikasi yang telah diselesaikan. Jika diketahui sebuah lintasan ataupun jalur dari suatu titik kota ke titik kota lainnya yang di modelkan dalam bentuk graf Aberarah dan berbobot pada gambar 3.15 dibawah ini :


(50)

38

Di bawah ini adalah representasi jarak antar titik yang di tabulasikan dalam tabel berikut :

No Titik Awal Titik Tujuan Total Jarak (Km)

1 A1 A2 12

2 A1 A3 10

3 A1 A4 8

4 A1 A5 6

5 A1 A6 10

Gambar 3.15 Model graf Aberarah dan berbobot jarak (km) 6 2 20 12 7 14 9 11 2 8 13 20 17 10 5 10 17 10 5 7 8 8 5 5 15 6 9 9 2 8 7 8 6 13 7 8 15 9 5 8 5 8 10 6 8 10 12 A17 A21 A14 A11 A2 A1 A5 A8 A6 A3 A22 A9 A25 A15 A20 A16 A4 A7 A12 A10 A18 A24 A23 A13 A19


(51)

6 A2 A9 13

7 A2 A10 8

8 A2 A11 15

9 A3 A6 8

10 A3 A7 5

11 A3 A8 8

12 A4 A2 5

13 A4 A11 8

14 A5 A6 9

15 A5 A11 7

16 A6 A12 2

17 A6 A14 9

18 A7 A14 7

19 A8 A13 5

20 A8 A14 9

21 A8 A15 8

22 A9 A17 8

23 A9 A22 17

24 A9 A23 10

25 A10 A17 6

26 A11 A17 6

27 A11 A21 15

28 A12 A14 5

29 A12 A16 5

30 A13 A19 10

31 A14 A18 5

32 A14 A20 9

33 A14 A25 20

34 A15 A20 8

35 A16 A21 7

36 A17 A21 10


(52)

40

38 A18 A21 2

39 A19 A25 20

40 A20 A25 12

41 A21 A20 7

42 A21 A22 13

43 A22 A24 2

44 A22 A25 14

45 A23 A24 11

46 A24 A25 6

Maka dengan menggunakan aplikasi algoritma tabu search, akan dicari lintasan ataupun jalur terpendek berdasarkan jarak tempuh dengan titik awal berada pada A1 dan titik akhir berada pada A25. Setelah semua nama titik dan jarak yang mungkin telah dinput maka hasil yang didapat dengan menggunakan aplikasi adalah seperti yang ditunjukkan pada gambar dibawah ini.

Seperti yang terlihat pada Gambar 3.16 hasil pencarian jalur terpendek berdasarkan jarak tempuh dari titik awal A1 ke titik akhir A25 adalah A1,A6,A12,A14,A25 dengan

Tabel 3.3 Jarak tempuh antar titik dalam km


(53)

total jarak 37 km. Dan tampilan hasil iterasi saat proses dijalankan adalah seperti yang di tunjukkan pada gambar dibawah ini.

Setelah itu simpan semua hasil laporan aplikasi dengan menekan tombol simpan pada form aplikasi dan menyimpan ke dalam file aplikasi notepad dengan nama file Hasil Iterasi jarak 25 titik.

Gambar 3.17 Tampilan iterasi pada layar aplikasi


(54)

BAB IV

KESIMPULAN DAN SARAN

4.1 Kesimpulan

Dari penelitian yang telah dilakukan ini dapat diambil beberapa kesimpulan mengenai kinerja pencarian jalur terpendek dari algoritma Tabu Search (TS), yang telah diujikan, yaitu :

1. Rata-rata kecepatan waktu eksekusi yang dilakukan oleh algoritma Tabu Search (TS) adalah kurang dari 20 detik setelah dilakukan pengujian pada pengujian pertama dengan graf A sepuluh titik lokasi kecepatan waktu eksekusi 0,10 detik dan 0,06 detik pada pengujian berikutnya, kemudian pada pengujian kedua dengan graf A dua puluh lima titik lokasi diperoleh kecepatan waktu eksekusi adalah 12,58 detik.

2. Berdasarkan referensi yang ada bahwa algoritma Tabu Search bukan hanya dapat menentukan nilai optimum pada kasus Travelling Sales Problemdan Job Assigment Problem, namun juga dapat diterapkan dalam kasus Shortest Path Problem dengan kondisi titik awal dan akhir yang diketahui karena algoritma ini memilih langkah berikutnya (neightbour-solution) dengan dukungan tabu listyang berfungsi menyimpan sekumpulan solusi yang mungkin.

3. Kecanggihan teknologi komputer dapat dimanfaatkan untuk mengaplikasikan persoalan pencarian jalur terpendek dalam waktu yang cukup singkat dan dengan hasil yang akurat juga tepat, sehingga mempermudah dalam pengambilan keputusan untuk melakukan suatu perjalanan.


(55)

4. Penggunaan algoritma yang lain untuk kasus yang sama ataupun yang berbeda akan memberikan hasil kompleksitas yang berbeda juga, jadi tidak dapat dipastikan bahwa algoritma Tabu Searchadalah yang terbaik.

5. Dari sisi penggunaan deklarasi variabel, algoritma Tabu Search dapat dikatakan membutuhkan banyak sekali variabel dalam pencapaian hasil akhir yang akurat dan juga penggunaan memori karena mengharuskan banyak penyimpanan memori arraydalam tabu listyang digunakannya.

4.2 Saran

Untuk memperlihatkan dan membuktikan keefektifan, kelebihan, keakuratan dan kelemahan dari algoritma Tabu Search (TS), maka perlu diadakan sebuah penelitian lebih lanjut dengan tujuan untuk membandingkan seluruh algoritma pencarian jalur terpendek (shortest path problem) yang ada pada berbagai data dengan jumlah titik yang lebih banyak dari yang saat ini diteliti. Dan juga diharapkan agar kinerja proses pencarian jalur terpendek dari algoritma tersebut dapat lebih ditingkatkan lagi dalam hal kecepatan eksekusi pencarian dan dalam penghematan penggunaan memori komputer saat melakukan proses iterasi.


(56)

44

DAFTAR PUSTAKA

Bunafit Komputer. 2008. 25 Aplikasi Windows Populer dengan Visual Basic 6.0, Jakarta : Elex Media Komputindo.

Kadir, Abdul. 1999. Panduan Pemrograman Visual C++,Yogyakarta : Andi Offset. Kusumadewi, Sri. , Purnomo, Hari. 2005. Penyelesaian Masalah dengan Teknik-teknik Heuristik, Yogyakarta : Graha Ilmu.

Mutakhiroh, Ling. , Saptono, Fajar. , Hasanah, Nur. , Wiryadinata, Romi. 2007. Pemanfaatan Metode Heuristik Dalam Pencarian Jalur Terpendek Dengan Algoritma Semut Dan Genetika, Yogyakarta, Dalam Seminar Nasional Aplikasi Teknologi Informasi.

Munir, Rinaldi. 2009. Matematika Diskrit Edisi Ketiga, Bandung : Informatika Bandung.

Oonsivilai, Anant. , Srisuruk, Wichai. , Marungsri, Boonruang. , Kulworawanichpong, Thanatchai. 2009. Tabu Search Approach to Solve Routing Issues in Communication Networks. Dalam World Academy Science, Enggineering And Technologi, 53 2009.

Subari , Yuswanto. 2008. Panduan Lengkap Pemrograman Visual Basic 6.0, Jakarta : Cerdas Pustaka Publisher.

Syahputra, Iwan Halim. , Octavia, Tanti. , Chandra, Agus Susanto. 2009. Tabu Search Sebagai Lokal Search Pada Ant Colony Untuk Penjadwalan Flowshop, Surabaya, Dalam Jurnal Teknik Industri, Vol. 11, No. 2, Desember 2009.


(57)

SOURCE PROGRAM

Dim mili, dtk, mnt, jm

Dim Tabu(1000) As Integer, Cek_Solusi(1000) As Integer, Solusi2(1000) As Integer, Solusi3(1000) As Integer

Dim Index_Tukar As Integer, Tukar As Integer, Pnjg As Integer, Index_No_Iterasi As Integer, Tabu_Cek(1000) As Integer

Private Declare Function SendMessageByNum _ Lib "user32" Alias "SendMessageA" _

(ByVal hwnd As Long, ByVal wMsg As Long, ByVal _ wParam As Long, ByVal lParam As Long) As Long Const LB_SETHORIZONTALEXTENT = &H194

Dim Solusi1(1000) As Integer, Index_Solusi As Integer, MaxItr1 As Integer, MaxItr2 As Integer

Dim brs_Tabu As Integer, brs_Iterasi As Integer, brs_Laporan As Integer, Index_No_Tabu As Integer

Dim Jarak(1000, 1000) As Integer, Index_Jarak As Integer, Index_Daftar_Jarak As Integer

Dim Nama(1000) As String, Index_Nama As Integer, Respon As Integer, Titik As Integer, Index_Hapus As Integer

'--- Tombol Ambil Data untuk input ke titik awal dan tujuan'

Private Sub Ambil_Data_Click()

Titik_Awal.Enabled = True Titik_Tujuan.Enabled = True Text_Jarak.Enabled = True Awal.Enabled = True

Akhir.Enabled = True Cek_Data.Enabled = True

If Index_Daftar_Jarak < Index_Nama Then

Index_Daftar_Jarak = 0 Titik_Awal.Clear

Titik_Tujuan.Clear Awal.Clear

Akhir.Clear

For i = 1 To Titik

Titik_Awal.List(Index_Daftar_Jarak) = Nama(i) Titik_Tujuan.List(Index_Daftar_Jarak) = Nama(i) Awal.List(Index_Daftar_Jarak) = Nama(i)

Akhir.List(Index_Daftar_Jarak) = Nama(i) Index_Daftar_Jarak = Index_Daftar_Jarak + 1 Next


(58)

46

Else

Respon = MsgBox(" Tidak ada data yang baru !", vbOKOnly + vbInformation, _

"Aplikasi Pencarian Jalur Terpendek") Respon = vbOKOnly

End If

Titik_Awal.Text = "Titik awal" Titik_Tujuan.Text = "Titik tujuan" Text_Jarak.Text = "Ketik jarak Enter" Awal.Text = "Awal"

Akhir.Text = "Akhir"

End Sub

'--- Tombol Cek Data untuk mengecek kesiapan data untuk diproses'

Private Sub Cek_Data_Click() Tampil_Proses.Enabled = True If Index_Nama - 1 < 5 Then

Respon = MsgBox(" Banyak titik minimal 5 buah !", vbOKOnly + vbInformation, _

"Aplikasi Pencarian Jalur Terpendek") Respon = vbOKOnly

Else

If Awal.Text = Akhir.Text Then

Respon = MsgBox(" Titik awal dan akhir harus berbeda !", vbOKOnly + vbInformation, _

"Aplikasi Pencarian Jalur Terpendek") Respon = vbOKOnly

Else

If Awal.Text = "Awal" Or Akhir.Text = "Akhir" Then

Respon = MsgBox(" Tentukan titik awal dan akhir !", vbOKOnly + vbInformation, _

"Aplikasi Pencarian Jalur Terpendek") Respon = vbOKOnly

Else

Respon = MsgBox(" Data siap untuk di proses !", vbOKOnly + vbInformation, _

"Aplikasi Pencarian Jalur Terpendek") Respon = vbOKOnly

Proses.Enabled = True End If

End If End If End Sub

'--- Deklarasi variabel awal saat aplikasi diaktifkan'

Private Sub Form_Activate()

Static x As Long brs_Laporan = 0

Jumlah_Titik.Text = "Banyak titik" Text_Nama.Text = "Ketik nama Enter"


(59)

Titik_Awal.Text = "Titik awal" Titik_Tujuan.Text = "Titik tujuan" Text_Jarak.Text = "Ketik jarak Enter" Awal.Text = "Awal"

Akhir.Text = "Akhir"

For i = 1 To 100

Jumlah_Titik.AddItem i Next

If x < TextWidth(Daftar_Nama.List(0) & Space(20)) Then x = TextWidth(Daftar_Nama.List(0) & Space(20))

If ScaleMode = vbTwips Then x = x / _ Screen.TwipsPerPixelX

SendMessageByNum Daftar_Nama.hwnd, _ LB_SETHORIZONTALEXTENT, x, 0 End If

End Sub

'--- Tombol Ganti Jarak untuk mengganti jarak yang dipilih'

Private Sub Ganti_Jarak_Click()

If Titik_Awal.ListIndex <> Titik_Tujuan.ListIndex And Text_Jarak <> "Ketik jarak Enter" Then

Jarak(Titik_Awal.ListIndex + 1, Titik_Tujuan.ListIndex + 1) = Val(Text_Jarak)

Daftar_Jarak.RemoveItem Daftar_Jarak.ListIndex

Daftar_Jarak.AddItem " Jarak " & Nama(Titik_Awal.ListIndex + 1) & " ---> " _

& Nama(Titik_Tujuan.ListIndex + 1) & " = " _

& Jarak(Titik_Awal.ListIndex + 1, Titik_Tujuan.ListIndex + 1) End If

If Titik_Awal.Text = "Titik awal" And Titik_Tujuan.Text = "Titik tujuan" And Text_Jarak.Text = "Ketik jarak Enter" Then

Respon = MsgBox(" Tentukan data yang akan diganti !", _ vbOKOnly + vbInformation, "Aplikasi Pencarian Jalur Terpendek")

Respon = vbOKOnly End If

If Titik_Awal.Text = Titik_Tujuan.Text Then

Respon = MsgBox(" Titik awal dan tujuan harus berbeda !", _ vbOKOnly + vbInformation, "Aplikasi Pencarian Jalur

Terpendek")

Respon = vbOKOnly End If

If Text_Jarak.Text = "Ketik jarak Enter" Then

Respon = MsgBox(" Berikan jarak yang akan diganti !", _ vbOKOnly + vbInformation, "Aplikasi Pencarian Jalur Terpendek")

Respon = vbOKOnly End If


(60)

48

Titik_Tujuan.Text = "Titik tujuan" Text_Jarak.Text = "Ketik jarak Enter"

End Sub

'--- Tombol Hapus Daftar Jarak membersihkan layar daftar jarak sekaligus memori jarak'

Private Sub Hapus_Daftar_Jarak_Click()

Daftar_Jarak.Clear

For i = 1 To Titik For j = 1 To Titik Jarak(i, j) = 0 Next

Next

Daftar_Jarak.Enabled = False

End Sub

'--- Tombol Hapus Daftar Nama membersihkan layar daftar nama sekaligus memori nama'

Private Sub Hapus_Daftar_Nama_Click()

Respon = MsgBox(" Apakah anda yakin hapus semua nama ?", vbYesNo + vbQuestion, "Aplikasi Pencarian Jalur Terpendek")

If Respon = vbYes Then

Titik = 0

Index_Daftar_Jarak = 0 Daftar_Nama.Clear

Daftar_Nama.Enabled = False Hapus_Nama.Enabled = False

Tampil_Daftar_Nama.Enabled = False Hapus_Daftar_Nama.Enabled = False

If Titik_Awal.Enabled = True Then

For i = 1 To Index_Nama - 1

Titik_Awal.RemoveItem Nama(i) Titik_Tujuan.RemoveItem Nama(i) Awal.RemoveItem Nama(i) Akhir.RemoveItem Nama(i) Next

Titik_Awal.Enabled = False Titik_Tujuan.Enabled = False Awal.Enabled = False

Akhir.Enabled = False

Ganti_Jarak.Enabled = False Text_Jarak.Enabled = False Titik_Awal.Enabled = False


(61)

End If

End If

Index_Nama = 1 End Sub

'--- Tombol Hapus membersihkan layar semua laporan iterasi'

Private Sub Hapus_Laporan_Click()

Form_Proses_Iterasi.Layar_Tabu.Clear Form_Proses_Iterasi.Layar_Iterasi.Clear Laporan_Hasil.Clear

End Sub

'--- Tombol Hapus untuk menghapus nama yang dipilih'

Private Sub Hapus_Nama_Click()

If Index_Nama > 1 Then

Index_Nama = Index_Nama - 1 Titik = Titik - 1

Index_Hapus = Daftar_Nama.ListIndex + 1 Daftar_Nama.RemoveItem Daftar_Nama.ListIndex

For i = Index_Hapus To Index_Nama - 1 Nama(i) = Nama(i + 1)

Next

Index_Daftar_Jarak = 0

End If End Sub

'--- Tombol Data untuk memberikan semua nilai awal index variabel'

Private Sub Init_Data_Click() Index_Nama = 1

Index_Jarak = 1

Index_Daftar_Jarak = 0 Titik = 0

Input_Nama.Enabled = True Jumlah_Titik.Enabled = True Mdetik.Caption = "00" Detik.Caption = "00" Menit.Caption = "00" Jam.Caption = "00" End Sub

'--- Tombol Input untuk memberikan inisial nama'

Private Sub Input_Nama_Click()


(62)

50

Titik = Titik + Val(Jumlah_Titik.Text) Jumlah_Titik.Text = "Banyak titik" Text_Nama.Enabled = True

Text_Nama = "" Text_Nama.SetFocus Else

If Jumlah_Titik.Text = "Banyak titik" Then

Respon = MsgBox(" Berikan banyak titik !", vbOKOnly + vbInformation, "Aplikasi Pencarian Jalur Terpendek")

Respon = vbOKOnly End If

End If

End Sub

'--- Tombol Keluar untuk menutup aplikasi'

Private Sub Keluar_Click()

Respon = MsgBox("Apakah anda yakin keluar aplikasi ?", vbYesNo + vbQuestion, _

"Aplikasi Pencarian Jalur Terpendek") If Respon = vbYes Then

End End If End Sub

'--- Tombol Proses... untuk menjalankan proses iterasi'

Private Sub Proses_Click()

Timer1.Enabled = True Call Timer1_Timer Reset.Enabled = True

Laporan_Hasil.Enabled = True Hapus_Laporan.Enabled = True Simpan.Enabled = True

Form_Proses_Iterasi.Layar_Tabu.Enabled = True Form_Proses_Iterasi.Layar_Iterasi.Enabled = True

DoEvents

brs_Tabu = 0 brs_Iterasi = 0 brs_Laporan = 0 For i = 0 To 1000 Solusi1(i) = 0 Solusi2(i) = 0 Solusi3(i) = 0 Tabu(i) = 0 Tabu_Cek(i) = 0 Cek_Solusi(i) = 0 DoEvents

Next

'*********** Tetapkan maksimum iterasi **********'


(63)

MaxItr1 = ((Titik - 2) * (Titik - 3)) / 2 MaxItr2 = MaxItr1 - 1

'*************************************************'

'*********** Bagian inisial solusi awal ************'

Index_Solusi = 1

Solusi1(Index_Solusi) = Awal.ListIndex + 1 For i = 1 To Titik

DoEvents

If i <> Awal.ListIndex + 1 And i <> Akhir.ListIndex + 1 Then Solusi1(Index_Solusi + 1) = i

Index_Solusi = Index_Solusi + 1 End If

Next

Solusi1(Index_Solusi + 1) = Akhir.ListIndex + 1

'***************************************************'

'*********** Bagian cek jarak solusi awal **********'

n2 = 2 n1 = 1

Index_Solusi = 2 For i = 1 To 1000 DoEvents

If Jarak(Solusi1(n1), Solusi1(Index_Solusi)) <> 0 Then If Solusi1(Index_Solusi) = Akhir.ListIndex + 1 Then DoEvents

Exit For End If

n1 = Index_Solusi

Index_Solusi = Index_Solusi + 1 n2 = Index_Solusi

Else

If Solusi1(Index_Solusi) = Akhir.ListIndex + 1 Then DoEvents

Exit For Else

Tukar = Solusi1(n2 + 1)

Solusi1(n2 + 1) = Solusi1(Index_Solusi) Solusi1(Index_Solusi) = Tukar

n2 = n2 + 1 End If End If Next '*************************************************'

'*********** Bagian inisial solusi tabu awal **********'

For i = 1 To Index_Solusi DoEvents

Cek_Solusi(i) = Solusi1(i) Next


(64)

52

For i = 1 To Index_Solusi DoEvents

Tabu(i) = Solusi1(i) Next

Pnjg = 0

For i = 1 To Index_Solusi - 1 DoEvents

Pnjg = Pnjg + Jarak(Tabu(i), Tabu(i + 1)) Next

'*************************************************'

'*********** Bagian output solusi awal Tabu **********'

Form_Proses_Iterasi.Layar_Tabu.List(brs_Tabu) = "1. " For i = 1 To Index_Solusi

Form_Proses_Iterasi.Layar_Tabu.List(brs_Tabu) = Form_Proses_Iterasi.Layar_Tabu.List(brs_Tabu) _

& Tabu(i) & " " Next

Form_Proses_Iterasi.Layar_Tabu.List(brs_Tabu) = Form_Proses_Iterasi.Layar_Tabu.List(brs_Tabu) _ & " ---->" & " Total jarak = " & Pnjg

'*************************************************'

'*********** Bagian inisial solusi awal ************'

Index_Solusi = 1

Solusi1(Index_Solusi) = Awal.ListIndex + 1 For i = 1 To Titik

DoEvents

If i <> Awal.ListIndex + 1 And i <> Akhir.ListIndex + 1 Then Solusi1(Index_Solusi + 1) = i

Index_Solusi = Index_Solusi + 1 End If

Next

Solusi1(Index_Solusi + 1) = Akhir.ListIndex + 1

'***************************************************'

'*********** Bagian proses iterasi dan tabu list **********'

Index_No_Tabu = 2 brs_Tabu = 1 brs_Iterasi = 0 n1 = 2

n2 = 3

For i = 1 To MaxItr2 DoEvents

Index_No_Iterasi = 1 n3 = 2

n6 = n3 + 1

Form_Proses_Iterasi.Layar_Iterasi.List(brs_Iterasi) = "Tetangga (Jalur lain yang mungkin):"


(65)

Form_Proses_Iterasi.Layar_Iterasi.List(brs_Iterasi) = "" brs_Iterasi = brs_Iterasi + 1

For m = 1 To Titik DoEvents

Solusi3(m) = Solusi1(m) Next

For j = 1 To MaxItr1 + 1 DoEvents

n4 = 1 n5 = 1

For k = 2 To Titik DoEvents

If Jarak(Solusi3(n4), Solusi3(k)) <> 0 Then Solusi2(n5) = Solusi3(n4)

n4 = k n5 = n5 + 1 End If

Next

Solusi2(n5) = Solusi3(n4) p = 0

For k = 1 To n5 - 1 DoEvents

p = p + Jarak(Solusi2(k), Solusi2(k + 1)) Next

If Solusi2(n5) = Akhir.ListIndex + 1 And p <= Pnjg Then Pnjg = p

For k = 1 To n5 DoEvents

Tabu(k) = Solusi2(k) Next

Form_Proses_Iterasi.Layar_Iterasi.List(brs_Iterasi) = Index_No_Iterasi & ". "

For k = 1 To n5 DoEvents

Form_Proses_Iterasi.Layar_Iterasi.List(brs_Iterasi) = _

Form_Proses_Iterasi.Layar_Iterasi.List(brs_Iterasi) & Tabu(k) & " " Next

Form_Proses_Iterasi.Layar_Iterasi.List(brs_Iterasi) = _

Form_Proses_Iterasi.Layar_Iterasi.List(brs_Iterasi) & " ---->" & " Total jarak = " & Pnjg

brs_Iterasi = brs_Iterasi + 1

Index_No_Iterasi = Index_No_Iterasi + 1 n7 = n5

Else

If Solusi2(n5) = Akhir.ListIndex + 1 Then

Form_Proses_Iterasi.Layar_Iterasi.List(brs_Iterasi) = Index_No_Iterasi & ". "

For k = 1 To n5 DoEvents


(66)

54

Form_Proses_Iterasi.Layar_Iterasi.List(brs_Iterasi) = _

Form_Proses_Iterasi.Layar_Iterasi.List(brs_Iterasi) & Solusi2(k) & " "

Next

Form_Proses_Iterasi.Layar_Iterasi.List(brs_Iterasi) = _

Form_Proses_Iterasi.Layar_Iterasi.List(brs_Iterasi) & " ---->" & " Total jarak = " & p

brs_Iterasi = brs_Iterasi + 1

Index_No_Iterasi = Index_No_Iterasi + 1 End If

End If DoEvents

If n6 = Titik Then n3 = n3 + 1 n6 = n3 + 1

Else

n6 = n6 + 1 End If

For m = 1 To Titik DoEvents

Solusi3(m) = Solusi1(m) Next

Tukar = Solusi3(n6)

Solusi3(n6) = Solusi3(n3) Solusi3(n3) = Tukar

DoEvents Next

Form_Proses_Iterasi.Layar_Iterasi.List(brs_Iterasi) = "" brs_Iterasi = brs_Iterasi + 1

Tukar = Solusi1(n2) Solusi1(n2) = Solusi1(n1) Solusi1(n1) = Tukar n2 = n2 + 1

If n2 = Titik Then n2 = 3

End If DoEvents

n8 = 0

For k = 1 To n7 DoEvents

If Tabu(k) = Tabu_Cek(k) Then n8 = n8 + 1

End If

If n8 = n7 Then DoEvents GoTo pindah1 End If

Next


(67)

DoEvents

Tabu_Cek(k) = Tabu(k) Next

Form_Proses_Iterasi.Layar_Tabu.List(brs_Tabu) = Index_No_Tabu & ". "

For k = 1 To n7 DoEvents

Form_Proses_Iterasi.Layar_Tabu.List(brs_Tabu) = _ Form_Proses_Iterasi.Layar_Tabu.List(brs_Tabu) & Tabu(k) & " "

Next

Form_Proses_Iterasi.Layar_Tabu.List(brs_Tabu) = _ Form_Proses_Iterasi.Layar_Tabu.List(brs_Tabu) & " ---->" & " Total jarak = " & Pnjg

brs_Tabu = brs_Tabu + 1

Index_No_Tabu = Index_No_Tabu + 1 DoEvents pindah1: Next DoEvents '*************************************************'

'--- bagian cetak layar pada form aplikasi'

DoEvents

Laporan_Hasil.List(brs_Laporan) = "" brs_Laporan = brs_Laporan + 1

Laporan_Hasil.List(brs_Laporan) = "Maka Diperoleh Jalur Terpendek : "

brs_Laporan = brs_Laporan + 1

Laporan_Hasil.List(brs_Laporan) = "" For k = 1 To n7

DoEvents

Laporan_Hasil.List(brs_Laporan) =

Laporan_Hasil.List(brs_Laporan) & Nama(Tabu(k)) & " " Next

Laporan_Hasil.List(brs_Laporan) = Laporan_Hasil.List(brs_Laporan) & " ---->" & " Total jarak = " & Pnjg

DoEvents

Timer1.Enabled = False Proses.Enabled = False

If x < TextWidth(Laporan_Hasil.List(0) & Space(50)) Then x = TextWidth(Laporan_Hasil.List(0) & Space(50))

If ScaleMode = vbTwips Then x = x / _ Screen.TwipsPerPixelX

SendMessageByNum Laporan_Hasil.hwnd, _ LB_SETHORIZONTALEXTENT, x, 0 End If


(68)

56

If x < TextWidth(Form_Proses_Iterasi.Layar_Tabu.List(0) & Space(50)) Then

x = TextWidth(Form_Proses_Iterasi.Layar_Tabu.List(0) & Space(50))

If ScaleMode = vbTwips Then x = x / _ Screen.TwipsPerPixelX

SendMessageByNum Form_Proses_Iterasi.Layar_Tabu.hwnd, _ LB_SETHORIZONTALEXTENT, x, 0

End If

If x <

TextWidth(Form_Proses_Iterasi.Layar_Iterasi.List(0) & Space(50)) Then x = TextWidth(Form_Proses_Iterasi.Layar_Iterasi.List(0) & Space(50))

If ScaleMode = vbTwips Then x = x / _ Screen.TwipsPerPixelX

SendMessageByNum Form_Proses_Iterasi.Layar_Iterasi.hwnd, _

LB_SETHORIZONTALEXTENT, x, 0 End If

End Sub

'--- Tombol Reset mengembalikan nilai waktu pada posisi nol'

Private Sub Reset_Click() Mdetik.Caption = "00" Detik.Caption = "00" Menit.Caption = "00" Jam.Caption = "00" mili = 0

dtk = 0 mnt = 0 jm = 0 End Sub

'--- Tombol Simpan untuk menyimpan hasil laporan iterasi dalam file text notepad'

Private Sub Simpan_Click()

Form_Proses_Iterasi.CommonDialog1.Filter = "Text file | *.txt" Form_Proses_Iterasi.CommonDialog1.ShowSave

If Form_Proses_Iterasi.CommonDialog1.FileName <> "" Then

Open Form_Proses_Iterasi.CommonDialog1.FileName For Output As #2

Print #2, "LAPORAN PROSES ITERASI APLIKASI PENCARIAN JALUR TERPENDEK "

Print #2, "--- "

Print #2, "" Print #2, ""

Print #2, "BAGIAN I LAPORAN HASIL JARAK" Print #2, "---" Print #2, ""


(1)

DoEvents

Tabu_Cek(k) = Tabu(k) Next

Form_Proses_Iterasi.Layar_Tabu.List(brs_Tabu) = Index_No_Tabu & ". "

For k = 1 To n7 DoEvents

Form_Proses_Iterasi.Layar_Tabu.List(brs_Tabu) = _ Form_Proses_Iterasi.Layar_Tabu.List(brs_Tabu) & Tabu(k) & " "

Next

Form_Proses_Iterasi.Layar_Tabu.List(brs_Tabu) = _ Form_Proses_Iterasi.Layar_Tabu.List(brs_Tabu) & " ---->" & " Total jarak = " & Pnjg

brs_Tabu = brs_Tabu + 1

Index_No_Tabu = Index_No_Tabu + 1 DoEvents

pindah1: Next DoEvents

'*************************************************'

'--- bagian cetak layar pada form aplikasi'

DoEvents

Laporan_Hasil.List(brs_Laporan) = "" brs_Laporan = brs_Laporan + 1

Laporan_Hasil.List(brs_Laporan) = "Maka Diperoleh Jalur Terpendek : "

brs_Laporan = brs_Laporan + 1

Laporan_Hasil.List(brs_Laporan) = "" For k = 1 To n7

DoEvents

Laporan_Hasil.List(brs_Laporan) =

Laporan_Hasil.List(brs_Laporan) & Nama(Tabu(k)) & " " Next

Laporan_Hasil.List(brs_Laporan) = Laporan_Hasil.List(brs_Laporan) & " ---->" & " Total jarak = " & Pnjg

DoEvents

Timer1.Enabled = False Proses.Enabled = False

If x < TextWidth(Laporan_Hasil.List(0) & Space(50)) Then x = TextWidth(Laporan_Hasil.List(0) & Space(50))

If ScaleMode = vbTwips Then x = x / _ Screen.TwipsPerPixelX

SendMessageByNum Laporan_Hasil.hwnd, _ LB_SETHORIZONTALEXTENT, x, 0 End If


(2)

If x < TextWidth(Form_Proses_Iterasi.Layar_Tabu.List(0) & Space(50)) Then

x = TextWidth(Form_Proses_Iterasi.Layar_Tabu.List(0) & Space(50))

If ScaleMode = vbTwips Then x = x / _ Screen.TwipsPerPixelX

SendMessageByNum Form_Proses_Iterasi.Layar_Tabu.hwnd, _ LB_SETHORIZONTALEXTENT, x, 0

End If

If x <

TextWidth(Form_Proses_Iterasi.Layar_Iterasi.List(0) & Space(50)) Then x = TextWidth(Form_Proses_Iterasi.Layar_Iterasi.List(0) & Space(50))

If ScaleMode = vbTwips Then x = x / _ Screen.TwipsPerPixelX

SendMessageByNum Form_Proses_Iterasi.Layar_Iterasi.hwnd, _

LB_SETHORIZONTALEXTENT, x, 0 End If

End Sub

'--- Tombol Reset mengembalikan nilai waktu pada posisi nol' Private Sub Reset_Click()

Mdetik.Caption = "00" Detik.Caption = "00" Menit.Caption = "00" Jam.Caption = "00" mili = 0

dtk = 0 mnt = 0 jm = 0 End Sub

'--- Tombol Simpan untuk menyimpan hasil laporan iterasi dalam file text notepad'

Private Sub Simpan_Click()

Form_Proses_Iterasi.CommonDialog1.Filter = "Text file | *.txt" Form_Proses_Iterasi.CommonDialog1.ShowSave

If Form_Proses_Iterasi.CommonDialog1.FileName <> "" Then

Open Form_Proses_Iterasi.CommonDialog1.FileName For Output As #2

Print #2, "LAPORAN PROSES ITERASI APLIKASI PENCARIAN JALUR TERPENDEK "

Print #2, "--- "

Print #2, "" Print #2, ""

Print #2, "BAGIAN I LAPORAN HASIL JARAK" Print #2, "---" Print #2, ""


(3)

Print #2, Laporan_Hasil.List(i) Next

Print #2, "" Print #2, ""

Print #2, "BAGIAN I LAPORAN TABU LIST" Print #2, "---" Print #2, ""

For i = 0 To brs_Tabu

Print #2, Form_Proses_Iterasi.Layar_Tabu.List(i) Next

Print #2, "" Print #2, ""

Print #2, "BAGIAN II LAPORAN PROSES ITERASI" Print #2, "---" Print #2, ""

For i = 0 To brs_Iterasi

Print #2, Form_Proses_Iterasi.Layar_Iterasi.List(i) Next

Print #2, "" Print #2, ""

Print #2, "...LAPORAN PROSES SELESAI...!!!!"

Print #2, "" Print #2, ""

Close #2 End If

End Sub

'--- Tombol Tampil/Urut untuk menampilkan nama dan mengurutkannya sesuai indeks nomor'

Private Sub Tampil_Daftar_Nama_Click()

Daftar_Nama.Enabled = True

Hapus_Daftar_Nama.Enabled = True

For i = 1 To Index_Nama - 1

Daftar_Nama.List(i - 1) = i & ". " & Nama(i) Next

If x < TextWidth(Daftar_Nama.List(0) & Space(50)) Then x = TextWidth(Daftar_Nama.List(0) & Space(50))

If ScaleMode = vbTwips Then x = x / _ Screen.TwipsPerPixelX

SendMessageByNum Daftar_Nama.hwnd, _ LB_SETHORIZONTALEXTENT, x, 0 End If

End Sub

'--- Tombol Tampilkan Proses untuk membuka layar proses iterasi dan tabulist'

Private Sub Tampil_Proses_Click() Form_Proses_Iterasi.Show End Sub


(4)

'--- bagian pengosongan karakter text input jarak saat di klik'

Private Sub Text_Jarak_Click() Text_Jarak.Text = ""

End Sub

'--- bagian input jarak saat text ditekan enter'

Private Sub Text_Jarak_KeyDown(KeyCode As Integer, Shift As Integer)

If Text_Jarak <> "" And KeyCode = 13 And Titik_Awal.ListIndex <> Titik_Tujuan.ListIndex Then

Jarak(Titik_Awal.ListIndex + 1, Titik_Tujuan.ListIndex + 1) = Val(Text_Jarak)

Daftar_Jarak.Enabled = True

Hapus_Daftar_Jarak.Enabled = True Ganti_Jarak.Enabled = True

Daftar_Jarak.AddItem " Jarak " & Nama(Titik_Awal.ListIndex + 1) & " ---> " _

& Nama(Titik_Tujuan.ListIndex + 1) & " = " _

& Jarak(Titik_Awal.ListIndex + 1, Titik_Tujuan.ListIndex + 1)

Titik_Awal.Text = "Titik awal" Titik_Tujuan.Text = "Titik tujuan" Text_Jarak.Text = "Ketik jarak Enter"

End If

If Text_Jarak <> "" And KeyCode = 13 And Titik_Awal.Text = Titik_Tujuan.Text Then

Respon = MsgBox(" Titik awal dan tujuan harus berbeda !", _ vbOKOnly + vbInformation, "Aplikasi Pencarian Jalur

Terpendek")

Respon = vbOKOnly

Titik_Awal.Text = "Titik awal" Titik_Tujuan.Text = "Titik tujuan" Text_Jarak.Text = "Ketik jarak Enter"

End If

If x < TextWidth(Daftar_Jarak.List(0) & Space(50)) Then x = TextWidth(Daftar_Jarak.List(0) & Space(50))

If ScaleMode = vbTwips Then x = x / _ Screen.TwipsPerPixelX

SendMessageByNum Daftar_Jarak.hwnd, _ LB_SETHORIZONTALEXTENT, x, 0 End If

End Sub

'--- bagian input nama saat text ditekan enter'

Private Sub Text_Nama_KeyDown(KeyCode As Integer, Shift As Integer)


(5)

Nama(Index_Nama) = Text_Nama

Tampil_Daftar_Nama.Enabled = True Hapus_Nama.Enabled = True

Ambil_Data.Enabled = True

Text_Nama.Text = ""

Index_Nama = Index_Nama + 1

End If

If Index_Nama > Titik Then

Text_Nama.Text = "Ketik nama Enter" Text_Nama.Enabled = False

End If End Sub

'--- bagian timer pencatat waktu iterasi berjalan' Private Sub Timer1_Timer()

mili = Val(mili) + 1 md = Len(mili)

If mili > 59 Then

mili = "00"

dtk = Val(dtk) + 1 d = Len(dtk)

If dtk > 59 Then

dtk = "00"

mnt = Val(mnt) + 1 m = Len(mnt)

If mnt > 59 Then

mnt = "00"

jm = Val(jm) + 1 j = Len(jm) If jm > 23 Then jm = "00" End If

If j = 1 Then

Jam.Caption = "0" & jm Else

Jam.Caption = jm End If

End If

If m = 1 Then

Menit.Caption = "0" & mnt Else


(6)

End If

End If

If d = 1 Then

Detik.Caption = "0" & dtk Else

Detik.Caption = dtk End If

End If

If md = 1 Then

Mdetik.Caption = "0" & mili Else

Mdetik.Caption = mili End If

End SubSDS