KNAPSACK PROBLEM Implementasi algoritma programming pada aplikasi perhitungan biaya produksi produk percetakan berbasis web

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