tło
Załóżmy, że mam dwie identyczne partie kulek. Każdy marmur może mieć jeden z kolorów , gdzie . Niech oznacza liczbę kulek koloru w każdej partii.
Niech będzie multiset reprezentujący jedną partię. W reprezentacji częstotliwości , może być zapisany jako .
Liczbę różnych podaje wielomian :
Pytanie
Czy istnieje skuteczny algorytm do generowania losowo dwóch rozproszonych, zaburzonych permutacji i dla ? (Rozkład powinien być jednolity.)
Permutacja jest rozproszony w przypadku każdego odrębnego elementu z , przypadki są rozmieszczone w przybliżeniu równomiernie .
Załóżmy na przykład, że .
- nie jest rozproszony
- jest rozproszony
Bardziej rygorystycznie:
- Jeśli , istnieje tylko jedno wystąpienie do „spacji” w , więc niech .i P Δ ( 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 ) - n
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 )
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.
Dwa permutacji i są niezrównoważoną jeśli jest derangement z ; to znaczy dla każdego indeksu .
Załóżmy na przykład, że .
- i nie są zaburzone
- i są zaburzone
Analiza eksploracyjna
Interesuje mnie rodzina multisets o i dla . W szczególności niech .
Prawdopodobieństwo, że dwie losowe permutacji i o są niezrównoważoną około 3%.
Można to obliczyć w następujący sposób, gdzie jest tym wielomianem Laguerre'a: Patrz tutaj dla wyjaśnienia.
Prawdopodobieństwo, że bezładny permutacji o jest rozproszony ustawienie dowolnego progu w przybliżeniu wynosi 0,01%, .
Poniżej znajduje się empiryczny wykres prawdopodobieństwa 100 000 próbek gdzie jest permutacją losową .
Przy średnich rozmiarach próbek .
Prawdopodobieństwo, że dwie losowe kombinacje są prawidłowe (zarówno rozproszone, jak i zaburzone) wynosi około .
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.
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.
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?
Odpowiedzi:
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) x h φ y h , 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ć.
źródło
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.derange
podprogram 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
p2
jest zawsze tasowana. można zacząć od krotki 1 (p1
) uporządkowanej wedługa.
„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
disperse
jest 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, y
indeksó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 (select
w # 71) .m
jest 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, false
decydowania, 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) ic
= 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ącypokazuje to, że
a-true
algorytm 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
źródło