Bu kombinatoryal optimizasyon problemi bilinen herhangi bir probleme benzer mi?


10

Sorun şu şekildedir:

Her biri bir miktar "fayda" veya "kâr" temsil eden iki boyutlu bir dizi / sayı ızgaramız var. Ayrıca ve h olmak üzere iki sabit tamsayı var ("genişlik" ve "yükseklik" için) Ve sabit bir tamsayı n .whn

Şimdi ızgarada w × h boyutlarındaki dikdörtgenleri, bu dikdörtgenlerdeki hücrelerin toplam değerlerinin toplamı maksimuma çıkarılacak şekilde üst üste koymak istiyoruz .nw×h

Aşağıdaki resim, üzerine iki tane dikdörtgen yerleştirilmiş iki boyutlu bir ızgara örneğidir (resim en uygun çözümü göstermez, sadece bir = = ve n = 2 olduğunda bir olası kaplama )w=h=2n=2

Izgara örneği

Dikdörtgenler kesişemez (aksi takdirde sadece bir dikdörtgen için en uygun konumu bulmamız ve ardından tüm dikdörtgenleri bu konuma koymamız gerekir.)

Yukarıdaki örnekte, hücrelerdeki toplam değerlerin toplamı 2+4.2+2.4+3.14+2.31.4+13.1

Bu, kombinatoryal optimizasyonda bilinen herhangi bir soruna benzer mi? böylece biraz okuma yapmaya başlayabilir ve onu çözmenin yollarını bulmaya çalışabilirim.

İlgilenenler için biraz daha arka plan:

Şimdiye kadar sahip olduğum tek fikir ya açgözlü bir algoritma (ilk dikdörtgenin en iyi yerini bulabilir, daha sonra ikinci dikdörtgenin çakışmayan yerini bulur) ya da genetik algoritmalar gibi bazı meta-sezgiseldir.

Gerçekte, bu sorunu yaklaşık bir milyon hücre ve on bin (hatta yüz binlerce) dikdörtgen içeren bir ızgara ile çözmek istiyorum, ancak kısa sürede çözülmesi gerekmiyor (yani, algoritma saatler hatta günler sürüyor.) Kesin bir çözüm beklemiyorum ama bu kısıtlamalar göz önüne alındığında mümkün olduğunca iyi bir çözüm elde etmek istiyorum.

Şerefe!


(telefonda) Bu, bir dönüşüm ve bazı ek kısıtlamalar altında maksimum eşleme ile çözülebilecek gibi görünüyor. Daha sonra yazmaya çalışacağım.
Nicholas Mancuso

nn1

sLsLs

Yanıtlar:


2

Son formülasyonumun üstel miktarda "kısıtlama" düğümleri gerektiren ölümcül bir kusuru vardı.

rwrr,rk=n


Şu anda eğildiğim yön bu, bunu deneyeceğim ve sonunda kullandığım çözüm kabul edeceğim, şerefe.
fiftyeight

2

Bunu devasa bir tamsayı doğrusal programlama (ILP) örneği olarak formüle edebilir ve daha sonra kullanıma hazır bir ILP çözücüsünü (lp_solve, CPLEX, vb.) Uygulayabilirsiniz. Size bulabilecekleri en iyi çözümü verecektir. Sorun örneğinizin boyutu göz önüne alındığında, bunun yeterince verimli olup olmayacağını bilmiyorum, ancak denemek kolay olurdu.

xrrxr=1rxr=0rcrxrcrrrxr=nxr+xs1r,s


Sizce bu problem NP-zor mu? Poli zaman çözümüne sahip olmadığına ikna olmadım ve ILP çözücülerinin orta boyutlu örnekleri bile bitirmesi pek mümkün değil.
RB

1
@RB, NP-sert olup olmadığı hakkında hiçbir fikrim yok. Bir polinom-zaman algoritması bulmaya nasıl çalışacağım hakkında ilk düşüncem için dinamik programlama sorusu altındaki yorumuma bakın (ancak ortaya çıkan algoritmanın P'de olup olmayacağını bilmiyorum). ILP çözücülerinin yapabildikleri kadarıyla, bunu öğrenmenin tek yolu denemektir - bazen performansları şaşırtıcı olabilir.
DW
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.