Przyrostowy maksymalny przepływ na wykresach dynamicznych


12

Szukam szybkiego algorytmu do obliczenia maksymalnego przepływu na wykresach dynamicznych. tzn. biorąc pod uwagę wykres i , mamy maksymalny przepływ w od do . Następnie nowy / stary węzeł dodane / usunięty z jego odpowiednich krawędziach, tworząc krzywą . Jaki jest maksymalny przepływ na nowo utworzonym wykresie? Czy istnieje sposób, aby zapobiec ponownemu obliczeniu maksymalnego przepływu?s , t V F G s t u G 1G=(V,E)s,tVFGstuG1

Doceniane jest wszelkie przetwarzanie wstępne, które nie zajmuje dużo czasu / pamięci.

Najprostszym pomysłem jest ponowne obliczenie przepływu.

Innym prostym pomysłem jest zapisanie wszystkich ścieżek rozszerzających, które były użyte w poprzednim obliczeniu maksymalnego przepływu, aby dodać wierzchołek , możemy znaleźć proste ścieżki (w zaktualizowanym wykresie wydajności z poprzedniego kroku), które zaczynają się od źródła, przechodzą do a następnie przechodzą do miejsca docelowego, ale problem polega na tym, że ta ścieżka powinna być prosta, nie mogłem znaleźć lepszego niż dla tego przypadku, dla. (Zauważ też, że jeśli była to tylko jedna ścieżka, można to zrobić w ale tak nie jest.)v O ( n m ) m = | E | O ( n + m )vvO(nm)m=|E|O(n+m)

Również do usuwania węzła powyżej pomysł nie działa.

Widziałem też papiery takie jak Przyrostowe podejście do krawędzi , ale wydaje się, że w tym przypadku nie są wystarczająco dobre, to więcej niż dla każdej krawędzi i wydaje się, że nie jest odpowiednim rozszerzeniem w tym przypadku (po prostu ponownie obliczamy przepływ). Również obecnie używam algorytmu maksymalnego przepływu Forda-Fulkersona Jeśli istnieje lepsza opcja dla algorytmów online, dobrze to wiedzieć.O(m)


Czy możesz wyjaśnić część „ale problem polega na tym, że ta ścieżka powinna być prosta”? Nie rozumiem
Dmytro Korduban

@ maldini.ua, W rzeczywistości mam na myśli, że ścieżka, która przechodzi od źródła do a następnie ścieżka od do miejsca docelowego nie powinna mieć wspólnego wierzchołka (z wyjątkiem ). Załóżmy, że jest nowym dodanym węzłem. Jeśli tak nie było, możemy pominąć sprawdzanie i możemy mieć szybszy algorytm (średnio lub może być asymptotycznie). v v vvvvv
Saeed,

Rozumiem, ale jak dla mnie nie jest to coś specjalnego w . Myślę, że najprostszym pomysłem na ponowne obliczenie jest: 1) dodanie nowego wierzchołka z krawędziami do wykresu resztkowego ; 2) znajdź maksymalny przepływ na zaktualizowanym wykresie resztkowym za pomocą wybranego algorytmu maksymalnego przepływu. Sugerowany przypadek zostanie przetworzony „automatycznie” przez algorytm maksymalnego przepływu (powiedzmy, że nie znajdzie ścieżki rozszerzającej itp.). Jeśli jesteś zainteresowany usunięciem węzłów, mogę napisać w odpowiedzi. PS Dla jasności, czy masz skierowany czy nieukierowany wykres? v
Dmytro Korduban

@ maldini.ua, normalne przeliczanie dodajezłożoność obecnego rozwiązania, więc nie sądzę, aby było dobre (może być dobre, wiedząc, że zwykle zbyt wiele krawędzi jest bezużytecznych i w rzeczywistości nie powoduje to bardzo wysokiej wydajności), ale jeśli masz pomysł na usunięcie węzeł, jestem zainteresowany, aby zobaczyć twój pomysł, również wykres jest skierowany. PS, ale interesują mnie oba przypadki. |G|
Saeed,

