INTEGER PROGRAMING
A. Konsep Dasar
Masalah pemrograman matematika di mana variabel dibatasi untuk memiliki nilai inte-ger disebut
masalah pemrograman integer (IP). Banyak aplikasi teknik, industri, dan keuangan melibatkan
kendala bilangan bulat. Misalnya, dalam skenario pembuatan, akan sulit untuk
mengimplementasikan solusi yang menentukan produksi 10,4 mobil atau 7,2 tabel. Nilai pecahan
tidak layak. Untuk masalah pemrograman bilangan bulat, wilayah yang layak tidak kontinu atau
cembung, seperti yang diilustrasikan dalam Gambar 4.1 untuk masalah bilangan bulat dua dimensi
yang sederhana. Perhatikan bahwa titik-titik yang layak untuk masalah ini tidak terletak pada titik-
titik ekstrem di wilayah ini, atau bahkan di perbatasan; dan pada kenyataannya, teknik solusi
elegan yang telah dikembangkan untuk memecahkan masalah pemrograman linier umumnya tidak
menemukan solusi untuk masalah integer. Metode Simplex untuk pemrograman linier menyatu ke
solusi pada titik ekstrim yang biasanya merupakan titik dengan variabel fraksional.
Meskipun formulasi masalah pemrograman bilangan bulat sering terlihat sangat mirip dengan
masalah pemrograman matematika kontinu, kemiripannya dalam beberapa hal menipu. Ekspresi
aljabar fungsi objektif dan kendala dalam dua jenis model mungkin tampak memiliki bentuk yang
serupa, tetapi kendala tambahan yang mensyaratkan bahwa beberapa atau semua variabel memiliki
nilai integer umumnya membuat menyelesaikan masalah integer menjadi jauh lebih sulit. , dari
sudut pandang komputasi. Sebagian besar masalah pemrograman bilangan bulat diklasifikasikan
sebagai keras masalah optimasi, dan banyak masalah pemrograman bilangan bulat milik kelas
masalah NP-keras (dijelaskan dalam Bab 1). Jadi, sementara masalah pemrograman linier umum
dapat dipecahkan dalam waktu polinomial, menemukanoptimal integer solusiuntuk formulasi
yang sama biasanya membutuhkan jumlah waktu komputasi yang eksponensia.
Sebagian besar masalah pemrograman bilangan bulat terkenal sulit, namun beberapa masalah
bilangan bulat mudah diselesaikan. Secara khusus, banyak solusi masalah jaringan linier, seperti
penugasan dan pencocokan masalah, masalah transportasi dan transshipment, dan masalah aliran
jaringan, selalu menghasilkan hasil bilangan bulat, asalkan batas masalah adalah inte-gers. Dalam
masalah ini, semua titik ekstrim dari wilayah yang layak mewakili solusi bilangan bulat; oleh
karena itu, jika masalah ini dirumuskan dan diselesaikan sebagai masalah pemrograman linier,
kami menemukan bahwa metode Simplex menghasilkan solusi integer. Sayangnya, ini hanya
terjadi untuk masalah yang memiliki struktur jaringan, dan untuk sebagian besar masalah bilangan
bulat, formulasi pemrograman linier tidak menyarankan solusi yang mudah.
Untuk masalah pemrograman bilangan bulat dengan sasaran dan kendala linier, orang mungkin
akan menang mengapa kita tidak bisa begitu saja menyelesaikan program linear (LP) dan
kemudian membulatkan jawaban ke bilangan bulat terdekat. Pendekatan pembulatan ternyata lebih
sulit daripada yang terlihat. Sebagai contoh, jika kita memiliki kendala kesetaraan, dan kita
membulatkan beberapa variabel, kita mungkin harus mengumpulkan beberapa yang lain, dan
memilih mana yang naik dan mana yang turun itu sendiri merupakan masalah keputusan bilangan
bulat. Bahkan ketika tidak ada kendala kesetaraan, mudah untuk membangun contoh di mana
pembulatan ke atas atau ke bawah atau ke bilangan bulat terdekat tidak menghasilkan solusi yang
layak. Jadi, secara umum, pembulatan tidak menghasilkan solusi yang memuaskan.
Yang sedang berkata, ada beberapa masalah yang pembulatan bisa efektif. Sebagai contoh, dalam
memecahkan masalah untuk pembuatan ban, jika solusi LP menentukan membuat 1296,4 ban
dengan gaya tertentu, mungkin aman untuk membulatkan jawabannya menjadi 1.296 tanpa secara
drastis mempengaruhi kelayakan atau fungsi tujuan. Sebaliknya, jika produk yang diproduksi
adalah pesawat multi-juta dolar, pembulatan mungkin merupakan solusi yang buruk.
Membulatkan setengah pesawat di sini atau di sana bisa membuat perusahaan gulung tikar. Dalam
beberapa kasus, pedoman sederhana untuk memutuskan apakah pembulatan merupakan opsi yang
tepat mungkin untuk menilai kerusakan (dinyatakan sebagai persentase) terhadap fungsi objektif
yang dihasilkan dari pembulatan. Dalam contoh kami, pembulatan ke bawah 1296,4 ban hampir
pasti akan memiliki dampak yang dapat diabaikan pada total laba, sedangkan pembulatan sejumlah
kecil kemungkinan akan memiliki pengaruh yang signifikan.
Kesulitan yang bahkan lebih dramatis muncul ketika menggunakan pembulatan untuk masalah
bilangan bulat di mana variabel lebih lanjut dibatasi untuk memiliki nilai nol atau satu.
Pertimbangkan masalah perencanaan produksi untuk pabrikan mobil besar seperti General Motors,
di mana harus diputuskan di pabrik mana setiap model mobil harus dibangun. Formulasi untuk
masalah ini mungkin melibatkan variabel xij, masing-masing memiliki nilai satu atau nol,
tergantung pada apakah model i diproduksi di pabrik j, atau tidak. Misalkan ada sepuluh pabrik,
dan masing-masing model hanya dapat ditugaskan untuk satu lokasi. Solusi LP dapat dengan
mudah merekomendasikan sebagian kecil dari masing-masing model di setiap pabrik, namun
pembulatan dapat menghasilkan solusi di mana tidak ada model yang diproduksi di mana pun.
Situasi ini sering dijumpai dalam pemrograman integer; dan dalam kasus seperti itu, solusi LP
hampir tidak memberikan wawasan tentang bagaimana menyelesaikan masalah integer.
pemrograman matematika di mana semua variabel keputusan harus memiliki nilai integer positif
disebut pemrograman integer umum masalah. Jika semua variabel keputusan terbatas hanya
memiliki nilai nol atau satu, masalahnya kemudian disebut nol– satu masalah pemrograman
(atau pemrograman integer biner). Dalam hal itu, kendala pada variabel kadang-kadang disebut
biner atau Boolean kendala, dan model ini sering disebut dalam bentuk disingkat sebagai masalah
0-1. Variasi pada masalah tersebut muncul jika beberapa variabel harus bilangan bulat, yang lain
harus nol atau satu, sementara yang lain mungkin memiliki nilai nyata. Masalah apa pun yang
melibatkan kombinasi tersebut dijelaskan sebagai masalah pemrograman integer campuran
(MIP). Bagian ini menggambarkan masing-masing jenis masalah integer dengan contoh-contoh
praktis yang khas.
Variasi lebih lanjut, yang dapat dianggap sebagai versi umum lokasi gudang, disebut masalah
biaya tetap. Misalkan ada biaya tetap (dengan variabel 0-1) untuk membuka gudang. Setelah
gudang terbuka, biaya yang tersisa pada dasarnya berkelanjutan. Ada sejumlah masalah praktis
yang cocok untuk jenis formulasi ini. Misalnya, ketika sebuah perusahaan telekomunikasi
memasang kabel serat optik, ada biaya tetap untuk memasang kabel, tetapi kemudian ada biaya
nyata yang berkaitan dengan kapasitas kabel. Ini mengarah pada masalah terkait yang disebut
kapasitas perencanaan.
Minimumkan =
Kendala =
Kendala pertama mengatakan bahwa Anda harus pergi ke j kota tepat satu kali, dan kendala kedua
mengatakan bahwa Anda harus meninggalkan setiap kota saya tepat sekali. Kendala-kendala ini
memastikan bahwa ada dua sisi yang berbatasan dengan masing-masing kota, satu masuk dan
keluar, seperti yang kita harapkan. Namun, ini tidak mencegah apa yang disebut sub-tur. Sebuah
sub-tour terjadi ketika ada loop yang berisi subset dari kota. Alih-alih memiliki satu tur dari semua
kota, solusinya dapat terdiri dari dua atau lebih sub-tur. Kendala ketiga menghilangkan sub-tur;
menyatakan bahwa tidak ada himpunan bagian kota yang tepat, S, dapat memiliki total | S | ujung-
ujungnya.
TSP memiliki banyak aplikasi industri praktis. Pertimbangkan masalah penempatan komponen
pada papan sirkuit. Untuk meminimalkan waktu yang dibutuhkan untuk menghasilkan papan,
salah satu pertimbangan utama seringkali adalah jarak yang harus dilalui kepala penempatan di
antara komponen. Contoh lain terjadi pada rute truk atau kapal yang mengirimkan produk ke
pelanggan. (Ketika kami mengizinkan beberapa truk, masalah ini menjadi masalah perutean
kendaraan yang dijelaskan sebelumnya.) Aplikasi lain terjadi dalam lingkungan produksi ketika
diinginkan untuk meminimalkan waktu penyiapan yang bergantung pada urutan. Ketika beberapa
pekerjaan akan diproses pada mesin, total waktu penyiapan untuk setiap pekerjaan seringkali
tergantung pada pekerjaan mana yang mendahuluinya. Situasi ini dapat dimodelkan sebagai TSP,
di mana kami mengurutkan pekerjaan alih-alih mengurutkan urutan kota yang dikunjungi.
Kendala =
Versi 0-1 dari masalah ransel menyatakan bahwa setiap item adalah unik, dan bahwa masing-
masing item dapat dipilih atau tidak (seperti dalam masalah penganggaran modal). Sedikit
generalisasi masalah ransel menyatakan bahwa Anda dapat memilih lebih dari satu salinan setiap
item, sehingga variabel dapat mengambil nilai integer umum (mungkin dengan batas atas pada
setiap variabel), seperti halnya dengan masalah pemilihan portofolio.
Minimumkan =
Kendala =
Kemasan bin memiliki aplikasi dalam industri di mana, misalnya, ada sejumlah pekerjaan yang
dapat ditugaskan untuk setiap orang yang bekerja di stasiun pada jalur perakitan. Model ini juga
dapat diterapkan ketika memutuskan produk mana yang harus diproduksi di masing-masing dari
beberapa pabrik yang mungkin, atau pelanggan yang harus ditugaskan untuk setiap truk
pengiriman. Tentu saja, masing-masing masalah ini melibatkan kriteria dan kendala tambahan.
Minimumkan =
Kendala =
Dimanaij = 1 jika item i dimasukkan dalam subset (potensial) j. Setiap kolom dari matriks batasan
m × n mewakili kombinasi item yang layak. Misalnya, setiap kolom mungkin merepresentasikan
barang-barang yang layak dimuat ke dalam truk untuk dikirim ke pelanggan; atau barang-
barangnya bisa berupa ruas jalan yang membutuhkan pengumpulan sampah, dan sebuah kolom
akan mewakili rute yang memungkinkan bagi truk untuk mengambil sampah. Biaya cj mewakili
biaya pengiriman (atau perjalanan, atau produksi) yang merupakan bagian dari barang. Variabel
xj = 1 jika kita memutuskan untuk memasukkan subset tertentu dalam solusi kami.
Dalam masalah pengaturan partisi, semua item harus dimasukkan tepat satu kali. Dalam perutean
kendaraan, misalnya, kami biasanya mengharuskan satu truk untuk melakukan perjalanan ke
masing-masing pelanggan. Dalam masalah yang sedikit berbeda, set meliputi masalah, kami
mengharuskan setiap item dipilih setidaknya satu kali. Misalnya, dalam masalah pengumpulan
sampah, dan dalam masalah penjadwalan kru, setiap jalan (setiap kaki penerbangan) harus dicakup
setidaknya satu kali; tetapi juga layak untuk menutupi jalan yang sama (kaki terbang) dua kali, jika
ini ternyata menjadi solusi yang paling efisien. (Truk kedua tidak akan mengambil sampah, dan
awak penerbangan kedua akan naik sebagai penumpang.) Setel penutup berbeda dari partisi yang
ditetapkan karena kendala adalah “≥” ketidaksetaraan alih-alih persamaan.
Masalah pengemasan set menggambarkan situasi serupa lainnya. Dalam beberapa masalah
penjadwalan produksi, kami diberikan daftar pesanan, dan kami memiliki kemungkinan subset
pesanan yang dapat digabungkan pada mesin yang berbeda. Dalam beberapa kasus, mungkin tidak
ada sumber daya yang cukup untuk memenuhi semua permintaan. Masalahnya adalah untuk
memilih subset optimal pesanan untuk memaksimalkan beberapa fungsi keuntungan, p j.Masalah
ini dapat dirumuskan sebagai :
Maksimumkan =
Kendala =
Kita memilih item sebanyak mungkin, tetapi kami tidak diperbolehkan untuk memproses item
lebih dari sekali. Kami akan meninjau kembali masalah jenis ini secara lebih rinci di Bagian 4.8,
di mana kami membahas pembuatan kolom.
Minimumkan =
Kendala =
Representasi klasik ini dapat diilustrasikan oleh seperangkat pekerjaan yang harus dialokasikan
untuk sekelompok pekerja. Istilah c ij merupakan biaya untuk menugaskan pekerjaan i kepada
karyawan j. Kendala pertama mengharuskan setiap pekerjaan ditugaskan kepada satu karyawan;
dan kendala kedua menyatakan bahwa setiap karyawan harus melakukan persis satu pekerjaan.
Masalah penugasan umum adalah perpanjangan sederhana di mana setiap pekerjaan harus
ditetapkan untuk satu karyawan, tetapi setiap karyawan memiliki kapasitas untuk melakukan lebih
dari satu pekerjaan. Secara khusus, misalkan setiap karyawan, j, memiliki waktu terbatas, bj) (jam
tersedia, dan pekerjaan yang saya akan mengambil total karyawan ja dariij. jam Kemudian,
masalah tugas umum dapat dirumuskan sebagai:
Minimumkan =
Kendala =
Seperti dibahas sebelumnya, masalah penugasan umum memiliki aplikasi dalam masalah perutean
kendaraan, di mana setiap pesanan pelanggan harus ditetapkan ke satu truk, tetapi satu truk dapat
menampung lebih dari satu pesanan pelanggan , tergantung pada batasan kapasitas.