Knapsack Dynamic Programming

  • View
    141

  • Download
    19

Embed Size (px)

Text of Knapsack Dynamic Programming

Matakuliah Tahun

: T0034 / Perancangan & Analisis Algoritma : 2008

Pertemuan 17

0/1 KNAPSACK PROBLEM

DYNAMIC PROGRAMMING :

REVIEW KNAPSACK PROBLEM Seorang pencuri memasuki sebuah rumah. Dia membawa tas yang hanya muat mengangkut 6 kg barang. Di dalam rumah terdapat barang A, B, C, DBarang A beratnya 3 kg, nilainya $6 Barang B beratnya 2 kg, nilainya $5 Barang C beratnya 5 kg, nilainya $9 Barang D beratnya 4 kg, nilainya $8

Setiap barang hanya terdapat 1 buah, dan tidak bisa diambil sebagian. Si pencuri hanya punya pilihan untuk membawa atau meninggalkannya, tidak bisa membawa setengah. Barang apa saja yang harus dibawa si pencuri agar hasilnya maksimal?[buku utama, bab 7.5]

Bina Nusantara

REPRESENTASI MASALAH n=4 W = 6; (b1, b2, b3, b4) = (6, 5, 9, 8) (w1, w2, w3, w4) = (3, 2, 5, 4)

n adalah banyaknya barang W adalah total berat maksimal yang bisa dibawa bn adalah benefit (keuntungan) dari barang n wn adalah berat barang n

Bina Nusantara

SOLUSI FEASIBLEBarang {} {A} {B} {C} {D} {A,B} {A,C} {A,D} 0 3 2 5 4 5 8 7 Berat 0 6 5 9 8 11 15 14 Nilai Barang {B,C} {B,D} {C,D} {A,B,C} {A,B,D} {A,C,D} {B,C,D} {A,B,C,D} 7 6 9 10 9 12 11 14 Berat Nilai 14 13 17 20 19 23 22 28

[buku utama, tabel 7.3]Bina Nusantara

TEKNIK DP UNTUK KNAPSACKfor w=0 to Wmax do if wk w B[k 1, w] K[0,w]=0 B[k , w] end for max( B[k 1, w] | B[k 1, w wk ] bk ) else for i=1 to n do K[i,0]=0 end for for i=1 to n do for w=0 to Wmax do if w[i]K[i-1,w] then K[i,w]=b[i]+K[i-1,w-w[i]] else K[i,w]=K[i-1,w] end if else K[i,w]=K[i-1,w] end if end for end for [buku utama, pseudocode 7.7]Bina Nusantara

LANGKAH 1n = 4; W = 6; (b1, b2, b3, b4) = (6, 5, 9, 8); (w1, w2, w3, w4) = (3, 2, 5, 4) for w = 0 to W do K[0,w]=0 for i = 1 to n do K[i,0]=0[buku utama, ilustrasi 7.14]

i\w 0 1

0 0 0

1 0

2 0

3 0

4 0

5 0

6 0

23 4Bina Nusantara

00 0

LANGKAH 2n = 4; W = 6; (b1, b2, b3, b4) = (6, 5, 9, 8); (w1, w2, w3, w4) = (3, 2, 5, 4) Kondisi : i=1 b[1]=6 w[1]=3

if w[i]K[i-1,w] then K[i,w]=b[i]+K[i-1,w-w[i]] else K[i,w]=K[i-1,w] end if else K[i,w]=K[i-1,w] end if

i\w 0 1

0 0 0

1 0 0

2 0 0

3 0 6

4 0 6

5 0 6

6 0 6

23 4Bina Nusantara

00 0

LANGKAH 3n = 4; W = 6; (b1, b2, b3, b4) = (6, 5, 9, 8); (w1, w2, w3, w4) = (3, 2, 5, 4) Kondisi : i=2 b[2]=5 w[2]=2

if w[i]K[i-1,w] then K[i,w]=b[i]+K[i-1,w-w[i]] else K[i,w]=K[i-1,w] end if else K[i,w]=K[i-1,w] end if

i\w 0 1

0 0 0

1 0 0

2 0 0

3 0 6

4 0 6

5 0 6

6 0 6

23 4Bina Nusantara

00 0

0

5

6

6

11

11

LANGKAH 4n = 4; W = 6; (b1, b2, b3, b4) = (6, 5, 9, 8); (w1, w2, w3, w4) = (3, 2, 5, 4) Kondisi : i=3 b[2]=9 w[2]=5

if w[i]K[i-1,w] then K[i,w]=b[i]+K[i-1,w-w[i]] else K[i,w]=K[i-1,w] end if else K[i,w]=K[i-1,w] end if

i\w 0 1

0 0 0

1 0 0

2 0 0

3 0 6

4 0 6

5 0 6

6 0 6

23 4Bina Nusantara

00 0

00

55

66

66

1111

1111

LANGKAH 5n = 4; W = 6; (b1, b2, b3, b4) = (6, 5, 9, 8); (w1, w2, w3, w4) = (3, 2, 5, 4) Kondisi : i=4 b[2]=8 w[2]=4

if w[i]K[i-1,w] then K[i,w]=b[i]+K[i-1,w-w[i]] else K[i,w]=K[i-1,w] end if else K[i,w]=K[i-1,w] end if

i\w 0 1

0 0 0

1 0 0

2 0 0

3 0 6

4 0 6

5 0 6

6 0 6

23 4Bina Nusantara

00 0

00 0

55 5

66 6

66 8

1111 11

1111 13

MEMBACA HASILNYA Dari tabel TSP diketahui bahwa keuntungan maksimal yang bisa diperoleh adalah $13. Barang apa saja yang harus diambil untuk mendapatkan keuntungan $13? Algoritma untuk mencari barang-barang yang dibawa :i=n x=W while K[i,x]>0 do if K[i,x]K[i-1,x] then mark item i in the knapsack x=xw[i] i=i1 else i=i-1 end if end whileBina Nusantara

LANGKAH 6n = 4; W = 6; (b1, b2, b3, b4) = (6, 5, 9, 8); (w1, w2, w3, w4) = (3, 2, 5, 4) i=n x=W while K[i,x]>0 do if K[i,x]K[i-1,x] then mark item i in the knapsack x=xw[i] i=i1 else i=i-1 end if end while[buku utama, ilustrasi 7.15]

i\w 0 1

0 0 0

1 0 0

2 0 0

3 0 6

4 0 6

5 0 6

6 0 6

23 4Bina Nusantara

00 0

00 0

55 5

66 6

66 8

1111 11

1111 13

HASIL Jadi, keuntungan maksimal $13 bisa diperoleh dengan membawa barang kedua (B) dan barang keempat (D). Untuk pendalaman materi, pelajari contoh-contoh lain Knapsack Problem dari buku (kasus 7.3, kasus 7.4 dan kasus 7.5)

Bina Nusantara

LATIHAN Hitung penyelesaian 0/1 Knapsack Problem berikut dengan menggunakan Dynamic Programming ! n = 7; W = 10; (w1, w2, w3, w4, w5, w6, w7) = (5, 2, 3, 6, 4, 3, 2); (b1, b2, b3, b4, b5, b6, b7) = (36, 16, 21, 57, 28, 24, 13) n = 8; W = 9; (w1, w2, w3, w4, w5, w6, w7) = (5, 2, 3, 2, 6, 2, 4, 3); (b1, b2, b3, b4, b5, b6, b7) = (32, 59, 30, 17, 81, 16, 39, 25)

Bina Nusantara

REVIEW Apa yang sudah dipahami? Apa yang akan dibahas selanjutnya?

Bina Nusantara