Apakah masalah optimasi kombinatorial ini mirip dengan masalah yang diketahui?

10

Masalahnya adalah sebagai berikut:

Kami memiliki array dua dimensi / kisi angka, masing-masing mewakili beberapa "manfaat" atau "keuntungan." Kami juga memiliki dua bilangan bulat tetap dan (untuk "lebar" dan "tinggi".) Dan bilangan bulat tetap .h nwhn

Kami sekarang ingin melampui segi empat dimensi pada kisi sedemikian sehingga jumlah total nilai sel dalam segi empat ini dimaksimalkan.w × hnw×h

Gambar berikut adalah contoh dari grid dua dimensi dengan dua persegi panjang seperti itu overlay di atasnya (gambar tidak menunjukkan solusi optimal, hanya satu kemungkinan overlay di mana dan )n = 2w=h=2n=2

Contoh kisi

Persegi panjang tidak dapat berpotongan (jika tidak kita hanya perlu menemukan posisi optimal untuk satu persegi panjang dan kemudian meletakkan semua persegi panjang di posisi itu.)

Dalam contoh di atas, jumlah total nilai dalam sel adalah2+4.2+2.4+3.14+2.31.4+13.1

Apakah ini mirip dengan masalah yang diketahui dalam optimasi kombinatorial? sehingga saya dapat mulai membaca dan mencoba menemukan cara untuk menyelesaikannya.

Beberapa latar belakang untuk mereka yang tertarik:

Sejauh ini satu-satunya ide yang saya miliki adalah algoritma serakah (yang akan menemukan lokasi terbaik untuk persegi panjang pertama, kemudian menemukan lokasi non-tumpang tindih untuk persegi panjang kedua dll) atau beberapa metaheuristik seperti algoritma genetika.

Pada kenyataannya saya ingin menyelesaikan masalah ini dengan grid yang memiliki sekitar satu juta sel dan puluhan ribu (atau bahkan ratusan ribu) persegi panjang, meskipun tidak perlu untuk menyelesaikannya dalam waktu singkat (yaitu akan diterima untuk algoritma untuk mengambil jam atau bahkan berhari-hari.) Saya tidak mengharapkan solusi yang tepat tetapi saya ingin mendapatkan yang sebaik mungkin mengingat kendala-kendala ini.

Bersulang!

58
sumber
(pada ponsel) ini sepertinya bisa diselesaikan dengan pencocokan maksimum di bawah transformasi dan beberapa kendala tambahan. Saya akan mencoba menulis nanti.
Nicholas Mancuso
Saya bisa membayangkan membutuhkan tepat untuk digunakan berarti kadang-kadang maksimum "lokal" tidak digunakan tetapi cincin di sekitarnya. Saya membayangkan bentuk kubah sederhana di sini, di mana "rakus" mengambil pusat kubah berarti Anda tidak dapat memasukkan semua di sekitarnya. n - 1nn1
Mark Hurd
Pikiran pertama saya adalah mencoba pemrograman dinamis. Beri nomor kotak sesuai dengan jarak Manhattan mereka dari kiri atas. Subproblem adalah: angka dari bujur sangkar; daftar dari segi empat yang Anda pilih yang corder kiri atas memiliki jumlah kurang dari ; dan tujuannya adalah untuk memperpanjang ke set terbaik dari kotak tidak tumpang tindih dengan menambahkan beberapa bagian dari kotak dengan sudut kiri atas memiliki nomor . Anda dapat menyelesaikan setiap submasalah dengan cepat jika Anda memiliki solusi untuk semua submasalah yang lebih baru. Satu-satunya pertanyaan adalah berapa banyak submasalah yang harus Anda jelajahi. L s L ssLsLs
DW

Jawaban:

2

Formulasi terakhir saya memiliki kesalahan fatal yang membutuhkan jumlah eksponensial dari "kendala" node.

Formulasi grafis alami lain dari masalah adalah membuat grafik di mana setiap simpul mewakili persegi panjang dengan . Setiap pasangan persegi panjang yang tumpang tindih memiliki keunggulan dalam grafik ini. Dengan memecahkan untuk set independen ukuran maksimum tertimbang kami memiliki solusi untuk masalah awal Anda. Ada banyak heuristik dan algoritma aproksimasi yang baik untuk ini.w r r , r ' k = nrwrr,rk=n

Nicholas Mancuso
sumber
Ini adalah arah yang saat ini saya condongkan ke arah, saya akan bereksperimen dengan ini dan menerima solusinya jika itu yang akhirnya saya gunakan, tepuk tangan.
Kelima malam
2

Anda dapat memformulasikan ini sebagai instance pemrograman linier raksasa (ILP), dan kemudian menerapkan solver ILP yang tidak tersedia (lp_solve, CPLEX, dll.). Mereka akan memberi Anda solusi terbaik yang bisa mereka temukan. Mengingat ukuran contoh masalah Anda, saya tidak tahu apakah ini akan cukup efisien, tetapi akan mudah untuk mencoba.

Inilah formulasi ILP. Kami memiliki variabel nol-atau-satu untuk setiap persegi yang mungkin , dengan interpretasi yang dimaksudkan bahwa berarti Anda memasukkan persegi panjang di set Anda dan berarti Anda tidak memasukkannya. Anda ingin memaksimalkan fungsi objektif (di mana adalah keuntungan dari persegi panjang ), tunduk pada batasan yang dan bahwa tidak ada dua persegi panjang yang tumpang tindih. Pembatasan yang terakhir dapat dinyatakan sebagai ketidaksamaan linear dengan mensyaratkan untuk semua pasangan persegi panjang r x r = 1 r x r = 0 r c r x r c r r r x r = n x r + x s1 r , sxrrxr=1rxr=0rcrxrcrrrxr=nxr+xs1r,stumpang tindih itu. Jadi, dengan cara ini Anda mendapatkan ILP.

DW
sumber
Apakah Anda pikir masalah ini NP-hard? Saya tidak yakin itu tidak memiliki solusi waktu poli, dan pemecah ILP tidak mungkin menyelesaikan contoh berukuran sedang.
RB
1
@RB, saya tidak tahu apakah ini NP-hard. Lihat komentar saya di bawah pertanyaan tentang pemrograman dinamis untuk pemikiran pertama saya tentang bagaimana mencoba mencari algoritma waktu polinomial (tapi saya tidak tahu apakah algoritma yang dihasilkan akan dalam P atau tidak). Sejauh apa yang dapat dilakukan pemecah ILP, satu-satunya cara untuk mengetahuinya adalah dengan mencoba - terkadang kinerja mereka dapat mengejutkan.
DW