Wyjaśnienie rozgałęzień i granic

9

Mam test dotyczący gałęzi i związanego algorytmu. Rozumiem teoretycznie, jak działa ten algorytm, ale nie mogłem znaleźć przykładów, które ilustrują praktyczne zastosowanie tego algorytmu.

Znalazłem kilka przykładów takich jak ten, ale nadal jestem tym zdezorientowany. Szukałem również problemu sprzedawcy podróży i nie mogłem go zrozumieć.

Potrzebuję pewnych problemów i jak można je rozwiązać za pomocą gałęzi i powiązania.

MR.NASS
źródło
1
Co było trudne do zrozumienia? próbowałeś już wcześniej wrócić do przeszłości?
Tak, próbowałem. Problem z B & B polega na tym, że jeśli dostanę problem, który można rozwiązać za pomocą B & B, nie wiem, jak mogę uzyskać dolną granicę dla każdego węzła, a także jak mogę uzyskać funkcję celu. Jaka jest pierwsza wartość bestsofar, którą porównuję z każdą dolną granicą?
MR.NASS
2
@ MR.NASS Nie jestem pewien, co dokładnie mówisz w swoim ostatnim komentarzu. Pozwól mi spróbować wyjaśnić. B&B to metoda przycinania drzewa wyszukiwania. Można go zastosować do problemów, które muszą zoptymalizować funkcję celu. Zwykle stosuje się go do dyskretnych lub kombinatorycznych problemów optymalizacji. Na każdym kroku próbujesz znaleźć dolną granicę funkcji celu dla wszystkich pozostałych możliwych rozwiązań. Jeśli dolna granica jest wyższa niż obecne najlepsze rozwiązanie, możesz zatrzymać wyszukiwanie i cofnąć się (przycinanie drzewa wyszukiwania), ponieważ nie może być rozwiązania o niższym wyniku.
George
2
Zwykle rozwiązuje się zrelaksowaną wersję problemu, aby uzyskać niższą granicę. W przypadku mieszanych programów całkowitych jest to zwykle relaksacja programowania liniowego.
Opt
2
@ MR.NASS Zależy to od funkcji celu. Jak powiedział Sid, zwykle rozwiązujesz zrelaksowaną wersję danego problemu. Zwykle chce się używać wersji odprężonej, która daje dobre przybliżenie początkowego problemu i może być skutecznie rozwiązana. Zauważ, że wersja zrelaksowana musi dawać dolną granicę, która jest co najwyżej tak wysoka, jak prawdziwa dolna granica, aby działać poprawnie. Kolejny przykład: załóżmy, że chcesz rozwiązać MAXSAT metodą B&B. Dla danego częściowego przypisania prawdy można łatwo obliczyć liczbę spełnionych klauzul. Górna granica (ponieważ jest to problem maksymalizacji) ...
George

Odpowiedzi:

10

Zastosujmy Branch i Bound do Knapsack , mam nadzieję, że to wyjaśni ci tę koncepcję.

Mamy n przedmioty oznaczone 1 przez do n. vja jest wartością japozycja i wjajego waga. Staramy się zmieścić je w plecaku, który może pomieścić doT. waga w sumie i staramy się zmaksymalizować sumę wartości przedmiotu, który wkładamy do plecaka.

Podstawą jest zwykłe podejście zwrotne. Najpierw stawiamyv1 w paczce, a następnie rozwiąż problem z pozostałymi n-1przedmioty z rekurencją. Następnie usuwamyv1 z paczki i rozwiązać problem dla pozostałych n-1 ponownie, a my zwrócimy najlepszą konfigurację, jaką znaleźliśmy.

Cofanie jest częścią „Branch” i „Bound”. Rozgałęziasz się (w przypadku plecaka) na dwa przypadki: „przedmiotja jest częścią rozwiązania ”i„ item janie jest częścią rozwiązania ”. Możesz to sobie wyobrazić jako drzewo binarne, w którym lewe dziecko to jedna sprawa, a prawe dziecko to druga sprawa. To drzewo jest drzewem wyszukiwania (lub przestrzenią wyszukiwania ): jego głębokość wynosini dlatego ma O(2)n)węzły Algorytm ma zatem wykładniczy czas działania pod względem liczby elementów.

