W automatach komórkowych istnieje naprawdę ważny problem zwany problemem Większość :
Problemem większościowym lub zadaniem klasyfikacji gęstości jest problem ze znalezieniem jednowymiarowych reguł automatu komórkowego, które dokładnie przeprowadzają głosowanie większością.
...
Biorąc pod uwagę konfigurację dwustanowych automatów komórkowych z komórkami i + j łącznie, z których i znajdują się w stanie zerowym, a j są w jednym stanie, prawidłowe rozwiązanie problemu głosowania musi ostatecznie ustawić wszystkie komórki na zero, jeśli i> j i ostatecznie musi ustawić wszystkie komórki na jedną, jeśli i <j. Pożądany stan końcowy jest nieokreślony, jeśli i = j.
Chociaż udowodniono, że żadne automaty komórkowe nie są w stanie rozwiązać problemu większości we wszystkich przypadkach, istnieje wiele zasad, które mogą rozwiązać ten problem w większości przypadków. Automat Gacsa-Kurdyumova-Levina ma dokładność około 78% z losowymi warunkami początkowymi. Reguła GKL nie jest skomplikowana:
- Promień 3, co oznacza, że nowy stan komórki zależy od 7 poprzednich komórek: siebie, 3 komórki po prawej i 3 komórki po lewej.
- Jeśli komórka jest obecnie
O
, jej nowym stanem jest większość siebie, komórka po lewej, a komórka 3 kroki po lewej. - Jeśli komórka jest obecnie
1
, jej nowym stanem jest większość siebie, komórka po prawej, a komórka 3 kroki po prawej.
Oto przykład:
0 1 0 1 1 1 0 1 1 0 1 0 0 1
0 1 1 1 1 1 1 1 0 0 1 1 0 0
0 1 1 1 1 1 1 1 1 0 1 0 0 0
0 1 1 1 1 1 1 1 0 1 0 1 0 0
0 1 1 1 1 1 1 0 1 0 1 0 1 0
0 1 1 1 1 1 0 1 0 1 0 1 1 1
1 1 1 1 1 0 1 0 1 1 1 1 1 1
1 1 1 1 0 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1
W tym przykładzie automat komórkowy poprawnie obliczył, że 8> 6. Inne przykłady zajmują dłuższe okresy czasu, a tymczasem wytwarzają fajne wzory. Poniżej znajdują się dwa przykłady, które losowo znalazłem.
0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 1 1 1 1 0 1 0 0 1 1 1
1 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 1
Przenosząc go na wyższy poziom
O ile moje badania internetowe wykazały, prawie wszystkie badania akademickie dotyczące problemu większości zostały przeprowadzone na 2-stanowych urzędach certyfikacji. W tym wyzwaniu zamierzamy rozszerzyć problem większościowy na 3-stanowe urzędy certyfikacji . Nazywam to problemem mnogości . Wiele lub względna większość odnosi się do stanu, w którym jedna z opcji ma więcej głosów niż każda z opcji, ale niekoniecznie większość wszystkich głosów.
Opis problemu
- Istnieje 3-stanowy automat komórkowy 1D o promieniu 3.
- Istnieje 151 komórek z kołem warunkowym.
- Komórki te otrzymują losowy stan początkowy, pod warunkiem, że 1 z 3 stanów ma ściśle określoną liczbę. „Losowy” oznacza niezależny równomierny rozkład dla każdej komórki.
- Dokładność reguły to procent (prawidłowych) losowych warunków początkowych, w których wszystkie komórki synchronizują się do prawidłowego stanu (tego z wieloma) w ciągu 10000 pokoleń .
- Celem jest znalezienie reguły o wysokiej dokładności,
Wiele przypadków brzegowych: Każda konfiguracja z 50/50/51 jest prawidłową konfiguracją początkową (ponieważ istnieje ścisła liczba), natomiast dowolna konfiguracja z 51/51/49 jest nieprawidłowa (ponieważ nie ma ścisłej mnogości).
Przestrzeń wyszukiwania wynosi 3 ^ 3 ^ 7 (~ 3e1043), daleko poza zasięgiem wyczerpującego wyszukiwania. Oznacza to, że będziesz musiał skorzystać z innych technik, takich jak algorytmy genetyczne, aby rozwiązać ten problem. Zajmie to również trochę inżynierii ludzkiej.
Reguła generacji 10000 może ulec zmianie w zależności od czasu działania / dokładności reguł, które ludzie znajdą. Jeśli jest zbyt niski, aby pozwolić na rozsądne tempo konwergencji, mogę go podnieść. Alternatywnie mogę go obniżyć, aby służył jako remis.
Zwycięski
Zwycięzcą zostaje osoba, która zgodnie z zasadą CA promienia-3 z najwyższą dokładnością spośród wszystkich zawodników.
Twoje zgłoszenie powinno zawierać ...
- Opis reguły (w razie potrzeby z użyciem kodu Wolfram )
- Wskaźnik dokładności i wielkość próbki
- Rozsądne wyjaśnienie, w jaki sposób odkryłeś regułę, w tym programy napisane w celu jej rozwiązania lub wszelkie „ręczne” prace inżynierskie. (Jest to najbardziej interesująca część, ponieważ wszystko inne to tylko liczby surowe).
Wcześniejsza praca
- Artykuł Juille'a i Pollacka opisujący, w jaki sposób ewoluowali 2-stanowa reguła z 86% dokładnością.
- W pracy wykorzystano r = 3, 149-komórkowe, 2-stanowe CA. Nie próbuj do rozwiązania problemu Większość jednak, ale zamiast znaleźć przepisy, które szybko daje w wyniku przemian All
1
-all-0
wzór. Mimo tych różnic podejrzewam, że wiele technik będzie podobnych. - (Niezbyt pomocny, ponieważ jest za zaporą) artykuł Wolza i de Oliviery, który obecnie jest rekordzistą 2-stanowym
Odpowiedzi:
Rodzaj GKL plus wspinaczka pod górę, 61,498%
Jeśli komórka ma wartość 0, spójrz na komórki 3 po lewej stronie, 1 po lewej i na siebie. Ustaw wartość na większość. Jeśli to remis, pozostań taki, jaki jesteś.
Jeśli komórka to 1, spójrz na komórki 3 po prawej stronie, 1 po prawej i na siebie. Ustaw wartość na większość. Jeśli to remis, pozostań taki, jaki jesteś.
Jeśli komórka to 2, spójrz na komórki 2 po lewej, 2 po prawej i 3 po prawej. Ustaw wartość na większość. Jeśli to remis, pozostań taki, jaki jesteś.
Dostałem 59453 na 100 000, 59,453%
Niektóre mutacje i wspinanie się na wzgórza spowodowały, że 61498/100000 = 61,498%.
Prawdopodobnie przetestuję trochę więcej i opublikuję więcej informacji później.
źródło
„Po prostu wyrzuć 2s i zrób GKL” - 55,7%
Nie jest łatwo odgadnąć, jaka byłaby dobra zasada, więc próbowałem przynajmniej wymyślić coś, co uzyska wynik powyżej 1/3. Strategia polega na próbie uzyskania właściwej odpowiedzi, gdy stan większości wynosi 0 lub 1, i zaakceptowaniu straty, jeśli wynosi 2. Wynik ten wynosił 56,5% w 100 000 prób, co jest nieco lepsze niż można by się spodziewać po pomnożeniu 78% ( wynik GKL) * 2/3 (ułamek czasu, gdy odpowiedź wynosi 0 lub 1) = 52%.
Mówiąc konkretniej, strategia jest następująca:
Użyłem tego kodu do przetestowania:
źródło
„Po prostu kradnij co najlepsze i rozwijaj je”, bleh
Edycja: w obecnym stanie ta odpowiedź, zamiast znajdować lepsze wzorce, znajduje lepszą losową próbkę.
Ta odpowiedź koduje / dekoduje rozwiązania, wyliczając wszystkie stany jako liczby trójkowe (najpierw najmniej znacząca cyfra). Rozwiązanie dla 59,2%:
Ta odpowiedź została wyewoluowana z 55,7% feersum, przy użyciu następującego kodu. Ten kod wymaga libop , czyli mojej osobistej biblioteki tylko nagłówków C ++. Jest bardzo łatwy w instalacji, po prostu zrób
git clone https://github.com/orlp/libop
w tym samym katalogu, w którym zapisałeś program. Sugeruję kompilacjęg++ -O2 -m64 -march=native -std=c++11 -g
. Dla szybkiego rozwoju sugeruję również prekompilowanie libopa poprzez uruchomienie powyższej komendylibop/op.h
.źródło
Ręcznie kodowane, 57.541%
To faktycznie patrzy tylko na 5 komórek nad nim. Prawdopodobnie można to poprawić, zwiększając zasięg, na który patrzy. Przebiegł 100 000 przypadków testowych.
Algorytm:
Gen:
Kod testowy:
Przykład
źródło