Document 9650415

Download Report

Transcript Document 9650415

Matakuliah
Tahun
: T0034 / Perancangan & Analisis Algoritma
: 2008
Pertemuan 17
DYNAMIC PROGRAMMING :
0/1 KNAPSACK PROBLEM
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 $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 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]
Bina Nusantara
TEKNIK DP UNTUK KNAPSACK
for 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]<=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 for
end for
[buku utama, pseudocode 7.7]
Bina Nusantara
LANGKAH 1
n = 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
2
3
4
5
6
0
0
0
0
0
0
0
0
1
0
2
0
3
0
4
0
Bina Nusantara
LANGKAH 2
n = 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 if
else
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
Bina Nusantara
LANGKAH 3
n = 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 if
else
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
Bina Nusantara
LANGKAH 4
n = 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 if
else
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
Bina Nusantara
LANGKAH 5
n = 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 if
else
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
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=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=x–w[i]
i=i–1
else
i=i-1
end if
end while
Bina Nusantara
LANGKAH 6
n = 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=x–w[i]
i=i–1
else
i=i-1
end if
end while
[buku utama, ilustrasi 7.15]
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
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)
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