Teraz przechodzimy do części „Związanej”: staramy się znaleźć takie kryteria, że ​​możemy powiedzieć, że „ta konfiguracja nigdy się nie sprawdza, więc równie dobrze możemy nie zawracać sobie tym głowy”. Przykładem takiego kryterium jest „waga przedmiotów, które już włożyliśmy do plecaka, przekraczaT.„: jeśli dodaliśmy, powiedzmy, pierwszy n/2) przedmioty do plecaka i dlatego jest już pełny, nie ma sensu wkładać przedmiotów n/2)+1 przez do n również w plecaku, ale nie ma sensu próbować dopasować żadnego podzbioru n/2)+1 przez do n w plecaku, ponieważ jest już pełny, więc oszczędzamy 2)n/2)skrzynie Innym przykładem jest „ nawet jeśli wstawię wszystkie pozostałe elementy, wartość przedmiotów, które włożyłem, nie przekroczy najlepszej konfiguracji, jaką do tej pory znalazłem ”.

Kryteria te zasadniczo odcinają części drzewa wyszukiwania: w pewnym węźle mówisz na przykład: „lewe poddrzewo nie da mi lepszej konfiguracji, ponieważ X”, więc zapominasz o tym poddrzewie i nie eksplorujesz go. Poddrzewo głębire że wycięty w ten sposób cię ratuje O(2)re) węzły, które mogą być nieco przyspieszone, jeśli masz szczęście.

Zauważ, że nazywa się to „ Bounding ”, ponieważ zwykle wiąże się to z pewnym dolnym lub górnym zakresem: dla kryterium „ nawet jeśli wstawię wszystkie pozostałe elementy, wartość elementów, które wprowadzę, nie przekroczy najlepszej konfiguracji Znalazłem do tej pory ”, wartość twojej najlepszej konfiguracji do tej pory stanowi dolną granicę najlepszej konfiguracji, więc wszystko, co nigdy nie przekroczy tej dolnej granicy, jest skazane na niepowodzenie.

Możesz sprawić, by część „Bounding” była tak złożona, jak tylko chcesz. Na przykład problemy z programowaniem liczb całkowitych są często rozwiązywane za pomocą relaksacji: rozluźniasz swój program do programu liniowego, który możesz rozwiązać w czasie wielomianowym, a następnie możesz wyrzucić wiele przypadków dla zmiennych binarnych, które i tak nigdy się nie sprawdzą. Następnie rozgałęziasz się na pozostałych opcjach.

Zauważ, że Rozgałęzienia i Związania zwykle dają ci tylko wzrost prędkości w praktyce, ale nie w teorii: trudno jest dokładnie powiedzieć, ile wycinanych drzewek wyszukiwania jest wycinanych za pomocą heurystyki. Świadczy o tym liczba różnych heurystyk stosowanych w praktyce w przypadku takich problemów. Jeśli masz pecha, pozostałe drzewo wyszukiwania pozostaje ogromne nawet przy dużym ograniczeniu.

Alex ten Brink
źródło
4

Rozważ planowanie , zadanie polegające na przypisywaniu do maszyn zadań o określonym czasie trwania i terminie. Zakładamy dyskretny czas. Wiele takich problemów jest twardych NP (O).

W szczególności ta odpowiedź będzie mówić 1rjaL.max, czyli planujemy

  • na jednej maszynie
  • problemy z datami wydania i my
  • zminimalizuj maksymalną spóźnienie L.max, to maksymalna różnica między terminem a czasem realizacji we wszystkich zleceniach.

Wersja decyzyjna tego problemu jest trudna NP; widać to po zmniejszeniu z 3PARTITION .

Co ciekawe, jeśli pozwolimy na prewencję , czyli zamianę aktywnych zadań, problem można rozwiązać w kwadratowym czasie przez heurystykę najwcześniejszej daty pierwszej (w zmodyfikowanych terminach). Łatwo zauważyć, że optymalne rozwiązanie tego wariantu nie może być gorsze niż optymalne rozwiązanie pierwotnego problemu.

Teraz, aby zastosować Branch & Bound do tego problemu, musimy naprawić niektóre parametry:

  • Obliczamy dolne granice, umożliwiając prewencję i korzystanie z EDD.
  • Rozgałęziamy się, ustalając każdą nieplanowaną pracę jako następną.
  • Najpierw idziemy do dziecka z małymi dolnymi granicami.

Musisz to zrobić dla każdej aplikacji B & B.


Konkretnym przykładem jest ten przykład 1rjaL.max:

ja12)3)4pja42)65rja013)5reja8121110

z pja czasy przetwarzania zleceń, rja daty wydania i reja terminy.

Wykonywanie B & B, jak określono powyżej, dzieje się tak:

algorytm
Ten GIF nie zapętla się. Załaduj ponownie w nowej karcie, aby zobaczyć od początku.
[ źródło ] [ wersja statyczna ]

Zauważ, że z 41 węzłów tylko cztery są odwiedzane poprawnie, a tylko dla dziesięciu są obliczane dolne granice.

Raphael
źródło