Disusun oleh : CICILIA SARASWATI
NIM : 055314119
JURUSAN TEKNIK INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
PENCARIAN JALUR TERPENDEK DALAM GRAF
MULTI-CONSTRAINED DENGAN SELF ADAPTING MULTIPLE
CONSTRAINTS ROUTING ALGORITHM (SAMCRA)
Tugas Akhir
Diajukan untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Teknik Program Studi Teknik Informatika
Disusun Oleh : CICILIA SARASWATI
NIM : 055314119
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS SANATA DHARMA
SHORTEST PATH FINDING IN MULTI-CONSTRAINED
GRAPH USING SELF ADAPTING MULTIPLE
CONSTRAINTS ROUTING ALGORITHM (SAMCRA)
Final Project
Submitted as Partial Fulfillment Of the Requirement For the Undergreduate Degree of Sarjana Teknik
In Informatics Engineering Department
Arranged by : CICILIA SARASWATI Student number : 055314119
INFORMATICS ENGINEERING STUDY PROGRAM
INFORMATICS ENGINEERING DEPARTMENT
SCIENCE AND TECHNOLOGY FACULTY
SANATA DHARMA UNIVERSITY
YOGYAKARTA
HALAMAN PERSEMBAHAN
Karya ini kupersembahkan kepada
Allah Bapa di Surga
(Kaulah penuntun hidupku, Kaulah kasih yang tak pernah berkesudahan)
Mama, Bapak, mbak Desi dan adikku Frans
(Kalian adalah sumber motivasiku, anugerah terindah yang Bapa berikan untukku)
Teman-temanku
HALAMAN MOTTO
Perjalanan satu mill harus dimulai dengan satu langkah
(Lao-Tzu)
Tidak ada yang tidak mungkin di dunia ini bagi hati yang bersedia
(Abraham Lincoln)
INTISARI
Algoritma SAMCRA merupakan algoritma yang digunakan untuk memecahkan permasalahan optimasi jalur terpendek pada graf multi-constrained. Masalah optimasi multi-constraints adalah untuk menemukan jalur terpendek dari vertex sumber A ke vertex tujuan B, yang meminimalkan nilai bobot vektor,
dalam penelitian ini komponen bobot vektornya adalah jarak dan kemacetan. Untuk mendapatkan nilai minimal bobot jarak dan kemacetan, maka diperlukan panjang maksimal jalur untuk dapat membandingkan jalur ketika sebuah graf memiliki bobot lebih dari satu pada setiap linknya. Panjang maksimal merupakan nilai minimal dari perbandingan nilai maksimal penjumlahan setiap bobot dari satu simpul ke simpul lain dibagi dengan batas atas nilai setiap bobot.
Sistem ini dibangun untuk satu sisi saja, yaitu sisi pengguna. Pengguna dapat membuat graf yang sesuai dengan kebutuhan, yaitu dengan cara menambahkan, mengubah, dan menghapus data vertex, kemudian pengguna dapat membuat relasi antar vertex dengan cara menambah, mengubah, dan menghapus data edge. Setelah graf terbentuk maka pengguna dapat melakukan pencarian jalur terpendek pada graf, pencarian dilakukan dengan cara memasukkan vertex sumber dan vertex tujuan, hasil pencarian jalur terpendek berupa jalur yang dilalui, jarak jalur, dan kemacetan pada jalur.
ABSTRACT
SAMCRA algorithm is an algorithm used to solve optimization problems in graph the shortest path multi-constrained. Multi-constraints optimization problem is to find the shortest path from source vertex A to vertex B destination, which minimizes the value of the weight vector, in this research component of weight vector is the distance and congestion. To get the minimum value weighted distance and congestion, the maximum length needed to compare track to track when a graph has a weight of more than one on each link. The maximum length is the minimum value of the ratio of the maximum value the sum of each weight from one node to another node divided by the upper limit value of each weight.
The system is built to one side only, namely the user. Users can make graph in accordance with needs, that is by adding, modifying, and deleting data vertex, then the user can make the relation between the vertices by adding, modifying, and deleting the data edges. After a graph is formed then the user can search the shortest path in a graph, the search is done by inserting a source vertex and destination vertex, the shortest path search results of the path, the distance lanes, and congestion on the path.
LEMBAR PERNYATAAN PERSETUJUAN
PUBLIKASI KARYA ILMIAH UNTUK KEPENTINGAN AKADEMIS
Yang bertanda tangan di bawah ini, saya mahasiswa Universitas Sanata Dharma : Nama : Cicilia Saraswati
NIM : 055314119
Demi pengembangan ilmu pengetahuan, saya memberikan kepada Perpustakaan Universitas Sanata Dharma karya ilmiah saya yang berjudul :
PENCARIAN JALUR TERPENDEK DALAM GRAF MULTI-CONSTRAINED DENGAN SELF ADAPTING MULTIPLE
CONSTRAINTS ROUTING ALGORITHM (SAMCRA)
Beserta Perangkat yang diperlukan (bila ada). Dengan demikian saya memberikan kepada Perpustakaan Sanata Dharma hak untuk menyimpan, mengalihkan dalam bentuk media lain, mengelolanya dalam bentuk pangkalan data, mendistribusikannya secara terbatas, dan mempublikasikannya di Internet untuk kepentingan akademis tanpa perlu meminta ijin dari saya selama mencatumkan nama saya sebagai penulis.
Demikian pernyataan ini yang saya buat dengan sebenarnya. Dibuat di Yogyakarta
Pada tanggal : Oktober 2010 Yang menyatakan,
PERNYATAAN KEASLIAN KARYA
Saya menyatakan dengan sesungguhnya bahwa skripsi yang saya tulis ini tidak memuat karya orang lain, kecuali yang telah disebutkan dalam kutipan dan daftar pustaka, sebagaimana layaknya karya ilmiah.
Yogyakarta, Oktober 2010 Penulis
KATA PENGANTAR
Puji dan syukur kepada Tuhan yang Maha Esa atas rahmat dan penyertaan Nya sehingga penulis dapat menyelesaikan Tugas Akhir dengan judul “Pencarian Jalur Terpendek dalam Graf Multi-constrainted dengan Self Adapting Multiple Constraints Routing Algorithm (SAMCRA)”. Tugas Akhir ini disusun guna memenuhi salah satu syarat untuk memperoleh gelar sarjana Teknik di Jurusan Teknik Informatika, Universitas Sanata Dharma.
Penyusunan Tugas Akhir ini tidak terlepas dari doa, bantuan, bimbingan, serta dukungan dari berbagai pihak yang sangat bermanfaat bagi penulis. Dalam kesempatan ini, penulis mengucapkan terima kasih yang tak terhingga kepada : 1. Bapak Bambang Soelistijanto, S.T., M.Sc. selaku dosen pembimbing atas
segala kesabaran, bimbingan, dan bantuannya dalam membimbing penulis dalam menyelesaikan Tugas Akhir ini.
2. Bapak Eko Hari Parmadi, S.Si., M.Kom. dan Bapak Puspaningtyas Sanjoyo Adi, S.T., M.T. selaku dosen penguji atas saran dan masukan demi kesempurnaan Tugas Akhir ini.
3. Para dosen Universitas Sanata Dharma yang telah membantu dan memberi bekal pengetahuan kepada penulis.
4. Para karyawan dan staff Fakultas Sains dan Teknologi, khususnya Jurusan Teknik Informatika, atas segala bantuan yang diberikan kepada penulis.
6. Gabrelia Bonino, Ni Putu Feronika, Putri Ratnawati, Yuvenalis Andarwati, Agnes Putri, Floriska Nuhan, dan Maria Yesse atas dukungan, doa, bantuan yang sangat bermanfaat, atas kesediaan untuk mendengarkan keluh kesah, serta menjadi tempat penghiburan bagi penulis.
7. Lusia Yuliani, Margaretha Rosita, Marsela Lotjita, dan Yuliana Rosi atas kesediaan mendengarkan keluh kesah, memberikan dukungan, terima kasih untuk menjadi tempat menghilangkan penat.
8. Semua pihak yang telah membantu penulis dalam menyelesaikan studi dan Tugas Akhir, yang tidak dapat disebutkan satu persatu.
Semoga segala kebaikan yang telah penulis terima menjadi berkat dan bekal yang sangat berguna di kehidupan penulis nantinya. Penulis menyadari bahwa penulisan Tugas Akhir ini masih jauh dari kesempurnaan, oleh sebab itu penulis mengharapkan kritik dan saran dari pembaca yang bersifat membangun. Atas kritik dan saran yang diberikan, penulis mengucapkan terima kasih.
Yogyakarta, Oktober 2010 Penulis,
Daftar Isi
PUBLIKASI KARYA ILMIAH UNTUK KEPENTINGAN AKADEMIS ... ix
PERNYATAAN KEASLIAN KARYA ... x
I.3. Tujuan dan Manfaat Penelitian ... 2
I.4. Batasan Masalah... 2
I.5. Metodologi Penelitian ... 3
I.6. Sistematika Penulisan ... 4
Bab II. Landasan Teori ... 6
II.1. Pengenalan Graf ... 6
II.2. Graf tidak berarah ... 7
II.3. Graf Multi-Constraints ... 8
II.4. Jalur Terpendek ... 9
II.5. Matriks untuk Graf Berlabel ... 9
II.6. Algoritma Dijkstra ... 10
II.7. SAMCRA (Self Adapting Multiple Constraints Routing Algorithm) .. 11
II.8. Contoh operasi algoritma SAMCRA ... 19
Bab III. Analisis dan Perancangan Sistem... 27
III.1. Analisis Sistem ... 27
III.1.1. Gambaran Umum Sistem ... 27
III.1.2. Konsep Kerja Sistem ... 27
III.1.3. Kebutuhan Sistem ... 28
III.1.4. Use Case Diagram ... 28
III.1.5. Pemodelan Proses... 30
III.1.6. Pemodelan Data ... 37
III.2. Perancangan Antarmuka ... 39
III.2.1. Rancangan Antarmuka Utama Sistem ... 39
III.2.2. Rancangan Masukan Sistem ... 40
III.2.3. Rancangan Antarmuka Keluaran Sistem ... 46
IV.1. Pembuatan Database ... 49
IV.2. Pembuatan Tabel ... 50
IV.2.1. Tabel Vertex... 50
IV.2.2. Tabel Edge ... 50
IV.3. Pembuatan Store Procedure ... 51
IV.4. Implementasi Koneksi Java dengan MySQL ... 54
IV.5. Implementasi Antarmuka ... 57
IV.5.1. Implementasi Antarmuka Halaman Utama ... 57
IV.5.2. Implementasi Antarmuka Halaman Komponen Vertex ... 58
IV.5.3. Implementasi Antarmuka Halaman Komponen Edge ... 68
IV.5.4. Implementasi Antarmuka Operation SAMCRA ... 78
IV.5.5. Implementasi Antarmuka About Software ... 85
Bab V. Uji Coba dan Analisis Hasil ... 86
V.1. Uji Coba Algoritma dengan Perhitungan Manual ... 86
V.1.1. Uji Coba Algoritma dengan Perhitungan Manual ke-1 ... 86
V.1.2. Uji Coba Algoritma dengan Perhitungan Manual ke-2 ... 87
V.2. Uji Algoritma dengan Menggunakan Aplikasi ... 88
V.2.1. Uji Coba Algoritma dengan Aplikasi ke-1 ... 88
V.2.2. Uji Coba Algoritma dengan Aplikasi ke-2 ... 89
V.3. Analisis Hasil ... 90
Bab VI. Penutup ... 91
VI.1. Kesimpulan ... 91
VI.2. Saran ... 91
Daftar Gambar
Gambar 2.1 Graf ... 6
Gambar 2.2 Graf multi-constraints ... 8
Gambar 2.3 Representasi graf tidak berarah ke dalam matriks ... 10
Gambar 2.4 Dominated paths : skenario (a) dan (b) ... 13
Gambar 2.5 Meta-Code Fase Inisialisasi ... 15
Gambar 2.6 Meta-Code Feasibility ... 16
Gambar 2.7 Meta-Code Update Antrian... 17
Gambar 2.8 Meta-Code SAMCRA ... 18
Gambar 2.9 Graf yang setiap linknya memiliki dua komponen bobot vektor. ... 20
Gambar 2.10 Jaringan pada fase inisialiasi ... 21
Gambar 2.11 Langkah 1 dan 2 dalam operasi SAMCRA ... 22
Gambar 2.12 Langkah 3 dan 4 dalam operasi SAMCRA ... 23
Gambar 2.13 Langkah 5 dan 6 dalam operasi SAMCRA ... 24
Gambar 2.14 Langkah 7 dan 8 dalam operasi SAMCRA ... 25
Gambar 3.1 Graf multi-constraints ... 27
Gambar 3.2 Use Case Diagram ... 29
Gambar 3.3 Diagram konteks ... 30
Gambar 3.4 Diagram berjenjang sistem pencarian jalur terpendek... 31
Gambar 3.5 Diagram Alir Data level 0... 32
Gambar 3.6 Diagram Alir Data level 1... 33
Gambar 3.7 Algoritma Dijkstra ... 34
Gambar 3.8 Algoritma SAMCRA ... 36
Gambar 3.11 Rancangan Antarmuka Utama Sistem ... 40
Gambar 3.12 Rancangan Antarmuka Form Setup Vertex ... 41
Gambar 3.14 Rancangan Antarmuka Form Edit Vertex ... 42
Gambar 3.15 Rancangan Antarmuka Form Delete Vertex ... 43
Gambar 3.16 Rancangan Antarmuka Form Setup Edge ... 43
Gambar 3.17 Rancangan Antarmuka Form Add Edge ... 44
Gambar 3.18 Rancangan Antarmuka Form Edit Edge ... 45
Gambar 3.19 Rancangan Antarmuka Form Delete Edge ... 45
Gambar 3.20 Rancangan Antarmuka Form Operasi ... 46
Gambar 3.21 Rancangan Antarmuka Keluaran Form Setup Vertex ... 46
Gambar 3.22 Rancangan Antarmuka Hasil Keluaran dari Setup Edge ... 47
Gambar 3.23 Rancangan Antarmuka Keluaran Hasil Pencarian ... 47
Gambar 3.24 Rancangan Antarmuka Form about software ... 48
Gambar 4.1 Implementasi Pembuatan Database ... 50
Gambar 4.2 Implementasi Tabel vertex ... 50
Gambar 4.3 Implementasi Tabel edge ... 51
Gambar 4.4 Implementasi Halaman Utama Sistem ... 57
Gambar 4.5 Implementasi Antamuka Add vertex ... 58
Gambar 4.6 Pesan jika data vertex berhasil ditambahkan ... 59
Gambar 4.8 Konfirmasi Pengubahan Data Vertex ... 62
Gambar 4.9 Pesan jika data vertex berhasil diubah ... 62
Gambar 4.10 Implementasi Delete vertex ... 65
Gambar 4.11 konfirmasi penghapusan data vertex ... 65
Gambar 4.12 Pesan jika data berhasil dihapus ... 66
Gambar 4.12 Implementasi Antarmuka Add edge ... 68
Gambar 4.13 Pesan jika data edge berhasil ditambahkan ... 69
Gambar 4.14 Implementasi Antarmuka Edit edge ... 71
Gambar 4.15 Konfirmasi Pengubahan Data edge ... 72
Gambar 4.16 Pesan jika data edge berhasil diubah ... 72
Gambar 4.17 Implementasi Antarmuka Delete edge ... 75
Gambar 4.18 Konfirmasi Penghapusan Data edge ... 76
Gambar 4.19 Pesan jika data edge berhasil dihapus ... 76
Gambar 4.17 Implementasi Antarmuka operation SAMCRA... 79
Gambar 4.18 Implementasi Antarmuka about software ... 85
Gambar 5.1 Graf 1 ... 86
Gambar 5.2 Graf 2 ... 87
Gambar 5.3 Uji algoritma menggunakan aplikasi ke-1 ... 89
Daftar Tabel
Tabel 2.1 Tabel Aktivitas Operasi SAMCRA ... 26
Tabel 3.1 Struktur tabel vertex ... 38
Tabel 3.2 Struktur tabel edge ... 38
Tabel 3.2 Struktur tabel undirect ... 39
Tabel 5.1 Tabel Aktivitas Operasi SAMCRA gambar 5.1 ... 86
Bab I.
Pendahuluan
I.1. Latar Belakang
Pencarian jalur terpendek dalam graf multi-constraints merupakan permasalahan yang sering ditemui dalam kehidupan sehari-hari dalam berbagai aspek kehidupan. Tidak seperti pencarian jalur terpendek pada umumnya, yang biasanya dalam penentuan jalur terpendek hanya memperhitungkan satu kendala saja yang biasanya berupa jarak, ada beberapa kasus yang kurang tepat jika pencarian jalur terpendeknya menggunakan satu kendala saja, karena ada kendala lain yang berpengaruh dalam penentuan jalur terpendek dalam kasus tersebut. Salah satu gambaran permasalahan pencarian jalur terpendek dengan kendala lebih dari satu adalah pengendara bermotor yang menempuh perjalanan dari suatu tempat ke tempat tujuan, tentu pencarian jalur terpendeknya tidak hanya memperhitungkan kendala jarak, tetapi harus memperhitungkan pula kepadatan lalu lintas jalan yang akan dilalui, karena kepadatan lalu lintas setiap jalan berbeda-beda, bisa saja sebuah jalan memiliki jarak yang lebih dekat tetapi lalu lintas pada jalan tersebut lebih padat dibanding jalan lain yang jaraknya lebih jauh.
Berdasarkan permasalahan di atas penulis tertarik untuk membuat perangkat lunak yang dapat memecahkan permasalahan pencarian jalur terpendek dalam graf multi-constraints dengan menggunakan algoritma SAMCRA.
I.2. Rumusan Masalah
Rumusan masalah dari penelitian ini adalah bagaimana mencari jalur terpendek dalam graf multi-constraints dengan menggunakan algoritma SAMCRA?
I.3. Tujuan dan Manfaat Penelitian
Tujuan penelitian adalah membuat perangkat lunak untuk memudahkan pencarian jalur terpendek dalam graf multi-constraints dengan algoritma SAMCRA.
Manfaat dari penelitian ini adalah
Memudahkan pencarian jalur terpendek dari satu tempat ke tempat lain yang mempunyai kendala lebih dari satu.
Memahami algoritma SAMCRA dan pengimplementasiannya ke dalam pemrograman komputer.
I.4. Batasan Masalah
Batasan masalah dari penelitian ini adalah
Routing Algorithm (SAMCRA).
2. Bahasa pemrograman yang digunakan adalah Java. 3. Basis data yang digunakan adalah MySQL.
4. Graf yang digunakan merupakan graf tidak berarah.
5. Banyaknya kendala yang diperhitungkan adalah 2, yaitu jarak antar vertex atau distance dan tingkat kemacetan atau congestion.
I.5. Metodologi Penelitian
1. Melakukan studi kepustakaan untuk mempelajari algoritma SAMCRA, serta mencari dan mempelajari bahan kajian yang sesuai dengan sistem yang dibuat dari berbagai sumber, dapat berasal dari buku, artikel, dan internet.
2. Mengembangkan sistem menggunakan metode Rekayasa Perangkat Lunak (RPL) secara terstruktur (Whitten, 2004) yaitu :
1. Analisis Sistem
Pada tahap ini hal yang dilakukan adalah menganalisis permasalahan yang dihadapi dan kebutuhan dari sistem. Mencari dan mengumpulkan data-data secara lengkap untuk pembuatan program.
2. Desain Sistem
interface.
3. Implementasi
Pada tahap ini membuat program sesuai dengan rancangan. 4. Pengujian
Pada tahap ini dilakukan pengujian program yang telah dibuat.
I.6. Sistematika Penulisan
Laporan ini secara garis besar dibagi menjadi beberapa bab dengan perincian sebagai berikut :
BAB I PENDAHULUAN
Bab ini meliputi latar belakang, batasan masalah, tujuan dan manfaat penelitian, rumusan masalah, metodologi penelitian, serta sistematika penulisan.
BAB II LANDASAN TEORI
Bab ini berisi teori-teori yang berhubungan erat dan yang digunakan dalam penelitian.
BAB III ANALISIS DAN PERANCANGAN SISTEM
Bab ini berisi analisis sistem serta perancangan sistem secara mendetail, yang meliputi perancangan input dan output, perancangan proses, dan juga perancangan interface.
BAB IV IMPLEMENTASI SISTEM
BAB V UJI COBA DAN ANALISIS HASIL
Bab ini berisi analisis dari hasil uji coba algoritma SAMCRA dengan menggunakan perhitungan manual dan uji coba algoritma dengan menggunakan sistem.
BAB VI PENUTUP
Bab II. Landasan Teori
II.1. Pengenalan Graf
Secara informal, graf adalah himpunan dari benda-benda yang disebut simpul (vertex atau node) yang terhubung oleh sisi (edge-edge) atau busur (arc). Biasanya suatu graf digambarkan sebagai kumpulan titik-titik yang melambangkan vertex dan dihubungkan oleh garis-garis yang melambangkan edge. Secara formalnya, Suatu graph G dapat dinyatakan sebagai G = < V,E >.
Graph G terdiri atas himpunan V yang berisikan simpul pada graf tersebut dan himpunan dari E yang berisi sisi pada graf tersebut. Himpunan E dinyatakan sebagai pasangan dari simpul yang ada dalam V. Berikut merupakan contoh graf pada gambar 2.1 :
v1
v2
v4
v3
e1
e2
e3
e4
Gambar 2.1 Graf
Graf pada gambar 2.1 terdiri dari empat titik yaitu v1, v2, v3, v4 dan empat garis
e1=(v1,v2), e2=(v2,v3), e3=(v3,v4), dan e4=(v1,v4).
Beberapa istilah berkaitan dengan graf yang akan digunakan dalam laporan Tugas Akhir ini antara lain :
2. Edge atau arc, merupakan garis yang menghubungkan dua vertex.
3. Walk (perjalanan), walk atau perjalanan pada suatu graf G adalah barisan simpul dan ruas secara berganti-ganti. Contoh
v1, e1, v2, e2, v3, en-1, vn
Perjalanan dengan notasi di atas dapat ditulis dengan menuliskan himpunan ruas saja e1, e2, en-1 atau dengan menuliskan himpunan simpul-simpulnya
yaitu v1, v2, v3, vn-1, vn.
4. Path (jalur). Path atau jalur adalah suatu walk atau perjalanan dimana semua simpul dalam himpunannya adalah berbeda.
II.2. Graf tidak berarah
Graf tidak berarah G didefinisikan secara abstrak sebagai suatu pasangan terurut (V, E), V merupakan vertex dan E merupakan edge, dengan V suatu himpunan dan E himpunan yang unsur-unsurnya berupa multi himpunan dengan dua unsur dari V. Graf tidak berarah dapat direpresentasikan secara geometrik sebagai suatu himpunan titik-titik V dengan suatu himpunan garis-garis E antara titik-titik tersebut, graf tidak berarah tidak memperhatikan arah sisi yang menghubungkan dua vertex. Graf tidak berarah terdiri dari :
1. Graf Sederhana, graf sederhana merupakan graf yang tidak boleh mempunyai loop dan garis paralel.
2. Graf Lengkap dengan n titik (Kn), graf dengan n titik dan setiap dua titik
II.3. Graf Multi-Constraints
Gambar 2.2 Graf multi-constraints
Gambar 2.2 merupakan gambar graf multi-constraints, graf multi-constraints merupakan graf yang mempunyai bobot edge lebih dari satu.
Diasumsikan sebuah graf G yang setiap edge u→v dari vertex u ke vertex v ditandai dengan m dimensional edge vektor, m dimensional edge vektor merupakan jumlah bobot pada edge w(u→v) = [w1(u→v), w2(u→v),....,
wm(u→v)], dimana komponen wi>0 merupakan ukuran mutu layanan (Quality of Service(QoS)), pada penelitian ini komponen bobot setiap edge yaitu w1>0
merupakan jarak dan w2>0 merupakan tingkat kemacetan. Algoritma routing QoS menghitung jalur P yang mempunyai banyak kendala wi(P) ≤ Li untuk semua
1≤i≤m. Li merupakan mutu layanan yang diminta user dan L disebut sebagai vektor kendala.
bobot mutu layanan pada link yang mendefinisikan jalur. Contoh dari ukuran tambahan mutu layanan adalah tingkat kemacetan, biaya, dan lainnya. Untuk ukuran min-max mutu layanan bobot jalur, ukuran mutu layanan adalah minimum (maksimum) dari bobot mutu layanan pada link yang terdapat pada jalur. Mutu Layanan jalur PA→Badalah jalur antara vertex A dan vertex B yang wi(PA→B) ≤ Li untuk 1 ≤ i ≤ m.
II.4. Jalur Terpendek
Jalur terpendek merupakan bagian dari teori graf. Pada graf multi-constraints masalah jalur terpendek adalah bagaimana kita mencari sebuah jalur
pada graf yang meminimalkan panjang maksimal jalur tersebut.
II.5. Matriks untuk Graf Berlabel
Di dalam matriks suatu graf tidak berarah, jumlah successor sama dengan jumlah predeccessor. Successor vertex N disimpan dalam baris N dan predeccessor untuk vertex/node disimpan pada kolom N. Sebagai contoh lihat
Gambar 2.3 Representasi graf tidak berarah ke dalam matriks
II.6. Algoritma Dijkstra
Algoritma Dijkstra merupakan algoritma yang ditemukan oleh E. W. Dijkstra dan merupakan algoritma yang akan digunakan untuk mencari jalur terpendek dari titik awal ke titik tujuan. Langkah-langkah algoritma Dijkstra adalah sebagai berikut :
Langkah 1 : Tandai titik awal yang telah dipilih dan beri beban 0 dan beban yang sangat besar untuk titik lainnya.
Langkah 2 : Tandai sementara titik yang bisa dicapai secara langsung dari titik awal.
Pilih jalur terpendek diantara titik yang ditandai sementara.
Jika ada panjang jalur yang sama pilih salah satunya.
Tandai titik yang terpilih.
II.7. SAMCRA (Self Adapting Multiple Constraints Routing Algorithm)
SAMCRA merupakan algoritma routing yang biasa digunakan untuk memecahkan masalah optimasi multi constraints, SAMCRA didasarkan pada empat konsep, yaitu: (1) definisi non-linear panjang jalur l(P), (2) k-shortest paths, (3) non-dominated paths, (4) look-ahead.
1. Definisi non-Linear Panjang Jalur l(P)
Bobot vektor jalur didefinisikan dalam penjumlahan vektor. Seperti pada aljabar linear, panjang vektor dibutuhkan, dimana bobot vektor didefinisikan dalam penjumlahan vektor. Definisi panjang jalur l(P) dibutuhkan untuk dapat membandingkan jalur ketika komponen bobot pada link memiliki ukuran mutu layanan yang berbeda pada spesifik unit. Berikut merupakan rumus panjang jalur :
l(P) =
Dijkstra. Algoritma Dijkstra digunakan untuk mengurangi graf yang akan dikembalikan sebagai jalur terpendek P yang meminimalkan panjang jalur l(P) yang didefinisikan oleh (2.1).
2. k-Shortest Paths
Algoritma k-shortest path mirip dengan algoritma Dijkstra. Penyimpanan pada setiap vertex lanjutan hanya merupakan loncatan dari vertex sebelumnya dan panjang dari jalur terpendek dari sumber ke vertex lanjutan, kita dapat menyimpan jalur terpendek pertama, kedua, ketiga, hingga k jalur terpendek bersama dengan panjang yang sesuai. Ini memungkinkan untuk tidak menyimpan sama sekali k jalur pada sebuah vertex. Pada kasus dimana nilai k tidak terbatas, algoritma k jalur terpendek mengembalikan semua kemungkinan jalur yang
diminta pada panjang antara sumber dan tujuan. Pada kasus tersebut selalu ada kemungkinan bahwa end-to-end jalur terpendek tidak dapat ditemukan. SAMCRA memilih „self-adaptively’ yang dibutuhkan nilai dari knpada setiap vertex n dari graf G, yang kontras dengan algoritma k jalur terpendek dimana pada setiap vertex n nilai sama dari k dialokasikan dan oleh karena itu tempat penyimpanan yang sama dalam antrian dari jalur per vertex. Didefinisikan sebagai kSAMCRA=
maxn G(kn) atau disebut juga sebagai ukuran kompleksitas SAMCRA.
3. Dominated paths
Dominated path pada dasarnya adalah teknik pengurangan tempat
secara drastis yang dapat meningkatkan efisiensi proses perhitungan.
”Kekuasaan jalur” dapat dianggap sebagai relaksasi multidimensional.
Relaksasi merupakan properti kunci dari satu parameter algoritma jalur terpendek seperti Dijkstra dan Bellman-Ford.
Definisi non-dominated
Dibatasi m = 2 dimensi, diasumsikan dua jalur P1 dan P2 dari vertex
sumber ke vertex lanjutan, setiap dengan bobot vektor jalur (w1(P1),w2(P1)) = (x1,y1) dan (w1(P2), w2(P2)) = (x2,y2)), pada
gambar 2.4 ditunjukan dua skenario yang mungkin dari dua jalur.
Gambar 2.4 Dominated paths : skenario (a) dan (b)
Pada gambar 2.4, dalam skenario (a), P1 mendominasi P2, tapi
dalam skenario (b) P1 dan P2 tidak saling mendominasi satu sama
lain. Pada skenario (a), P1 lebih pendek daripada P2 dan w1(P1) <
w1(P2) untuk semua komponen 1≤ i ≤ m. Pada skenario (b) kedua
w1(P1) < w2(P2) untuk beberapa indikasi i, tapi wj(P1) > wj(P2)
untuk setidak-tidaknya satu indeks j.
Sebuah jalur P disebut non-dominated jika tidak ada jalur P‟ untuk wi(P‟) ≤ wi(P) untuk semua bobot komponen link i kecuali untuk
setidak-tidaknya satu j untuk wj(P‟) < wj(P).
4. Look- Ahead
Di samping jalur dominasi, konsep look-ahead dapat dilihat sebagai penambahan mekanisme untuk mengurangi tempat pencarian jalur yang mungkin. Konsep look-ahead membatasi kelompok jalur yang mungkin dengan menggunakan informasi jalur yang tersisa untuk mencapai vertex tujuan. Konsep look ahead mengajukan untuk menghitung jalur terpendek akar pohon pada tujuan untuk setiap vertex n dalam graf G untuk setiap m link yang terpisah. Prinsip dasar yang
Meta-Code SAMCRA
Gambar 2.5 Meta-Code Fase Inisialisasi
FEASIBILITY(G, u, i, v, counter, d, w, maxlength)
Pada tahap FEASIBILITY (gambar 2.6), dilakukan pengecekan jalur terdominasi satu sama lain atau memaksa nilai maxlength. Sub jalur u[i] menunjuk i jalur yang disimpan pada vertex u. FEASIBILITY selanjutnya jalur i pada vertex u terhadap vertex tetangga v, dimana counter[v] vertex sudah disimpan. Untuk setiap counter[v] sub jalur v[j] disimpan pada vertex v (pada baris 2-3). Jika semua komponen dari vektor yang berbeda tidak negatif, kemudian sub jalur v[j] memaksa nilai maxlength maka tandai dengan warna hitam pada baris 4. Jalur yang telah ditandai dengan warna hitam menjadi nilai lama dan mungkin dapat ditempatkan kembali dengan jalur yang baru. Baris 5 mengecek jika jalur selanjutnya merupakan dirinya sendiri terdominasi oleh sub jalur v[j]. Jika
UPDATEQUEUE(Q, u, i, j, d, w, , counter[v], predicted_length) 3 DECREASE-KEY(Q, v, j, predicted_length) 4 d[v[j]]
8 INSERT(Q, v, counter[v], predicted_length)
9 d
Gambar 2.7 Meta-Code Update Antrian
(baris 7-10). Bukan panjang asli yang disimpan, tapi ini merupakan predicted_length.
Algoritma utama pada gambar 2.8 dimulai dengan mengeksekusi fase inisialisasi (baris 1). Antrian Q tidak kosong, fungsi extract-min pada baris 3
13 if(v = B AND predicted_length < maxlength)
14 maxlength ← predicted_length
Dengan angka tersebut dan predesessor list , jalur selanjutnya ditandai dengan warna abu-abu pada baris 4. jika vertex u, berkoresponden ke jalur selanjutnya u[i], jumlah tujuan B, jalur terpendek dikembalikan. Jika u ≠ B, pembacaan prosedur dikenali pada baris 8. Baris 8 menjelaskan bagaimana i jalur sampai vertex u diperpanjang terhadap vertex tetangga v, kecuali untuk asal vertex sebelumnya. Vertex sebelumnya pada jalur u[i] disimpan pada predecessor list . Pengembalian vertex sebelumnya yang dapat menyebabkan loop, harus dapat dihindari. Sejak bobot link non-negatif, jalur yang mempunyai loop selalu didominasi oleh jalur tanpa dominasi. Baris 9 meminta tahap FEASIBILITY untuk mengecek dimana seluruh jalur disimpan pada vertex v yang tidak terdominasi oleh jalur yang disimpan sebelumnya pada vertex v. Pada baris 10, length dari prediksi end-to-end bobot vektor jalur dihitung. Baris 11 mengetes jika jalur baru selanjutnya tidak non-dominated dan predicted_length ≤ maxlength. Jika kasus ini dapat disimpan dan antriannya harus bisa diupdate (baris 12). Hapus jalur yang predicted_lengthnya > maxlength adalah pengurangan tempat pencarian dari konsep look-ahead. Terakhir, maxlength dapat diupdate pada baris 13-14.
II.8. Contoh operasi algoritma SAMCRA
Gambar 2.9 Graf yang setiap linknya memiliki dua komponen bobot vektor.
Sebelum memulai langkah-langkah pencarian jalur terpendek pada graf dalam gambar 2.9, diperlukan fase inisialisasi untuk mendapatkan informasi mengenai batas bawah bobot setiap vektor dan panjang maksimal (maxlength) baru yang sebelumnya adalah 1, keduanya digunakan sebagai acuan pencarian jalur terpendek.
Fase inisialisasi
Gambar 2.10 Jaringan pada fase inisialiasi
o Menentukan panjang maksimal baru untuk menentukan jalur terpendek, jalur terpendek yang uji sesuai dengan m-dimensional edge. Untuk graf pada gambar 2.10 terdapat 2 komponen bobot, maka jalur terpendek yang diuji adalah 2 jalur Dijkstra yaitu P
1
dari vertex 1 ke vertex 7, dimana bobot komponen pertama mempunyai jalur terpendek P
Gambar 2.11 Langkah 1 dan 2 dalam operasi SAMCRA
diperkirakan panjang untuk vertex 3 adalah max(
20 diperkirakan tidak melebihi panjang maksimal maka keduanya disimpan dalam antrian.
Pada langkah 2, perkiraan panjang yang disimpan dalam antrian yaitu pada vertex 2 dengan panjang 0,6. Prosedur pembacaan vertex-vertex tetangga
diulangi, tetangga vertex 2 adalah vertex 1 dan vertex 4. Untuk vertex sebelumnya tidak perlu dibaca, jadi hanya satu jalur P1→4= 1→ 2 → 4 dengan panjang yang diperkirakan adalah l(P1→4) = max( 0,6) = 0,6 ditambahkan dalam antrian.
Tetangga vertex 4 adalah vertex 3, vertex 6, dan vertex 7. Perkiraan panjang
Karena nilai panjang yang paling minimum pada ketiga tetangga adalah vertex 3, maka vertex 3 ada untuk kedua kalinya. Dua jalur dari vertex 1 ke vertex 3 adalah P melebihi panjang maksimal.
Gambar 2.12 Langkah 3 dan 4 dalam operasi SAMCRA
Pada langkah 5 pada gambar 2.13, didapat jalur kedua yang disimpan dalam vertex 3 dan membaca tetangga vertex 3. Bagaimanapun jalur P
4 1 1
= 1 → 3
→ 4 terhadap vertex 4 dengan bobot (10,7) didominasi oleh jalur sebelumnya
yaitu 1 → 2 → 4 dengan bobot (3,6). Juga jalur terhadap vertex 5 tidak dapat disimpan, karena panjang yang diperkirakan max(
20 0,45) = 0,8 lebih besar dibanding dengan panjang maksimal = 0,7.
Gambar 2.13 Langkah 5 dan 6 dalam operasi SAMCRA
Gambar 2.14 Langkah 7 dan 8 dalam operasi SAMCRA
Pada langkah 8, diperoleh vertex 7 dengan panjang minimum yang diperkirakan dalam antrian, dan hasilnya ditemukan jalur terpendek dari vertex 1 ke vertex 7 P
7 1 *
= 1→ 2 → 4 → 3 → 6 → 7 dengan bobot vektor
w(P
7 1 *
) = (13,12) dan panjang l(P
7 1 *
) = 0,65.
Tabel 2.1 Tabel Aktivitas Operasi SAMCRA - P(previous), merupakan vertex sebelumnya.
- l(length), merupakan perkiraan panjang yang melebihi panjang maksimal. - D(dominated), merupakan jalur yang didominasi.
Bab III. Analisis dan Perancangan Sistem
III.1. Analisis Sistem
III.1.1. Gambaran Umum Sistem
Sistem yang dikembangkan adalah sistem pencarian jalur terpendek pada graf multi-constraints dengan menggunakan algoritma SAMCRA. Graf terdiri dari vertex-vertex yang dihubungkan oleh edge yang memiliki bobot jarak (distance) dan bobot kemacetan (congestion).
Gambar 3.1 Graf multi-constraints
III.1.2. Konsep Kerja Sistem
III.1.3. Kebutuhan Sistem
Sistem dikembangkan pada aplikasi desktop. Sistem dikembangkan dengan sistem operasi microsoft windows dengan perangkat pembantu Java.
Untuk menyimpan data vertex dan jalur serta pendukung sistem yang lain digunakan SQL server sebagai basis data, sehingga data menjadi lebih dinamis karena dapat diubah.
III.1.4. Use Case Diagram
Use case diagram untuk pencarian jalur terpendek dapat dilihat pada
Sistem Pencarian jalur terpendek
Cari jalur terpendek user
Hapus edge Tambah vertex
Hapus vertex Ubah vertex
Tambah edge
Ubah edge
Gambar 3.2 Use Case Diagram
Use case pada gambar 3.2 terdapat satu entitas user. Untuk dapat
III.1.5. Pemodelan Proses
III.1.5.1. Diagram Alir Data
Sistem pencarian jalur terpendek dapat dimodelkan dengan menggunakan DFD sebagai berikut :
1. Diagram Konteks / level 0
0
user Sistem
pencarian jalur terpendek
Data vertex, data edge, vertex sumber, vertex tujuan, L
Jalur terpendek, jarak jalur terpendek, kemacetan jalur
terpendek
Gambar 3.3 Diagram konteks
2. Diagram berjenjang
3. Diagram Alir Data level 0
1
Kelola vertex
2
Kelola edge
3p
Mencari jalur terpendek
D1
D2 user
vertex
edge Data vertex
Data edge
Vertex sumber, vertex tujuan, L
Validasi, konfirmasi
Jalur terpendek, jarak jalur terpendek, kemacetan jalur
terpendek Validasi, konfirmasi
Data vertex
Data edge
4. Diagram Alir Data level 1
Gambar 3.6 Diagram Alir Data level 1
III.1.5.2. Diagram Alir
III.1.5.2.1. Diagram Alir Dijkstra
Diagram alir pada operasi algoritma Dijkstra dalam pencarian jalur terpendek pada sistem dapat dilihat pada gambar 3.7.
Mulai
Set u sebagai vertex sebelum v d(v) = d(u)+w(u,v) SALAH
Graf G(V,E), vertex sumber
III.1.5.2.2. Diagram Alir SAMCRA
Diagram alir operasi algoritma SAMCRA dalam pencarian jalur terpendek pada sistem dapat dilihat pada gambar 3.8.
1
Masukkan vertex sumber ke dalam antrian Q
Selama Q tidak kosong
u merupakan vertex dengan nilai predicted_length minimum dalam
Set u sebagai vertex sebelum vertex v
Tambahkan v ke dalam antrian Q
III.1.6. Pemodelan Data
III.1.6.1. Conceptual Design
Perancangan ERD digunakan untuk menggambarkan relasi antar entitas dalam sistem, dalam sistem ini terdapat relasi memiliki antara entitas vertex dengan entitas edge. Ilustrasi ERD dapat dilihat pada gambar 3.9.
vertex
Gambar 3.9 Entity Relational Diagram Sistem
III.1.6.2. Logical Design
Penulis merancang basis data yang sesuai dengan ERD yang telah dibuat sebelumnya, basis data ini dibuat untuk menyimpan entitas vertex dan entitas edge. Ilustrasi relasi antar tabel dapat dilihat pada gambar 3.10.
Vertex
III.1.6.3. Physical Design
Dari hasil rancangan basis data terbentuk tabel vertex, tabel edge, dan terdapat tambahan tabel undirect sebagai tabel pembantu. Penulis merancang struktur data setiap tabel sebagai berikut :
1. Struktur tabel vertex
Tabel 3.1 Struktur tabel vertex
Nama field Tipe Ukuran
id_vertex Int 100
nama_vertex Varchar 200
2. Struktur tabel edge
Tabel 3.2 Struktur tabel edge
Nama field Tipe Ukuran
id_edge Int 100
id_vertexpertama Int 100
id_vertexkedua Int 100
jarak Int 200
3. Struktur tabel undirect
Tabel 3.2 Struktur tabel undirect
Nama field Tipe Ukuran
id_undirect Int 100
id_firstvertex Int 100
id_secondvertex Int 100
distance Int 200
congestion Int 200
III.2. Perancangan Antarmuka
Aplikasi dapat diakses langsung oleh user setelah melakukan installasi, user dapat menggunakan semua tools yang tersedia dalam aplikasi. Berikut merupakan rancangan antarmuka :
Gambar 3.11 Rancangan Antarmuka Utama Sistem
Pada menu bar terdapat menu :
- Menu file yang mempunyai submenu exit yang digunakan untuk keluar dari aplikasi.
- Menu component mempunyai submenu graf, submenu graf digunakan untuk mengolah data vertex dan data edge.
- Menu Operation yang mempunyai submenu operation SAMCRA, digunakan untuk melakukan operasi pencarian jalur menggunakan SAMCRA.
- Menu help mempunyai submenu yaitu menu about software. About software digunakan untuk memberi informasi berkaitan dengan pembuatan software.
III.2.2. Rancangan Masukan Sistem
rancangan antarmuka masukan component dan masukan operasi.
III.2.2.1. Rancangan Antarmuka Form Setup Vertex
Rancangan antarmuka form setup vertex dapat dilihat pada gambar 3.12.
Gambar 3.12 Rancangan Antarmuka Form Setup Vertex
Pada form Setup vertex terdapat form add vertex, edit vertex, dan delete vertex. Form add vertex digunakan untuk menambah data vertex, form edit vertex digunakan untuk mengubah data vertex, dan form delete vertex digunakan untuk menghapus data vertex pada database. Pada form ini terdapat juga tombol reset vertex, tombol ini berguna untuk menghapus semua data vertex dan data edge pada database.
a. Rancangan Antarmuka Form Add Vertex
Gambar 3.13 Rancangan Antarmuka Form Add Vertex
Form Add vertex digunakan untuk menambahkan data vertex baru yaitu vertex id dan vertex name pada database.
b. Rancangan Antarmuka Form Edit Vertex
Rancangan antarmuka form edit vertex dapat dilihat pada gambar 3.14.
Gambar 3.14 Rancangan Antarmuka Form Edit Vertex
Form Edit vertex digunakan untuk mengubah data vertex lama dengan data vertex baru pada database.
c. Rancangan Antarmuka Form Delete Vertex
Gambar 3.15 Rancangan Antarmuka Form Delete Vertex Form delete vertex digunakan untuk menghapus data vertex dalam database berdasarkan vertex id-nya.
III.2.2.2. Rancangan Antarmuka Form Setup Edge
Rancangan antarmuka form setup edge dapat dilihat pada gambar 3.16.
Gambar 3.16 Rancangan Antarmuka Form Setup Edge
database, form edit edge digunakan untuk mengubah data edge lama dengan data edge baru, dan form delete edge digunakan untuk menghapus data edge dalam database. Pada rancangan antarmuka form edge ini terdapat juga tombol reset edge, tombol ini berguna untuk menghapus semua data edge pada database.
a. Rancangan Antarmuka Form Add Edge
Rancangan form add edge dapat dilihat pada gambar 3.17.
Gambar 3.17 Rancangan Antarmuka Form Add Edge
Form add edge digunakan untuk menambah data edge baru berupa edge id, first vertex atau vertex pertama, second vertex atau vertex kedua, distance, serta congestion pada database.
b. Rancangan Antarmuka Form Edit Edge
Gambar 3.18 Rancangan Antarmuka Form Edit Edge
Form Edit Edge digunakan untuk mengubah data edge lama dengan data edge baru.
c. Rancangan Antarmuka Form Delete Edge
Rancangan form delete edge dapat dilihat pada gambar 3.19.
Gambar 3.19 Rancangan Antarmuka Form Delete Edge
Form delete edge digunakan untuk menghapus data edge dari database berdasarkan edge id-nya.
III.2.2.3. Rancangan Antarmuka Form Operasi Pencarian
Rancangan antarmuka form opeasi pencarian dapat dilihat pada gambar 3.20.
Gambar 3.20 Rancangan Antarmuka Form Operasi
Form operation pada gambar 3.20 digunakan untuk melakukan pencarian jalur terpendek dari vertex sumber ke vertex tujuan.
III.2.3. Rancangan Antarmuka Keluaran Sistem
III.2.3.1. Rancangan Antarmuka Form Setup Vertex
Gambar 3.21 Rancangan Antarmuka Keluaran Form Setup Vertex
pada gambar 3.12.
III.2.3.2. Rancangan Antarmuka Form Setup Edge
Gambar 3.22 Rancangan Antarmuka Hasil Keluaran dari Setup Edge Gambar 3.22 merupakan tabel keluaran dari hasil penambahan, pengubahan, serta penghapusan data edge dari form setup edge pada gambar 3.16.
III.2.3.3. Rancangan Antarmuka Form Result
Gambar 3.23 Rancangan Antarmuka Keluaran Hasil Pencarian
terpendek dari form operasi pencarian. Form result berisi jalur yang dilewati dari vertex source ke vertex destination, jarak jalur, serta kemacetan pada jalur. Vertex yang dilewati dalam jalur terpendek akan ditampulkan pada tabel, jarak jalur akan ditampilkan pada textfield distance, dan kemacetan jalur akan ditampilkan pada textfield congestion.
III.2.3.3. Rancangan Antarmuka Form About Software
Gambar 3.24 Rancangan Antarmuka Form about software
Bab IV.
Implementasi Sistem
Implementasi merupakan tahap dimana hasil analisis dan perancangan pada bab III diubah ke dalam bahasa pemrograman. Pada bab ini akan dijelaskan mengenai implementasi sistem yang meliputi implementasi database dan antarmuka (interface) sistem. Adapun perangkat lunak (software) yang digunakan dalam pembuatan sistem ini adalah :
Sistem Operasi : Windows XP Profesional Service pack 2 Server Database : MySQL 5.0
Database tool : SQLyog Community 5.22a Bahasa Pemrograman : Java
Editor : Netbean 5.5
IV.1. Pembuatan Database
Pada tahap ini dilakukan pembuatan database pada MySQL dengan menggunakan tool SQLyog. Database yang dibuat berisi tabel-tabel yang akan diperlukan oleh sistem. Listing program 4.1 merupakan sintaks pembuatan database yang diberi nama “db_samcra” :
create database if not exists `db_samcra`;
Gambar 4.1 Implementasi Pembuatan Database
IV.2. Pembuatan Tabel
IV.2.1. Tabel Vertex
Tabel vertex digunakan untuk menyimpan data vertex. Sintaks pembuatan tabel vertex dapat dilihat pada listing program 4.2.
CREATE TABLE `vertex` (
`id_vertex` int(100) NOT NULL auto_increment, `nama_vertex` varchar(200) NOT NULL, PRIMARY KEY (`id_vertex`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Listing 4.2 Pembuatan Tabel vertex
Gambar 4.2 Implementasi Tabel vertex
IV.2.2. Tabel Edge
Tabel edge digunakan untuk menyimpan data edge. Sintaks pembuatan tabel edge dapat dilihat pada listing program 4.3.
CREATE TABLE `edge` (
`kemacetan` int(200) NOT NULL, PRIMARY KEY (`id_edge`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Listing 4.3 Pembuatan Tabel edge
Gambar 4.3 Implementasi Tabel edge
IV.3. Pembuatan Store Procedure
Pada database db_samcra terdapat prosedur insert_vertex, update_vertex, delete_vertex, insert_edge, update_edge, dan delete_edge.
a. insert_vertex
Store prosedur insert_vertex digunakan untuk menambahkan data vertex baru ke dalam table vertex. Sintaks store prosedur insert_vertex dapat dilihat pada listing 4.4.
DELIMITER $$
DROP PROCEDURE IF EXISTS `db_samcra`.`insert_vertex`$$
CREATE PROCEDURE `insert_vertex`(p_id_vertex int, p_nama_vertex varchar(100))
BEGIN
INSERT INTO vertex values (p_id_vertex,p_nama_vertex); END$$
DELIMITER ;
Listing 4.4 Store Prosedur insert_vertex b. update_vertex
dilihat pada listing 4.5.
DELIMITER $$
DROP PROCEDURE IF EXISTS `db_samcra`.`update_vertex`$$
CREATE PROCEDURE `update_vertex`(p_id_vertex int, p_nama_vertex
varchar(20))
BEGIN
UPDATE vertex set nama_vertex = p_nama_vertex where
id_vertex = p_id_vertex;
END$$
DELIMITER ;
Listing 4.5 Store Prosedur update_vertex c. delete_vertex
Store prosedur delete_vertex digunakan untuk menghapus data vertex dari table vertex. Sintaks store prosedur delete_vertex dapat dilihat pada listing 4.6.
DELIMITER $$
DROP PROCEDURE IF EXISTS `db_samcra`.`delete_vertex`$$
CREATE PROCEDURE `delete_vertex`(p_id_vertex int)
BEGIN
DELETE FROM vertex where id_vertex = p_id_vertex ;
DELETE FROM edge WHERE id_vertexpertama = p_id_vertex
OR id_vertexkedua = p_id_vertex;
END$$
DELIMITER ;
Listing 4.6 Store Prosedur delete_vertex d. insert_edge
ke dalam table edge. Sintaks store prosedur insert_edge dapat dilihat pada listing 4.7.
DELIMITER $$
DROP PROCEDURE IF EXISTS `db_samcra`.`insert_edge`$$
CREATE PROCEDURE `insert_edge`(p_id_edge int,p_id_vertexpertama
int, p_id_vertexkedua int, p_jarak int, p_kemacetan int)
BEGIN
INSERT INTO Edge VALUES(p_id_edge,p_id_vertexpertama,
p_id_vertexkedua,p_jarak,p_kemacetan);
INSERT INTO undirect VALUES(p_id_edge,p_id_vertexkedua,
p_id_vertexpertama,p_jarak,p_kemacetan);
END$$
DELIMITER ;
Listing 4.7 Store Prosedur insert_edge e. update_edge
Store prosedur update_edge digunakan untuk mengubah data edge lama dengan data edge baru. Sintaks store prosedur update_edge dapat dilihat pada listing 4.8.
DELIMITER $$
DROP PROCEDURE IF EXISTS `db_samcra`.`update_edge`$$
CREATE PROCEDURE `update_edge`(p_id_edge int, p_id_vertexpertama
int, p_id_vertexkedua int, p_jarak int, p_kemacetan int)
BEGIN
UPDATE Edge set id_vertexpertama = p_id_vertexpertama,
id_vertexkedua = p_id_vertexkedua, jarak = p_jarak,
kemacetan = p_kemacetan where id_edge = p_id_edge;
UPDATE undirect set id_firstvertex = p_id_vertexkedua,
id_secondvertex = p_id_vertexpertama, distance = p_jarak,
END$$
DELIMITER ;
Listing 4.8 Store Prosedur update_edge
f. delete_edge
Store prosedur delete_edge digunakan untuk menghapus data edge dari table edge. Sintaks store prosedur delete_edge dapat dilihat pada listing 4.9.
DELIMITER $$
DROP PROCEDURE IF EXISTS `db_samcra`.`delete_edge`$$
CREATE PROCEDURE `delete_edge`(p_id_edge int)
BEGIN
DELETE FROM edge where id_edge = p_id_edge;
DELETE FROM undirect where id_undirect = p_id_edge;
END$$
DELIMITER ;
Listing 4.9 Store Prosedur delete_edge
IV.4. Implementasi Koneksi Java dengan MySQL
Untuk melakukan koneksi dengan server database MySQL, java membutuhkan library connector/j, tambahkan library connector/j dengan cara
melakukan klik kanan pada project→properties→library→compile : tambahkan
jar ; run : tambahkan jar. Langkah-langkah yang harus dilakukan untuk melakukan koneksi adalah sebagai berikut :
import java.sql.*;
Listing 4.10 import package java.sql 2. Memanggil driver JDBC
connector/j menyediakan pemanggilan driver JDBC, pada sistem ini digunakan driver yang digunakan adalah com.mysql.jdbc.Driver. Sintaks pemanggilan driver JDBC dapat dilihat pada listing 4.11. public class Koneksi
{
public Koneksi() { }
public static String getUrl()
{
String url="jdbc:mysql://localhost:3306/db_samcra";
}
}
}
Listing 4.11 Pemanggilan driver JDBC
3. Membangun koneksi java dengan MySQL
Untuk membangun koneksi dengan database, digunakan class DriverManager dan dengan menggunakan method getConnection. Sintaks untuk membangun koneksi antara java dengan MySQL dapat dilihat pada listing 4.12.
try
{
Koneksi.connect();
String url = Koneksi.getUrl();
String user = Koneksi.getUser();
String pwd = Koneksi.getPasswd();
Connection conn = DriverManager.getConnection(url,user,pwd);
System.out.println("Koneksi ok");
}
catch(java.sql.SQLException ex)
{
System.out.println("Error "+ex);
}
IV.5. Implementasi Antarmuka
Implementasi antarmuka pada sistem ini meliputi halaman utama, halaman komponen untuk menambah, mengubah, serta menghapus data vertex dan data edge, halaman operasi untuk melakukan operasi pencarian jalur terpendek, dan help.
IV.5.1. Implementasi Antarmuka Halaman Utama
Gambar 4.4 Implementasi Halaman Utama Sistem
IV.5.2. Implementasi Antarmuka Halaman Komponen Vertex
Pada antarmuka halaman komponen vertex terdapat menu add vertex yang digunakan untuk menambah data vertex baru, menu edit vertex digunakan untuk mengubah data vertex lama dengan data vertex baru, menu delete vertex digunakan untuk menghapus data vertex.
a. Implementasi Antarmuka Add vertex
Implementasi antarmuka add vertex dapat dilihat pada gambar 4.5.
Gambar 4.5 Implementasi Antamuka Add vertex
menambahkan data vertex baru maka kita mengisikan data vertex id dan vertex name lalu klik tombol add, jika penambahan data vertex berhasil maka akan tampil kotak dialog seperti pada gambar 4.6.
Gambar 4.6 Pesan jika data vertex berhasil ditambahkan
Sintaks untuk menambah data vertex baru dapat dilihat pada listing 4.13. /* method ini digunakan untuk menambahkan data vertex pada tabel vertex */
public static void add_vertex(int vertex_id, String vertex_name)
{
try
{
Koneksi.connect();
String url = Koneksi.getUrl();
String user = Koneksi.getUser();
String pwd = Koneksi.getPasswd();
Connection conn = DriverManager.getConnection(url,user,pwd);
System.out.println("Koneksi ok");
String sqlInsertVertex ="{call insert_vertex(?,?)}";
CallableStatement cs = conn.prepareCall(sqlInsertVertex);
cs.setInt(1,vertex_id);
int help=cs.executeUpdate();
JOptionPane.showMessageDialog(null,"Adding data vertex failed");
System.out.println("Error "+ex);
}
}
---
private void Add_VertexMouseClicked(java.awt.event.MouseEvent evt)
{
If(tb _addvertexid.getText().length()==0 ||
tb_addvertexname.getText().length()==0)
{
JOptionPane.showMessageDialog(null,"please enter data vertex");
}
---
Listing 4.13 Penambahan data vertex
b. Implementasi Antarmuka Edit Vertex
Implementasi antarmuka edit vertex dapat dilihat pada gambar 4.7.
Gambar 4.7 Implementasi Antarmuka Edit vertex
vertex seperti pada gambar 4.8, jika data berhasil diubah maka akan muncul pesan seperti pada gambar 4.9.
Gambar 4.8 Konfirmasi Pengubahan Data vertex
Gambar 4.9 Pesan jika data vertex berhasil diubah
Sintaks untuk mengubah data vertex dapat dilihat pada listing 4.14. /* method ini digunakan untuk mengubah data vertex pada tabel vertex */
public static void update_vertex(int vertex_id, String vertex_name)
{
try
{
Koneksi.connect();
String url = Koneksi.getUrl();
String user = Koneksi.getUser();
String pwd = Koneksi.getPasswd();
Connection conn = DriverManager.getConnection(url,user,pwd);
String sqlUpdateEdge = "{ call update_vertex(?,?)}";
private void bt_editVertexMouseClicked(java.awt.event.MouseEvent evt)
{
if(tb_editvertexid.getText().length()==0 ||
tb_editvertexname.getText().length()==0)
{
JOptionPane.showMessageDialog(null,"please enter new data vertex");
}
else
{
String vertex_name = tb_editvertexname.getText();
String message = "Are you sure to edit data vertex?";
int pesan = JOptionPane.showConfirmDialog(null,message,"Edit Data
Vertex",JOptionPane.YES_NO_OPTION);
if(pesan == 0)
{
db_graph.update_vertex(vertex_id, vertex_name);
tb_editvertexid.setText("");
tb_editvertexname.setText("");
refresh_tvertex();
}
}
}
---
Listing 4.14 Pengubahan data vertex
c. Implementasi Antarmuka Delete Vertex
Gambar 4.10 Implementasi Delete vertex
Untuk melakukan penghapusan data vertex, pilih data yang akan dihapus pada tabel. Id vertex yang akan dihapus akan dimunculkan pada textbox vertex id, klik tombol delete untuk menghapus data. Setelah tombol delete ditekan maka akan muncul konfirmasi penghapusan data seperti pada gambar 4.11, jika data berhasil dihapus maka akan muncul pesan seperti pada gambar 4.12.
Gambar 4.12 Pesan jika data berhasil dihapus
Sintaks untuk menghapus data vertex dapat dilihat pada listing 4.15. /* method ini digunakan untuk menghapus data vertex dari tabel vertex */
public static void delete_vertex(int vertex_id)
{
try
{
Koneksi.connect();
String url = Koneksi.getUrl();
String user = Koneksi.getUser();
String pwd = Koneksi.getPasswd();
Connection conn = DriverManager.getConnection(url,user,pwd);
String sqlDeleteVertex = "{ call delete_vertex(?)}";
CallableStatement cs = conn.prepareCall(sqlDeleteVertex);
cs.setInt(1,vertex_id);
int help = cs.executeUpdate();
cs.close();
JOptionPane.showMessageDialog(null,"Deleting data vertex
successful");
}
catch(java.sql.SQLException ex)
JOptionPane.showMessageDialog(null,"Deleting data vertex failed");
System.out.println("error " + ex);
}
}
---
private void bt_deletevertexMouseClicked(java.awt.event.MouseEvent evt)
{
if(tb_deletevertexid.getText().length()==0) {
JOptionPane.showMessageDialog(null,"please enter vertex id");
}
Else {
int vertex_id = Integer.parseInt(tb_deletevertexid.getText());
String message = "Are you sure to delete data vertex?";
int pesan = JOptionPane.showConfirmDialog(null,message,"Delete Data
Vertex",JOptionPane.YES_NO_OPTION);
if(pesan == 0)
{
db_graph.delete_vertex(vertex_id);
tb_deletevertexid.setText("");
refresh_tvertex();
refresh_tedge();
}
}
}
---
IV.5.3. Implementasi Antarmuka Halaman Komponen Edge
Pada antarmuka halaman komponen edge terdapat menu add edge yang digunakan untuk menambah data edge baru, menu edit edge digunakan untuk mengubah data edge lama dengan data edge baru, menu delete edge digunakan untuk menghapus data edge.
a. Implementasi Antarmuka Add Edge
Implementasi antarmuka add edge dapat dilihat pada gambar 4.12.
Gambar 4.12 Implementasi Antarmuka Add edge
penambahan data edge berhasil maka akan tampil kotak dialog seperti pada gambar 4.13.
Gambar 4.13 Pesan jika data edge berhasil ditambahkan Sintaks penambahan vertex baru dapat dilihat pada listing 4.16. /* method ini digunakan untuk menambah data edge pada tabel edge */
public static void add_edge(int edge_id,String first_vertex, String second_vertex,
int length, int congestion)
{
try
{
Koneksi.connect();
String url = Koneksi.getUrl();
String user = Koneksi.getUser();
String pwd = Koneksi.getPasswd();
Connection conn = DriverManager.getConnection(url,user,pwd);
System.out.println("Koneksi ok");
String sqlInsertPath = "{call insert_edge(?,?,?,?,?)}";
CallableStatement cs = conn.prepareCall(sqlInsertPath);
cs.setInt(1,edge_id);
cs.setString(2,first_vertex);
cs.setInt(4,length);
private void bt_addedgeActionPerformed(java.awt.event.ActionEvent evt)
{
if(tb_addedgeid.getText().length()==0 || tb_addlength.getText().length()==0
|| tb_addcongestion.getText().length()==0)
{
JOptionPane.showMessageDialog(null,"please enter data edge");
}
else
{
int edge_id = Integer.parseInt(tb_addedgeid.getText());
String first_vertex = cb_addfirstvertex.getSelectedItem().toString();
String second_vertex = cb_addsecondvertex.getSelectedItem().toString();
int f_vertex = Integer.parseInt(first_vertex);
int s_vertex = Integer.parseInt(second_vertex);
int congestion = Integer.parseInt(tb_addcongestion.getText());
db_graph.add_edge(edge_id,f_vertex,s_vertex,length,congestion);
tb_addedgeid.setText("");
tb_addlength.setText("");
tb_addcongestion.setText("");
refresh_tedge();
}
}
---
Listing 4.16 Penambahan data edge
b. Implementasi Antarmuka Edit Edge
Implementasi antarmuka edit edge dapat dilihat gambar 4.14.
Antarmuka edit edge digunakan untuk mengubah data edge. Untuk melakukan pengubahan data, maka klik data yang akan diubah pada tabel . Nilainya akan ditampilkan pada textbox, ubah data pada textbox, tekan tombol edit untuk mengubah data edge. Setelah menekan tombol edit maka akan muncul konfirmasi pengubahan data edge seperti pada gambar 4.15. Jika data berhasil diubah maka akan muncul pesan seperti pada gambar 4.16.
Gambar 4.15 Konfirmasi Pengubahan Data edge
Gambar 4.16 Pesan jika data edge berhasil diubah
Sintaks pengubahan data edge dapat dilihat pada listing 4.17. /* method ini digunakan untuk mengubah data edge */
public static void update_edge(int edge_id, int first_vertex, int second_vertex, int
length, int congestion)
try
JOptionPane.showMessageDialog(null,"Editing data edge failed");
System.out.println("Error " + ex);
}
}
private void bt_editedgeMouseClicked(java.awt.event.MouseEvent evt)
{
// fungsi ini untuk mengubah data edge
if(tb_editedgeid.getText().length()==0 || tb_editlength.getText().length()==0 ||
tb_editcongestion.getText().length()==0)
{
JOptionPane.showMessageDialog(null,"please enter new data edge");
}
else
{
int edge_id = Integer.parseInt(tb_editedgeid.getText());
String first_vertex = cb_editfirstvertex.getSelectedItem().toString();
String second_vertex = cb_editsecondvertex.getSelectedItem().toString();
int f_vertex = Integer.parseInt(first_vertex);
int s_vertex = Integer.parseInt(second_vertex);
int length = Integer.parseInt(tb_editlength.getText());
int congestion = Integer.parseInt(tb_editcongestion.getText());
String message = "Are you sure to edit data edge?";
int pesan = JOptionPane.showConfirmDialog(null,message,"Edit Data
Edge",JOptionPane.YES_NO_OPTION);
if(pesan == 0)
{
db_graph.update_edge(edge_id,f_vertex,s_vertex,length,congestion);
tb_editedgeid.setText("");
tb_editlength.setText("");
refresh_tedge();
}
}
}
---
Listing 4.17 Pengubahan data edge
c. Implementasi Antarmuka Delete Edge
Implementasi antarmuka delete edge dapat dilihat pada gambar 4.17.
Gambar 4.17 Implementasi Antarmuka Delete edge
edge yang akan dihapus akan dimunculkan pada textbox edge id, tekan tombol delete untuk menghapus data. Setelah tombol delete ditekan maka akan muncul konfirmasi penghapusan data edge seperti pada gambar 4.18, jika data berhasil dihapus maka akan muncul pesan seperti pada gambar 4.19.
Gambar 4.18 Konfirmasi Penghapusan Data edge
Gambar 4.19 Pesan jika data edge berhasil dihapus
Sintaks penghapusan data vertex dapat dilihat pada listing 4.18. /* method ini digunakan untuk menghapus data edge dari tabel edge */
public static void delete_edge(int edge_id)
{
try
{
Koneksi.connect();
String user = Koneksi.getUser();
JOptionPane.showMessageDialog(null,"Deleting data edge failed");
System.out.println("error " + ex);
}
}
---
private void bt_deleteedgeMouseClicked(java.awt.event.MouseEvent evt)
{
if(tb_deleteedgeid.getText().length()==0)
{
JOptionPane.showMessageDialog(null,"please enter edge id");
}
else
{