UWAGA: To wyzwanie jest obecnie martwe, ponieważ nie mogę zainstalować języków potrzebnych do uruchomienia meczu. Jeśli ktoś ma czas i zainteresowanie, aby to zrobić, nie mam nic przeciwko.
Tabela wyników znajduje się na dole ogłoszenia.
Jest to pół-kooperacyjne wyzwanie króla wzgórza, w którym boty konstruują ścieżki poprzez dwuwymiarowy wykres siatki. Wygrywa bot, który kontroluje węzły o największym ruchu. Jednak zbudowanie ścieżki łączącej wymaga więcej niż jednego bota, więc boty będą musiały współpracować - do pewnego stopnia.
Rozgrywka
Poniżej niech N > 0
będzie liczba botów w grze.
Siatka
Gra rozgrywana jest na dwuwymiarowej siatce liczb całkowitych wielkości , której współrzędna u dołu po lewej znajduje się . Każdej współrzędnej z ma wychodzące krawędzie do trzech współrzędnych , i nad nim, przy czym -coordinates pochodzą modulo . Oznacza to, że siatka owija się wokół krawędzi wschodniej i zachodniej. Każda dolna współrzędna jest źródłem , a każda górna współrzędna jest zlewem .⌊4/3N2⌋ × ⌊4/3N2⌋
(0,0)
(x,y)
0 ≤ y < ⌊4/3N2⌋-1
(x-1,y+1)
(x,y+1)
(x+1,y+1)
x
⌊4/3N2⌋
(x,0)
(x,⌊4/3N2⌋-1)
Poniższy obrazek pokazuje 8 × 8
siatkę.
Każdy wierzchołek wykresu jest nieaktywny , aktywny lub uszkodzony . Wszystkie wierzchołki zaczynają być nieaktywne i mogą być aktywowane przez boty, które będą ich właścicielami. Ponadto boty mogą łamać wierzchołki i nie można ich naprawić.
Kolejność
Tura składa się z fazy zniszczenia i fazy aktywacji . W fazie niszczenia każdy bot może złamać jeden nieaktywny wierzchołek. Ten wierzchołek jest odtąd łamany i nikt nie może go aktywować. W fazie aktywacji każdy bot może aktywować jeden nieaktywny wierzchołek. Od tego czasu są właścicielami tego wierzchołka i nikt inny nie może go reaktywować. Kilka botów może posiadać jeden wierzchołek, jeśli wszystkie aktywują go w tej samej turze. W każdej fazie wyboru wierzchołków dokonuje się jednocześnie.
Punktacja
Jedna runda wystarcza na dokładnie zakręty. Następnie rundę ocenia się w następujący sposób. Z każdego aktywnego wierzchołka źródłowego przeprowadzamy losowe wyszukiwanie w pierwszej kolejności głębokości wzdłuż aktywnych wierzchołków (co oznacza, że dzieci każdego wierzchołka są odwiedzane w losowej kolejności). Jeśli ścieżka zostanie znaleziona od źródła do jakiegoś ujścia, wówczas dla wszystkich wierzchołków wzdłuż tej ścieżki każdy właściciel wierzchołka otrzymuje jeden punkt.N2
N
Cała gra trwa 100 rund, a zwycięzcą jest bot z największą liczbą punktów. Mogę zwiększyć tę liczbę, jeśli wariancja wyników jest zbyt wysoka.
Dodatkowe zasady
- Bez bałaganu ze sterownikiem lub innymi zgłoszeniami.
- Maksymalnie jedno zgłoszenie na uczestnika.
- Żadne zasoby zewnętrzne, z wyjątkiem jednego prywatnego pliku tekstowego, zostały wyczyszczone na początku gry.
- Nie projektuj swojego bota do pokonania lub wspierania określonych przeciwników.
- Podaj polecenia, aby skompilować i uruchomić bota. Każdy kompilator / interpreter, który jest swobodnie dostępny dla systemu Debian Linux, jest dopuszczalny.
Kontroler
Kontroler jest napisany w Pythonie 3 i można go znaleźć w GitHub . Szczegółowe instrukcje znajdują się w pliku README. Oto interfejs API na początek:
- Boty są uruchamiane na początku każdej rundy i trwają do końca rundy. Komunikuj się ze sterownikiem przez STDIN i STDOUT, używając komunikatów zakończonych znakiem nowej linii.
BEGIN [num-of-bots] [num-of-turns] [side-length]
jest wprowadzany na początku.DESTROY [turn]
jest wprowadzany na początku każdej fazy niszczenia. Twój bot odpowie alboVERTEX x,y
wybierając wierzchołek, alboNONE
.BROKEN [turn] [your-choice] [other-choices]
jest wprowadzany na końcu każdej fazy niszczenia. Kolejność innych botów jest losowa na początku każdej gry, ale pozostaje ustalona podczas jej trwania. Wybory są przedstawione jakox,y
lubN
.ACTIVATE [turn]
iOWNED [turn] [your-choice] [other-choices]
są odpowiednikami powyższego dla fazy aktywacji i mają tę samą semantykę.SCORE [your-score] [other-scores]
jest wprowadzany na końcu gry.- Twój bot ma 1 sekundę na przeanalizowanie wyników fazy i wybranie następnego wierzchołka oraz 1 sekundę na zakończenie po otrzymaniu wyniku. Przetestuję zgłoszenia na moim stosunkowo starym laptopie, więc lepiej zostawić tutaj margines.
Pamiętaj, aby opróżnić bufor wyjściowy. W przeciwnym razie kontroler może zawiesić się w niektórych środowiskach.
Tabela liderów
Zaktualizowano 3/13/2015
Peacemaker jest uruchomiony i Funnelweb również otrzymał aktualizację. Wyniki podskoczyły o rząd wielkości. Złącze przekroczyło limit czasu w dwóch grach.
Funnelweb: 30911
Connector: 18431
Watermelon: 3488
Annoyance: 1552
Explorer: 735
Checkpoint: 720
Random Builder: 535
FaucetBot: 236
Peacemaker: 80
Pełny dziennik z grafiką artystyczną ASCII można znaleźć w repozytorium kontrolera, w graphical_log.txt
.
Niektóre spostrzeżenia:
- Złącze można bardzo łatwo zatrzymać, przerywając pojedynczy wierzchołek przed nim. Podejrzewam, że często to robi. Jednak obecnie nie ma to większego sensu, ponieważ tylko Łącznik może sobie wyobrazić ścieżkę.
- Arbuz może uzyskać przyzwoity wynik, po prostu będąc na ścieżce łączącej (ponieważ DFS najprawdopodobniej użyje swoich wierzchołków).
- Explorer lubi uprawiać winorośl z arbuzów.
- Zaktualizowana Funnelweb otrzymuje naprawdę dobre wyniki, ponieważ Connector zwykle zaczepia się na nią w dolnej połowie siatki.
- Gry stają się dość długie, średnia runda trwa na moim komputerze około 25 sekund.
4/3*N^2
, a nawet tam boty miały problemy z tworzeniem prawidłowych ścieżek. Jednak Connector został tymczasowo zdyskwalifikowany z powodu błędu, a teraz, gdy został naprawiony, spodziewam się, że gry będą bardziej interesujące. Dziś wieczorem wypuszczę kolejną partię.