Menyelesaikan Knapsack Problem dengan menggunakan Algoritma Greedy
Knapsack Problem
- Knapsack dapat diartikan sebagai karung atau kantung.
- Karung digunakan untuk memuat sesuatu.
- Dan tentunya tidak semua objek dapat ditampung di dalam karung. Karung tersebut hanya dapat menyimpan beberapa objek dengan total ukurannya (weight) lebih kecil atau sama dengan ukuran kapasitas karung.
- Setiap objek itupun tidak harus kita masukkan seluruhnya. Tetapi bisa juga sebagian saja.
- knapsack 0/1, yaitu suatu objek diambil seluruh bagiannya atau tidak sama sekali.
- Setiap objek mempunyai nilai keuntungan atau yang disebut dengan
- Tujuan ingin mendapatkan profit yang Untuk mendapatkan profit maksimal Belum tentu menggunakan banyak objek yang masuk akan menguntungkan. Bisa saja hal yang sebaliknya yang terjadi.
- Cara terbaik agar menguntungkan : bukan hanya dari hasilnya optimal tetapi juga banyaknya langkah yang dibutuhkan
Knapsack 0/1
Diberikan n buah objek dan sebuah knapsack dengan kapasitas bobot W.
Setiap objek memiliki properti bobot (weigth) wi dan keuntungan(profit) pi.
persoalan adalah memilih objek-objek yang dimasukkan ke dalam knapsack sedemikian sehingga memaksimumkan keuntungan. Total bobot objek yang dimasukkan ke dalam knapsack tidak boleh melebihi kapasitas knapsack.
Solusi persoalan dinyatakan sebagai vektor n-tupel:
X = {x1, x2, … , xn}
xi = 1 jika objek ke-i dimasukkan ke dalam knapsack,
xi = 0 jika objek ke-i tidak dimasukkan.
Persoalan 0/1 Knapsack dapat kita pandang :
sebagai mencari himpunan bagian (subset) dari keseluruhan objek yang muat ke dalam knapsack dan memberikan total keuntungan terbesar.
Penyelesaian dengan Greedy:
- Greedy by Profit
Pada setiap langkah Knapsack diisi dengan obyek yang mempunyai keuntungan terbesar.
Strategi ini mencoba memaksimumkan keuntungan dengan memilih objek yang paling menguntungkan terlebih dahulu.
Pertama kali dilakukan adalah menurutkan secara menurun obyek-obyek berdasarkan profitnya . Kemudian obyek-obyek yang dapat ditampung oleh knapsack diambil satu persatu sampai knapsack penuh atau (sudah tidak ada obyek lagi yang bisa dimasukan).
Data awal :
w1 = 6; p1 = 12
w2 = 5; p2 = 15
w3 = 10; p3 = 50
w4 = 5; p4 = 10
Kapasitas knapsack W = 16
- Greedy by Weight
Pada setiap langkah, knapsack diisi dengan objek yang mempunyai berat paling ringan. Strategi ini mencoba memaksimumkan keuntungan dengan memasukan sebanyak mungkin objek kedalam knapsack.
Pertama kali yang dilakukan adalah mengurutkan secara menaik objek-objek berdasarkan weight-nya. Kemudian obyek-obyek yang dapat ditampung oleh knapsack diambil satu persatu sampai knapsack penuh atau (sudah tidak ada obyek lagi yang bisa dimasukan).
- Greedy By Density
Pada setiap langkah, knapsack diisi dengan obyek yang mempunyai densitas terbesar (perbandingan nilai dan berat terbesar).
Strategi ini mencoba memaksimumkan keuntungan dengan memilih objek yang mempunyai keuntungan per unit berat terbesar.
Pertama kali yang dilakukan adalah mencari nilai profit per unit/ density dari tiap-tiap objek. Kemudian obyek-obyek diurutkan berdasarkan densitasnya.
Kemudian obyek-obyek yang dapat ditampung oleh knapsack diambil satu persatu sampai knapsack penuh atau (sudah tidak ada obyek lagi yang bisa dimasukan).
CONTOH:
Kapasitas M=20, dengan jumlah barang =3
Berat Wi masing-masing barang (W1,W2,W3) sebesar (18,15,10)
Nilai Profit masing-masing barang (P1,P2,P3) sebesar (25,24,15)
Pilih Barang dengan nilai profit maksimal
P1=25 –> x1=1. batas atas nilai
P2=24 –> x2=2/15.
P3=15 –> x3 =0. batas bawah nilai.
Pilih barang dengan berat minimal
W1 = 18 –> x1=0. batas bawah
W2=15 –> x2 = 2/3
W3=10 –> x3=1. batas atas.
Pilih barang dengan menghitung perbandingan yang terbesar dari profit dibagi Berat (Pi/Wi) diurut secara tidak naik.
P1/w1=25/18 (1.38) –> x1=0. karena terkecil x1=0
P2/w2=24/ 15 (1.6) –> x2=1. karena terbesar x2=1
P3/w3=15/10 (1.5) –> x3=1/2 dicari dengan fungsi pembatas x3=1/2.
Tabel
Solusi | (x1,x2,x3) | Σwixi | Σpixi |
Pi max | 1,2/15,0 | 20 | 28.2 |
Wi min | 0,2/3,1 | 20 | 31.0 |
Pi/Wi max | 0,1,1/2 | 20 | 31.5 |
Nilai profit maksimal = 31.5.