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?

hftf
źródło
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ć.

DW
źródło
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

vzn
źródło
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