Pamiętaj, że uruchamiasz go na wykresie resztkowym, w tej chwili powinno być dużo krawędzi o zerowej pojemności. Zwykle działa dość szybko, szczególnie na rzadkich grafach (przynajmniej dla mnie działało). Z drugiej strony podejście „prosta ścieżka” wydaje mi się nieco bardziej wyrafinowane. Nie zapominaj również, że masz związane z czasem pracy dla Forda Fulkersona (gdzie jest ograniczone sumą pojemności sąsiednich krawędzi ). | f | vO(|f||E|)|f|v
Dmytro Korduban

Odpowiedzi:


6

Opisane podejście może nie być teoretycznie optymalne. To tylko proste praktyczne rozwiązanie, które może działać dla autora. Nie mogę podać żadnych odniesień, ponieważ zawsze uważałem, że jest to powszechnie znany folklor, ale o dziwo nikt nie opublikował go w odpowiedzi. Więc to robię.

Załóżmy, że mamy sieć bezkierunkową . Załóżmy, że jest przechowywany w strukturze danych, która umożliwia łatwe wstawianie / usuwanie wierzchołków / łuków. Czasami użyjemy sieci resztkowej (tj. O zaktualizowanych pojemnościach ).G f c f = c - fG=(V,E,c)Gfcf=cf

Pierwsza część dotyczy przetwarzania wstawiania / usuwania wierzchołków. W przypadku wstawek jest to mniej lub bardziej proste:

  1. Dodaj nowy wierzchołek z odpowiednimi krawędziami do sieci resztkowej.
  2. Znajdź maksymalny przepływ w zaktualizowanej sieci resztkowej za pomocą wybranego algorytmu maksymalnego przepływu.

W przypadku usuwania rzeczy stały się bardziej skomplikowane. Wyobraźmy sobie, że podzieliliśmy wierzchołek który zamierzamy usunąć na 2 połówki i tak, że wszystkie łuki wskazują , wszystkie łuki przechodzą od i nowych wierzchołków są połączone łukiem o nieskończonej pojemności. Zatem usunięcie jest równoważne usunięciu łuku między a . Co się stanie w tym przypadku? Oznaczmy przez przepływ przechodzący przez wierzchołek . Wtedy doświadczy nadmiaru jednostek przepływu iv i n v o u t v i n v o u t v v i n v o u t f v v v i n f v v o u t f v ~ f v v i n v o u t v i n v o u t f v f v v Δ =vvinvoutvinvoutvvinvoutfvvvinfvvoutzaraz po usunięciu wystąpi niedobór jednostek przepływu (ograniczenia przepływu zostaną oczywiście złamane). Aby ograniczenia przepływu zostały ponownie utrzymane, powinniśmy przestawić przepływy, ale chcemy również utrzymać pierwotną wartość przepływu tak wysoką, jak to możliwe. Sprawdźmy najpierw, czy możemy dokonać przegrupowania bez zmniejszania całkowitego przepływu. Aby to sprawdzić, znajdź maksymalny przepływ z do w „odciętej” sieci resztkowej (tj. Bez łuku łączącego i ). Powinniśmy oczywiście związać to . Jeśli okaże się, że jest równe to mamy szczęście: ponownie przypisaliśmy przepływ, który przepływał przezfvfv~vinvoutvinvoutfvfvvw taki sposób, że całkowity przepływ nie został zmieniony. W innym przypadku całkowity przepływ musi zostać zmniejszony o „bezużyteczny” nadmiar jednostek . Aby to zrobić, tymczasowe połączenie i na łuku o nieskończonej pojemności i uruchomić algorytmu MaxFlow ponownie z do (należy związany przepływu poprzez ). To naprawi resztkową sieć i sprawi, że ograniczenia przepływu zostaną ponownie utrzymane, automatycznie zmniejszając całkowity przepływ przez .Δ=fvfv~stvinvoutΔΔ

Złożoność czasowa takich aktualizacji może zależeć od używanego algorytmu maxflow. Najgorsze przypadki mogą być dość złe, ale wciąż jest to lepsze niż całkowite przeliczanie.

