Back to IF2211 Strategi Algoritma
Topic
Questions/Cues
- TSP & Prinsip Optimalitas
- Karakteristik DP untuk TSP
- State Kompleks:
(i, S)- Formula Rekursif
f(i, S)- Contoh n=4: Perhitungan Basis
- Analisis Inkonsistensi Data
- Perhitungan Tahap
|S|=1- Perhitungan Tahap
|S|=2- Perhitungan Akhir
- Rekonstruksi Tur Optimal
Persoalan Travelling Salesperson Problem (TSP) dengan Dynamic Programming
Definisi: Menemukan tur terpendek dari kota asal, mengunjungi setiap kota lain tepat sekali, dan kembali ke kota asal.
Penerapan Prinsip Optimalitas: Dynamic programming dapat diterapkan karena Prinsip Optimalitas berlaku. Jika tur
1 → k → ... → 1adalah optimal, maka sub-jalur darikke1(yang melalui semua simpul sisanya) juga harus merupakan jalur terpendek darikke1yang melalui himpunan simpul tersebut.
Langkah 1: Karakteristikkan Struktur Solusi Optimal:
- Tahap: Jumlah simpul yang telah dikunjungi dalam tur.
- State: Ini adalah bagian yang paling krusial dan berbeda dari contoh sebelumnya. Sebuah status tidak cukup hanya dengan mengetahui posisi saat ini. Kita juga perlu tahu simpul mana saja yang belum dikunjungi. Oleh karena itu, status didefinisikan oleh sebuah pasangan:
(i, S).
i: Simpul saat ini (kota tempat kita berada sekarang).S: Himpunan (set) dari simpul-simpul yang masih harus dikunjungi sebelum kembali ke simpul awal (simpul 1).- Keputusan: Dari status
(i, S), keputusan yang diambil adalah memilih simpul berikutnya,j, dari himpunanS.Langkah 2: Definisikan Hubungan Rekursif
- Fungsi Tujuan: Misalkan
f(i, S)adalah panjang (biaya) lintasan terpendek yang dimulai dari simpuli, mengunjungi semua simpul dalam himpunanStepat sekali, dan berakhir di simpul 1.- Logika: Untuk menghitung
f(i, S), kita mencoba semua kemungkinan untuk langkah berikutnya. Kita bisa pergi dariike salah satu simpuljdi dalamS. Biaya untuk pilihan ini adalah biaya dariikej(c_ij) ditambah biaya sub-masalah sisanya, yaituf(j, S - {j})(biaya terpendek darij, mengunjungi sisa simpulS-{j}, lalu ke 1). Kita pilihjyang memberikan total biaya minimum.- Formula Rekurens:
- Basis: Kasus dasar terjadi ketika tidak ada lagi simpul yang harus dikunjungi (himpunan
Skosong). Dari simpuli, kita hanya perlu kembali ke simpul 1.Langkah 3: Hitung Nilai Solusi Optimal (Contoh n=4)
Analisis Inkonsistensi Data:
Materi sumber menyajikan beberapa matriks biaya yang berbeda. Kita akan gunakan yang terakhir disajikan sebelum perhitungan. Namun, nilai basis
c_{i1}yang digunakan dalam perhitungan (c_{21}=5, c_{31}=6, c_{41}=8) juga tidak cocok dengan matriks tersebut. Untuk menjaga alur contoh, kita akan mengikuti nilai-nilai yang digunakan dalam perhitungan sumber, bukan nilai dari matriks yang ditampilkan. Matriks Biaya (untuk referensi):Tahap 1: Basis Kasus ()
Tahap 2: Perhitungan untuk
Tahap 3: Perhitungan untuk
Tahap Akhir: Menghitung Biaya Tur Lengkap Tujuan kita adalah mencari .
Langkah 4: Rekonstruksi Tur Optimal
- Total biaya tur terpendek adalah 35.
- Dari Simpul 1: Nilai 35 didapat dari pilihan
j=2(). Maka, tur dimulai dengan1 → 2.- Dari Simpul 2, dengan sisa {3,4}: Kita lihat perhitungan . Nilai 25 didapat dari pilihan
j=4(). Maka, langkah berikutnya adalah ke simpul 4. Tur menjadi1 → 2 → 4.- Dari Simpul 4, dengan sisa {3}: Kita lihat perhitungan . Hanya ada satu pilihan, yaitu ke simpul 3. Tur menjadi
1 → 2 → 4 → 3.- Dari Simpul 3, dengan sisa {}: Tidak ada lagi simpul yang harus dikunjungi, maka kita kembali ke simpul 1.
- Tur Optimal:
1 → 2 → 4 → 3 → 1- Verifikasi Biaya: . Hasilnya konsisten.
Dynamic programming menyediakan metode yang pasti (eksak) untuk menyelesaikan TSP dengan mengubahnya menjadi serangkaian sub-masalah yang tumpang tindih. Kuncinya adalah mendefinisikan state secara cerdas menggunakan pasangan
(simpul saat ini, himpunan simpul sisa). Dengan menghitung biaya optimal untuk setiap kemungkinan state secara bertahap (bottom-up), dari himpunan sisa terkecil hingga terbesar, algoritma ini dapat menjamin penemuan tur dengan biaya terpendek. Meskipun optimal, kompleksitasnya yang eksponensial membuatnya hanya praktis untuk jumlah kota yang relatif kecil.
Additional Information (Optional)
Aspek Teknis Lanjutan
- Kompleksitas Algoritma: Ini adalah poin paling penting tentang DP untuk TSP. Kompleksitasnya adalah O(n² * 2ⁿ).
- Ada sekitar n * 2ⁿ kemungkinan state
(i, S). (Adanpilihan untuki, dan sekitar2^nkemungkinan himpunan bagianS).- Untuk setiap state, kita perlu melakukan
noperasi untuk menghitungmin.- Hasilnya,
n * 2ⁿ * n = n² * 2ⁿ. Ini jauh lebih baik daripada brute-forceO(n!), tetapi masih termasuk kelas masalah eksponensial dan tidak praktis untukn > 20.- Implementasi dengan Bitmask: Dalam pemrograman kompetitif atau implementasi nyata, himpunan
Stidak disimpan sebagai set atau list. Ia direpresentasikan sebagai bitmask: sebuah bilangan bulat di mana bit ke-kbernilai 1 jika kotakada di dalam himpunan, dan 0 jika tidak. Ini membuat operasi sepertimenambah elemen,menghapus elemen, danmengecek keanggotaanmenjadi operasi bitwise yang sangat cepat (OR,XOR,AND), sehingga implementasinya menjadi jauh lebih efisien.- Perbandingan dengan Metode Lain:
- Brute Force O(n!): Mencoba semua permutasi, tidak mungkin.
- Dynamic Programming O(n²2ⁿ): Jauh lebih baik, tapi masih eksponensial. Menemukan solusi eksak.
- Branch and Bound: Tidak memiliki jaminan kompleksitas waktu yang ketat (bisa sama buruknya), tetapi dengan heuristik yang baik, ia seringkali dapat “memangkas” pohon pencarian dan menemukan solusi optimal lebih cepat di banyak kasus praktis.
- Algoritma Aproksimasi: Untuk TSP dengan
nyang besar, solusi eksak tidak dicari. Sebaliknya, digunakan algoritma aproksimasi (misalnya, Christofides algorithm) yang menjamin solusi dalam batas persentase tertentu dari solusi optimal, atau heuristik (misalnya, 2-opt, simulated annealing) yang menemukan solusi “sangat baik” tetapi tanpa jaminan optimalitas.Eksplorasi Mandiri
- Latihan Manual 3 Kota: Coba selesaikan TSP untuk 3 kota dengan matriks biaya buatan Anda sendiri menggunakan metode
f(i,S). Anda hanya perlu menghitungf(i, ∅)danf(i, {j})sebelum menghitungf(1, {2,3}). Ini akan sangat memperkuat pemahaman Anda tentang cara kerja state dan rekurensi.- Pikirkan tentang Memori: Mengapa algoritma ini membutuhkan banyak memori? Karena kita perlu menyimpan hasil dari setiap
f(i,S)dalam sebuah tabel (atau memoization cache). Jumlah state(i, S)sangat besar, sehingga kebutuhan memorinya juga eksponensial.