W cesarskich Chinach o randze w społeczeństwie nie decydowały narodziny ani bogactwo, ale zdolność człowieka do przodowania w egzaminach cesarskich. Nefrytowy Cesarz, boski władca Niebios, wezwał do zbadania wszystkich jego poddanych w celu ustalenia ich wartości i do przekazania Boskiego mandatu do rządzenia Chinami.
Zasady biurokracji:
- Boska Biurokracja składa się z nieujemnych szeregów o wartości całkowitej, zaczynających się od 0. Każdy członek (bot) biurokracji należy do jednej rangi. Każda ranga może posiadać dowolną liczbę członków, ale nie może być pusta, chyba że wszystkie rangi powyżej są puste
- Na początku gry wszyscy członkowie mają rangę 0
- Na każdym kroku każdy członek biurokracji musi odpowiadać na egzamin. Egzamin polega na prawidłowym odgadnięciu wartości boolowskich listy. Długość listy to numer rangi nad członkiem.
- Pytania egzaminacyjne są przygotowywane przez losowego członka powyższej rangi. Członkowie najwyższej rangi otrzymują pytania bezpośrednio z
JadeEmperor
(patrz poniżej) - Członek, który uzyska co najmniej 50% na egzaminie, kwalifikuje się do promocji. Członek, który uzyska mniej niż 50% na egzaminie, kwalifikuje się do obniżenia.
- W przypadku członka kwalifikującego się do obniżenia ranga jego ranga została zmniejszona o jeden tylko, jeśli jego miejsce zajmuje członek kwalifikujący się do promocji na niższej pozycji.
- Wszyscy członkowie kwalifikujący się do promocji mają zwiększoną rangę o jeden, o ile nie pozostawia to pustej rangi.
- Jeśli nie wszyscy kwalifikujący się członkowie mogą zostać zdegradowani lub awansowani, pierwszeństwo mają osoby o najniższym poziomie (dla zdegradowania) lub. najwyższy wynik (za promocję). Więzy są zrywane losowo.
- Ranga członka może się zmienić maksymalnie o 1 w każdej turze.
Zasady gry:
- Każdemu botowi zostanie losowo przypisany identyfikator na początku gry, który nie zmieni się w trakcie gry.
JadeEmperor
Ma ID-1, wszystkie inne mają kolejnych identyfikatorów nieujemne, od 0. - Wszystkie boty konkurują w tym samym czasie
- Gra trwa 100 tur, a wynikiem bota jest jego średnia pozycja w tym czasie.
- Całkowity wynik jest uzyskiwany przez uruchomienie 1000 gier i uśrednienie wyników.
- Każdy bot to klasa Python 3 implementująca następujące cztery funkcje:
ask(self,n,ID)
, co sprawia, że egzamin jestlist
zwracany przez boolean o długości n. ID to identyfikator bota, który musi odgadnąć tę listę.ask()
może być wywoływany wiele razy podczas jednej rundy dla dowolnego bota, ale też wcale.answer(self,n,ID)
, która jest próbą odpowiedzi na egzamin przez zwrócenielist
liczby booleanów o długości n. ID to identyfikator bota, któryask()
wygenerował egzamin.answer()
nazywa się dokładnie raz na rundę dla każdego bota.update(self,rankList,ownExam,otherExams)
jest wywoływany, gdy kontroler wykona wszystkie za i przeciw. Jego argumentami są: Lista liczb całkowitych, zawierająca wszystkie rangi według identyfikatora wszystkich botów; krotka składająca się z dwóch list, najpierw pytań egzaminacyjnych, a następnie odpowiedzi udzielonych przez bota (na wypadek, gdyby zapomniał); następnie lista krotek, podobnie składająca się z par egzamin-odpowiedź, tym razem do wszystkich egzaminów, które wykonał bot.__init__(self, ID, n)
przekazuje botowi swój własny identyfikator i liczbę konkurujących botów.
- Klasy mogą implementować inne funkcje do użytku prywatnego
- Definiowanie dalszych zmiennych i wykorzystywanie ich do przechowywania danych o poprzednich egzaminach jest wyraźnie dozwolone.
- Programowanie meta-efektów jest zabronione, co oznacza wszelkie próby bezpośredniego dostępu do kodu innych botów, kodu kontrolera, powodujące wyjątki lub podobne. To jest konkurs strategii na egzaminy, a nie hakowanie kodu.
- Boty próbujące sobie nawzajem pomagać są wyraźnie dozwolone, o ile nie robią tego za pomocą meta-efektów, ale wyłącznie na podstawie przekazywanych informacji
update()
- Inne języki są dozwolone tylko w przypadku, gdy można je łatwo przekonwertować na Python 3.
- Numer biblioteki zostanie zaimportowany jako
np
. Wersja to 1.6.5, co oznacza, że używa starej losowej biblioteki. Jeśli masz Numpy 1.7, stare funkcje są dostępne wnumpy.random.mtrand
celu przetestowania. Pamiętaj, aby usunąć mtrand w celu przesłania. - Jeśli bot spowoduje wyjątek podczas działania, zostanie zdyskwalifikowany. Wszelkie bot którego kod jest tak ukrywane, że to niemożliwe, aby powiedzieć, czy to generuje listę długości n, gdy
ask()
alboanswer()
nazywa zostanie zdyskwalifikowany także zapobiegawczo. Bot zmuszający mnie do głębokiego kopiowania wyników otrzymuje -1 na wynik. - Nazwy klas muszą być unikalne
- Dozwolonych jest wiele botów na osobę, ale pobierana będzie tylko najnowsza wersja iteracyjnie zaktualizowanych botów.
- Ponieważ wydaje się, że istnieje pewne zamieszanie dotyczące podobieństwa bota:
- Jesteś niedozwolone aby umieścić kopię innego bota. To jedyna standardowa luka, która naprawdę ma zastosowanie w tym wyzwaniu.
- Jesteś wolno mieć kod wspólny z innymi robotami, w tym boty innych ludzi.
- Teraz nie wolno złożyć bot, który różni się od drugiego tylko trywialny zmiany strategii (podobnie jak zmiany w nasieniu do generowania zapytania) , chyba że można udowodnić, że liczba takich botów kopiowanie węgla jest minimalna wymagana sukces uchwalenie ich strategii (zwykle będą to dwa boty do współpracy).
Przykładowe boty:
JadeEmperor
Jest zawsze częścią gry, ale nie konkurować; służy jako generator do egzaminów botów najwyższej rangi. Jego egzaminy są losowe, ale nie jednolite, aby umożliwić inteligentnym botom awans.
class JadeEmperor:
def __init__(self):
pass
def ask(self,n,ID):
num=min(np.random.exponential(scale=np.sqrt(np.power(2,n))),np.power(2,n)-1)
bi=list(np.binary_repr(int(num),width=n))
return [x=='0' for x in bi]
Drunkard produkuje egzaminy i odpowiedź całkowicie losowo. Będzie częścią gry.
class Drunkard:
def __init__(self,ID,n):
pass
def ask(self,n,ID):
return list(np.random.choice([True,False],size=n,replace=True))
def answer(self,n,ID):
return list(np.random.choice([True,False],size=n,replace=True))
def update(self,rankList,ownExam,otherExams):
pass #out
Plagiarist tylko kopie poprzednich egzaminów. Będzie także częścią gry.
class Plagiarist:
def __init__(self,ID,n):
self.exam=[True]
def ask(self,n,ID):
return (self.exam*n)[0:n]
def answer(self,n,ID):
return (self.exam*n)[0:n]
def update(self,rankList,ownExam,otherExams):
self.exam=ownExam[0]
Kod kontrolera dostępny tutaj . W celu przetestowania możesz umieścić własną klasę w pliku Contestants.py w tym samym folderze i zostaną one zaimportowane.
Chatroom można znaleźć tutaj .
Rozpoczęły się egzaminy!
Aktualny wynik, z większą precyzją (10000 przebiegów) dla października 20:
Konkursy będą przeprowadzane przy każdym nowym wpisie w dającej się przewidzieć przyszłości.
źródło
ID, n
innych metodn, ID
?Odpowiedzi:
Santayana
Ci, którzy nie pamiętają przeszłości, skazani są na jej powtórzenie. Podejmujemy więc decyzje na podstawie tego, jak zachowali się inni w przeszłości, odpowiadając na podstawie odpowiedzi, której pytający zwykle oczekiwał od nas przy danym indeksie, i prosząc o odpowiedź, której udzielili nam najrzadziej przy danym indeksie .
źródło
Staranny Bot
Ten bot studiuje do testów! Próbuje znaleźć wzorce w testach wydanych przez różne boty i działa zgodnie z nimi.
Z mojej strony, jak dotąd, ten bot przewyższa wszystkie inne boty, które mogłem pracować na moim komputerze, z wyjątkiem Alpha, Beta i Gamma (które zostały zaprogramowane do współpracy). Bot nie korzysta z faktu, że łączenie drużyn jest dozwolone, ponieważ czułem, że to było trochę jak oszukiwanie i trochę brudne. Patrząc na to, współpraca wydaje się dość skuteczna.
Bot próbuje rozpoznać, kiedy odpowiedzi na testy są losowe, a odpowiedź odpowiada, że mam nadzieję, że średnio 50% na testach.
Bot próbuje także rozpoznać, kiedy bot po prostu przewrócił swoje odpowiedzi, aby zrzucić inne boty, które próbują przewidzieć ich zachowanie, jednak nie zaprogramowałem go specjalnie, aby działał w tej sprawie.
Kod opatrzony adnotacjami z kilkoma komentarzami, aby ułatwić czytanie
źródło
Policz Oracular
Ten bot używa algorytmu, który uśrednia egzaminy wszystkich innych działających botów (biorąc pod uwagę okrągłą liczbę i jakąś straszną heurystykę) do decydowania, co każdy bot ustawi jako egzamin.
Hrabia pyta się o egzaminy za pomocą skrótu md5. Zarówno pytania, jak i odpowiedzi są zatem deterministyczne. Ignoruje większość danych wejściowych, pytając i odpowiadając dokładnie te same sekwencje booleanów, deszczu lub blasku, w tym przeciwko Jade Emporer.
źródło
YinYang
Odpowiedzi na wszystkie
True
lub wszystkieFalse
, oprócz jednego losowo wybranego indeksu. Pyta o przeciwieństwo odpowiedzi. Zamienia losowo, aby zrzucić przeciwników.Wi Qe Lu (Switcheroo)
Odpowiedzi i pytania losowo w pierwszej rundzie. Następnie korzysta z odpowiedzi z poprzedniego egzaminu i zmienia pytanie, czy ponadprzeciętna liczba zawodników dobrze to zrozumiała.
źródło
Jeden mój bot:
Tomasz
Podróżnik z dalekiej krainy ma niebezpieczne pomysły na to, że wcześniejsze wyniki wskazują na przyszłe wyniki. Używa ich do powstrzymywania innych botów, chyba że stłumi to jego awans.
źródło
Alfa
Przeczytaj czat przed oddaniem głosu. Te boty nie naruszają żadnych zasad. PO zachęca nawet współpracujących botów.
Alpha tworzy zespół wraz z Beta. Obaj korzystają ze wstępnie zdefiniowanego zestawu egzaminów, aby pomóc sobie nawzajem awansować. Obaj również korzystają z botów używających ciągle tych samych egzaminów.
źródło
Wyrównywacz
Wszyscy powinni być równi (bez tych głupich bzdur cesarza), więc zapewnij jak największą mobilność społeczną. Spraw, aby pytania były naprawdę łatwe (odpowiedź zawsze brzmi Prawda), aby ludzie mogli odnieść sukces.
źródło
Beta
Przeczytaj czat przed oddaniem głosu. Te boty nie naruszają żadnych zasad. PO zachęca nawet współpracujących botów.
Beta tworzy zespół wraz z Alphą. Obaj korzystają ze wstępnie zdefiniowanego zestawu egzaminów, aby pomóc sobie nawzajem awansować. Obaj również korzystają z botów korzystających z tych samych egzaminów w kółko.
źródło
Gamma
Przeczytaj czat przed oddaniem głosu. Te boty nie naruszają żadnych zasad. PO zachęca nawet współpracujących botów.
Gamma odkryła plany Alpha i Beta i stara się wykorzystać oba z nich, przebierając się za jednego z nich.
źródło
TitForTat
Zadaje łatwe pytania, jeśli zadawałeś je w przeszłości. Jeśli nigdy nie poddałeś się egzaminowi, domyślnie są to proste pytania.
Ponadto nie ufa nikomu, kto zadaje trudne pytania, i udzieli im nieprzewidzianych odpowiedzi.
Ten bot działa dobrze, jeśli współpracują z nim inne boty. Obecnie współpracuje tylko Equalizer, ale mam nadzieję, że powinno to wystarczyć.
źródło
list
obiekty przez cały czas. Ponadto, zarówno według starych, jak i zaktualizowanych zasad, idealne kopie bota nie są prawidłowymi zgłoszeniami, więc dozwolona liczba instancji tego bota to 1.Przeciwnie
Nefrytowy Cesarz ma zawsze rację, więc implementuje funkcję pytającą Nefrytowego Cesarza jako własną funkcję odpowiedzi, gdy potrzebuje więcej niż 2 odpowiedzi. Tylko na 1 odpowiedź odpowiada
true
(przyzwoite szanse na poprawność), a na 2 odpowiadatrue,false
(ta odpowiedź „co najmniej połowa” pytań trzy z czterech możliwych quizów, lepiej niż losowo).Używa podobnej logiki w swojej Aktualizacji w odniesieniu do tego, jak zmienia swój wzór pytania, ale jego logika pytania jest podobna do Nefrytowego Cesarza, tylko z inną wagą. Zmienia się między wyższymi wartościami
true
i wyższymi wartościami,false
gdy zbyt wielu kandydatów uzyska wystarczająco wysoką ocenę, aby przejść.źródło
true, false
zawiedzie, jeśli egzamin jestfalse, true
?answer
występują błędy składniowe i nazwy -true
ifalse
powinny byćTrue
iFalse
, a na końcuif
brakuje:
supdate
.pass
to polecenie NOP, możesz je usunąć. (Komentarz, który za tym stoi, to tylko gra słów dla pijaka, którego skopiowałeś.) Ponadto domyślnie używasz modułówmath
irandom
, ale nie zadeklarowałeś, że je zaimportowałeś. Ponownie napisałem to w pliku konkursowym za pomocąnp.copysign
inp.random.uniform
to powinno zrobić to samo.Marks
To jest bot Marksa. Uważa, że zamiast biurokracji powinniśmy mieć system komunistyczny. Aby osiągnąć ten cel, daje trudniejsze quizy botom o wyższym rankingu. Daje także więcej losowych odpowiedzi na quizy z wyższych botów, ponieważ są one prawdopodobnie mądrzejsze, ponieważ są wyżej.
źródło