Druga część to algorytm, którego należy użyć. O ile rozumiem, autor nie potrzebuje bardzo złożonego (ale wciąż wydajnego) algorytmu z małą ukrytą stałą do uruchomienia go na platformie mobilnej. Jego pierwszy wybór Forda-Fulkersona (spodziewam się, że będzie to Edmonds-Karp ) wygląda niezbyt źle z tego punktu widzenia. Ale są też inne możliwości. Ten, który poleciłbym najpierw, to wariant algorytmu Dinica, ponieważ jest on dość szybki w praktyce i można go zaimplementować w bardzo prosty sposób. Inne opcje mogą obejmować skalowanie pojemności Ford-Fulkerson wO(|V|2|E|)O(|E|2logCmax)a przecież różne wersje push-relabel z heurystyką. W każdym razie wydajność będzie zależeć od przypadku użycia, więc autor powinien znaleźć najlepszy empirycznie.


Po przeczytaniu odpowiedzi z ostatniego vzn znalazłem podobne podejście opisane na stronie 90 tego .
Dmytro Korduban

Jak rozumiem przy usuwaniu węzła, By obliczysz przepływ na wykresie resztkowym, ale myślę, że to nieprawda, w rzeczywistości na wykresie resztkowym masz pewne krawędzie, które wykorzystałeś do obliczenia i powinieneś dodać dodatkowa pojemność do tych krawędzi, następnie obliczanie , a następnie użycie . fv~fvfv~Δ
Saeed,

Kiedy 1 jednostkę przepływu z na , zmniejszasz o 1 i zwiększasz o 1, ponieważ przepływ jest antysymetryczny ( ). To określa prawdziwy wykres resztkowy, więc wszystko działa w nim dobrze. u c f ( v , u ) c f ( u , v ) f ( v , u ) = - f ( u , v )vucf(v,u)cf(u,v)f(v,u)=f(u,v)
Dmytro Korduban

Masz jakieś pomysły, jak to zrobić, jeśli chcesz zmienić pojemność krawędzi?
Chet

-1

ok, biorąc pod uwagę nowe informacje i unikając trudnych wcześniejszych fałszywych startów / referencji red herring (mea culpa), oto kilka nowych referencji na ten temat.

Szybkie rozwiązywanie sekwencji problemów związanych z maksymalnym przepływem online dzięki rozszerzeniom obliczeniowym Solidne minimalne cięcia Doug Altner i Özlem Ergun

niniejszy odnośnik uwzględnia sekwencje online urządzeń wielofunkcyjnych i „ciepłe rozruchy”, tj. bazowanie na przyrostowych zmianach w stosunku do wcześniejszych urządzeń wielofunkcyjnych. „Wykazujemy, że nasze algorytmy skracają czas działania o rząd wielkości w porównaniu z podobnymi kodami, które wykorzystują solver black-box MFP. W szczególności pokazujemy, że nasz algorytm dla solidnych minimalnych cięć może rozwiązać przypadki w ciągu sekund, które wymagałyby ponad czterech godzin przy użyciu solvera czarnego pola maksymalnego przepływu. ”


postępy w zakresie problemów związanych z maksymalnymi przepływami Altner, Douglas S., georgia tech

w tej rozprawie doktorskiej z 2008 r. (plik pdf do pobrania) autor rozważa problem przyrostowego dodawania łuków, który wydaje się „wystarczająco blisko” do problemu dodawania nowych wierzchołków (z wieloma nowymi łukami).

wiele z tych odniesień dotyczy usuwania części sieci (cięcia / „zakaz”), jak stwierdzono w pierwszej części streszczenia

patrz zwłaszcza „IV ROZWIĄZYWANIE SEKWENCJI ONLINE MAKSYMALNYCH PRZEPŁYWÓW....... p63”.

str. 63 „Celem tego rozdziału jest jednak przekonanie czytelnika, że ​​iteracyjne użycie solvera o maksymalnym przepływie czarnej skrzynki do rozwiązania dużej sekwencji urządzeń wielofunkcyjnych może prowadzić do ogromnej liczby niepotrzebnych obliczeń.”

