1. Karakteristikan bahwa masalah adalah solusi optimal.
2. Secara berulang mendefinisikan nilai dari solusi optimal.
3. Menghitung nilai solusi optimal dengan cara bottom-up.
4. Membangun solusi optimal dari informasi yang telah didapat.
Pada dynamic programming menggunakan teknik bottom-up. Ada tiga maksud dalam teknik bottom-up yaitu;
1. Mulai dengan bagian permasalahan yang paling kecil
2. Kombinasikan solusi yang didapatkan dan ukuran dinaikkan
3. Kerjakan hingga dicapai solusi permasalah asli.
Dynamic programming menggunakan prinsip-prinsip optimal,
artinya setiap bagian dari penyelesaian yang dijalankan harus optimal, solusi bagian tersebut lalu dikombinasikan sehingga menghasilkan solusi
yang optimal.
2.3. KNAPSACK PROBLEM
Knapsack Problem dapat digambarkan sebagai berikut terdapat
sebuah wadah dengan kapasitas W akan diisi dengan benda sebanyak n, masing-masing benda memiliki keuntungan berupa value v dan berat
berupa weight w. Kellerer,2004:2 Knapsack Problem
dapat digambarkan sebagai berikut: Seorang Pencuri merampok toko, menemukan sejumlah n benda, benda ke i
memiliki keuntungan v dollar dan berat w pon. Pencuri ingin mengambil
barang yang berharga sebanyak mungkin, namun ia hanya bisa membawa barang seberat W pon. Cormen,2002:382
Dari penggambaran yang dipaparkan dapat ditarik kesimpulan bahwa Knapsack Problem dapat digambarkan sebagai memilih dari antara
berbagai macam barang yang paling bernilai mengingat bahwa wadah memiliki kapasitas terbatas. Tujuannya adalah memilih benda yang ada
sehingga keuntungan total yang dipilih dapat menjadi maksimal serta ukuran tidak melebihi batasan.
Dari penjabaran di atas maka muncul dua permasalahan knapsack yaitu fractional knapsack dan 0-1 knapsack problem. Contoh penerapan
dari permasalahan knapsack adalah pemotongan bahan baku manufaktur. Penjelasan dari kedua versi adalah sebagai berikut :
1. Fractional knapsack problem
Maksud dari fractional knapsack adalah objek-objek yang tersedia boleh diambil sebagian saja. Misal terdapat objek yang
mempunyai berat 5 kg dengan nilai Rp. 5000, maka diperbolehkan hanya mengambil 2 kg dengan nilai Rp. 2000.
2. 0-1 knapsack problem
Inti dari knapsack 0-1 adalah objek yang tersedia harus diambil secara keseluruhan atau tidak sama sekali
Solusi dynamic programming pada 0-1 knapsack problem digambarkan sebagai berikut :
Algoritma mengambil masukan maksimum dengan berat W, jumlah objek berupa n, dan dua urutan yaitu v= v1,v2…,vn dan w=
w1,w2,….,wn. Keadaan ini akan disimpan dalam tabel c[0…n,0…W] yang didalamnya terdapat hasil perhitungan pada baris
pertama dari kolom kiri ke kanan sepanjang W kemudian dilanjutkan pada baris kedua dan seterusnya sebanyak objek n. Pada akhir
perhitungan akan terdapat c[n,W] yang berisi nilai maksimum. Gambar 2.7. merupakan algoritma dynamic programming pada
penyelesaian masalah 0 1 knapsack, pada penyelesaiannya algoritma ini menyimpan nilai optimal dalam sebuah array :
for w
← 0 to W do
c[0,w] ←0
end for for
i
← 1 to n do
c[i,0] ← 0
end for for
i
← 1 to n do for
w=0 to W do if w[i]
≤ w then if v[i] + c[ i,w-w[i] ] c[i – 1, w ] then
c[i,w] ←v[i] + c[i-1, w-w[i] ]
else
c[i,w] ← c [i–1,w]
end if else
c[i,w] ← c[i-1,w]
end if end for
end for
Gambar. 2.7
. Algoritma Dynamic Programming Pada 0 1 Knapsack cormen, 2002,16-12.
Dengan melihat tabel c[n,W], maka dapat ditelusuri dari mana nilai optimal itu didapat. Jika c[i,w] = c[i-1,w], maka objek ke i bukan
bagian dari solusi, dan melanjutkan penelusuran dengan c[i,w] = c[i- 1,w], Jika objek ke i merupakan bagian dari solusi maka melanjutkan
penelusuran dengan c[i,w] = v[i] + c[i-1,w-w[i]], algoritma ini memakan waktu n x W.
Berikut contoh kasus penggunaan metode dynamic programming
dalam menyelesaikan masalah 0 1 knapsack : Terdapat knapsack dengan ruang maksimal W = 6. Kemudian
ingin dimasukkan beberapa jenis barang n = 4. Masing-masing barang memiliki beratw dan keuntunganv sebagai berikut :
w1,w2,w3,w4 = 3,2,5,4 , v1,v2,v3,v4 = 6,5,9,8 Berapakah keuntungan maksimal yang bisa didapat?
Langkah 1 : inisialisasikan array [0,0] dengan nilai 0 karena tidak ada objek yang dipilih.
Kondisi : i=0 v[0]=0 w[0]=0 for
w
← 0 to W do c[0,w] ←0 for
i
← 1 to n do c[i,0] ← 0
iw 0 1 2 3 4 5 6 0 0 0 0 0 0 0 0
1 2
3 4
if w[i] ≤ w then
if v[i] + c[ i,w-w[i] ] c[i – 1, w ] then
c[i,w] ←v[i] + c[i-1, w-w[i] ]
else
c[i,w] ← c [i–1,w]
end if else
c[i,w] ← c[i-1,w]
end if
Kondisi : i=1 v[1]=6 w[1]=3 iw 0 1 2 3 4 5 6
0 0 0 0 0 0 0 0 1 0 0 0 6 6 6 12
2
3 4
Kondisi : i=2 v[2]=5 w[2]=2
iw 0 1 2 3 4 5 6 0 0 0 0 0 0 0 0
1 0 0 0 6 6 6 12 2 0 0 5 6 10
11 15
3 4
Kondisi : i=3 v[3]=9 w[3]=5
iw 0 1 2 3 4 5 6 0 0 0 0 0 0 0 0
1 0 0 0 6 6 6 12 2 0 0 5 6 10
11 15
3 0 0 5 6 10 11
15 4
Kondisi : i=4 v[4]=8 w[4]=4 iw 0 1 2 3 4 5 6
0 0 0 0 0 0 0 0 1 0 0 0 6 6 6 12
2 0 0 5 6 10 11
15 3 0 0 5 6 10
11 15
4 0 0 5 6 10 11
15
2.4. BIAYA