Anda di halaman 1dari 13

OPTIMASI

PENERAPAN ALGORITMA GREEDY PADA Siska Andriani, S.Kom

KASUS KNAPSACK 0/1


ALGORITMA GREEDY
Algoritma greedy adalah salah satu yang paling banyak digunakan dalam
masalah optimasi. Greedy berarti tamak atau rakus.
Penamaan tersebut dikarenakan prinsip utama algoritma ini adalah
mengambil solusi yang paling baik pada saat itu juga. Solusi yang baik ini
adalah solusi yang memberikan sumbangan paling berarti (memiliki bobot paling
kecil ataupun keuntungan yang paling besar) dan masih memenuhi syarat-syarat
yang diberlakukan dalam pengambilan.
CARA KERJA GREEDY
Bertahap, pada setiap tahap diambil suatu keputusan yang
dianggap terbaik, tanpa memperhitungkan konsekuensi ke
depan. Ini berarti hanya memilih suatu optimum lokal.
Seolah mengatakan: take what you can get now greedy
Saat algoritme berhenti, optimum local diharapkan merupakan
optimum global.
KNAPSACK
A. Pengertian
Knapsack adalah tas atau karung. Karung digunakan untuk memuat
sesuatu. Dan tentunya tidak semua objek dapat ditampung di dalam
karung tersebut. Karung tersebut hanya dapat menyimpan beberapa objek
dengan total ukurannya (weight) lebih kecil atau sama dengan ukuran
kapasitas karung.
B. Manfaat knapsack
Digunakan untuk mencari solusi optimal baik minimum, maupun maksimum
RATIONAL KNAPSACK (RK)
Problem instance: Terdapatn objek, masing-masing dengan bobot wi dan
profit pi untuk1 i n. W adalah kapasitas knapsack
Solusi fisibel: vektor(x1 , , x n ) dengan 0 xi 1 untuk 1 i n
Fungsi tujuan:

Solusi optimal: maximum profit


IDE ALGORITMA GREEDY
Pada setiap tahap, akan diambil jumlah ukuran terbesar yang paling mungkin,
dengan catatan konstrains dipenuhi.
Langkah terhenti bila:
1. Knapsack penuh, atau
2. Semua objek telah berhasil ditempatkan dalam knapsack tanpa kelebihan
kapasitas
ALGORITMA YANG DIGUNAKAN UNTUK
KNAPSACK 0/1
GREEDY
Greedy By Profit (pi)
Greedy By Weight(wi)
Greedy By Density(pi/wi)
CONTOH PENYELESAIAN DENGAN ALGORITMA
GREEDY
Tinjau persoalan Integer Knapsack dengan n = 4.
w1 = 2; p1 = 20
w2 = 5; p2 = 30
w3 = 10; p3 = 50
w4 = 5; p4 = 10
Kapasitas knapsack W = 16
LANGKAH PENYELESAIAN
Properti Objek Greedy By Solusi
i Pi Wi Pi/Wi Profit Weight Density Optimal
1 20 2 10 0 1 1 0
2 30 5 6 1 1 1 1
3 50 10 5 1 0 0 1
4 10 5 2 0 1 1 0
Total bobot 15 12 12 15
Total keuntungan 80 60 60 80
PSEUDO CODE ALGORITMA GREEDY
for i =1 to n do
x[i] = 0 { inisialisasi setiap status pengambilan objek i dengan 0 }
endfor
i=0
TotalBobot = 0
Available = true
while (i <= n) and (Available) do
{ cek objek ke-i }
i=i+1
if TotalBobot + w[i] <= K then { masukkan objek Ci ke dalam knapsack }
x[i] =1
TotalBobot =TotalBobot + w[i]
else
Available = false
x[i] = 0 { objek Ci tidak dimasukkan ke dalam knapsack }
endif
endwhile
{ i > n or not Available }
return x

Kompleksitasnya O(n2).
ALGORITMA BRUTE FORCE

Prinsip pencarian solusi permasalahan Integer Knapsack menggunakan algoritma brute


force adalah:
1. Mengenumerasikan list semua himpunan bagian dari himpunan dengan n objek
2. Menghitung total keuntungan dari setiap himpunan bagian dari langkah 1
3. Memilih himpunan bagian yang memberikan total keuntungan terbesar
CONTOH PENYELESAIAN DENGAN BRUTE FORCE
Himpunan Bagian Total Bobot Total Keuntungan
{} 0 0

Tinjau persoalan Integer Knapsack dengan n =4. {1} 2 20


{2} 5 30
w1 = 2; p1 = 20 {3} 10 50
{4} 5 10
w2 = 5; p1 = 30 { 1,2 } 7 50

w3 = 10; p1 = 50 { 1,3 } 12 70
{ 2,3 } 15 80

w4 = 5; p1 = 10 { 2,4 } 10 40
{ 3,4 } 15 60
Kapasitas knapsack W = 16 { 1,2,3 } 17 Tidak layak
{ 1,2,4 } 12 60
{ 1,3,4 } 17 Tidak layak
{ 2,3,4 } 20 Tidak layak
( 1,2,3,4 } 22 Tidak layak
PSEUDOCODE ALGORITMA BRUTE FORCE
for w = 0 to W
B[0,w] = 0
for i = 1 to n
B[i,0] = 0
for w = 0 to W
if wi <= w // item i can be part of the solution
if bi + B[i-1,w-wi] > B[i-1,w]
B[i,w] = bi + B[i-1,w- wi]
else
B[i,w] = B[i-1,w]
Else
B[i,w] = B[i-1,w] // wi > w

Kompleksitas O(2n)