p66 "We wspomnianych powyżej aplikacjach urządzenia wielofunkcyjne są zazwyczaj topologicznie podobne. Oznacza to, że następne urządzenie wielofunkcyjne w sekwencji różni się od poprzedniego przez dodanie lub usunięcie małej liczby łuków lub przez przewidywalną zmianę wydajności zlokalizowanego zestawu łuków. Ponadto , przy rozwiązywaniu tych przypadków czas i miejsce potrzebne do przechowywania czegokolwiek poza rozwiązaniem poprzedniego problemu jest zwykle nieuzasadnione ”.

Autor p67 również tutaj stosuje podejście „ciepłego startu”. „Skuteczną strategią szybkiego rozwiązania całej sekwencji problemów optymalizacyjnych online jest opracowanie wydajnej heurystyki ponownej optymalizacji. W tym celu opracowujemy zmodyfikowany algorytm maksymalnego przepływu, który został zaprojektowany z myślą o wydajnych ciepłych rozruchach.”

patrz esp p71, który ma specyficzny problem przyrostowy nowego łuku:

Nowy problem ponownej optymalizacji maksymalnego przepływu łuku (NAMFRP)

autor rozważa bardziej ogólne problemy str. 67

Problem ponownej optymalizacji
maksymalnego przepływu (MFROP) Problem ponownej optymalizacji maksymalnego przepływu z pojedynczym łukiem (MFSAROP)


-3

po szybkim wyszukiwaniu wygląda na to, że wersja online jest obszarem aktywnych badań. nie wspominasz o obszarze zastosowania, który może pomóc zawęzić wyszukiwanie literatury. jedną z opcji jest poszukiwanie obszaru zastosowania, w którym jest najwięcej lub najnowsza innowacja. stąd jest pewne zastosowanie przyrostowego maksymalnego przepływu w systemach wizyjnych i niektóre algorytmy dla niego; wypróbuj Maximum Flows by Incremental Breadth-First Search w Microsoft Research Labs. parafrazując wprowadzenie do tego artykułu, najwyraźniej w przypadku przypadków widzenia algorytm Bojkowa i Kołmogorowa dobrze sobie radzi i nie ma znanych wykładniczych kontrprzykładów czasu, chociaż poza aplikacjami wizyjnymi może działać słabo. więc może warto wypróbować algorytm B&K na swoich danych i zobaczyć, jak działa.

wydaje się, że mówisz, że algorytm przyrostowy, który jest liniowy w liczbie krawędzi wykresu, nie jest wystarczającą prędkością? ale czyż nie jest to dość wysoka wydajność? z iloma krawędziami masz do czynienia? być może podejście może polegać na zmniejszeniu kosztu przejścia wykresu, jeśli jest to kosztowne lub znaczący czynnik (np. wykres przechowywany w db vs. wykres przechowywany w pamięci)

tutaj jest interesujący artykuł, który dowodzi, że podczas gdy nieinkrementalny algorytm maksymalnego przepływu jest w P, wersja przyrostowa jest NP kompletna. „Zgodnie z naszą najlepszą wiedzą, nasze wyniki jako pierwsze znalazły problem czasu P, którego wersja przyrostowa jest NP kompletna”.

Przepływ przyrostowy według Hartline, Sharp


Dzięki, nie czytałem dokumentów, do których się odwołuję, spojrzę na nie (widzę kilka wcześniejszych artykułów i uważam je za bezużyteczne), ale jeśli chodzi o mój problem, to jest problem w rzeczywistej sytuacji roboczej w marketingu giełdowym. Trudno jest powiedzieć, co się stało, kiedy odkryłem, że powinienem rozwiązać ten problem. Na pierwszy rzut oka nie wydawało mi się to trudne, ale po wypróbowaniu kodu widzę, że nie jest to takie łatwe. ten algorytm będzie działał na telefonach komórkowych, nie są one tak szybkie (a klienci nie lubią mojego algorytmu :). Czasami z nowym węzłem pojawi się też zbyt wiele krawędzi. i to jest wąskie gardło.
Saeed,

