mencari taksi manakah yang kosong, setelah didapatkan taksi mana sajakah yang kosong, dilanjutkan dengan menemukan taksi yang terdekat dari pelanggan
menggunakan algoritma Floyd-Warshall. Setelah didapatkan satu taksi yang terdekat dari pelanggan, pesanan taksi dikirimkan dalam bentuk notifikasi kepada supir taksi.
Supir menerima notifikasi dan mengkonfirmasi pesanan tersebut. Apabila supir menjemput pelanggan, output yang dihasilkan adalah peta dengan direction yang
menghubungkan keberadaan antara taksi dan pelanggan. Server kemudian akan menyimpan ID taksi yang menjemput beserta koordinat taksi. Lalu server akan
mengirimkan notifikasi penjemputan tersebut kepada pelanggan. Apabila notifikasi tesrebut dibuka, akan dihasilkan output yang berupa pemberitahuan mengenai ID taksi
yang menjemput, nama supir taksi, jarak antara supir dan pelanggan, serta waktu yang dibutuhkan untuk sampai ke lokasi pelanggan. Jarak dan waktu yang ditampilkan akan
di-update secara otomatis.
3.7 Analisis Algoritma Floyd-Warshall
3.7.1 Algoritma Floyd-Warshall Dalam permasalahan lintasan terpendek, Algoritma Floyd-Warshall termasuk dalam
lintasan terpendek antara semua pasangan simpul atau all pairs shortest. Algoritma ini dapat menghitung bobot positif atau negatif, tetapi tidak dapat menghitung siklus
negatif. Algoritma Floyd-Warshall merupakan suatu algoritma dinamis yang mana merupakan algoritma yang menggunakan seluruh pasangan dalam satu waktu dan
menghubungkannya dalam saat yang sama.
Gambar 3.7 Contoh Lintasan Terpendek
Berdasarkan Gambar 3.7, gunakan k sebagai intermediate path antara titik i dan titik j, yang mana k digunakan untuk menghubungkan antara titik i dan titik j.
D
ij k
: bobot dari lintasan terpendek antara titik i menuju titk j dengan seluruh titik tengah antara {1,2,..,k}
k ≥ 1 D
ij k
= D
ij k-1
+ D
ij k-1
Running time: On
3
Gambar 3.8 Contoh Graf
Adapun cara kerja algoritma Floyd-Warshall dalam pencarian lintasan terpendek dapat dilihat dari tahap-tahap berikut ini:
1. Pada algoritma Floyd-Warshall yang akan dicari adalah nilai minimum dari
perhitungannya. Seperti yang sudah dijelaskan sebelumnya, k adalah intermediate path, oleh karenanya dituliskan D
k.
Pada Gambar 3.8 terdapat 4 verteks yaitu: 1, 2, 3 dan 4. Sebagai kasus awal yaitu kasus pada Gambar 3.8 nilai k adalah 0 sehingga
menjadi D , berikutnya k bernilai 1 sampai 4 menjadi D
1
, D
2
, D
3
dan D
4
.
Tabel 3.7 Tabel D 1
2 3
4 1
8 ∞
1
2
∞ 1
∞
3 4
∞ ∞
4
∞ 2
9
2. Setelah D
, dilanjut dengan D
1
yang mana intermediate path-nya adalah 1. Maka k = 1. Dikarenakan intermediate path-nya adalah 1 maka carilah lintasan yang
menjadikan 1 sebagai nilai tengah pada Gambar 3.8, seperti: 3
– 1 – 4 : 4 + 1 = 5 3
– 1 – 2 : 4 + 8 = 12 Sehingga pada tabel D
1
nilainya ada yang berubah seperti yang tertulis pada Tabel 3.7 di bawah.
Tabel 3.8 Tabel D
1
1 2
3 4
1 8
∞ 1
2
∞ 1
∞
3 4
12 5
4
∞ 2
9
3. Setelah selesai dengan perhitungan D
1
, masuk kepada D
2
. Dalam hal ini, yang menjadi intermediate path bukan hanya 2 melainkan 1 dan 2. Kemudian carilah
yang intermediate path-nya adalah 1 dan 2 pada Tabel 3.9, kemudian didapatkan: 1
– 2 – 3 : 9 4
– 2 – 3 : 3 Pada tabel 3.3 nilai 3 yang diwarnai kuning sebelumnya adalah 9, namun setelah
dapatkan bahwa nilai dari matriks [4,3] adalah 3 yang mana 3 nilainya lebih kecil dari 9, sehingga 3 menggantikan posisi 9 pada Tabel 3.8.
Tabel 3.9 Tabel D
2
1 2
3 4
1 8
9 1
2
∞ 1
∞
3 4
12 5
4
∞ 2
3
4. Lalu masuk kepada perhitungan D
3
, yang mana pada hal ini yang dapat dijadikan sebagai intermediate path nya adalah 1, 2 dan 3. Maka hubungan yang didapatkan
melalui Tabel 3.9 adalah: 2
– 3 – 1 : 9 4
– 3 – 1 : 13 4
– 2 – 3 – 1 : 7 2
– 3 – 1 – 4 : 6
Tabel 3.10 Tabel D
3
1 2
3 4
1
8 9
1
2 5
1 6
3
4 12
5
4 13 7
2 3
Pada Tabel 3.10 nilai dari matriks lintasan 4 – 3 – 1 bernilai 13, namun setelah
dihitung lagi dengan menggunakan nilai k atau intermediate path nya 2 dan 3 didapatkan lintasan yang lain yang lebih pendek yaitu 4
– 2 – 3 – 1 dengan nilai 7, maka 7 menggantikan nilai 13 pada matriks [4,1].
5. Setelah itu masuk pada intermediate path terakhir yaitu D
4
yang mana yang dapat menjadi intermediate path adalah 1, 2, 3 dan 4 namun 4 haruslah tetap menjadi
intermediate path. Setelah dilakukan perhitungan, berikut adalah lintasan yang menjadikan 4 sebagai intermediate path:
1 – 4 – 2 : 3
1 – 4 – 3 : 10
1 – 4 – 2 – 3 : 4
3 – 1 – 4 – 2 : 7
Tabe 3.10 Tabel D
4
1 2
3 4
1 3
9 4 1
2
5 1
6
3 4
7 5
4 7
2 3
Pada Tabel 3.10 nilai matriks [3,2] berubah menjadi 3, dikarenakan setelah di- update nilai sebelumnya yaitu 8 lebih besar daripada 3, oleh karenanya 3
menggantikan posisi 8. Begitupun pada matriks [1,3], pada lintasan 1 – 4 – 3
ternyata nilai yang dihasilkan adalah 10, namun karena nilai sebelumnya 9 ternyata lebih kecil dibandingkan 10 sehingga nilai tersebut tidak diubah dan tetap 9.
Namun pada perhitungan lintasan 1 – 4 – 2 – 3 didapatkan nilai baru yaitu 4 yang
lebih kecil dibandingkan 9, oleh karenanya 4 menggantikan posisi 9 sehingga nilai
matriks [1,3] menjadi 4. Yang terakhir adalah pada matriks [3,2] setelah dihitung pada lintasan 3
– 1 – 4 – 2 didapatkan nilai baru yaitu 7 yang adalah lebih kecil dibandingkan nilai sebelumnya yaitu 12, sehingga pada matriks [3,2] 7
menggantikan posisi 12.
3.7.2 Pseudocode Algoritma Floyd – Warshall
for k = 0; k this-nodes; k++ { for i = 0; i this-nodes; i++ {
for j = 0; j this-nodes; j++ { if this-jarak[i][j] this-jarak[i][k] + this-jarak[k][j] {
this-jarak[i][j] = this-jarak[i][k] + this-jarak[k][j]; this-pred[i][j] = this-pred[k][j];
}
3.8 Perancangan Sistem