2008-10-30 13 views
12

Mam program, który obliczy minimalny obszar za pomocą dopasowania prostokątów.Układanie prostokątów w celu uzyskania możliwie małej przestrzeni

Dane wejściowe: prostokąty o różnej wysokości i szerokości.
Wynik: Jeden prostokąt zawierający wszystkie te prostokąty.
Reguły: Nie można obracać ani obracać prostokątów i nie mogą się one nakładać.

Rozumiem, że jest to związane lub jest prawdopodobnie zdefiniowane jako problem z pakowaniem skrzynek (NP-hard). Jednak algorytmy, które znalazłem dla tych, którzy często ustawiają limit na przykład na szerokość. Nie mam takich ograniczeń, jedynym celem jest uzyskanie tak małego obszaru, jak to możliwe.

Jakieś wskazówki, jaki algorytm jest odpowiedni do uzyskania przyzwoitego rozwiązania?

+0

Ktoś jeszcze ma problem z pracą domową? –

+0

Nie, to jest dość powszechne w grach, nazywa się to pakowaniem tekstur. –

+0

Właściwie automatyzuję konwersję ikon i obrazów na ikonkę css i chcę, aby wynik był jak najlepszy. –

Odpowiedz

5

http://www-rcf.usc.edu/~skoenig/icaps/icaps04/icapspapers/ICAPS04KorfR.pdf

Widocznie ten problem jest trudniejsze niż się wydaje na początku. Jest to interesujący algorytm, ponieważ najpierw odgaduje rozwiązanie, a następnie ulepsza je, więc jeśli nie chcesz czekać na optymalne rozwiązanie, możesz po prostu uruchomić go dla określonej liczby iteracji, aby uzyskać przybliżone rozwiązanie (dłuższe uruchomisz go, tym lepsze przybliżenie).

+0

Dzięki za link. Zrobiłem zakładkę, że jakiś czas temu odłożyłem ją do czytania. Teraz wreszcie muszę to przeczytać. – Tim

1

Zacznę od przeglądania przez http://mathworld.wolfram.com - są niesamowite na takie rzeczy.

Po drugie, mógłbym wyobrazić sobie algorytm dope, który umieści najdłuższy (w wymiarze X) okienko na dole, a następnie najwyższy (w wymiarze Y) na nim po jednej lub po drugiej stronie. Następnie kontynuuj układanie ich w ten "schodkowy" sposób, idąc w prawo w górę iw górę (na przykład idź w prawo, aż nie możesz, potem idź w górę itp.).

To prawdopodobnie nie jest idealny i może bardzo dobrze dać złe wyniki, ale to, co pierwszy wpadł na myśl.

3

Polecam zacząć od prostego chciwego podejścia i sprawdzenia, czy jest to wystarczająco dobre dla twoich potrzeb. Jeśli twój wkład jest dobrze zachowany lub mały, może to być wszystko, czego potrzebujesz - a złożoność wzrośnie szybko, gdy spróbujesz zrobić coś bardziej wyrafinowanego.

Na przykład: sortuj prostokąty według wielkości, największe jako pierwsze. Dodaj prostokąty po jednym na raz, próbując każdej możliwej pozycji dla nowego prostokąta. Wybierz pozycję, która spowoduje najmniejsze pole ograniczające.

Innym chciwym podejściem byłoby wybieranie początkowego prostokąta, a następnie wielokrotne dodawanie prostokąta, który daje najbardziej zwarty układ (gdzie gęstość jest zdefiniowana jako procent wypełnionego obszaru obwiedni).

+0

Chciałem również zasugerować te dwie osoby, ale pracując nad różnymi problemami NP z początkowym założeniem "dobrej" heurystyki, doprowadziłem mnie do eksperymentowania z tym, co uważałem za "złe" heurystyki. Wyniki były zaskakujące. Występują lokalne sytuacje minimalne i maksymalne. Ale podoba mi się twoja sugestia. – Tim

Powiązane problemy