Dynamic Programming Widodo
Pengantar Dynamic Programming (DP) merupakan algoritma untuk memecahkan persoalan optimasi yaitu persoalan yang menuntut pencarian solusi optimum. Pemecahan masalahnya dengan mengkombinasikan solusi-solusi dari sub- masalah DP bisa dijalankan jika solusi masalah di dalamnya termasuk solusi-solusi submasalah
Pengantar Ditemukan oleh ahli matematika: Richard Bellman tahun 1950 Istilah “programming” di sini mengacu pada planning bukan pemrograman komputer
Pengantar DP adalah teknik untuk menyelesaikan masalah dengan cara membagi masalah ke dalam beberapa sub masalah yang tidak saling independen (overlapping sub problem) DP adalah metode pemecahan masalah dengan cara menguraikan solusi menjadi sekumpulan langkah (step) atau tahapan (stage) sedemikian sehingga solusi dari sebuah masalah dapat dipandang sebagai serangkaian keputusan yang saling berkaitan
Multistage Graph Multistage Graph (Graf Multi Tahap) adalah graf dengan sifat: Graf berarah (directed graph) Setiap edge-nya punya bobot (weighted graph) Hanya tdp 1 source (s) dan 1 sink ( t ) Lintasan dari source ke sink terdiri atas beberapa stage (V 1 s.d V k ) Terdapat stage sebanyak k di mana k ≥ 2.
Multistage Graph problem Problem mencari lintasan terpendek dari source ke sink:
Multistage Graph Problem Penyelesaian Multistage Graph Problem berdasar prinsip: Jalur terpendek dari satu node ke node lain di stage tertentu merupakan jalur terpendek dari stage sebelumnya ditambah panjang salah satu edge penghubung stage. Metode Forward Menghitung jarak dari source ke sink Metode Backward Menghitung jarak dari sink ke source
Metode Backward Prinsip : analisis dilakukan dengan menghitung path (jalur) dari suatu node ke sink Rumus : cost(i,j) = min{c(j,k) + cost(i+1,k)} cost(i,j) artinya panjang lintasan dari node j di stage i menuju sink (t) c(j,k) artinya panjang lintasan dari node j ke node k
Metode Backward cost(4,I) = c(I,L) = 7 cost(4,J) = c(J,L) = 8 cost(4,K) = c(K,L) = 11 cost(3,F) = min { c(F,I) + cost(4,I) | c(F,J) + cost(4,J) } cost(3,F) = min { | } = 17 cost(3,G) = min { c(G,I) + cost(4,I) | c(G,J) + cost(4,J) } cost(3,G) = min { | } = 12 cost(3,H) = min { c(H,J) + cost(4,J) | c(H,K) + cost(4,K) } cost(3,H) = min { | } = 18 cost(2,B) = min { c(B,F) + cost(3,F) | c(B,G) + cost(3,G) | c(B,H) + cost(3,H) } cost(2,B) = min { | | } = 20 cost(2,C) = min { c(C,F) + cost(3,F) | c(C,G) + cost(3,G) } cost(2,C) = min { | } = 15 cost(2,D) = min { c(D,H) + cost(3,H) } cost(2,D) = min { } = 27 cost(2,E) = min { c(E,G) + cost(3,G) | c(E,H) + cost(3,H) } cost(2,E) = min { | } = 18 cost(1,A) = min { c(A,B) + cost(2,B) | c(A,C) + cost(2,C) | c(A,D) + cost(2,D) | c(A,E) + cost(2,E) } cost(1,A) = min { | | | } = 21
Metode Forward Prinsip : analisis dilakukan dengan menghitung path (jalur) dari source ke suatu node Rumus : bcost(i,j) = min{bcost(i–1,l) + c(l,j)} bcost(i,j) artinya panjang lintasan backward dari source (s) menuju node j di stage i c(j,l) artinya panjang lintasan dari node j ke node l
Metode Forward cost(2,B) = c(A,B) = 7 cost(2,C) = c(A,C) = 6 cost(2,D) = c(A,D) = 5 cost(2,E) = c(A,E) = 9. cost(3,F) = min { c(B,F) + bcost(2,B) | c(C,F) + bcost(2,C) } cost(3,F) = min { | } = 11 cost(3,G) = min { c(B,G) + bcost(2,B) | c(C,G) + bcost(2,C) | c(E,G) + bcost(2,E) } cost(3,G) = min { | | } = 9 cost(3,H) = min { c(B,H) + bcost(2,B) | c(D,H) + bcost(2,D) | c(E,H) + bcost(2,E) } cost(3,H) = min { | | } = 14 cost(4,I) = min { c(F,I) + bcost(3,F) | c(G,I) + bcost(3,G) } cost(4,I) = min { | } = 14 cost(4,J) = min { c(F,J) + bcost(3,F) | c(G,J) + bcost(3,G) | c(H,J) + bcost(3,H) } cost(4,J) = min { | | } = 16 cost(4,K) = min { c(H,K) + cost(3,H) } cost(4,K) = min { } = 22 cost(5,L) = min { c(I,L) + bcost(4,I) | c(J,L) + bcost(4,J) | c(K,L) + bcost(4,K) } cost(5,L) = min { | | } = 21 Rute terpendek adalah A-C-G-I-L dengan panjang 21
Rute terpendek
Matrix-chain multiplication problem Perkalian matriks bersifat asosiatif, artinya semua jenis variasi pengelompokkan akan menghasilkan produk sama, namun berbeda efisiensi komputasinya Perkalian matriks dapat dilakukan jika compatible, yaitu jumlah kolom pada matriks A sama dengan jumlah baris pada matriks B A. B [4x3]. [3.5]
Matrix-chain multiplication problem
Contoh Perkalian 3 buah matriks (A 1, A 2, A 3 ) Dimensi tiap-tiap matriks adalah: 10X100, 100X5, 5X50. PerkalianA 1 A 2 A 3 dapat dilakukan dengan 2 cara: ((A 1 A 2 ) A 3 ) atau dengan (A 1 (A 2 A 3 )) Cara I : = 7500 perkalian skalar Cara II: = perkalian skalar Cara I 10x lebih efisien dari cara II.
Matrix-chain multiplication problem Berapa banyak cara untuk perkalian A 1 A 2 A 3 A 4 ? Ada 5 cara (A 1 (A 2 (A 3 A 4 ))) (A 1 ((A 2 A 3 )A 4 )) ((A 1 A 2 )(A 3 A 4 )) ((A 1 (A 2 A 3 ))A 4 ) (((A 1 A 2 )A 3 )A 4 )