Przykładowy przebieg dodano 4/11
Wyjaśnienie zasad 4/8: Wszystkie zgłoszenia będą konkurować w jednym gigantycznym turnieju typu „wszystko dla wszystkich”, składającym się z tylu meczów, ile mój komputer może wykonać w ciągu 48 godzin.
Każdy, kto spędził czas na oglądaniu transmisji na Twitchu, jest świadomy przewagi DeepBota i być może nawet zna grę bukmacherską Bank Heist . Ten turniej King of the Hill jest bezpośrednio inspirowany tą grą. Ale nie martw się. Wydaje mi się, że włożyłem w tę wersję wystarczająco dużo supełków, aby było ciekawie.
Szybki przykład
#####GAME 13: 16 players######
Round 1:
gunHeCK bet 0.
PassivePanga bet 69.
SnitcherKing bet 1.
Lurker bet 0.
OC'sRandomTpyos bet 1.
MonisAddiction bet 69.
RaysFive01K bet 28.
LimeadeSneaktar bet 1.
KaylorrCriterion bet 0.
HardHatUmar bet 0.
HeCKuSumer bet 185.
Round 2
HeCKuSumer decided to !guncheck.
LimeadeSneaktar decided to double cross.
MonisAddiction decided to all in.
OC'sRandomTpyos decided to acquire intel.
RaysFive01K decided to deposit.
SnitcherKing decided to finger.
PassivePanga decided to !guncheck.
Results
PassivePanga failed. :(
SnitcherKing failed. :(
OC'sRandomTpyos was successful, and may gain ¥0
MonisAddiction failed. :(
RaysFive01K was successful, and may gain ¥0
LimeadeSneaktar was successful, and may gain ¥1
HeCKuSumer failed. :(
Results:
0. KaylorrCriterion: 3600
1. Lurker: 3600
2. gunHeCK: 3600
3. SnitcherKing: 3586
4. PassivePanga: 2634
5. LimeadeSneaktar: 2496
6. HeCKuSumer: 1909
7. HardHatUmar: 490
8. RaysFive01K: 255
9. OC'sRandomTpyos: 170
10. MonisAddiction: 0
(In this round, 7 players joined the heist, but the dice only rolled right for 3 of them. Of those, only LimeadeSneaktar brought any home--having stolen it from OcsRandomTpyos. RaysFive01K won significantly more, but deposited it all at the bank before leaving. At this point, the players who did not heist are doing well, living off their day jobs.)
#####GAME 14: 231 players######
Round 1:
Lurker bet 0.
HeCKuSumer bet 190.
KaylorrCriterion bet 0.
HardHatUmar bet 0.
MonisAddiction bet 0.
OC'sRandomTpyos bet 1.
gunHeCK bet 0.
LimeadeSneaktar bet 1.
RaysFive01K bet 25.
PassivePanga bet 69.
SnitcherKing bet 1.
Round 2
PassivePanga decided to !guncheck.
OC'sRandomTpyos decided to buy guard.
HeCKuSumer decided to !guncheck.
SnitcherKing decided to finger.
RaysFive01K decided to deposit.
LimeadeSneaktar decided to double cross.
Results
HeCKuSumer failed. :(
OC'sRandomTpyos failed. :(
LimeadeSneaktar failed. :(
RaysFive01K failed. :(
PassivePanga failed. :(
SnitcherKing failed. :(
Results:
0. KaylorrCriterion: 3840
1. Lurker: 3840
2. gunHeCK: 3840
3. SnitcherKing: 3825
4. PassivePanga: 2805
5. LimeadeSneaktar: 2495
6. HeCKuSumer: 1959
7. HardHatUmar: 490
8. MonisAddiction: 240
9. RaysFive01K: 229
10. OC'sRandomTpyos: 161
Six players heisted--but should have been paying more attention to the rabble and backed out, because the probabilities dropped too low to win, and all failed.
#####GAME 15: 300 players######
Round 1:
OC'sRandomTpyos bet 1.
Lurker bet 0.
SnitcherKing bet 1.
MonisAddiction bet 69.
LimeadeSneaktar bet 1.
gunHeCK bet 0.
HardHatUmar bet 0.
RaysFive01K bet 22.
KaylorrCriterion bet 0.
HeCKuSumer bet 195.
PassivePanga bet 69.
Round 2
HeCKuSumer decided to !guncheck.
OC'sRandomTpyos decided to buy guard.
MonisAddiction decided to all in.
PassivePanga decided to !guncheck.
LimeadeSneaktar decided to double cross.
RaysFive01K decided to deposit.
SnitcherKing decided to finger.
Results
OC'sRandomTpyos failed. :(
SnitcherKing failed. :(
MonisAddiction was successful, and may gain ¥0
LimeadeSneaktar failed. :(
RaysFive01K failed. :(
HeCKuSumer failed. :(
PassivePanga failed. :(
And here, the probabilities dropped too low to win again--except for MonisAddiction, who went all in, and therefore avoided the probability modification incurred by the rabble backing out. No winnings are listed here, because a player who wins going all in immediately adds all winnings to its holdings without any possible modification by other players' actions.
Zasady gry
Struktura turnieju / gry
- Turniej będzie się składał z wielu gier losowanych losowo od 1000 do 1100, w których każde poważne zgłoszenie będzie konkurować jednocześnie w trybie darmowym dla wszystkich.
- Każdy gracz rozpoczyna pierwszą grę z 240 kredytami, a każda kolejna gra z liczbą kredytów na koniec poprzedniej gry.
- Każda gra przebiega w 2 rundach, aw każdej rundzie gracze są wzywani w kolejności ustalonej losowo równomiernie, aby podjąć jedną decyzję:
- W pierwszej rundzie gracz może zapłacić dowolną liczbę całkowitą kredytów od 0 do swoich bieżących zasobów kredytowych, aby wziąć udział w napadzie na bank.
- W drugiej rundzie każdy gracz, który zdecyduje się wziąć udział w napadzie, obstawiając co najmniej jeden kredyt (zwany dalej „napadami”), może zdecydować o wypuszczeniu zakładu (i może w tym czasie wykonać inną akcję), zrezygnuj z napadu lub wejdź za wszystko. (Te opcje są dalej opisane poniżej.)
- W oparciu o liczbę napadów i całkowitą liczbę kredytów, które wypłacili, wybiera się jeden z pięciu banków, na których można dokonać napadu. Wybór ten wpływa na indywidualne prawdopodobieństwo zwycięstwa i szanse, według których ustala się wypłatę. (Banki opisano poniżej.)
- Każdy heister, który nie zrezygnował, z prawdopodobieństwem (zmodyfikowanym) banku wygra swoją stawkę pomnożoną przez (zmodyfikowane) kursy bukmacherskie (zaokrąglone w dół), albo straci swoją stawkę. Pamiętaj, że sukces lub porażka każdego gracza jest ustalana indywidualnie - niektórym uda się tam, gdzie inni zawodzą.
- Wszyscy gracze, niezależnie od tego, czy uczestniczyli, czy nie, odnieśli sukces lub nie, a następnie otrzymują wypłatę (z wyjątkami opisanymi poniżej).
- Pamiętaj, że niemożliwe jest trwałe opuszczenie gry. W najgorszym przypadku gracz może poczekać na grę, aby otrzymać kolejną wypłatę.
- Po wszystkich 1000-1100 grach gracz z największą liczbą punktów zostanie ogłoszony zwycięzcą tego turnieju.
- Turniej zostanie powtórzony nieokreśloną liczbę razy (tyle, ile można obliczyć w ciągu 48 godzin), a zarobki gracza we wszystkich turniejach zsumowane w celu ustalenia ogólnego zwycięzcy tego konkursu.
Druga runda licytacji
- Każdy gracz, który postawił dodatnią stawkę w pierwszej rundzie, może wziąć udział w drugiej rundzie.
- W tej rundzie gracz może:
- odpowiedz ciągiem „wycofaj się”, aby anulować zakład. Spowoduje to ustawienie zakładu na zero dla bieżącego napadu, a także nieznacznie zmniejszy prawdopodobieństwo, że gracze pozostający w napadzie odniosą sukces. Korzystając z tej opcji, gracz rezygnuje z wypłaty 240 kredytów, która następuje po napadzie jako kara za narażenie pozostałych spadkobierców na ryzyko. (Pozostałym spadkobiercom odniesiemy sukces z prawdopodobieństwem równym prawdopodobieństwu banku pomnożonemu przez ułamek spadkobierców, którzy się nie wycofali).
- odpowiedz ciągiem „wszystko w”, aby wysadzić całe swoje zasoby kredytowe - i weź kredyt na wypłatę przy następnej wypłacie 240 kredytów - aby kupić najlepszy sprzęt i dane wywiadowcze i iść samemu, płonące pistolety, bez poleganie na kimkolwiek. Na prawdopodobieństwo zwycięstwa takiego gracza nie mogą wpływać inne spadki, które wypadają z napadu, ani wygranych nie mogą zostać skradzione przez podwójne krzyżyki. Zwycięskie wypłaty zostaną ustalone tak, jakby zakład był sumą posiadanych kredytów plus 240, podczas gdy strata ustawi swoje zasoby na zero.
- Odpowiedz dowolnym innym łańcuchem (w tym pustym), aby trzymać się poprzedniego zakładu i przejść normalnie napadem. (Zalecana odpowiedź: „! Guncheck”). Niektóre odpowiedzi będą miały dodatkowe skutki uboczne:
- Odpowiedź „zmiany zadań” spowoduje, że gracz rzuci pracę. Począwszy od tej rundy, na końcu każdej rundy gracz będzie miał 5% szans na zatrudnienie na nowej pozycji. Jeśli to się powiedzie, gracz zostaje zatrudniony i natychmiast otrzymuje pierwszą wypłatę. Każda nowa praca gwarantuje dokładnie 5% więcej niż poprzednia (zaokrąglona w dół). Ta akcja zakończy się sukcesem, niezależnie od tego, czy skok się powiedzie.
- Odpowiedź „zdobądź dane wywiadowcze” spowoduje, że jeśli napad się powiedzie, gracz wyda wszystkie swoje wygrane z tego napadu, aby uzyskać dodatkowe 0,00001 na kredyt wydany w ten sposób na szanse banku, który został napadnięty tylko dla tego gracza . Ta modyfikacja kursów jest trwała. Na przykład, jeśli gracz wybierze tę akcję podczas napadu na bank 1 i wygra 6969 kredytów w napadzie, szanse banku 1 na tego gracza zostaną trwale zwiększone o 0,06969 i gracz nie otrzyma nic z tego napadu.
- Odpowiedź „kupuj strażnika” spowoduje, że gracz wykupi jednego ze strażników w napadanym banku. W zamian za trwałe obniżenie o 1 kredyt wypłaty tego gracza (regularna łapówka strażnika), gracz otrzyma „stałe” zwiększone prawdopodobieństwo zwycięstwa w tym banku (ze względu na to, że strażnik „zapomina wspomnieć” temu graczowi, kiedy spytał). Prawdopodobieństwo wzrośnie o dokładnie 1% różnicy między bieżącym prawdopodobieństwem zwycięstwa gracza w tym banku a 100%. Ta akcja się powiedzie, nawet jeśli napad się nie powiedzie. UWAGA: Jeśli w dowolnym momencie gracz nie ma wystarczającej liczby kredytów, aby zapłacić wszystkie swoje łapówki strażnicze, natychmiast i „trwale” traci tyle premii prawdopodobieństwa, ile liczby łapówek, których nie można było wypłacić,
- Odpowiedź „depozytu” spowoduje, że skok zakończy się sukcesem, a całe wygrane gracza zostaną zapisane na koncie w banku poddanym napadzie. Kredyty nie będą dostępne w żadnym celu ani nie będą liczone do wyniku gracza, dopóki nie zostaną wycofane. To konto będzie płacić odsetki w wysokości 0,14% na grę.
- Jeśli „napad” się powiedzie, odpowiedź „wypłać” doda do wygranych gracza całą zawartość jego konta w banku, który dokonał napadu. W rezultacie konto zostanie wyzerowane. Pamiętaj, że te dodatkowe wygrane mogą zostać skradzione przez podwójnych krzyżowców.
- Odpowiedź „podwójnego krzyża” zrobi jedną z dwóch rzeczy:
- Jeśli liczba spadkobierców, którzy zagrali w „podwójny krzyż”, wynosi najwyżej 1/10 (w zaokrągleniu w dół) całkowitej liczby spadkobierców niebędących motłochem, którzy zdecydowali się wykonać skok (lub dokładnie jeden, jeśli jest mniej niż 10 takich graczy) ), gracz otrzyma dodatkowe wygrane równe łącznej wygranej wszystkich graczy nieposiadających podwójnego krzyża podzielonej przez liczbę podwójnych krzyżyków (w zaokrągleniu w dół). Wszystkie osoby niebędące podwójnymi krzyżownikami w tym przypadku otrzymują 0 kredytów z napadu. Innymi słowy, podwójni krzyżowcy kradną kredyty wszystkich innych i dzielą je równo między siebie.
- Jeśli liczba heisterów, którzy zagrali w „podwójny krzyż”, przekroczy próg, gracz nie otrzyma żadnej wygranej (jeśli jego skok się powiedzie), zostanie zmniejszona wypłata o połowę i zostaniesz zwolniony z pracy. (Patrz „zmiana zleceń”.) W tym przypadku wszyscy nieposiadający podwójnego krzyżyka (w tym motłoch) otrzymają premię za łączną wygraną wszystkich podwójnych krzyżujących podzieloną przez całkowitą liczbę niedopasujących podwójnie. Innymi słowy, spisek stał się zbyt duży, aby zachować tajemnicę, spiskowcy zostali wykorzenieni i wykluczeni z napadu, a wszyscy podzielili się stawkami za karę - a ich reputacja z powodu nieuczciwego czynienia również straciła pracę.
- Odpowiedź „palca” (jak w „dotykaniu szczura podwójnie krzyżującego łajdaka”), jeśli napad się powiedzie, da graczowi osiem możliwości (równomierne losowanie z zastąpieniem zestawu nie-motłochu), aby zidentyfikować podwójnego crosser, który nie został jeszcze tak zidentyfikowany .
- Każdy podwójny krzyżowiec zidentyfikowany w ten sposób natychmiast zapłaci palcicielowi 25% swoich bieżących zasobów kredytowych (w zaokrągleniu w dół) zamiast zostać zastrzelonym, stracić pracę i obniżyć wypłatę o połowę (ponieważ szef nie będzie tolerował złego zachowania) i stracisz 5% prawdopodobieństwa zwycięstwa w napadzie na bank (ponieważ inne napady są szczególnie podejrzane w przyszłości i prawdopodobnie wyrzucą je pod autobus, jeśli coś stanie się owłosione). Identyfikatory podwójnego krzyża zidentyfikowane w ten sposób nie wpływają na to, czy podwójny krzyż był udany dla innych podwójnych krzyżowców, ale nie otrzymują żadnego skradzionego kredytu z podwójnego krzyża, a wspomniane skradzione kredyty zostaną ponownie rozdzielone na osoby niebędące podwójne krzyże.
- Jeśli w ten sposób nie zostanie zidentyfikowany podwójny krzyżowiec, znicz otrzyma szwy za marnowanie czasu każdego - a także zapłaci połowę swojej wygranej z obecnego skoku, obniży wypłatę o 5% (szef skraca godziny tattletale) i przegra 5% kursów bukmacherskich w obecnym banku (ponieważ inne spadkobiercy rzadziej będą hojni / uczciwi ze swoimi wygranymi w przyszłości). Połowa wygranych w ten sposób utraconych zostanie rozdzielona między niebezpośrednich podwójnych krzyżujących, jeśli podwójny krzyżowy się powiedzie, lub nie-podwójnych krzyżowych (w tym motłoch), jeśli podwójny krzyżowy się nie uda.
Banki
Bank jest wybierany za pomocą indeksu numheisters + int(totalamountbet/100000)
, gdzie numheisters to liczba graczy, którzy postawili dodatnią stawkę w rundzie 1, a totalamountbet to suma stawek wszystkich tych graczy. Innymi słowy, sto tysięcy kredytów to tyle, co 1 dodatkowy dziedzic. Na podstawie tego indeksu zostanie wybrany jeden z następujących banków, bank o najwyższym progu, który wskaźnik osiąga lub przekracza:
Bank Index Threshold Victory Prob. Bet Odds
---- --------------- ------------- --------
0:Municipal 0 0.540 0.80
1:City 20 0.488 1.10
2:State 40 0.425 1.30
3:National 60 0.387 1.65
4:Federal Reserve 80 0.324 1.95
Pamiętaj, że w miarę trwania turnieju prawdopodobieństwo osiągnięcia najwyższego poziomu banku wzrośnie, ponieważ kwota, którą każdy gracz może postawić, będzie rosła. Zauważ też, że są to tylko początkowe szanse i prawdopodobieństwa, zanim zostaną zmodyfikowane przez jakiekolwiek działania „zdobądź dane wywiadowcze” lub „kup strażnika”. Przy początkowych prawdopodobieństwach i szansach tylko miasto i banki krajowe oczekiwały wygranych przekraczających spodziewane straty.
The Rabble
- W turnieju bierze również udział 500 innych graczy, zwanych „motłochem”, którzy uczestniczą jako zwykli gracze w napadach, ale na koniec nie są punktowani. Dzięki temu każda gra jest inna i nieco mniej przewidywalna, a także umożliwia dotarcie do bardziej ryzykownych / bardziej satysfakcjonujących banków, nawet z kilkoma „prawdziwymi” graczami.
- Każda gra będzie zawierać pewien podzbiór motłochu, który będzie losowo wybrany równomiernie we wszystkich podgrupach motłochu.
- Wszyscy motłoch używają następującej strategii:
- Losowo wybieraj zakłady z prawdopodobieństwem równym prawdopodobieństwu sukcesu w banku, które zostanie wybrane na podstawie decyzji graczy, którzy już podjęli decyzję w tej rundzie .
- Jeśli obstawiasz niezerową kwotę, wybierz największą z następujących kwot, które nie przekraczałyby jej obecnych udziałów: 69, 420, 6969, 80085.
- W drugiej rundzie „wycofaj się” z prawdopodobieństwem równym 5% plus 50% odsetka graczy, którzy już się wycofali, w przeciwnym razie napad jest normalny. (Pamiętaj, że oznacza to, że wcześni gracze w drugiej rundzie, którzy się wycofują, mogą mieć ogromne efekty kaskadowe wśród motłochu - uważaj i przygotuj się na upadek napadu, zanim jeszcze się zacznie.)
Wejścia i wyjścia
W obu rundach programy otrzymają następujące informacje, w dokładnie takiej kolejności, jak argumenty wiersza poleceń . O ile nie podano inaczej, wszystkie wartości są liczbami całkowitymi nie zawierającymi liczb dziesiętnych.
- Aktualny numer gry (indeksowany od zera)
- Okrągła liczba bieżącej gry (1 lub 2)
- Liczba graczy w bieżącej grze (w tym motłoch).
- Liczba graczy, którzy już wykonali swoje tury w tej rundzie.
- Liczba spadkobierców, którzy do tej pory złożyli pozytywny udział. (W drugiej rundzie będzie to faktycznie całkowita liczba heisterów, którzy kupili w pierwszej rundzie).
- Łączna liczba dotychczas zainwestowanych kredytów. (W drugiej rundzie, to rzeczywiście będzie łączna liczba punktów zainwestowanych w pierwszej rundzie - w szczególności nie zawierają więcej niż początkowych udziałów „all in” heisters i nie obejmują udziały „wycofać” spadkobiercy).
- Liczba spadkobierców, którzy potwierdzili w drugiej rundzie (tj. Nie wycofali się). Będzie to zero w pierwszej rundzie.
- (Indeksowany zerem) numer banku, który zostanie napadnięty (w pierwszej rundzie bank, który zostałby napadnięty, gdyby nikt inny nie postawił zakładu)
- Liczba kredytów aktualnie dostępnych dla gracza.
- Liczba kredytów postawionych przez gracza w pierwszej rundzie. (W pierwszej rundzie jest to zawsze zero).
- Liczba kredytów, które gracz otrzyma w ramach wypłaty na koniec każdej gry.
- 1, jeśli gracz aktualnie otrzymuje wypłatę, 0, jeśli gracz jest bezrobotny
- Pozycja gracza w tabeli liderów (nie licząc motłochu) na koniec poprzedniej gry, 1-indeksowana. (Zdefiniowane jako 1 + liczba graczy o znacznie większej liczbie kredytów w tym czasie. Np. Podczas pierwszej gry wszyscy gracze mają rangę 1.)
- Średnia liczba punktów posiadanych przez wszystkich graczy (nie licząc motłochu) (reprezentowana jako liczba dziesiętna)
- Średnie bezwzględne odchylenie liczby punktów posiadanych przez wszystkich graczy (nie licząc motłochu) (reprezentowane jako liczba dziesiętna)
- Maksymalna liczba kredytów posiadanych przez dowolnego gracza (tj. Liczba kredytów posiadanych przez gracza o randze 1, nie licząc motłochu)
- Liczba kredytów, które gracz przechował na koncie banku 0
- Konto bankowe 1
- Rachunek banku 2
- Rachunek banku 3
- Rachunek banku 4
- Indywidualne prawdopodobieństwo zwycięstwa gracza na poziomie 0
- Prawdopodobieństwo dla banku 1
- Prawdopodobieństwo dla banku 2
- Prawdopodobieństwo dla banku 3
- Prawdopodobieństwo dla banku 4
- Indywidualne szanse wypłaty gracza po udanym skoku w banku 0
- Kursy na bank 1
- Kursy na bank 2
- Bank 3 szanse
- Kursy na bank 4
W pierwszej rundzie gry program gracza musi wydrukować, aby ustawić liczbę całkowitą od 0 do całkowitej liczby kredytów na koncie tego gracza. Każda kwota zakładu większa niż dostępne saldo kredytowe jest uważana za zakład maksymalny. Wszelkie inne dane wyjściowe (lub warunki błędu) będą interpretowane jako zakład zerowy.
W drugiej rundzie gry program gracza musi wydrukować, aby rozpocząć ciąg, jak opisano w sekcji „Druga runda licytacji” powyżej. Domyślnym działaniem jest warunek błędu: wykonaj napad jak zwykle.
Kontroler
Turniej zostanie przeprowadzony przy użyciu tego kontrolera . Przykłady botów również tam. Wciąż testowane. Więcej kodu w przyszłości. Prześlij poprawki błędów (na github). Zostanie zaktualizowany, jeśli zmienią się również jakieś zasady.
Aby uruchomić pojedynczy turniej na własnym komputerze, dodaj linię do konkurenci.txt, a następnie użyj:
python bankheist.py 1000
Zasady konkursu
- Gracze mogą przesyłać dowolną liczbę programów graczy w dowolnym swobodnie dostępnym języku, którego programy mogą otrzymywać argumenty wiersza poleceń.
- Zgłoszenia muszą zawierać dość wyraźne instrukcje dotyczące kompilowania programów i uruchamiania ich na komputerze, w tym nazwy potrzebnych narzędzi i dokładne polecenia, które należy wydać. Zgłoszenie musi zawierać co najmniej jedno polecenie, które wykonuje program i może mieć dołączone bezpośrednio do niego argumenty wiersza poleceń.
- Zgłoszenia muszą również mieć unikalną nazwę, aby je zidentyfikować (która nie zawiera spacji).
- Programy muszą działać w stosunkowo krótkim czasie. (Nie ustalam górnej granicy tego, co jest rozsądne. Raczej po prostu doradzę twórcy każdego wpisu, który wydaje się mieć czas realizacji zbyt duży, aby go przyspieszyć.)
- Programy nie mogą odczytywać ani zapisywać plików. Nie mogą też używać żadnej innej metody przechowywania informacji między seriami. Celem tego wyzwania jest podejmowanie złożonych decyzji na podstawie ograniczonych / podsumowanych informacji.
- Wszelkie te zasady mogą ulec zmianie w dowolnym momencie, jeśli to konieczne. Na górze tego postu zostanie dodana wiadomość wskazująca wszelkie takie zmiany.
- Konkurs kończy się nie wcześniej niż tydzień po tym, jak ostatni użytkownik opublikuje swoje pierwsze zgłoszenie . Modyfikacje istniejących zgłoszeń są dozwolone w dowolnym momencie, aż do zakończenia konkursu. Dołożę wszelkich starań, aby aktualny termin był aktualizowany w wiadomości na górze tego postu.
- Konkurs kończy się nie wcześniej niż tydzień po ostatniej zmianie regulaminu, jeśli taka istnieje. Dołożę wszelkich starań, aby pozostawić komentarze wszystkim użytkownikom, których dotyczą zmiany zasad.
- Lepiej się założę, że osobiście wezmę udział w tym konkursie. ;)