Program Linear Bilangan Bulat

Contoh 2.3 Misalkan diberikan masalah program linear awal � sebagai berikut. Minimumkan = + Dengan kendala { + + , dan bilan�an bulat Jawab: 1. Menyelesaikan masalah program linear tersebut sehingga mendapatkan solusi optimal = , , = , dan = , . Solusi yang diperoleh tidak berbentuk bilangan bulat maka lanjut ke langkah 2. 2. Selanjutnya, masalah program linear bulat di atas dicabangkan menjadi dua masalah program linear bulat baru dengan menambahkan kendala  dan  . 3. Sehingga didapatkan dua sub-masalah baru yang harus diselesaikan sebagai berikut. Sub-masalah 1: � = � + , , Minimumkan = + Dengan kendala { + +  , dan Sub-masalah 2: � = � + , , Minimumkan = + Dengan kendala { + +  , 4. Batas untuk nilai tujuan belum dapat ditentukan karena belum mendapatkan solusi bilangan bulat. 5. Dari sub-masalah 1 diperoleh = , = , , dan = , . Solusi yang diperoleh tidak berbentuk bilangan bulat maka kembali ke langkah 2. Langkah 2: Sub-masalah program linear dicabangkan menjadi dua masalah program linear bulat baru dengan menambahkan kendala  dan  . Langkah 3: Sehingga didapatkan dua sub-masalah baru yang harus diselesaikan sebagai berikut. Sub-masalah 3: � = � + , , Minimumkan = + Dengan kendala { + +   , dan Sub-masalah 4: � = � + , , Minimumkan = + Dengan kendala { + +   , Langkah 4: Batas untuk nilai tujuan belum dapat ditentukan karena belum mendapatkan solusi bilangan bulat. Langkah 5: Dari sub-masalah 3 cabang dihentikan karena sub-masalah tidak memiliki daerah layak. Dari sub-masalah 4 diperoleh = , , = , dan = , . Solusi tidak berbentuk bilangan bulat maka kembali ke langkah 2. Langkah 2: Sub-masalah program linear dicabangkan menjadi dua masalah program linear bulat baru dengan menambahkan kendala  dan  . Langkah 3: Sehingga didapatkan dua sub-masalah baru yang harus diselesaikan sebagai berikut. Sub-masalah 5: � = � + , , Minimumkan = + Dengan kendala { + +    , dan Sub-masalah 6: � = � + , , PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Minimumkan = + Dengan kendala { + +    , Langkah 4: Batas untuk nilai tujuan belum dapat ditentukan karena belum mendapatkan solusi bilangan bulat. Langkah 5: Dari sub-masalah 5 diperoleh = , = , , dan = , . Solusi yang diperoleh tidak berbentuk bilangan bulat maka kembali ke langkah 2. Langkah 2: Sub-masalah program linear dicabangkan menjadi dua masalah program linear bulat baru dengan menambahkan kendala  dan  . Langkah 3: Sehingga didapatkan dua sub-masalah baru yang harus diselesaikan sebagai berikut. Sub-masalah 7: � = � + , , Minimumkan = + Dengan kendala { + +     , PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI dan Sub-masalah 8: � = � + , , Minimumkan = + Dengan kendala { + +     , Langkah 4: Batas untuk nilai tujuan belum dapat ditentukan karena belum mendapatkan solusi bilangan bulat. Langkah 5: Dari sub-masalah 7 cabang dihentikan karena sub-masalah tidak memiliki daerah layak. Dari sub-masalah 8 diperoleh = , = , dan = . Solusi berbentuk bilangan bulat maka = dijadikan sebagai batas atas. Dari sub-masalah 6 diperoleh = , = , dan = . Solusi berbentuk bilangan bulat dan = lebih kecil dari batas atas sebelumnya maka = dijadikan sebagai batas atas yang baru. Dari sub-masalah 2 diperoleh = , = , dan = . Solusi berbentuk bilangan bulat dan = lebih kecil dari batas atas sebelumnya maka = dijadikan sebagai batas atas yang baru. Jadi, diperoleh solusi optimal yaitu = , = , dan = . Berikut gambar pohon pecabangan dari contoh 2.3. � 1 = 2,5 2 = 0 = 2,5 � 1 1 = 2 2 = 1,2 = 3,2 � 2 1 = 3 2 = 0 = 3 � 3 Tidak memiliki daerak layak � 4 1 = 1,67 2 = 2 = 3,67 � 5 1 = 1 2 = 3,6 = 4,6 � 6 1 = 2 2 = 2 = 4 � 8 1 = 2 2 = 4 = 6 � 7 Tidak memiliki daerah layak 1 2 2 1 1 1 2 3 1 3 2 2 1 2 2 4 Gambar 2.2: Pohon pencabangan contoh 2.3 Seperti yang sudah diketahui sebelumnya bahwa program linear bilangan bulat digunakan untuk kasus-kasus tertentu yang mengharuskan solusi berupa bilangan bulat. Salah satu contohnya adalah masalah Knapsack. Pada bagian ini akan dibahas mengenai masalah Knapsack dan penyelesaiannya dengan metode cabang dan batas.

D. Masalah Knapsack

Masalah Knapsack adalah masalah program linear bilangan bulat dengan hanya memiliki satu kendala dan solusi berupa bilangan bulat. Masalah Knapsack biasanya digunakan untuk menyusun barang ke dalam karung 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.18 Dimana adalah bilangan bulat tak negatif = , , . . . , dan merupakan banyaknya barang ke- yang dimasukan ke dalam karung, adalah ukuran barang ke-i yang bernilai positif dan � adalah ukuran karung yang bernilai positif. Kita asumsikan adalah nilai barang ke-i yang bernilai positif variabel dengan dapat segera dihapus. Perbandingan ⁄ merupakan nilai per satuan ukuran dari barang ke- atau sebagai efisiensi variabel . Kita asumsikan lagi efisiensi variabel diurutkan secara menurun: ⁄ ⁄ ⁄ 2.19 Untuk setiap solusi optimal dari masalah Knapsack memenuhi: � − ∑ = 2.20 Pertidaksamaan 2.20 artinya sisa ukuran dari karung haruslah kurang dari ukuran barang ke- sehingga tidak dapat ditingkatkan 1 unit. Solusi-solusi layak dari PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI masalah Knapsack dapat dibuat menjadi pohon enumerasi yang memuat cabang- cabang yang merupakan solusi-solusi layak itu sendiri. Untuk membuat suatu cabang, pada setiap cabang dibuat nilai sebesar mungkin lalu dilanjutkan pada cabang berikutnya dengan nilai + sebesar mungkin begitu seterusnya. Secara resmi, adalah bilangan bulat yang diperoleh dengan membulatkan nilai ke bawah, solusi ini didefinisikan dengan rekursi perulangan = � − ∑ − = ⁄ 2.21 Dengan = , , . . . , dan biasanya, = �⁄ . Sekarang mencari solusi terbaik dan mengganti solusi lain dengan yang lebih baik. Karena sudah didapatkan solusi layak , , … , , maka solusi layak diperbaharui dengan solusi layak yang lebih baik. Misalkan solusi terbaik yang didapatkan ∗ , ∗ , … , ∗ menghasilkan ∑ ∗ = = Jika ∑ = , maka mengganti dengan ∑ = dan mengganti ∗ , ∗ , … , ∗ dengan , , … , . Selanjutnya menemukan cabang yang baru dari solusi layak , , … , dengan = − dan tetap mereduksi sampai ditemukan. Jika didapatkan terbesar sedemikian hingga − dan maka dapat ditunjukkan bahwa ̅ = untuk = , , . . . , − dan ̅ = − . PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Berdasarkan 2.19, setiap variabel + , + , … , + memiliki efisiensi paling besar + + ⁄ maka ∑ ̅ = + + + ∑ ̅ = + Oleh karena itu asumsi ∑ = � mengimplikasikan ∑ ̅ = ∑ ̅ = + + + � − ∑ ̅ = Kecuali kalau sisi kanan dari persamaan di atas melebihi , maka tidak ada solusi ̅ , ̅ , … , ̅ yang memiliki kesempatan untuk meningkatkan nilai ∗ , ∗ , … , ∗ . ∑ ̅ = + + + � − ∑ ̅ = 2.22 Jika pertidaksamaan di atas terpenuhi maka ̅ , ̅ , … , ̅ tidak layak untuk dibuatkan cabang lagi atau cabang dipotong dimana koefisien adalah bilangan bulat positif. Sehingga harus dibuatkan cabang lagi yaitu dengan menemukan terbesar sedemikian hingga − dan dan ditunjukkan bahwa ̅ = untuk = , , . . . , − dan ̅ = − . Jika pertidaksamaan tersebut terpenuhi, maka cabang dapat diperpanjang dan mulai memeriksa ̅ + , ̅ + , … , ̅ secara rekursif seperti 2.21 yang mengarah ke solusi layak ̅ , ̅ , … , ̅ . Iterasi berhenti jika sudah tidak ada cabang lagi yang PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI dapat dibuat yaitu ketika = dan = . Pertidaksamaan 2.22 dapat diganti ketika koefisien bukan bilangan bulat positif menjadi ∑ ̅ = + + + � − ∑ ̅ = + Metode ini disebut dengan metode cabang dan batas yang akan ditunjukkan dengan ringkas pada langkah-langkah di bawah. 1. Menentukan nilai awal yaitu = dan = . 2. Menemukan perpanjangan cabang. Untuk = + , + , . . . , maka = ⌊� − ∑ − = ⁄ ⌋. Biasanya untuk = �⁄ . Maka didapat solusi terbaik ∗ , ∗ , … , ∗ . 3. Memperbaiki solusi. Jika ∑ = , maka mengganti dengan ∑ = dan mengganti ∗ , ∗ , … , ∗ dengan , , … , . 4. Menemukan cabang selanjutnya. Menemukan terbesar sedemikian hingga − dimana . Kita dapat tuliskan ̅ = untuk = , , . . . , − . a. Jika = maka berhenti; selain itu ganti dengan − . b. Jika = , maka kembali ke 4a, selain itu ganti dengan = − . 5. Pencarian cabang yang lebih baik. Jika ∑ ̅ = + � �+1 � �+1 � − ∑ ̅ = untuk koefisien bukan bilangan bulat positif atau ∑ ̅ = + � �+1 � �+1 � − ∑ ̅ = + untuk koefisien bilangan bulat positif maka ̅ , ̅ , … , ̅ tidak layak diperiksa. Oleh karena itu, harus kembali ke langkah 4. Selain itu, kembali ke langkah 2. PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI