Pokryj wielokąt wklęsły minimalną liczbą prostokątów

11

Próbuję pokryć prosty wklęsły wielokąt minimalnymi prostokątami. Moje prostokąty mogą mieć dowolną długość, ale mają maksymalną szerokość, a wielokąt nigdy nie będzie miał ostrego kąta.

Pomyślałem o próbie rozłożenia mojego wklęsłego wielokąta na trójkąty, które wytwarzają zestaw minimalnie nakładających się prostokątów minimalnie ograniczających każdy trójkąt, a następnie łączenie tych prostokątów w większe. Nie sądzę jednak, aby działało to w przypadku małych wycięć na krawędziach wielokąta. Trójkąty utworzone przez odruchowe wierzchołki na tych wycięciach utworzą niewłaściwe prostokąty. Szukam prostokątów, które będą obejmowały / ignorowały wycięcia.

Tak naprawdę nie wiem nic o geometrii obliczeniowej, więc nie jestem pewien, jak zacząć zadawać pytanie.

Znalazłem inne posty, które były podobne, ale nie to, czego potrzebuję:

Kilka przykładów: czarny jest wejściem. Kolor czerwony to dopuszczalna moc wyjściowa.

wprowadź opis zdjęcia tutaj

Kolejny przykład: preferowane jest drugie wyjście. Jednak wygenerowanie obu wyników i użycie innego czynnika do określenia preferencji jest prawdopodobnie konieczne, a nie odpowiedzialność tego algorytmu.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Wieloboki naśladujące krzywe są niezwykle rzadkie. W tym scenariuszu znaczna część obszaru prostokątów jest marnowana. Jest to jednak dopuszczalne, ponieważ każdy prostokąt spełnia ograniczenie maksymalnej szerokości.

wprowadź opis zdjęcia tutaj

Również ten artykuł był blisko tego, czego potrzebuję:

Być może lepszym pytaniem jest „Jak rozpoznać prostokątne części wklęsłego wielokąta?” wprowadź opis zdjęcia tutaj

Oto obraz przedstawiający pożądaną implementację: wprowadź opis zdjęcia tutaj

Kolor zielony to faktyczne zużycie materiału. Czerwone prostokąty to układy. Niebieski to MBR całego wielokąta. Myślę, że powinienem spróbować zdobyć małe MBR i wypełnić je. 2-3 zielone prostokąty w lewym górnym rogu, które kończą się w środku wielokąta, są drogie. Właśnie to chcę zminimalizować. Zielone prostokąty mają minimalną i maksymalną szerokość i wysokość, ale mogę użyć tylu wierszy i kolumn, aby pokryć region. Ponownie muszę zminimalizować liczbę prostokątów, które nie rozciągają się na wejście. Mogę również modyfikować kształt zielonego prostokąta, aby pasował do małych miejsc, co jest również bardzo drogie. Innymi słowy, idealnym rozwiązaniem jest uzyskanie jak największej liczby prostokątów tak, aby obejmowały jak najwięcej.

Josh C.
źródło
3
Twój tytuł mówi wypukłe wielokąty, ale pytanie dotyczy wielokątów wklęsłych. Być może musisz wprowadzić poprawki?
Ankur
1
@JukkaSuomela, na pierwszych dwóch zdjęciach wielokąt ma mniej więcej taki sam rozmiar, a na pierwszym zdjęciu mogłem poprowadzić trzy prostokąty pionowo, tak jak na drugim. Jest to jednak mniej pożądane. Myślę, że sztuczka ma związek z obwodami prostokątów. Być może staram się zminimalizować granicę prostokąta wewnątrz wielokąta i zmaksymalizować wielkość granicy współliniowej z krawędziami wielokąta. Jednak czasami prostokąty muszą wysypać się z wielokąta, aby go całkowicie zakryć.
Josh C.
1
@JohnMoeller, rozumiem. Jest to problem, w którym człowiek może łatwo zidentyfikować rozwiązanie, ale prawidłowe stwierdzenie problemu jest dość trudne. Problem jest podobny do układania dywanów lub tapet, a rzeczywistym problemem jest problem strukturalny / architektoniczny. Próbuję zidentyfikować obszary układów prostokątnych, które później zostaną wypełnione inną formą mozaikowania. Problemem jest znalezienie tych prostokątów i obsługa obszarów innych niż prostokątne. Daj mi znać, jeśli mogę wyjaśnić więcej.
Josh C.
2
Myślę, że powinniśmy podejść do tego jako pytania modelowania: celem nie jest opracowanie algorytmu, który rozwiązuje dobrze zdefiniowany problem optymalizacji, ale celem jest zdefiniowanie problemu optymalizacji.
Jukka Suomela
3
@JoshC .: Być może byłoby również pomocne, gdybyś próbował powiedzieć nam więcej o aplikacji w świecie rzeczywistym. Z twojego opisu wynika, że ​​na przykład cięcie jest dość drogie - idealnie, gdyby prostokątne elementy wymagały jak najmniejszego cięcia. Czy to jest poprawne?
Jukka Suomela

Odpowiedzi:

3

Jest to wariant geometrycznej osłony zestawu. W zależności od dokładnych ustawień może być możliwe dobre przybliżenie. Problemem jest oczywiście NP-Hard. Naturalni huersytycy powinni używać chciwego algorytmu (zawsze wybieraj prostokąt / pasek, który obejmuje większość jeszcze nieobjętego obszaru. Alternatywną techniką jest ponowne ważenie. Istnieją pewne interesujące wyniki teoretyczne, ale szczerze mówiąc, nic, co nie powinno być zbyt przydatne w praktyce Jedną z interesujących hueristy, które możesz wypróbować, jest najpierw rozłożenie wielokąta na minimalną liczbę wypukłych kształtów (za pomocą algorytmu programowania dynamicznego Keila), a następnie pokrycie każdego wypukłego wielokąta osobno ...

Sariel Har-Peled
źródło
Nie znam algorytmu programowania dynamicznego Keil. Znalazłem jednak metodę do pracy przy użyciu kombinacji algorytmów Największy wpisany prostokąt i Minimalny prostokąt ograniczający z niektórymi wariantami opartymi na heurystyce.
Josh C.
2

Myślę, że ten artykuł może być pomocny. Oczywiście nie jest to ten sam problem - w rzeczywistości jest to problem odwrotny, obejmujący prostokąt wielokątami - ale niektóre pomysły mogą być punktem wyjścia. W szczególności ten odwrotny problem jest trudny do NP i podejrzewam, że twój również może być (choć, o ile wiem, nie ma wyraźnego rozszerzenia redukcji).

E. Arkin, A. Efrat, G. Hart, I. Kostitsyna, A. Kroller, J. Mitchell i V. Polishchuk. Skandynawskie cienkie ciasteczka na wierzchu ciasta: na najmniejszym jednym uniwersalnym pudełku. Zabawa z algorytmami . str. 16–27. 2012

SamM
źródło
1
Dziękuje za twoją sugestię. Współpracowałem z działami inżynierii i produkcji w mojej firmie, aby lepiej wyjaśnić ten problem. Wciąż czekam na potwierdzenie, ale teraz myślę, że algorytm, który zwróciłby zestawy największych zapisanych prostokątów, mógłby działać. Chociaż nie całkowicie pokrywa on kształt, dawałby pierwszeństwo regionom ortogonalnym, pozostawiając regiony nieortogonalne pewnej heurystyce. Jedyną sztuczką jest maksymalizacja tych ortogonalnych regionów. Zobacz moje ostatnie zdjęcie z 9 postaciami lamda.
Josh C.