Pemrograman Dinamis Pemrograman dinamis merupakan suatu teknik analisa kuantitatif untuk membuat tahapan keputusan yang saling berhubungan. Teknik ini menghasilkan prosedur yang sistematis untuk mencari keputusan dengan kombinasi yang optimal. Pemrograman dinamis membagi permasalahan menjadi beberapa tahapan keputusan, dimana hasil keputusan dari satu tahap akan mempengaruhi keputusan dari tiap tiap tahapan selanjutnya. Berbeda dengan linear programming, dalam pemrograman dinamis tidak ada formulasi matematis standar. Tetapi, pemrograman dinamis adalah sebuah pendekatan umum untuk pemecahan masalah, dan perhitungan yang digunakan harus dikembangkan agar sesuai dengan tiaptiap situasi tertentu. Oleh karenanya, diperlukan suatu kepandaian dan pemahaman pada struktur umum permasalahan untuk mengetahui kapan dan bagaimana suatu permasalahan harus dipecahkan dengan pemrograman dinamis. Ada 2 perbedaan mendasar antara pemrograman dinamis dan linear programming. Pertama, tidak ada algoritma (seperti metode simplex) yang bisa diprogramkan untuk memecahkan semua permasalahan. Sebaliknya, pemrograman dinamis adalah teknik yang mengarahkan kita untuk memecah masalah yang sulit menjadi tahapan dari beberapa masalah yang lebih mudah, yang kemudian dievaluasi berdasarkan tahapan. Kedua, linear programming adalah suatu metode yang menghasilkan solusi satu tahap (single stage solution) atau satu periode waktu. Pemrograman dinamis mempunyai kemampuan untuk mencari solusi optimal dari suatu permasalahan menjadi beberapa permasalahan dalam satuan waktu yang lebih kecil dan memecahkan tiap permasalahan tersebut dengan optimal (misal permasalahan dengan jangka waktu satu tahun dapat dibagi menjadi 12 permasalahan dengan jangka waktu 1 bulan). Jadi pemrograman dinamis menggunakan pendekatan banyak tahap (multistage). Pemecahan masalah dengan menggunakan pemrograman dinamis mempunyai 4 tahapan: 1. Memecah permasalahan asli (Original Problem) menjadi bagian permasalahan (Subproblem) yang juga disebut sebagai tahapan (Stage), dengan aturan keputusan di tiap2 tahapan 2. Memecahkan tahapan terakhir dari permasalahan dengan semua kondisi dan keadaan yang memungkinkan 3. Bekerja mundur dari tahap terakhir, dan memecahkan tiap tahap. Hal ini dikerjakan dengan mencari keputusan optimal dari tahap tersebut sampai dengan tahap terakhir
4. Solusi optimal dari permasalahan didapatkan jika semua tahap sudah terpecahkan Suatu contoh umum dari penggunaan pemrograman dinamis adalah pencarian rute terpendek, berikut adalah contoh pemecahan masalah rute terpendek. Permasalahan Rute Terpendek Agus akan melakukan perjalanan dari Jakarta menuju Bandung, dengan melewati kota/tempat seperti terlihat di peta perjalanan Gambar 1. Tanda bulatan (node) mewakili kota, tanda panah (arc ) mewakili jalan raya antar kota/tempat, jarak antar kota tertulis di tanda panah. Gambar 1. Peta Perjalanan Langkah 1: Tahap pertama adalah membagi permasalahan menjadi subproblem. Gambar 2 menunjukkan tahapan dalam problem ini. Dalam pemrograman dinamis, biasanya dimulai dari bagian terakhir problem, sebagai tahap 1, dan bekerja mundur sampai dengan permulaan problem atau jaringan. Tabel 1 menunjukkan jarak arc antar tahapan. 2
Stage 3 Stage 2 Stage 1 Gambar 2. Tahapan Pencarian Rute Terpendek Tabel 1. Jarak Tiap Arc Stage Arc Jarak 1 5 7 14 6 7 2 4 5 10 3 5 12 2 3 6 6 2 5 4 2 6 10 1 4 4 3 1 3 5 1 2 2 Langkah 2: Pada langkah berikut, kita memecahkan stage 1, bagian terakhir dari jaringan. Biasanya bagian ini mudah dilakukan. Kita cari jalur terpendek ke akhir jaringan, dalam problem ini node 7. Pada tahap 1, jalur terpendek hanya terdiri dari node 5 dan node 6 ke node 7. Kita gambarkan jarak minimum tersebut dalam kotak di node awal di tahap 1, yaitu node 5 dan node 6. 3
Gambar 3. Solusi Stage 1, One Stage Problem Stage 1 Node Awal Jarak Terpendek ke Node 7 Arc dalam Jalur 5 14 5 7 6 2 6 7 Langkah 3: Solusi stage 2 dapat dilihat di gambar 4. Pada node 4, jarak terpendek ke node 7 adalah arc 4 5 dan 5 7 dengan jarak total 14. Pada node 3, jalur terpendek adalah arc 3 6 dan 6 7 dengan jarak minimum 8. Pada node 2, jalur terpendek adalah 2 6 dan 6 7 dengan jarak minimum 12. Gambar 4. Solusi Stage 2, Two Stage Problem 4
Stage 2 Node Awal Jarak Terpendek ke Node 7 Arc dalam Jalur 4 24 4 5 5 7 3 8 3 6 6 7 2 12 2 6 6 7 Untuk mendapatkan solusi optimal pada tiap tiap tahap, yang harus kita perhitungkan adalah arc ke tahap berikutnya dan solusi optimal dari tahap berikutnya. Pada stage 3, kita hanya perlu memperhitungkan 3 arc yan mengarah ke stage 2 (1 2, 1 3, dan 1 4) dan hasil optimal di stage 2, yang telah dicatat dalam tabel sebelumnya. Solusi stage 3 terlihat pada gambar 5 Gambar 5. Solusi Stage 3, Three Stage Problem Stage 3 Node Awal Jarak Terpendek ke Node 7 Arc dalam Jalur 1 13 1 3 3 6 6 7 Solusi akhir dari Problem tersebut adalah seperti terlihat di tabel diatas, jalur yang ditempuh adalah 1 3, 3 6, dan 6 7 seperti terlihat di gambar 6, dengan panah dicetak tebal. 5
Gambar 6. Solusi Akhir Jadi rute terpendek yang dapat ditempuh oleh Agus adalah Jakarta Ciawi Puncak Bandung 6