Shalmoli Gupta wyjaśnił już, że ogólny problem to NP-Hard, więc postanowiłem sprawdzić, czy jakieś specjalne przypadki można rozwiązać wielomianowo. W końcu znalazłem rozwiązanie dla specjalnego przypadku zbiorów, które reprezentują drzewo, lub bardziej ogólnie, szereg równoległego rzędu przez włączenie podzbioru ze wszystkimi rozłącznymi zestawami nieporównywalnymi.
Jedną właściwością, która ułatwia rzeczy, jest to, że lista zestawów jest zamknięta pod przecięciem. Jeśli , a następnie, istnieje optymalna kolejność, w której s 1 jest przed s 2 . Możemy założyć WLOG, że optymalne uporządkowanie jest liniowym rozszerzeniem zamówienia częściowego podanego przez włączenie podzbioru.s1⊆s2s1s2
Ponieważ wszystkie podzestawy zestawu pojawiają się przed nim w kolejności, oznacza to, że kwota dodana do sumy bieżącej przez dany zestaw jest stała, niezależnie od tego, gdzie się pojawi. Jeśli lista zestawów, to dodatkowy koszt zestawu jest liczba elementów w S, które nie znajdują się w jednej podgrupie S, który pojawia się w S . Jeśli ten sam zestaw pojawia się wiele razy w S , możemy arbitralnie wybrać jeden, aby przejść pierwszy i pozwolić innym kosztować 0.SSS
Oznacza to, że problem jest równoważny problemowi minimalnego ważonego czasu ukończenia przy planowaniu pojedynczej maszyny z ograniczeniami pierwszeństwa. W tym problem, biorąc pod uwagę zbiór zadań z ciężarkami i czasu t j oraz częściowego porządku na zadania P , chcemy znaleźć uporządkowanie zadań, które minimalizuje ważonej całkowity czas zakończenia, tjwjtjP
∑ni=1wji(∑ik=1tjk)
z zastrzeżeniem ograniczeń pierwszeństwa . Problem skumulowanego minimalnego zestawu z zamkniętymi zestawami przecięcia można w to przekształcić, tworząc zadanie dla każdego zestawu, w którym każde zadanie ma wagę 1, czas równy kosztowi przyrostowemu zdefiniowanemu powyżej, a P jest kolejnością nadaną przez włączenie podzbioru.PP
Jak się okazuje, problem ten jest NP-trudny do ogólnego , jak również. Jednak niektóre specjalne formy P można rozwiązać w czasie wielomianowym.PP
W pracy przedstawiono algorytm dla przypadku szeregów równoległych szeregowych P (który obejmuje również ważny przypadek drzew). Niestety nie mogłem uzyskać dostępu do tego papieru, więc postanowiłem spróbować go opracować niezależnie. Oto co wymyśliłem.O(nlogn)P
Aby rozwiązać ten problem, potrzeba kilku obserwacji.
Po pierwsze, przy braku jakichkolwiek ograniczeń pierwszeństwa, optymalnym rozwiązaniem jest po prostu sortowanie zadań w celu zwiększenia . Dla uproszczenia będę odnosił się do tego jako wartości zadania, w skróciev(j). Zauważ, że ponieważ sortowanie toO(nlogn), nie da się lepiej niż ta złożoność.tjwjv(j)O(nlogn)
Reguła 1 Niech i b będą zadaniami takimi, że a < b ∈ P i b obejmują a. Jeśli v ( a ) < v ( b ) , wówczas możemy usunąć ograniczenie a < b bez wpływu na optymalną kolejność lub wartość obiektywną.aba<b∈Pv(a)<v(b)a<b
Załóżmy, że pojawia się przed a w optymalnej kolejności odprężonego problemu. Ponieważ b obejmował pierwotnie, oznacza to, że wszystkie zadania między b i a w nowym porządku są nieporównywalne z a i b. Ale ponieważ b ma wyższą wartość niż a, możemy zmniejszyć wartość celu, zamieniając b i a, sprzeczność.ba
Podobnie możemy usunąć ograniczenie w przypadku, gdy o ile zapewniamy, że po sortowaniu według wartości zrywamy więzi, sprawdzając relacje pierwszeństwa pierwotnego (uproszczonego) problemu. Zapewnia to, że optymalne rozwiązanie dla złagodzonego problemu jest również optymalnym rozwiązaniem pierwotnego problemu.v(a)=v(b)
Dlatego za każdym razem, gdy b obejmuje a oraz , możemy uprościć problem, usuwając ograniczenie a < b .v(a)≤v(b)a<b
Zasada 2 Załóżmy, że wiemy, że b następuje natychmiast po optymalnym rozwiązaniu. Można połączyć A i B do nowego węzła C i T c = T + t b , przy kurczeniu poset P odpowiednio.wc=wa+wbtc=ta+tbP
Optymalna wartość obiektywna nowego problemu różni się o stałą od pierwotnej wartości obiektywnej (konkretnie ), jednak ta stała nie zależy od uporządkowania, a zatem nie ma wpływu na optymalne uporządkowanie. Możemy odzyskać optymalne rozwiązanie starego problemu poprzez optymalne rozwiązanie nowego problemu i zastąpienie c z o b .watbcab
Reguła 3 Załóżmy, że optymalne rozwiązanie wystąpienie problemów, bezpośrednio poprzedza B i V ( ) > V ( b ) . Załóżmy teraz, że tworzymy większą instancję problemu, dodając nowe zadania z nowym zestawem utworzonym z serii lub kompozycji równoległej z oryginałem. Zawsze będzie optymalne rozwiązanie większego problemu, gdy pojawia się bezpośrednio przed b .abv(a)>v(b)ab
Załóżmy inaczej. Niech optymalne rozwiązanie zawiera . Ponieważ P została utworzona przez szereg równoległych kompozycji, wiadomo, że wszystkie x i y są nieporównywalne i b . Scalanie wszystkich x i węzły do nowego węzła x ' stosując regułę 2. Rozważmy teraz v ( x ' ) . Jeśli v ( x ′ ) ≤ v ( a ) to możemy zamienića,x1,x2,…,bPxiabxix′v(x′)v(x′)≤v(a) ibez zwiększania wartości obiektywne. Podobnie, jeśli v ( x ′ ) ≥ v ( b ) , możemy zamienić x ′ i b . Dlatego v ( a ) < v ( x ′ ) < v ( b ) . Ale v ( a ) > v ( b ) , sprzeczność.x′av(x′)≥v(b)x′bv(a)<v(x′)<v(b)v(a)>v(b)
Stosując regułę 2 i zasadę 3, możemy już uzyskać prosty, ale nieoptymalny algorytm . Ponieważ P jest szeregową serią równoległą, załóżmy, że dane wejściowe zawierają drzewne przedstawienie P, gdzie każdy węzeł reprezentuje skład serii lub skład równoległy, a liście są pojedynczymi zadaniami. Możemy znaleźć optymalne rozwiązanie z przechodzeniem drzewa w przedsprzedaży, utrzymując niezmiennie, że optymalnym rozwiązaniem dla każdego podproblemu jest łańcuch o rosnącej wartości.O(n2)PP
Załóżmy, że jest szeregową kompozycją podproblemów z zestawami P 1 i P 2 . Niech optymalne rozwiązania będą zamawiać C 1 i C 2 . Optymalnym rozwiązaniem dla P jest oczywiście połączenie tych łańcuchów. Jednak możliwe jest, że pierwsze zadanie w C 2 ma niższą wartość niż ostatnie zadanie w C 1 . Aby zachować niezmienność, że rozwiązanie jest posortowanym łańcuchem, używamy reguły 3 + reguły 2 do scalania punktów końcowych, o ile nie są one posortowane.PP1P2C1C2PC2C1
Jeśli jest składem równoległym, po prostu bierzemy posortowane łańcuchy S 1 i S 2 i łączymy je w nowy posortowany łańcuch. Dzięki niezmiennikowi jest to ważne.PS1S2
Niestety algorytmem tym jest . Aby uzyskać algorytm O ( n l o g n ) , musimy leniwie obliczyć łańcuchy, stosując regułę 1.O(n2)O(nlogn)
W szczególności, jeśli podproblem zawiera tylko węzły, w których ograniczenia pierwszeństwa są takie same jak kolejność wartości, wówczas możemy całkowicie zapomnieć o ograniczeniach pierwszeństwa i spojrzeć tylko na wartości. Jest to zapewnione przez ten sam niezmiennik, który zapewnił, że rozwiązania są posortowanymi łańcuchami w poprzednim algorytmie.
Zamiast obliczać posortowany łańcuch dla każdego podproblemu, reprezentujemy optymalne rozwiązanie podproblemu jako parę hałd Fibonacciego, jedną stertę min i jedną stertę maksimum, obie zawierające wszystkie zadania w podproblemie. Oznacza to, że możemy zrzucić minimalny lub maksymalny element rozwiązania w czasie logarytmicznym.
PP
Aby uzyskać kompozycję równoległą, po prostu łączymy pary sterty. Nowa sterta min jest scaleniem stosu min z każdego podproblemu i podobnie z stosem maksymalnym. Pamiętaj, że hałdy Fibonacciego można łączyć w stałym czasie.
Gdy mamy parę stert reprezentującą rozwiązanie całego problemu, możemy znaleźć rzeczywiste uporządkowanie rozwiązania, odsuwając stertę min, aż będzie pusta. Następnie cofamy wszystkie podstawienia reguły 2, aby uzyskać rozwiązanie pierwotnego problemu.
O(nlogn)