Problem jest następujący:
Mamy dwuwymiarową tablicę / siatkę liczb, z których każda reprezentuje pewną „korzyść” lub „zysk”. Także ma dwie nieruchome całkowite i h (jako „szerokość” i „wysokość”). A stałej całkowitej n .
Teraz chcą nałożyć prostokątów o wymiarach szer × h na siatce, tak aby łączna suma wartości komórek w tych prostokątów jest zmaksymalizowane.
Poniższy rysunek przedstawia przykład dwuwymiarowej siatki z dwóch takich prostokątów overlayed na nim (obraz nie wykazuje rozwiązanie optymalne, tylko jedno możliwe nakładanie się, gdy i n = 2 )
Prostokąty nie mogą się przecinać (w przeciwnym razie musielibyśmy po prostu znaleźć optymalną pozycję dla jednego prostokąta, a następnie umieścić wszystkie prostokąty w tej pozycji.)
W powyższym przykładzie całkowita suma wartości w komórkach wyniosłaby
Czy jest to podobne do jakiegokolwiek znanego problemu optymalizacji kombinatorycznej? abym mógł zacząć czytać i spróbować znaleźć sposoby na rozwiązanie tego problemu.
Więcej informacji dla zainteresowanych:
Do tej pory jedynymi pomysłami, jakie miałem, był albo chciwy algorytm (który znalazłby najlepszą lokalizację dla pierwszego prostokąta, a następnie znalazłby nienakładające się położenie dla drugiego prostokąta itp.) Lub jakieś metaheurystyczne, takie jak algorytmy genetyczne.
W rzeczywistości chcę rozwiązać ten problem za pomocą siatki, która ma około miliona komórek i dziesiątki tysięcy (lub nawet setki tysięcy) prostokątów, chociaż nie jest konieczne rozwiązanie go w krótkim czasie (tzn. Byłoby to do przyjęcia algorytm zajmuje godziny, a nawet dni.) Nie oczekuję dokładnego rozwiązania, ale chcę uzyskać taki, który jest tak dobry, jak to możliwe, biorąc pod uwagę te ograniczenia.
Twoje zdrowie!
źródło
Odpowiedzi:
Moje ostatnie sformułowanie miało fatalną wadę, która wymagałaby wykładniczej ilości węzłów „ograniczających”.
źródło
Możesz sformułować to jako gigantyczną instancję programowania liniowego liczb całkowitych (ILP), a następnie zastosować gotowy do użycia solver ILP (lp_solve, CPLEX itp.). Dadzą ci najlepsze rozwiązanie, jakie mogą znaleźć. Biorąc pod uwagę rozmiar wystąpienia problemu, nie wiem, czy będzie to wystarczająco wydajne, ale łatwo byłoby spróbować.
źródło