Makalah 1983 yang terkenal oleh H. Lenstra Programmer Integer Dengan Jumlah Variabel Tetap menyatakan bahwa program integer dengan jumlah variabel tetap dapat dipecahkan dalam polinomial waktu dalam panjang data.
Saya menafsirkannya sebagai berikut.
- Pemrograman integer secara umum masih NP-lengkap tetapi jika ukuran masalah khas saya di tangan (katakanlah sekitar 10.000 variabel, sejumlah kendala sewenang-wenang) layak dalam prakteknya maka saya bisa membangun algoritma yang secara polinomial dalam jumlah kendala tetapi tidak dalam jumlah variabel dan batasan.
- Hasilnya juga berlaku untuk pemrograman biner karena saya dapat memaksa integer apa pun ke 0-1 dengan menambahkan batasan yang sesuai.
Apakah interpretasi saya benar?
Apakah hasil ini memiliki implikasi praktis? Yaitu, apakah ada implementasi yang tersedia atau digunakan dalam solver populer seperti CPLEX, Gurobi, atau Mosek?
Beberapa kutipan dari koran:
Panjang ini dapat, untuk tujuan kami, didefinisikan sebagai n · m · log (a + 2), di mana a menunjukkan maksimum dari nilai absolut dari koefisien A dan b. Memang, tidak ada algoritma polinomial seperti itu yang mungkin ada, karena masalah yang dimaksud adalah NP-complete
[...]
Dugaan [5], [10] bahwa untuk setiap nilai tetap dari n terdapat algoritma polinomial untuk solusi dari masalah pemrograman linear integer. Dalam makalah ini kami membuktikan dugaan ini dengan menunjukkan algoritma seperti itu. Tingkat polinomial di mana waktu berjalan dari algoritma kami dapat dibatasi adalah fungsi eksponensial dari n.
sumber
Jawaban:
Algoritma tercepat saat ini sebenarnya linear dalam panjang program linear integer untuk setiap nilai tetap . Dalam tesis PhD-nya, Lokshtanov (2009) dengan baik merangkum hasil oleh Lenstra (1983), Kannan (1987), dan Frank & Tardos (1987) oleh teorema berikut.n
Dengan demikian, masalahnya adalah parameter-linear tetap parameter dengan jumlah variabel.
1) Ya, Integer Linear Programming "masih" NP-complete. Waktu berjalan dari hasil teoretis di atas hanya tergantung secara linier pada jumlah kendala, sehingga dapat diukur dengan baik dalam jumlah kendala. Namun saya tahu tidak ada implementasi aktual dari algoritma ini.
2) Ya, membuat variabel mengambil nilai biner langsung seperti yang Anda amati.
Memperbarui. Ketergantungan pada sebenarnya dapat ditingkatkan dalam waktu berjalan untuk Integer Linear Programming. Berdasarkan Clarkson (1995) dan Eisenbrand (2003) (lihat komentar di bawah) orang dapat memperoleh algoritma dengan waktu berjalan mana adalah jumlah kendala dan adalah jumlah bit maksimum yang diperlukan untuk menyandikan kendala atau fungsi tujuan.L
sumber
Berikut adalah beberapa poin mengenai implikasi praktis hasil tipe Lenstra, dan kemungkinan implementasi di CPLEX, Gurobi, dll. Salah satu langkah kunci dalam sebagian besar algos tersebut untuk IP adalah bercabang pada arah "baik" atau "tipis", yaitu, pesawat terbang di mana lebar polytope tidak terlalu besar (polinomial dalam variabel dan ukuran data). Tetapi Mahajan dan Ralphs (preprint here ) menunjukkan bahwa masalah memilih disjungsi optimal adalah NP-lengkap. Jadi, akan tampak sulit untuk membuat implementasi yang praktis dari kelas algos ini.
Sebagian besar algo yang diimplementasikan dalam paket seperti CPLEX dapat diklasifikasikan sebagai metode cabang-dan-potong. Rangkaian teknik ini biasanya bekerja dengan baik pada instance IP yang layak, dan seringkali dapat menemukan solusi yang hampir optimal. Tetapi fokus dari algos tipe Lenstra adalah pada kasus IP kasus terburuk yang tidak layak untuk memulai, dan tujuannya adalah untuk membuktikan ketidaklayakan bilangan bulat mereka (dan mereka mempelajari kompleksitas tugas ini). AFAIK, tidak ada kelas masalah dengan relevansi praktis yang sesuai dengan deskripsi ini. Jadi, orang CPLEX / Gurobi mungkin tidak akan mengimplementasikan algos jenis Lenstra dalam waktu dekat.
sumber