Wydajny algorytm do generowania losowo dwóch rozproszonych, obłąkanych permutacji multiset


13

tło

Załóżmy, że mam dwie identyczne partie n kulek. Każdy marmur może mieć jeden z kolorów c , gdzie cn . Niech ni oznacza liczbę kulek koloru i w każdej partii.

Niech S będzie multiset {1,,1n1,2,,2n2,,1c,,cnc} reprezentujący jedną partię. W reprezentacji częstotliwości , S może być zapisany jako (1n12n2cnc) .

Liczbę różnych S podaje wielomian :

|SS|=(nn1,n2,,nc)=n!n1!n2!nc!=n!i=1c1ni!.

Pytanie

Czy istnieje skuteczny algorytm do generowania losowo dwóch rozproszonych, zaburzonych permutacji P i Q dla S ? (Rozkład powinien być jednolity.)

  • Permutacja P jest rozproszony w przypadku każdego odrębnego elementu i z P , przypadki i są rozmieszczone w przybliżeniu równomiernie P .

    Załóżmy na przykład, że S=(1424)={1,1,1,1,2,2,2,2} .

    • {1,1,1,2,2,2,2,1} nie jest rozproszony
    • {1,2,1,2,1,2,1,2} jest rozproszony

    Bardziej rygorystycznie:

    • Jeśli , istnieje tylko jedno wystąpienie do „spacji” w , więc niech .i P Δ ( i ) = 0ni=1iPΔ(i)=0
    • Inaczej, niech jest odległością pomiędzy przykład  a przykład  w w . Odejmij od niego oczekiwaną odległość między instancjami , definiując następujące elementy: Jeśli jest równomiernie rozmieszczone w , to powinna wynosić zero lub być bardzo bliska zeru, jeśli .j j + 1 i P i δ ( i , j ) = d ( i , j ) - nd(i,j)jj+1iPi
      δ(i,j)=d(i,j)nniΔ(i)=j=1ni1δ(i,j)2
      iPΔ(i)nin

    Teraz określić statystycznego do zmierzenia ile każda równomiernie rozstawione w . Nazywamy rozpraszanie jeśli jest bliskie zeru lub z grubsza . (Można wybrać próg specyficzny dla , aby było rozproszone, jeśli )s(P)=i=1cΔ(i)iPPs(P)s(P)n2k1SPs(P)<kn2

    To ograniczenie przywołuje bardziej rygorystyczny problem planowania w czasie rzeczywistym, zwany problemem pinwheel z multiset (tak, że ) i gęstością . Celem jest zaplanowanie cyklicznej nieskończonej sekwencji tak, aby każda podsekwencja o długości zawierała co najmniej jedno wystąpienie . Innymi słowy, wykonalny harmonogram wymaga wszystkich ; Jeśli gęsta ( ), a i . Problem z mechanizmem Wiatraczek wydaje się być NP-zupełny.A=n/Sai=n/niρ=i=1cni/n=1Paiid(i,j)aiAρ=1d(i,j)=ais(P)=0

  • Dwa permutacji i są niezrównoważoną jeśli jest derangement z ; to znaczy dla każdego indeksu .PQPQPiQii[n]

    Załóżmy na przykład, że .S=(1222)={1,1,2,2}

    • {1,2,1,2} i nie są zaburzone{1,1,2,2}
    • {1,2,1,2} i są zaburzone{2,1,2,1}

Analiza eksploracyjna

