Implementasi Algoritma Branch & Bound Pada Masalah Knapsack
asalah Knapsack.
Metode Branch and Bound
Metode Branch and Bound adalah sebuah teknik
algoritma yang secara khusus mempelajari bagaimana caranya memperkecil Search
Tree menjadi sekecil mungkin.
Sesuai dengan namanya, metode ini terdiri dari 2 langkah yaitu :
- Branch yang artinya membangun
semua cabang tree yang mungkin menuju solusi.
- Bound yang artinya menghitung
node mana yang merupakan active node (E-node) dan node mana yang merupakan
dead node (D-node) dengan menggunakan syarat batas constraint (kendala).
Teknik Branch and Bound
Ada beberapa teknik dalam Branch and Bound yaitu:
- FIFO Branch and Bound
Adalah teknik Branch and Bound yang menggunakan bantuan queue untuk perhitungan Branch and Bound secara First In First Out. - LIFO Branch and Bound
Adalah teknik Branch and Bound yang menggunakan bantuan stack untuk perhitungan Branch and Bound secara Last In First Out. - Least Cost Branch and Bound
Teknik ini akan menghitung cost setiap node. Node yang memiliki cost paling kecil dikatakan memiliki kemungkinan paling besar menuju solusi.
Masalah yang dapat
dipecahkan with Branch and Bound
Branch and Bound dapat digunakan untuk memecahkan berbagai
masalah yang menggunakan Search Tree :
–Traveling Salesman Problem
–N-Queen Problem
–15 Puzzle Problem
–0/1 Knapsack Problem
–Shortest Path
Knapsack Problem
Knapsack problem adalah suatu masalah bagaimana cara
menentukan pemilihan barang dari sekumpulan barang dimana setiap barang
tersebut mempunyai berat dan profit masing masing, sehingga dari pemilihan
barang tersebut didapatkan profit yang maksimum. Penyelesaian masalah dengan
menggunakan algoritma exhaustive search adalah mengenumerasikan semua
kemungkinan barang-barang yang layak atau memenuhi syarat yaitu tidak melebihi
batas daya angkut gerobak untuk dijual setiap harinya , kemudian menghitung
tiap-tiap keuntungan yang diperoleh dan memilih solusi yang menghasilkan
keuntungan terbesar.
Berbeda dengan algoritma exhaustive search yang cukup memakan
waktu dan dapat menghasilkan solusi yang optimum, penyelesaian masalah dengan
menggunakan algoritma greedy dilakukan dengan memasukan objek satu persatu
kedalam gerobak dan tiap kali objek tersebut telah dimasukan kedalam gerobak
maka objek tersebut tidak dapat lagi dikeluarkan dari gerobak. Pencarian solusi
akan dilakukan dengan memilih salah satu jenis greedy (greedy by weight, greedy
by profiit or greedy by density) yang diperkirakan dapat menghasilkan solusi
yang optimum. Algoritma Branch and Bound juga merupakan salah satu strategi
yang dapat digunakan dalam pencarian solusi optimum dari permasalahan knapsack
ini.
Algoritma Branch and
Bound
Sebagaimana pada algortima runut-balik, algoritma Branch
& Bound juga merupakan metode pencarian di dalam ruang solusi secara
sistematis. Ruang Solusi diorganisasikan ke dalam pohon ruang status.
Pembentukan pohon ruang status. Pembentukan pohon ruang status pada algoritma
B&B berbeda dengan pembentukan pohon pada algoritma runutbalik. Bila pada
algoritma runut-balik ruang solusi dibangun secara Depth-First Search(DFS),
maka pada algoritma B&B ruang solusi dibangun dengan skema Breadth-First
Search (BFS).
Pada algoritma B&B, pencarian ke simpul solusi dapat dipercepat
dengan memilih simpul hidup berdasarkan nilai ongkos (cost). Setiap simpul
hidup diasosiasikan dengan sebuah ongkos yang menyatakan nilai batas (bound).
Pada prakteknya, nilai batas untuk setiap simpul umumnya berupa taksiran atau
perkiraan. Fungsi heuristik untuk menghitung taksiran nilai tersebut dinyatakan
secara umum sebagai :
(i) = (i) + (i)
yang dalam hal ini,
(i) = ongkos untuk simpul i
(i) = ongkos mencapai simpul i dari akar
(i) = ongkos mencapai simpul tujuan dari simpul akar i (perkiraan)
Nilai digunakan untuk mengurutkan
pencarian. Simpul berikutnya yang dipilih untuk diekspansi adalah simpul yang
memiliki minimum (Simpul-E). Strategi memilih simpul-E seperti ini
dinamakan strategi pencarian berdasarkan biaya terkecil (least cost search).
Prinsip dari algoritma branch and bound ini adalah :
1. Masukkan simpul akar ke dalam
antrian Q. Jika simpul akar adalah simpul solusi (goal node),
maka solusi telah ditemukan. Stop.
2. Jika Q kosong,
tidak ada solusi . Stop.
3.
Jika Q tidak kosong, pilih dari antrian Q simpul i yang mempunyai (i) paling kecil. Jika terdapatbeberapa simpul i yang memenuhi, pilih satusecara sembarang.
4. Jika simpul i adalah
simpul solusi, berarti solusi sudah ditemukan, stop. Jika simpul i bukan
simpul solusi, maka bangkitkan semua anak-anaknya. Jika i tidak
mempunyai anak, kembali ke langkah 2.
5. Untuk setiap anak j dari
simpul i, hitung (j), dan masukkan semua anak-anak
tersebut ke dalam antrian Q.
6. Kembali ke langkah 2.
Knapsack
Problem Solve
Untuk lebih memahami tahap-tahap
penyelesaian permasalahan knapsack ini, kita ambil contoh persoalan seperti
yang dituliskan pada bagian Abstrak yaitu dimana seorang pedagang keperluan
rumah tangga keliling harus memilih barang-barang yang akan dijual setiap
harinya dengan batas daya angkut gerobak yang dimilikinya. Untuk mempermudah,
kita misalkan pedagang keliling tersebut hanya memiliki 4 jenis barang untuk
dijual dengan berat dan keuntungan penjualan yang berbeda-beda untuk tiap
jenisnya.
Gerobak yang akan dipakai untuk
mengangkut barang-barang tersebut hanya mampu menampuk beban seberat 16 kg.
Berikut merupakan tebel penggambaran beratdan keeuntungan yang akan diperoleh
untuk tiap penjualan barang tersebut.
dari tiap tiap simpul anak untuk
dapat menentukan simpul mana yang kelak akan dibangkitkan yaitu simpul dengan
cost tertinggi dalam penelusuran pohon unutk mencapai solusi dari permasalahan
ini. Dalam permasalahan ini, kita akan mencari simpul-simpul yang akan membawa
kita pada keuntungan terbesar oleh karena itu urutan pembangkitan simpul akan
ditentukan oleh simpul mana yang memiliki cost tertinggi. Cost dari tiap simpul
akan ditentukan dengan:
(i) = (i) + (i)
yang dalam hal ini,
(i) = cost untuk simpul i
(i) = cost untuk sampai ke simpul I, dalam hal ini merupakan
keuntungan dari simpul akar ke simpul i
(i) = cost dari simpul i untuk sampai ke simpul tujuan, dalam hal ini
dapat diperoleh dengan menggunakan
BACA JUGA
·
Makalah Sistem Operasi - Application Management
·
Makalah Sistem Operasi - User Management dan Group
·
Makalah Sistem Operasi - Linux Booting
rumus : (P/W)max * daya
angkut yang tersisa
pada tahap awal kita akan melakukan
perhitungan dengan menggunakan rumus diatas untuk memperoleh batas awal atau
akar dari pohon yang juga merupakan simpul pertama. Pada keadaan ini, batas
dihitung dengan pemikiran bahwa belum ada satupun barang yang dimasukan kedalam
alat pengangkut maka kita dapat memilih 6 sebagai (P/W) terbesar karena belum
ada satu barangpun yang dimasukan kedalam alat pengangkut dan kapasitas daya
angkutpun masih utuh yaitu seberat 16 kg.
(i) = (i) + (i)
(1) = keuntungan yang
diperoleh sampai disimpul
awal + (P/W)max * daya angkut yang
tersisa
= 0 + 6 *
= 96
Maka kita memperoleh 96 batas awal
atau cost dari simpul awal.
Bangkitkan simpul-simpul anak dari
akar pohon yaitu dengan membangkitkan simpul 1, simpul 2, simpul 3 dan simpul 4
sebagai gambaran dari 4 pilihan barang yang akan dimasukan pertama kali pada
alat pengangkut dengan x1 merupakan keuntungan yang akan diperoleh pada
penjualan tiap barang tersebut. Kemudian kita akan menghitung cost dari tiap
simpul anak yang hidup dan juga kelayakannya untuk tetap hidup atau harus
dibunuh. Dalam hal ini, simpul yang jumlah dari lintasannya tidak bisa lagi
dibangkitkan (jika ditambah barang lagi kedalam alat pengangkut maka beratnya
akan melebihi daya angkut) akan dibunuh.
(2) = 12 + 5*(16-2) = 82
(3) = 15 + 6*(16-5) = 81
(3) = 50 + 6*(16-10)=86
(4) = 10 + 6*(16-5)=76
Dari simpul-simpul yang telah
dibangkitkan dan dihitung cost nya, maka diperoleh bahwa simpul 4 lah
yang memiliki cost tertinggi oleh karena itu maka simpul 4 akan di perluas
lagi. Simpul 6 ,7,8 akan dibangkitkan sebagai perluasan dari simpul 4 dengan
barang yang mungkin dimasukan kedalam alat pengangkut adalah barang ke 1,2 dan
4. kemudian kita akan mengkitung cost dari simpul 6,7dan 8.
(6) = (50+12) + 3*(16-10-2)
= 74
(7) = (50+15) + 6*(16-10-5)
= 71
(8) = (50+10) + 6*(16-10-5)
= 66