Dari sub-masalah 2 diperoleh penyelesaian = ,
= − , , dan = , . Penyelesaian tidak berbentuk bilangan bulat maka lanjut ke langkah 2.
Langkah 2: Sub-masalah program linear dicabangkan menjadi dua masalah program linear bulat baru dengan menambahkan kendala
dan
. Karena
tidak berada dalam daerah layak maka kita memilih
sehingga = . Jadi, diperoleh solusi optimal yaitu = , = , dan = .
C. Masalah Knapsack
Masalah Knapsack adalah masalah program linear bilangan bulat yang hanya memiliki satu kendala dan penyelesaian berupa bilangan bulat. Masalah Knapsack
biasanya digunakan untuk menyusun barang ke dalam karung yang besar yang tidak dapat memuat semua barang. Permasalahan Knapsack ini mencari solusi terbaik
dari semua kemungkinan susunan barang yang akan dimasukkan ke dalam karung. Masalah Knapsack dapat dituliskan sebagai berikut.
Maksimumkan = ∑
=
dengan kendala
∑
=
2.3
dengan adalah bilangan bulat tak negatif
= , , . . . , dan merupakan
banyaknya barang ke-i yang dimasukan ke dalam karung, adalah ukuran barang
ke-i yang bernilai positif dan adalah ukuran atau karung yang juga bernilai positif. Diasumsikan
adalah nilai barang ke-i yang bernilai positif variabel dengan
dapat segera dihapus. Perbandingan ⁄ merupakan nilai per satuan
ukuran dari barang ke-i atau sebagai efisiensi variabel . Kita asumsikan lagi
efisiensi variabel diurutkan secara menurun menurut nilai yang dikandungnya: ⁄
⁄ ⁄
2.4 Untuk setiap solusi optimal dari masalah Knapsack memenuhi:
− ∑
=
2.5
Pertidaksamaan 2.5 artinya sisa ukuran dari karung haruslah kurang dari barang ke-m.
Masalah Knapsack memiliki dua jenis berdasarkan penyelesaiannya yaitu Knapsack 0-1 dan Knapsack bilangan bulat. Pada makalah ini akan menggunakan
Knapsack bilangan bulat yang akan diselesaikan menggunakan metode cabang dan batas.
Berikut adalah tahapan untuk menyelesaikan masalah Knapsack dengan metode cabang dan batas.
1. Menentukan nilai awal yaitu = dan = .
2. Menemukan perpanjangan cabang. Untuk = + , + , . . . , maka =
⌊ − ∑
− =
⁄ ⌋. Biasanya untuk = ⁄
. Maka didapat solusi terbaik
∗
,
∗
, … ,
∗
. 3. Memperbaiki solusi. Jika
∑
=
, maka mengganti M dengan ∑
=
dan mengganti
∗
,
∗
, … ,
∗
dengan , , … ,
.
4. Menemukan cabang selanjutnya. Menemukan k terbesar sedemikian hingga
− dimana . Kita
dapat tuliskan ̅ = untuk = , , . . . , − .
a. Jika k=1 maka berhenti; selain itu ganti k dengan k-1. b. Jika
= , maka kembali ke 4a, selain itu ganti dengan = − .
c. Pencarian cabang yang lebih baik. Jika
∑ ̅
=
+
�+1 �+1
− ∑ ̅
=
untuk koefisien bukan bilang- an bulat positif atau
∑ ̅
=
+
�+1 �+1
− ∑ ̅
=
+ untuk koe- fisien bilangan bulat positif maka
̅ , ̅ , … , ̅ tidak layak diperiksa. Oleh karena itu, harus kembali ke langkah 4. Selain itu, kembali ke langkah 2.
Start
END
Apakah ∑
∗ =1
Ya
Mengganti solusi sebelumnya
1 ∗
,
2 ∗
, …,
∗
dengan
1
,
2
, …, .
Tidak
M Tidak berubah
Apakah terdapat = 0 dan = 1?
Mereduksi k sampai diperoleh 0 lalu mengganti
dengan ̅ = − 1, dimana
̅ = untuk = 1, 2, . . . ,
− 1.
Tidak
Apakah koefisien bilangan bulat
positif? Menentukan perpanjangan cabang.
Untuk = + 1, + 2, . . . , maka
= ⌊ − ∑
−1 =1
⁄ ⌋ dan
didapat solusi terbaik
1 ∗
,
2 ∗
, …,
∗
.
Apakah ∑
̅
=1
+
+1 +1
− ∑ ̅
=1
?
Apakah ∑
̅
=1
+
+1 +1
− ∑ ̅
=1
+ 1 ?
Ya
Menentukan nilai awal yaitu
= 0 dan
= 0.
Vektor a
Tidak Tidak
Mengganti M dengan
∑
∗ =1
Ya Ya
Tidak
Gambar 2.1 : Diagram alir masalah Knapsack
Contoh 2.2
Maksimumkan +
+ +
dengan kendala ,
+ , +
+ Jawab:
1. Menentukan nilai awal yaitu = dan = .
2. Menemukan cabang. Untuk = + , + , . . . , maka
= ,
⁄ =
= ⌊ − ∑
− =
⁄ ⌋ = −
, . ,
⁄ =
= ⌊ − ∑
− =
⁄ ⌋ = −
, . + , . ⁄
=
= ⌊ − ∑
− =
⁄ ⌋ = −
, . + , . + . ⁄
=
Maka didapat solusi terbaik
∗
= ,
∗
=
∗
=
∗
= . 3. Menentukan apakah solusi yang diperoleh meningkat?
Karena ∑
=
= , = , maka
= , dan
∗
= ,
∗
=
∗
=
∗
= diganti menjadi = , =
= = .
4. Didapatkan k=3 = lalu dikurangkan sampai diperoleh k=1 dimana
. Maka kita ganti = menjadi ̅ = .
5. Apakah cabang layak untuk dieksplor?
Karena koefisien bukan bilangan bulat positif, maka kita uji pertidaksamaan berikut dengan k=1 dan
̅ = .
∑ ̅
=
+
+ +
− ∑ ̅
=
∑ ̅
=
+
+ +
− ∑ ̅
=
,
. + ,
− , . ,
+ = ,
, Karena pertidaksamaan tersebut tidak terpenuhi maka cabang layak untuk
dieksplor. Kembali ke langkah 2. 2. Diketahui k=1 dan
= ̅ = , maka diperoleh
= ⌊ − ∑ ̅
− =
⁄ ⌋ = −
, . ,
⁄ =
= ⌊ − ∑ ̅
− =
⁄ ⌋ = −
, . + , . ⁄
=
= ⌊ − ∑ ̅
− =
⁄ ⌋ = ⌊ − , . + , . + . ⁄ ⌋
= 3. Karena
∑
=
= = ,
, maka = dan
∗
= ,
∗
=
∗
=
∗
= diganti menjadi = , = ,
= , = .
4. Didapatkan k=3 = lalu dikurangkan sampai diperoleh k=2 dimana
. Maka kita ganti = dengan ̅ = ..