Interesuje mnie rodzina multisets o i dla . W szczególności niech .n=20ni=4i4D=(1424344352617181)

  • Prawdopodobieństwo, że dwie losowe permutacji i o są niezrównoważoną około 3%.PQD

    Można to obliczyć w następujący sposób, gdzie jest tym wielomianem Laguerre'a: Patrz tutaj dla wyjaśnienia.Lkk

    |DD|=0dteti=1cLni(t)=0dtet(L4(t))3(L3(t))(L2(t))(L1(t))3=4.5×1011|SD|=n!i=1c1ni!=20!(4!)3(3!)(2!)(1!)3=1.5×1013p=|DD|/|SD|0.03
  • Prawdopodobieństwo, że bezładny permutacji o jest rozproszony ustawienie dowolnego progu w przybliżeniu wynosi 0,01%, .PDs(P)<25

    Poniżej znajduje się empiryczny wykres prawdopodobieństwa 100 000 próbek gdzie jest permutacją losową .s(P)PD

    Przy średnich rozmiarach próbek .s(P)Gamma(α8,β18)

    Ps(P)cdf(s(P)){1,8,2,3,4,1,5,2,3,6,1,4,2,3,7,1,5,2,4,3}1191<105{8,2,3,4,1,6,5,2,3,4,1,7,1,2,3,5,4,1,2,3}140916<104{3,6,5,1,3,4,2,1,2,7,8,5,2,4,1,3,3,2,1,4}650972<10.05{3,1,3,4,8,2,2,1,1,5,3,3,2,6,4,4,2,1,7,5}12239136<10.45{4,1,1,4,5,5,1,3,3,7,1,2,2,4,3,3,8,2,2,6}16979189<10.80

Prawdopodobieństwo, że dwie losowe kombinacje są prawidłowe (zarówno rozproszone, jak i zaburzone) wynosi około .v(0.03)(0.0001)21010

Nieefektywne algorytmy

Popularny algorytm „szybki” do generowania przypadkowego zaburzenia zestawu jest oparty na odrzuceniu:

do
     P ← random_permutation ( D )
do momentu wymowy ( D , P )
zwróć P

która zajmuje około iteracji, ponieważ istnieje mniej możliwe zaburzeniami. Jednak algorytm losowy oparty na odrzuceniu nie byłby skuteczny w przypadku tego problemu, ponieważ przyjmowałby on kolejność iteracji.en!/e1/v1010

W algorytmie stosowanym przez Sage'a przypadkowe wykolejenie zbioru wielokrotnego „powstaje poprzez wybranie losowego elementu z listy wszystkich możliwych odchyleń”. Jednak to również jest nieefektywne, ponieważ istnieją prawidłowe permutacje do wyliczenia, a poza tym do zrobienia tego potrzebny byłby algorytm.v|SD|21016

Dalsze pytania

Jaka jest złożoność tego problemu? Czy można go sprowadzić do dowolnego znanego paradygmatu, takiego jak przepływ sieci, kolorowanie wykresów lub programowanie liniowe?


Jeśli chodzi o twoją definicję „odstępów”, nie chcesz, aby dla z jako wartownicy? Innymi słowy, pojedynczy element powinien znajdować się na środku, dwa powinny podzielić permutację na trzy części i tak dalej. d(i,j)n/(ni+1)0ijn+1P0=Pn+1=i
Raphael

Co się stanie, jeśli dla zła (małe, ale wystarczająco duże); możemy nawet mieć rozproszonych permutacje niż? Z pewnością nie znosimy zmiany, by znaleźć dwóch obłąkanych! Wydaje się, że żaden element nie może wystąpić więcej niż razy. S={1nk,2k}kn/2
Raphael

1
Jaki jest stosunek wszystkich par permutacji zaburzonych między wszystkimi parami permutacji rozproszonych ? Podobnie, spośród wszystkich par obłąkanych permutacji, ile składa się z dwóch rozproszonych? (Jeśli którykolwiek z tych współczynników jest „wysoki”, możemy skoncentrować nasz wysiłek na jednej połowie procesu, pozostawiając drugą na odrzuceniu.)
Raphael

