knapsack dynamic programming

16

Upload: sam-f-chaerul

Post on 31-Jul-2015

269 views

Category:

Documents


24 download

TRANSCRIPT

Page 1: Knapsack Dynamic Programming
Page 2: Knapsack Dynamic Programming

Matakuliah : T0034 / Perancangan & Analisis Algoritma

Tahun : 2008

Pertemuan 17

DYNAMIC PROGRAMMING :0/1 KNAPSACK PROBLEM

Page 3: Knapsack Dynamic Programming

Bina Nusantara

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, D

Barang A beratnya 3 kg, nilainya $6Barang B beratnya 2 kg, nilainya $5Barang C beratnya 5 kg, nilainya $9Barang 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]

Page 4: Knapsack Dynamic Programming

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

Page 5: Knapsack Dynamic Programming

Bina Nusantara

SOLUSI FEASIBLE

Barang Berat Nilai Barang Berat Nilai

{} 0 0 {B,C} 7 14

{A} 3 6 {B,D} 6 13

{B} 2 5 {C,D} 9 17

{C} 5 9 {A,B,C} 10 20

{D} 4 8 {A,B,D} 9 19

{A,B} 5 11 {A,C,D} 12 23

{A,C} 8 15 {B,C,D} 11 22

{A,D} 7 14 {A,B,C,D} 14 28

[buku utama, tabel 7.3]

Page 6: Knapsack Dynamic Programming

Bina Nusantara

TEKNIK DP UNTUK KNAPSACKfor w=0 to Wmax do K[0,w]=0end forfor i=1 to n do K[i,0]=0end forfor i=1 to n do for w=0 to Wmax do if w[i]<=w then if b[i]+K[i-1,w-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 forend for

elsebwwkBwkB

wwifwkBwkB

kk

k

)],1[|],1[max(

],1[],[

[buku utama, pseudocode 7.7]

Page 7: Knapsack Dynamic Programming

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

i\w 0 1 2 3 4 5 6

0 0 0 0 0 0 0 0

1 0

2 0

3 0

4 0

[buku utama, ilustrasi 7.14]

Page 8: Knapsack Dynamic Programming

Bina Nusantara

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]<=w then if b[i]+K[i-1,w-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 ifelse K[i,w]=K[i-1,w]end if

i\w 0 1 2 3 4 5 6

0 0 0 0 0 0 0 0

1 0 0 0 6 6 6 6

2 0

3 0

4 0

Page 9: Knapsack Dynamic Programming

Bina Nusantara

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]<=w then if b[i]+K[i-1,w-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 ifelse K[i,w]=K[i-1,w]end if

i\w 0 1 2 3 4 5 6

0 0 0 0 0 0 0 0

1 0 0 0 6 6 6 6

2 0 0 5 6 6 11 11

3 0

4 0

Page 10: Knapsack Dynamic Programming

Bina Nusantara

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]<=w then if b[i]+K[i-1,w-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 ifelse K[i,w]=K[i-1,w]end if

i\w 0 1 2 3 4 5 6

0 0 0 0 0 0 0 0

1 0 0 0 6 6 6 6

2 0 0 5 6 6 11 11

3 0 0 5 6 6 11 11

4 0

Page 11: Knapsack Dynamic Programming

Bina Nusantara

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]<=w then if b[i]+K[i-1,w-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 ifelse K[i,w]=K[i-1,w]end if

i\w 0 1 2 3 4 5 6

0 0 0 0 0 0 0 0

1 0 0 0 6 6 6 6

2 0 0 5 6 6 11 11

3 0 0 5 6 6 11 11

4 0 0 5 6 8 11 13

Page 12: Knapsack Dynamic Programming

Bina Nusantara

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=nx=Wwhile K[i,x]>0 do if K[i,x]<>K[i-1,x] then mark item i in the knapsack x=x–w[i] i=i–1 else i=i-1 end ifend while

Page 13: Knapsack Dynamic Programming

Bina Nusantara

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

i=nx=Wwhile K[i,x]>0 do if K[i,x]<>K[i-1,x] then mark item i in the knapsack x=x–w[i] i=i–1 else i=i-1 end ifend while

i\w 0 1 2 3 4 5 6

0 0 0 0 0 0 0 0

1 0 0 0 6 6 6 6

2 0 0 5 6 6 11 11

3 0 0 5 6 6 11 11

4 0 0 5 6 8 11 13

[buku utama, ilustrasi 7.15]

Page 14: Knapsack Dynamic Programming

Bina Nusantara

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)

Page 15: Knapsack Dynamic Programming

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)

Page 16: Knapsack Dynamic Programming

Bina Nusantara

REVIEW

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