2.4.6 Model Lintasan Terpendek Shortest Path
Saat ini cukup banyak algoritma-algoritma yang dapat digunakan untuk menyelesaikan persoalan penentuan lintasan terpendek shortest path problem
dari suatu graf. Solusi yang didapat dari penelusuran algoritma tersebut dapat diberi nama Pathing Algorithm. Ada dua algortima yang cukup terkenal yang bisa
digunakaan untuk menyelesaikan persoalan lintasan terpendek, yaitu: Algoritma Dijkstra Dijkstra, 1959 dan Algoritma Bellman-Ford Bang-Jensen dan Gutin,
2000. Algoritma Dijkstra sebagai salah satu algoritma yang populer untuk
menangani permasalahan lintasan terpendek shortest path problem dalam sebuah jaringan adalah sebuah algoritma yang ditemukan oleh seorang ilmuwan
komputer asal Belanda Edsger Dijkstra pada tahun 1956. Djikstra mempublikasikan temuannya pada tahun 1959 dengan judul A Note on Two
Problems in Connexion with Graphs Dijkstra, 1959. Algoritma ini selanjutnya
dikenal dengan nama algoritma Djikstra sesuai dengan nama penemunya. Algoritma Djikstra sebagaimana yang telah dijelaskan diatas merupakan
algoritma yang bersifat greedy dan bertujuan untuk menemukan jalur terpendek untuk sebuah graf berarah directed graph berdasarkan bobot terkecil dari satu
titik node ke titik node lainnya yang bernilai non negatif. Sebuah titik dapat menggambarkan sebuah entitas spasial seperti kebun, pabrik maupun pelabuhan.
Misalkan titik mengambarkan pabrik dan garis menggambarkan jalan, maka algoritma Dijkstra dapat melakukan perhitungan terhadap semua kemungkinan
bobot terkecil dari setiap titik. Contoh keterhubungan antar sekumpulan node diperlihatkan pada Gambar 2-32 berikut ini:
Gambar 2-32 Contoh Keterhubungan Sekumpulan Node dalam Sebuah Graf
Untuk menyelesaikan permasalahan diatas dengan menggunakan algoritma Djikstra, pertama-tama harus ditentukan node awal atau titik
keberangkatan terlebih dahulu. Dalam contoh diatas node awal nya adalah titik a dan node akhirnya adalah titik b. Berikutnya berikan bobot dari node pertama ke
node yang terdekat secara bertahap. Algoritma Djikstra akan mencari solusi dari satu node ke node yang lainnya tahap demi tahap dengan logika sebagai berikut:
a. Tentukan nilai bobot untuk setiap titik ke titik lainnya, dan tentukan nilai 0 pada node awal dan nilai tak hingga pada node yang belum terisi. Nilai
bobot dapat berupa jarak, waktu tempuh maupun biaya. b.
Tentukan semua node sebagai node yang “belum dihitung” dan tentukan node awal sebagai “node origin”.
c. Dari node origin, pertimbangkan node tetangga yang belum dihitung dan hitung bobotnya dari titik origin. Sebagai contoh, jika titik origin A ke
destinasi B memiliki bobot 8 dan dari B ke node C memiliki bobot 2, maka bobot ke C melewati B menjadi 8 + 2 = 10. Jika bobot ini lebih kecil
dari bobot sebelumnya yang telah tersimpan, hapus data yang lama, simpan ulang bobot yang baru menggantikan bobot yang lama.
1
2 3
6
4 5
∞ ∞
∞ ∞
∞
∞
a b
8 15
16 10
10 7
12
11 3
d. Setelah setiap bobot terhadap node tetangga selesai dipertimbangkan, tandai node yang telah dihitung sebagai “node terhitung”. Node terhitung
tidak akan pernah dianalisa kembali, bobot yang disimpan adalah bobot yang terakhir dan yang paling minimal bobotnya.
e. Tentukan “node belum terhitung” dengan bobot terkecil dari node origin
sebagai “node keberangkatan” selanjutnya dan lanjutkan dengan kembali
ke langkah c.
Berikut ini adalah langkah demi langkah penerapan algoritma Djikstra untuk menemukan lintasan yang terpendek dari graf yang telah ditunjukkan
diatas. Langkah pertama:
Pastikan semua node telah terhubung satu sama lain sesuai dengan sistem amatan sebagaimana yang ditunjukkan pada Gambar 2-33. Dalam contoh yang dibahas
disini node awal adalah 1 dan node tujuan adalah 5. Setiap jalur yang menghubungkan antar node telah diberi nilai bobotnya.
Gambar 2-33 Contoh Penyelesaian dengan Algoritma Djikstra Langkah 1
1
2 3
6
4 5
a b
8 15
16 10
10 7
12
11 3
Langkah kedua: Algoritma Dijkstra melakukan perhitungan terhadap node tetangga yang
terhubung langsung dengan node keberangkatan node 1, dan hasil yang didapat adalah node 2 karena bobot nilai node 2 paling kecil dibandingkan nilai pada node
lain, nilai = 8 0+8 sebagaimana ditunjukkan pada Gambar 2-34.
Gambar 2-34 Contoh Penyelesaian dengan Algoritma Djikstra Langkah 2
Langkah ketiga: Node 2 ditentukan menjadi node keberangkatan dan ditandai sebagi node yang
telah terhitung lihat Gambar 2-35. Dijkstra melakukan kalkulasi kembali terhadap node-node tetangga yang terhubung langsung dengan node yang telah
terhitung. Dan kalkulasi dijkstra menunjukan bahwa node 3 yang menjadi node keberangkatan selanjutnya karena bobotnya yang paling kecil dari hasil kalkulasi
terakhir, nilai 10 0 + 10. 1
2 3
6
a
8 15
10
8
Gambar 2-35 Contoh Penyelesaian dengan Algoritma Djikstra Langkah 3
Langkah keempat:
Perhitungan berlanjut dengan node 3 ditandai menjadi node yang telah terhitung lihat Gambar 2-36. Dari semua node tetangga belum terhitung yang terhubung
langsung dengan node terhitung, node selanjutnya yang ditandai menjadi node terhitung adalah node 6 karena nilai bobot yang terkecil, nilai 13 10 + 3.
Gambar 2-36 Contoh Penyelesaian dengan Algoritma Djikstra Langkah 4
1
2 3
6
4
a
8 15
16 10
11 10
24
1
2 3
6
4
a
8 15
16 10
12
11 3
13
22
Langkah Kelima: Node 6 menjadi node terhitung, Dijkstra melakukan kalkulasi kembali, dan
menemukan bahwa node 5 yang merupakan node destinasi telah tercapai lewat node 6. Jalur terpendek akhirnya dapat diidentifikasi yaitu jalur yang melalui node
1-3-6-5, dan nilai bobot yang diperoleh adalah sebesar 23 13 + 10. Karena node destinasi telah diperoleh, maka algoritma dijkstra telah selesai menjalankan
tugasnya. Lintasan terpendek dapat dilihat pada Gambar 2-37.
Gambar 2-37 Contoh Penyelesaian dengan Algoritma Djikstra Langkah 5
Dalam mencari lintasan terpendek, algoritma yang paling banyak digunakan saat ini adalah algoritma Dijkstra, karena kerjanya paling efisien dan tidak
membutuhkan waktu yang banyak.
1
2 3
6
4 5
a b
8 15
16 10
10 7
12
11 3
23 29
2.4.7 Model Lokasi-Alokasi Berbasis Spasial