1
@Raphael (# 3a) Z 1 miliona losowych permutacji , 561 rozproszonych miało . par jest zaburzonych. Ds(P)306118/(5612)=6118/1570803.9%
hftf

1
@Raphael (# 3b) Z 10 milionów losowych par permutacji , 306893 par zostało zaburzonych. Tylko 29 z tych par miało obie permutacje z . Oto histogram ( wartości ). Ds(P)50
hftf

Odpowiedzi:


3

Jedno podejście: możesz zredukować to do następującego problemu: Biorąc pod uwagę formułę logiczną , wybierz losowo przypisanie równomiernie spośród wszystkich zadowalających przypisań . Problem ten jest trudny dla NP, ale istnieją standardowe algorytmy do generowania który jest w przybliżeniu równomiernie rozmieszczony, zapożyczając metody z algorytmów #SAT. Na przykład jedną z technik jest wybranie funkcji skrótu której zakres ma starannie wybrany rozmiar (mniej więcej taki sam rozmiar, jak liczba spełniających przypisań ), losowo wybrać równomiernie wartość z zakresuφ(x)xφ(x)xhφyh, a następnie użyj solwera SAT, aby znaleźć satysfakcjonujące przypisanie do formuły . Aby uczynić go wydajnym, możesz wybrać jako rzadką mapę liniową.φ(x)(h(x)=y)h

Może to być strzelanie do pchły za pomocą armaty, ale jeśli nie masz innych podejść, które wydają się wykonalne, możesz spróbować.


jest to trudne do naśladowania. jest wartością logiczną, a jest łańcuchem binarnym (zestaw zmiennych binarnych)? więc końcowe równanie oznacza ...? φ(x)h(x)
2015 r

0

pogłębiona dyskusja / analiza tego problemu rozpoczęła się na czacie cs z dalszym tłem, które ujawniło pewną subiektywność w złożonych wymaganiach problemu, ale nie znalazło żadnych bezpośrednich błędów ani przeoczeń. 1

oto trochę przetestowanego / przeanalizowanego kodu, który w porównaniu z innym rozwiązaniem opartym na SAT jest stosunkowo „szybki i brudny”, ale nie był łatwy do debugowania. jest luźno koncepcyjnie oparty na lokalnym pseudolosowym / chciwym schemacie optymalizacji nieco podobnym do np. 2-OPT dla TSP . podstawową ideą jest rozpoczęcie od losowego rozwiązania, które pasuje do pewnego ograniczenia, a następnie zakłócenie go lokalnie, aby szukać ulepszeń, zachłannie szukając ulepszeń i iteracji przez nie, i kończąc, gdy wszystkie lokalne ulepszenia zostaną wyczerpane. Kryterium projektowe było takie, że algorytm powinien być tak wydajny / unikać odrzucenia, jak to tylko możliwe.

istnieją badania nad algorytmami derangancji [4], np. stosowanymi w SAGE [5], ale nie są one zorientowane na multisety.

prosta perturbacja to „zamiana” tylko dwóch pozycji w krotce (-ach). implementacja jest w rubinie. poniżej znajduje się przegląd / uwagi z odniesieniami do numerów linii.

qb2.rb (gist-github)

podejście tutaj polega na tym, aby zacząć od dwóch niepoprawnych krotek (# 106), a następnie lokalnie / łapczywie poprawić rozproszenie (# 107), połączone w koncepcji zwanej derangesperse(# 97), zachowując odstępstwo. zwróć uwagę, że zamiana dwóch takich samych pozycji w parze krotek pozwala zachować odstępstwo i może poprawić dyspersję oraz że jest to (część) metoda / strategia rozproszenia.

derangepodprogram działa od lewej do prawej na tablicy (multiset) i swapów z elementami później w tablicy gdzie swap nie jest z tego samego elementu (# 10). algorytm się powiedzie, jeśli bez dalszych zamian na ostatniej pozycji dwa krotki nadal są zaburzone (# 16).

istnieją 3 różne podejścia do zmniejszania początkowych krotek. 2. krotka p2jest zawsze tasowana. można zacząć od krotki 1 ( p1) uporządkowanej według a.„najwyższych mocy 1. rzędu” (# 128), b.kolejności losowej (nr 127) c.i „najniższych mocy 1. rzędu” („najwyższe moce ostatniego rzędu”) (# 126).

procedura rozproszenia dispersejest bardziej zaangażowana, ale koncepcyjnie nie jest tak trudna. znowu używa swapów. zamiast ogólnie optymalizować dyspersję wszystkich elementów, po prostu próbuje iteracyjnie złagodzić obecny najgorszy przypadek. chodzi o to, aby znaleźć 1 st elementy najmniej rozproszyć, od lewej do prawej. zaburzenie polega na zamianie lewego lub prawego elementu ( x, yindeksów) najmniej rozproszonej pary z innymi elementami, ale nigdy żadnej z pary (co zawsze zmniejszałoby dyspersję), a także pomijanie próby zamiany z tymi samymi elementami ( selectw # 71) . mjest indeksem punktu środkowego pary (# 65).

jednak dyspersja jest mierzona / optymalizowana dla obu krotek w parze (# 40) przy użyciu dyspersji „najmniej / najbardziej na lewo” w każdej parze (# 25, # 44).

algorytm próbuje zamienić „najdalsze” elementy 1 st ( sort_by / reverse# 71).

istnieją dwie różne strategie true, falsedecydowania, czy zamienić lewy czy prawy element najmniej rozproszonej pary (# 80), albo lewy element do zamiany pozycji na lewy / prawy element na prawą stronę, albo najdalszy lewy lub prawy element w parze rozproszonej od elementu wymiany.

algorytm kończy się (# 91), gdy nie jest już w stanie poprawić dyspersji (albo przesuwa najgorsze miejsce rozproszenia w prawo, albo zwiększa maksymalną dyspersję w całej parze krotek (# 85)).

statystyki są wyprowadzane dla odrzutów powyżej c= 1000 derangencji w 3 podejściach (# 116) i c= 1000 derangesperses (# 97), patrząc na 2 algorytmy rozproszone dla obłąkanej pary od odrzucenia (# 19, # 106). ten ostatni śledzi całkowite średnie rozproszenie (po gwarantowanym zaburzeniu). przykładowy przebieg jest następujący

c       0.661000
b       0.824000
a       0.927000
[2.484, 2, 4]
[2.668, 2, 4]

pokazuje to, że a-truealgorytm daje najlepsze wyniki przy ~ 92% braku odrzucenia i średniej najgorszej odległości rozproszenia ~ 2,6 oraz gwarantowanym minimum 2 z ponad 1000 prób, tj. co najmniej 1 nierównomiernym elementem pośredniczącym między wszystkimi parami tego samego elementu. znalazł rozwiązania aż 3 nierównomierne elementy.

algorytm derangencji jest liniowym wstępnym odrzuceniem czasu, a algorytm dyspersji (działający na zmienionym wejściu) wydaje się być prawdopodobnie ~ .O(nlogn)

1 problemem jest znalezienie aranżacji pakietów quizbowl, które spełniają tak zwane „feng shui” [1] lub „ładne” losowe porządkowanie, w którym „miły” jest nieco subiektywny i nie jest jeszcze „oficjalnie” skwantyfikowany; autor problemu przeanalizował / sprowadził go do kryteriów obłąkania / rozproszenia na podstawie badań społeczności quizbowl i „ekspertów feng shui” [2]. istnieją różne pomysły na „zasady feng shui”. przeprowadzono pewne „opublikowane” badania nad algorytmami, ale pojawiają się one we wczesnych stadiach. [3]

[1] Pakiet feng shui / QBWiki

[2] Pakiety Quizbowl i feng shui / Lifshitz

[3] Umieszczanie pytań , forum centrum zasobów HSQuizbowl

[4] Generowanie losowych błędów / Martinez, Panholzer, Prodinger

[5] Algorytm deratyzacji mędrca (python) / McAndrew


fyi dalej myślałem, że jest usterka w szaleńczej rutynie i to nie zawsze szaleje. pozycja wymiany może się zmieniać bez zamiany czegokolwiek. istnieje prosta poprawka do poprawnego przetestowania sukcesu.
vzn
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.