ciekawy. Wygląda na to, że powinieneś raczej korzystać z heurystyki opartej na ograniczonej mocy obliczeniowej i potrzebie szybkich aktualizacji. czy zamiast tego można przenieść przetwarzanie z „klienta” (w twoim przypadku najwyraźniej telefonów) na serwer? czy każdy klient musi obliczyć inną wersję (tj. różne dane) problemu?
vzn

W Iranie największym problemem jest szybkość połączenia internetowego, więc nie mogę przenieść go na stronę serwera. Gdyby było w porządku (dobra prędkość), na pewno ponowne obliczenie nie byłoby złe.
Saeed,

6
Nie rozumiem, w jaki sposób odpowiada to oryginalne pytanie, które dotyczy wykresu, który ewoluuje w czasie po dodaniu węzłów i krawędzi. Pierwszy artykuł opisuje algorytm przyrostowy dla standardowego problemu maksymalnego przepływu typu „jeden strzał”. Drugi artykuł opisuje papier dotyczący innego problemu „przyrostowego przepływu maksymalnego”, w którym zestaw krawędzi jest ustalony, ale ich pojemności rosną z czasem.
Jeffε

1
@ Jɛ ff E, tak, masz rację :) w rzeczywistości przedtem widzę papiery podobne do referatów, ale jak powiedziałeś, nie są one związane z moim problemem, najbardziej bliski papier, jaki widzę do tej pory, jest tym, do którego nawiązałem.
Saeed,

-5

inną możliwością / kierunkiem jest algorytm maksymalnego przepływu push-relabel , który jest „jednym z najbardziej wydajnych algorytmów maksymalnego przepływu” i może mieć lepsze profile złożoności w zależności od twoich danych. np. jak podaje strona wikipedia

O(V3)O(V2EO(VElog(V2/E))


3
Znowu nie rozumiem, w jaki sposób ta odpowiedź jest odpowiednia do zadanego pytania. Push-relabel jest dobrze znaną strategią podręcznika służącą do rozwiązania standardowego problemu maksymalnego przepływu.
Jeffε

więc jest Ford-Fulkerson ... prawda? & OP prosi o coś lepszego. czy wiesz coś, co dowodzi, że etykieta push-push jest gorsza niż ford-fulkerson? niejasne OP jest znane z push-relabel. rany, algorytm pojawiający się w podręczniku z pewnością nie jest bezpośrednią krytyką odrzucenia tutaj odpowiedzi, prawda?
vzn

3
Aktualnie tak; pytania, na które odpowiedziano w standardowych podręcznikach (lub wikipedia), nie są na poziomie badawczym. Jednak pierwsze zadane pytanie dotyczące przepływów przyrostowych jest interesujące i zdecydowanie ma zakres. (Brak ostatecznych odpowiedzi sugeruje, że poprawną odpowiedzią może być „Dobre pytanie. Nikt nie wie.”)
Jeffε

vzn, dziękuję za Twój wkład, ale: „czy wiesz coś, co dowodzi, że push-relabel jest gorszy niż ford-fulkerson”, nie jest dobrym powodem, aby opublikować go jako odpowiedź, jeśli wiesz, dlaczego „push-relabel” w algorytmach online jest lepszy niż Ford-Falkerson dobrze to powiedzieć, osobiście lubię Ford-Falkerson ze względu na prostotę, niski stały współczynnik i znam to z przeszłości. Ale jak powiedziałem, nie mogę powiedzieć, że jest to dobra opcja we wszystkich przypadkach, również te algorytmy nie są po prostu porównywalne, wymagają praktycznych testów.
Saeed

Spójrz na pt, że jeśli masz jeden algorytm maksymalnego przepływu, który nie działa dobrze dla twoich danych, wypróbuj inny, szczególnie ten, który mówi się, że działa dobrze, ponieważ istnieje wiele zoptymalizowanych dla różnych profili danych. nie, nie jest online / „przyrostowy wierzchołek”, ale może działać lepiej w przypadku trybu offline, jeśli nie ma alternatywy. wersje online, mimo że istnieją tak, jak znalazłem powyżej, prawdopodobnie będą znacznie trudniejsze do wdrożenia ...
dniu
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.