Program Linear Bilangan Bulat

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 ̅ = ..