Klasyfikacja końcowa
+ ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + | Imię | Wynik | WinRate | TieRate | Prawdopodobieństwo eliminacji | + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + | 1. SarcomaBotMk11 | 0,06333 | 6,13% | 0,41% | [42 24 10 8 6 4]% | | 2. WiseKickBot | 0,06189 | 5,91% | 0,56% | [51 12 7 10 7 6]% | | 3. StrikerBot | 0,05984 | 5,78% | 0,41% | [46 18 11 8 6 5]% | | 4. PerfectFractionBot | 0,05336 | 5,16% | 0,35% | [49 12 14 10 6 4]% | | 5. MehRanBot | 0,05012 | 4,81% | 0,41% | [57 12 8 7 6 5]% | | 6. OgBot | 0,04879 | 4,66% | 0,45% | [50 15 9 8 7 5]% | | 7. SnetchBot | 0,04616 | 4,48% | 0,28% | [41 29 8 9 5 3]% | | 8. AntiKickBot | 0,04458 | 4,24% | 0,44% | [20 38 17 10 6 4]% | | 9. MehBot | 0,03636 | 3,51% | 0,25% | [80 3 4 4 3 3]% | | 10. Meh20Bot | 0,03421 | 3,30% | 0,23% | [57 12 8 7 9 3]% | | 11. GenericBot | 0,03136 | 3,00% | 0,28% | [18 39 20 11 5 3]% | | 12. HardCodedBot | 0,02891 | 2,75% | 0,29% | [58 21 3 6 5 4]% | | 13. GangBot1 | 0,02797 | 2,64% | 0,32% | [20 31 35 6 3 2]% | | 14. SarcomaBotMk3 | 0,02794 | 2,62% | 0,34% | [16 15 38 17 7 4]% | | 15. GangBot0 | 0,02794 | 2,64% | 0,30% | [20 31 35 6 3 2]% | | 16. GangBot2 | 0,02770 | 2,62% | 0,31% | [20 31 35 6 3 2]% | | 17. TitTatBot | 0,02740 | 2,63% | 0,21% | [54 10 15 10 5 2]% | | 18. MataHari2Bot | 0,02611 | 2,35% | 0,51% | [39 26 11 11 6 5]% | | 19. PolyBot | 0,02545 | 2,41% | 0,27% | [53 18 6 13 5 3]% | | 20. SpitballBot | 0,02502 | 2,39% | 0,22% | [84 10 1 1 0 1]% | | 21. SquareUpBot | 0,02397 | 2,35% | 0,10% | [10 60 14 7 4 3]% | | 22. CautiousGamblerBot2 | 0,02250 | 2,19% | 0,13% | [60 18 10 5 3 1]% | | 23. Bot13 | 0,02205 | 2,15% | 0,11% | [90 0 2 3 2 1]% | | 24. AggroCalcBot | 0,01892 | 1,75% | 0,29% | [26 49 13 5 3 3]% | | 25. CautiousBot | 0,01629 | 1,56% | 0,14% | [15 41 27 11 4 1]% | | 26. CoastBotV2 | 0,01413 | 1,40% | 0,02% | [83 12 3 1 0 0]% | | 27. CalculatingBot | 0,01404 | 1,29% | 0,22% | [87 9 1 1 1 1]% | | 28. HalfPunchBot | 0,01241 | 1,15% | 0,18% | [47 20 13 12 5 2]% | | 29. HalflifeS3Bot | 0,01097 | 1,00% | 0,20% | [76 9 5 4 2 2]% | | 30. AntiGangBot | 0,00816 | 0,76% | 0,11% | [94 1 1 1 1 1]% | | 31. GeometricBot | 0,00776 | 0,74% | 0,07% | [19 46 25 7 2 1]% | | 32. GuessBot | 0,00719 | 0,05% | 1,34% | [65 17 4 6 5 3]% | | 33. BoundedRandomBot | 0,00622 | 0,60% | 0,05% | [42 39 12 5 2 0]% | | 34. SpreaderBot | 0,00549 | 0,54% | 0,02% | [32 43 19 4 1 0]% | | 35. DeterminBot | 0,00529 | 0,45% | 0,16% | [22 41 20 11 4 2]% | | 36. PercentBot | 0,00377 | 0,38% | 0,00% | [85 8 4 2 1 0]% | | 37. HalvsiestBot | 0,00337 | 0,29% | 0,08% | [32 43 15 6 2 1]% | | 38. GetAlongBot | 0,00330 | 0,33% | 0,01% | [76 18 4 1 0 0]% | | 39. BandaidBot | 0,00297 | 0,29% | 0,02% | [76 9 10 4 1 0]% | | 40. TENaciousBot | 0,00287 | 0,29% | 0,00% | [94 4 1 0 0 0]% | | 41. SurvivalistBot | 0,00275 | 0,25% | 0,04% | [92 6 1 0 0 0]% | | 42. RandomBot | 0,00170 | 0,13% | 0,07% | [42 36 14 5 2 1]% | | 43. AggressiveBoundedRandomBotV2 | 0,00165 | 0,14% | 0,06% | [8 46 34 9 2 1]% | | 44. BloodBot | 0,00155 | 0,01% | 0,30% | [65 28 5 1 1 0]% | | 45. OutBidBot | 0,00155 | 0,03% | 0,25% | [65 6 21 6 1 1]% | | 46. BoxBot | 0,00148 | 0,10% | 0,09% | [10 51 33 5 1 1]% | | 47. LastBot | 0,00116 | 0,08% | 0,07% | [74 6 16 2 1 0]% | | 48. UpYoursBot | 0,00088 | 0,07% | 0,03% | [37 40 17 5 1 0]% | | 49. AverageBot | 0,00073 | 0,06% | 0,03% | [74 3 10 10 2 0]% | | 50. PatheticBot | 0,00016 | 0,01% | 0,02% | [94 0 5 1 0 0]% | | 51. OverfittedBot | 0,00014 | 0,01% | 0,00% | [58 40 2 0 0 0]% | | 52. RobbieBot | 0,00009 | 0,01% | 0,00% | [32 41 24 2 0 0]% | | 53. WorstCaseBot | 0,00002 | 0,00% | 0,00% | [4 71 23 2 0 0]% | | 54. SmartBot | 0,00002 | 0,00% | 0,00% | [44 51 5 0 0 0]% | | 55. AAAAUpYoursBot | 0,00000 | 0,00% | 0,00% | [40 58 2 0 0 0]% | | 56. KickbanBot | 0,00000 | 0,00% | 0,00% | [67 32 1 0 0 0]% | | 57. OneShotBot | 0,00000 | 0,00% | 0,00% | [2 95 3 0 0 0]% | | 58. KickBot | 0,00000 | 0,00% | 0,00% | [100 0 0 0 0 0]% | | 59. KamikazeBot | 0,00000 | 0,00% | 0,00% | [100 0 0 0 0 0]% | | 60. MeanKickBot | 0,00000 | 0,00% | 0,00% | [100 0 0 0 0 0]% | + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- +
Dziękujemy wszystkim, którzy wzięli udział i gratulujemy @Sarcoma wygranej!
Zasady:
Każdy zaczyna od 100 KM. W każdej rundzie 2 graczy wybiera się losowo z puli zawodników, którzy jeszcze nie brali udziału w tej rundzie. Obaj gracze wybierają liczbę od 0 do ich aktualnego HP i ujawniają te liczby jednocześnie. Gracz, który wybrał niższą liczbę, natychmiast umiera. Drugi gracz odejmuje wybraną liczbę od pozostałego HP i przechodzi do następnej rundy.
Turniej działa w następujący sposób:
Z grupy zawodników wybiera się 2 losowo. Stają twarzą w twarz i jedno lub oba z nich giną. Gracz umiera, jeśli:
- Wybierają liczbę mniejszą niż liczba przeciwnika
- Ich HP spada do lub poniżej zera
- Wiążą się trzy razy z rzędu z przeciwnikiem
W przypadku remisów obaj gracze po prostu generują nowe liczby, nawet 3 razy. Po starciu, który przeżył (jeśli w ogóle), zostaje przeniesiony do puli na następną rundę, a proces ten powtarza się, aż wyczerpiemy obecną pulę rund. Jeśli w puli znajduje się nieparzysta liczba, nieparzysta przechodzi do następnej rundy za darmo.
Twoim zadaniem jest napisanie funkcji w python2.7, która przyjmuje jako dane wejściowe twój prąd hp
, listę licytacji przeciwnika history
oraz liczbę całkowitą, ties
która mówi ci, ile razy już łączyłeś się z twoim obecnym przeciwnikiem, oraz liczbę całkowitą, która mówi ci jak wiele botów jest nadal alive
(w tym ty), oraz liczba całkowita, która podaje liczbę botów w start
turnieju. Pamiętaj, że historia nie obejmuje powiązań. Funkcja musi zwracać liczbę całkowitą między 0 a bieżącym całkowitym hp. Kilka prostych przykładów, które ignorują powiązania, pokazano poniżej:
def last(hp, history, ties, alive, start):
''' Bet a third of your hp at first, then bet your opponent's last bid, if possible '''
if history:
return np.minimum(hp-1, history[-1])
else:
return hp/3
def average(hp, history, ties, alive, start):
''' Bet the average opponent's bid so far, on the assumption that bids will tend downward '''
if history:
num = np.minimum(hp-1, int(np.average(history))+1)
else:
num = hp/2
return num
def random(hp, history, ties, alive, start):
''' DO YOU WANT TO LIVE FOREVER?! '''
return 1 + np.random.randint(0, hp)
Jeśli twoja funkcja zwróci liczbę większą niż twoje hp, zostanie zresetowana do 0. Tak, możesz się zabić. Twoja funkcja nie może próbować uzyskiwać dostępu ani modyfikować żadnego elementu dowolnego obiektu klasy RouletteBot. Nie wolno podejmować żadnych działań, które jednoznacznie identyfikują przeciwnika, niezależnie od przyszłych dodatkowych botów. Sprawdzanie stosu jest dozwolone, o ile teoretycznie jest możliwe, że więcej niż jeden wyraźny przeciwnik mógł wygenerować informacje, które z niego czerpiesz, nawet jeśli obecnie istnieje tylko jeden bot, który mógłby. tzn. nie możesz po prostu przeczytać stosu, aby zobaczyć, która funkcja wroga została wywołana.
Zgodnie z tymi zasadami możliwe jest, że nie ma zwycięzcy, a dwóch ostatnich zawodników zabija się nawzajem. W takim przypadku obaj finaliści otrzymują po pół punktu.
To moja pierwsza próba układania puzzli, więc krytyka jest mile widziana!
Kontroler można znaleźć tutaj .
źródło
Odpowiedzi:
BinaryBot
Czy ktoś już to zrobił? Obstawia połowę swojego zdrowia w każdej rundzie.
SarcomaBot
Jeśli ostatnia bitwa oferuje hp - 1. Jeśli jest to pierwsza runda bitwy, licytuj pół HP plus dodatkową losową kwotę do jednej czwartej hp Jeśli uda mu się pokonać bezpośrednią ofertę przeciwnika po tym, licytuje przeciwnika o HP + 1. Jeśli ma mniej zdrowia niż przeciwnik, licytuje losowo między 75% a jego obecnym HP - 1.
SarcomaBotMk2
Drobne poprawki poprawiają wydatki na życie.
SarcomaBotMk3
Zaktualizuj dostrojenie
SarcomaBotMk4
SarcomaBotMk5
SarcomaBotMk6
SarcomaBotMk7
SarcomaBotMk8
SarcomaBotMk9
SarcomaBotMk10
Ostateczne wejście
SarcomaBotMk11
Dodano aktualizację UpYoursBot
Dodano aktualizację ochrony AntiAntiUpYoursBot
Zaktualizuj
AntiAnitAntiAntiUpYoursBot Jestem pokonany
źródło
UpYours
Spóźniając się na wejście, spędziłem trochę czasu podziwiając istniejące boty, spędziłem trochę czasu na komplikowaniu pomysłów twoich facetów, a następnie na ich komplikowaniu. Potem przyszło mi do głowy
„Up Your Yours”, ponieważ bezwstydnie kradnę (i czasami przypinam punkt lub dwa do stawek twoich botów, aby je podnieść).
Ale tak naprawdę to świetna konkurencja. Uwielbiam tę społeczność w takie dni.
źródło
Kamikadze
Po co zawracać sobie głowę skomplikowaną logiką, skoro i tak wszyscy umrzemy ...
Jeden strzał
Przetrwa przynajmniej jedną rundę, jeśli nie napotka kamikadze.
źródło
Żałosny bot otrzymuje bardzo potrzebne ulepszenie:
Żałosna próba bota, który próbuje wykorzystać cechy innych botów
Ten bot zawiera funkcje Survivalist Bot i Geometric Bot w celu skuteczniejszej eliminacji botów.
Przed aktualizacją:
Żałosna próba bota, który analizuje historię przeciwnika
Jeśli istnieje wcześniejsza historia przeciwnika, wówczas oblicza jego HP. Następnie wykonuje jedną z następujących czynności:
Jeśli nie ma historii, wykonuje kilka fantazyjnych obliczeń, które razem zhakowałem i licytuje to. Jeśli wartość przekracza 100, to automatycznie licytuje swoje hp minus 1.
Zhakowałem ten kod razem podczas pracy i jest to moje pierwsze zgłoszenie, więc prawdopodobnie nie wygra ani nic, a przegra z kamikadze.
EDYCJA: Z powodu niektórych sugestii początkowe zachowanie bota zostało zmienione, aby zaoferować wyższą wartość.
EDYCJA 2: dodano parametr początkowy, który nic nie robi
EDYCJA 3: Dodano nowego bota spinoff:
[Żałosna próba bota atakującego Gang Boty (a także robienie wszystkiego, co robi powyższy bot)] USUNIĘTO
[Ten bot analizuje, czy jego przeciwnikiem jest gangbot, czy nie, i udaje, że jest jednym z nich, aby uzyskać słodkie niskie stawki, które może łatwo pokonać.]
Ten bot został złomowany, usuń go z tabel wyników.
EDYCJA 4: Naprawiono błędy, zmieniono funkcję remisu.
źródło
opp_hp +1
brakuje spacji, aby być pytonicznym; Twoje komentarze zaczynają się od niezrównoważonych ilości białych znaków. Wreszcie, w twojej funkcji brakuje dokumentacji.Kick Bot
Dobrym wyborem dla mojego przeciwnika jest licytacja połowy jego życia. Następnie licytujemy do połowy jego życia + 1, jeśli nie możemy go wyliczyć z dźwiękiem, czyli mniej niż połowa naszego życia.
Bot-bot jest oczywiście nemezis bota-bota!
Mean Kick Bot
Ten nowy KickBot kopie bardziej miękko w pierwszej rundzie, aby mógł mocniej kopać w następnych rundach, to znaczy!
Wise Kick Bot
Obaj jego brat musiał popełnić samobójstwo, ale WiseKickBot nauczył się od swoich poległych.
źródło
Tat bot
Próba stworzenia odpowiednika bota tit-for-tat. Zakłada, że większość zakładów jest w przybliżeniu taka sama między rundami. Przyjmując to założenie, próbuje pokonać wroga bota, pozostając dość oszczędny. Wydaje około 40 zdrowia w rundzie otwarcia.
AntiAntiAntiAntiUpYoursBot
Obejście dla ochrony anty-UpYours SarcomaBot, wykasowanie większości ich kodu na własny użytek! A może pobieram kod UpYoursBot? Pytanie do przemyślenia podczas czytania mojego bota ...
AntiAntiUpYours Bot ewoluował i stał się AntiAntiAntiAntiUpYours Bot! Teraz z większą łatką małp.
Poly bot
Poly bot dokonuje regresji wielomianowej w historii twojego bota i nieznacznie przewyższa przewidywany wynik.
Classy bot
Z klasą bot dobrze się bawił, ale postanowił wcześnie położyć się spać. Śpij spokojnie, elegancki robot.źródło
1/2 Poncz Bot, ponownie odwiedzony
Myślę, że umrze dość szybko. Warto było. Zmieniono nazwę funkcji, zapomniałem zmienić tam nazwę.
Nowa wersja jest gotowa, większe szanse na wygraną (tym bardziej w ostatniej rundzie) i niewielka ochrona przed botami gangów
Striker Bot
1/2 Punch Bot został zbyt mocno prześladowany, a nawet stał się lokajem UpYoursBot, więc jego starszy brat, StrikerBot , przyszedł mu z pomocą.
Nie ma dużej różnicy od zoptymalizowanego 1/2 Puncha, ale jest nieco mądrzejszy i dobrze sobie radził w biegach, które zrobiłem (10k i 35k, choć może przegrać z KickbanBotem)
Ostatnia wersja minęła, czas się skończył. O ile nie pojawią się jakieś niespodzianki, powinno zapewnić sobie drugie miejsce, jeśli nie zdobycie pierwszego (istnieje niewielka szansa na pokonanie kickbanbota)
źródło
ceil
wydaje się nie być zdefiniowana.Gang Bot
Pomysł polegał na tym, że potencjalnie dwa lub więcej botów może być wykorzystanych w tej samej symulacji. Bot próbuje „łatwo wygrywać” innym botom w gangu, sprawdzając, czy jego historia to wielokrotność 7 ofert. Oczywiście mogą to łatwo manipulować także inne boty. Następnie obliczam liczbę trafień botów nie gangowych na podstawie stosunku mojego zdrowia do ich i stosunku ich wcześniejszego zdrowia do poprzedniej oferty i dodam 1.
źródło
Najgorszy przypadek
Prosty bot. Zwraca
hp - hp / (start - alive + 4)
w większości przypadków, a w przypadku remisów zwiększa go o 2 (muszę jeden do góry!) Za każdy remis, upewniając się, że nie zwróci liczby nad nimhp
.źródło
alive==8
. Mogę ręcznie zmienić go na całkowitą liczbę botów, ale to rozciąga reguły, ponieważ nie jest to wkład w twoją funkcję - wszystko, co wiesz, jeśli ilu przeciwników opuściłeś w danym momencie, a nie przeciwko ilu zacząłeś.Outbidder
Bot będzie próbował licytować wyżej, niż jego przeciwnik może licytować tam, gdzie to możliwe.
źródło
where np.random.randint(hp/5, hp/2)
może się nie powieść, jeślihp/5 == hp/2
, tj. Jeślihp==0
lubhp==1
Spitball Bot
Ocenia, ile zdrowia powinien poświęcić na podstawie liczby pozostałych botów. Jeśli pozostały tylko dwa boty, licytuje
hp-1
, ale jeśli pozostały trzy, to bity w połowie, cztery w lewo, trzeci itd.Jednak w bardzo dużym konkursie uważam, że będę musiał licytować więcej niż 3 lub 4 KM, aby uniknąć śmierci w pierwszej rundzie, więc ustawiłem dolną granicę na 10. Oczywiście, nigdy nie będę licytować więcej niż
hp-1
.Dodaje również 1,5 KM dla remisów, ponieważ widzę kilka botów „dodaj 1 hp dla remisów”. Nie jestem pewien, czy liczy się to jako oszustwo. Jeśli tak, zmienię to.
Nawiasem mówiąc, świetny pomysł!
Spitball Bot 2.0
Co nowego?
Przełączono na dzielenie przez liczbę pozostałych rund zamiast liczby botów (dzięki @Heiteira!). Właściwie dzielę teraz przez liczbę podniesioną do potęgi
.8
, aby trochę bardziej załadować moje oferty.Zwiększono minimalną ofertę z 10 do 20 (Dzięki @KBriggs!)
Wstawiono sprawdzanie, czy stawka spitball jest wyższa od aktualnego HP przeciwnika, i obniża go, jeśli tak jest.
(SO nie wyświetli poniższego kodu jako kodu, chyba że wstawię tutaj tekst, więc OK)
źródło
Geometryczny
źródło
Bot 13
Spróbuj zmaksymalizować wygrane przy najmniejszym wysiłku:
Dlaczego?
Spróbuj wykorzystać prawdopodobieństwo: najlepszym sposobem na rozpoczęcie turnieju jest wygranie pierwszej rundy, grając na niskim poziomie. 13 wydaje się być ulubionym miejscem: druga runda jest pewną wygraną, a reszta to Spaziergang w parku.
źródło
Zgadnij Bot
Pierwszy post tutaj. Wyglądało to na dobrą zabawę, więc poddaję się mojej strasznej próbie i zgaduję, co postawią inne boty.
Edycja 1: Dodano kolejną 1 do pierwszego zakładu, po prostu w celu zmniejszenia szansy na remis z innymi zakładami 51.
Edycja 2: Ruch otwierający bota Sarcoma, ponieważ miał dużą szansę, że nie zostanie wyeliminowany jako pierwszy konsekwentnie.
Edycja 3: Bot przeżywa bardzo dobrze w pierwszej rundzie, ale na późniejszych etapach jest łatwo niszczony. Zmieniono sposób, w jaki robot myśli o drugiej rundzie, gdy połowa graczy jest martwa w wodzie.
Edycja 4: Teraz, gdy pierwsza runda jest dobra, zmieniłem sposób, w jaki obsługuje drugą rundę. Dużo umiera w drugiej rundzie, więc muszę jakoś przetrwać.
Blood Bot
Zrobił spragnionego bota szukającego zabójstwa. Chodzi o to, aby spróbować wygrać z botami o niskich stawkach, a kiedy minie krwawa pierwsza runda, powinna być nie do powstrzymania, ponieważ powinna mieć ogromne ilości HP, aby prześcignąć wrogów.
źródło
meh_bot
Postaw tylko nieco ponad połowę jego HP
MehBot 20
mehRan
źródło
Robbie Roulette
Ten robot wykonuje prostą analizę historii wrogiego bota lub w przeciwnym razie licytuje połowę jego pozostałych punktów wytrzymałości
źródło
Licytuj wyżej, tym mniej masz konkurencji. Dzięki komentującym za sugestie ulepszeń.
źródło
SurvivalistBot i HalvsiesBot
Dziękuję za odpowiedź na moje pytania. Efektem końcowym jest bardziej złożony bot.
HalvsiesBot to kapryśny bot „tylko mijaj pół” z szansą na wygraną 50/50. Zgaduję.
SurvivalistBot podejmuje serię decyzji binarnych dotyczących drzewa binarnego w oparciu o zestaw danych, w tym nadpisanie remisu (jeśli trafi 2 remisy, kamikadze unikają potrójnej śmierci remisu).
Mój python jest trochę zardzewiały, więc kod może być nieco wadliwy, więc możesz go poprawić lub zaktualizować.
Został zbudowany, aby próbować wypracować bity danych, aby wywnioskować, na przykład, ile HP pozostało, minimalną liczbę botów, z którymi prawdopodobnie będzie walczył, minimalną ilość HP do opuszczenia, średnią licytację. Wykorzystuje także randomizację w niejednoznacznych sytuacjach, takich jak gra początkowa lub optymalne problemy z licytacją.
BoxBot
źródło
Opponent_Average_Bid = Opponent_Remaining_HP / float(len(history)) ZeroDivisionError: float division by zero
. Ta linia musi obsłużyć przypadek historii o długości 0.else
,math.[func] -> np.[func]
i w pewnym momencie użyćLowest
gdzie masz na myśliLowestBid
. Wszystko naprawione w kontrolerze na githubie i wyniki aktualizowane wkrótce.Calculating Bot
Bot agresywny obliczeniowy
Anti Kick Bot
Jeśli potrafimy przewidzieć działania przeciwnika, możemy postawić optymalne zakłady! Jeśli nie możemy (za mało danych lub przeciwnik jest zbyt losowy), możemy przynajmniej zrobić to, co zmaksymalizuje nasz potencjał wygranej. Teoretycznie co najmniej połowa żywych botów umiera w każdej rundzie. Dlatego mogę się spodziewać, że będzie co najwyżej log2 (żywych) rund. Idealnie podzielilibyśmy nasze hp równomiernie na wszystkie rundy. Wiemy jednak, że niektóre boty będą głupie, a samobójstwa / zginą wcześnie, dlatego powinniśmy stawiać nieco więcej we wcześniejszych rundach.
Agresywne obliczanie kodu modyfikacji Bota Obliczanie kodu Bota, aby starać się pozostać przy życiu, będąc bardziej agresywnym, kosztem długoterminowego zdrowia. Tylko symulacje pokażą, czy wygra tempo lub wartość.
Anti Kick Bot powinien zawsze pokonać aktualnego lidera KickBota: P
EDYCJA: Zastąpił Deterministycznego Bota Botem Anti Kick, inteligentniejszym botem o prawie dokładnie takich samych wartościach zwrotnych. Uniemożliwił także głosowanie więcej niż HP przeciwników
źródło
return np.max(theoreticalBet, hp - 1): AxisError: axis 23 is out of bounds for array of dimension 0
. Wysłałem link do kontrolera, abyś mógł go przetestować.GenericBot
Jest naprawdę późno ... Jestem zmęczony ... nie mogę wymyślić nazwy ... a format tego bota jest bardzo podobny do innych, tylko z nieco innym algorytmem podanym w historii. Stara się uzyskać bieżącą stawkę, którą przeciwnik dąży do hazardu ... lub coś w tym rodzaju ... zzz
źródło
np.maximum
zamiastnp.max
, to samo dlamin
HalflifeS3
źródło
Coast Bot [Koniec kariery]
Spróbuje wyprzedzić konkurencję, równo dzieląc swoje HP między rundami. Licytuje wszystkie pozostałe HP w pierwszej rundzie, aby mieć większą szansę na awans do rund „nadających się”.
Coast Bot V2
Ponieważ tak bardzo lubię to wyzwanie, po prostu musiałem stworzyć kolejnego bota. Ta wersja poświęca część swojego późniejszego wybiegu hp, wykorzystując więcej hp w pierwszych dwóch rundach.
Percent Bot
Próbuje obliczyć średni procent hp wydawany przez przeciwnika i na tej podstawie licytuje.
źródło
ConsistentBot
Obstawia taką samą kwotę w każdej rundzie. Nie jest zbyt prawdopodobne, aby przetrwał pierwsze rundy, ale jeśli ma szczęście, aby dojść do końca, powinien pozostać rozsądną ilość HP.
źródło
Kickban Bot
Ten bot po prostu próbuje skontrować obecnego lidera Mean Kickbota, pokonując go w pierwszej rundzie i grając bardziej agresywnie, jeśli go rozpozna.
źródło
Three Quarter Bot
Nie pokona MehBota ani SarcomaBota, ale myślę, że radzi sobie całkiem nieźle. Kiedy po raz pierwszy zobaczyłem wyzwanie, była to pierwsza rzecz, która przyszła mi do głowy, zawsze * stawiaj trzy czwarte swojego zdrowia, chyba że nie ma powodu.
* po niskim balowaniu w pierwszej rundzie.
Four Sevenths Bot
Po umiarkowanym sukcesie bota 3/4 pojawiła się nowa frakcja w mieście, to tylko racjonalne.
Idealna frakcja
Jestem cały
źródło
BandaidBot
BandaidBot chce, aby wszyscy grali dobrze! Jeśli jego przeciwnik był miły w ostatniej rundzie, poświęci się, aby zachęcić innych do miłego zachowania. Jeśli jego przeciwnik miał na myśli ostatnią rundę, zada mu jak najwięcej obrażeń, poświęcając się w razie potrzeby. Licytuje jedną trzecią HP, jeśli nie ma historii do pracy. (Mam nadzieję, że ten bot będzie miał ciekawe efekty falowania w innych strategiach, nie tyle, że sam bot będzie miał wysoki wskaźnik wygranych. Fajnie byłoby mieć kilka takich w grze)
GetAlongBot
GetAlongBot będzie równie przyjemny, jak trzeba, aby skorzystać z BandaidBot. Zwróci nieco mniej niż jedną trzecią HP, chyba że zabije przeciwnika za mniej. Jeśli jego przeciwnik wygląda jak BandaidBot, licytuje 2, wiedząc, że BandaidBot licytuje 1, ponieważ GetAlongBot radzi sobie tak dobrze ze wszystkimi innymi - łatwa wygrana, o ile naprawdę był to BandaidBot z drugiej strony.
źródło
return np.random.randint(history[-1], hp/2): ValueError: low >= high
Ta sprawa musi być jakoś załatwionaTENacious bot
Ten bot próbuje utrzymać swoją ulubioną wartość 10, ale od czasu do czasu zmienia swój wybór, aby przerwać remis (z podwojoną lub czterokrotną ulubioną wartością) lub zaoszczędzić na przyszłe rundy, ale nie o optymalną ilość, ponieważ chce pomylić przeciwników i nie chce rozważać licytacji mniejszej niż 2, ponieważ jest przekonany, że znacznie lepiej niż mieć nadzieję, że przeciwnik licytuje mniej niż 1, to znaczy 0.
PS: ten bot może mieć problemy strategiczne, jeśli jest więcej niż 2 ^ 9 botów.
źródło
CautiousBot
Pierwsze zgłoszenie do Programowania Puzzle kiedykolwiek! Znalazłeś swoje wyzwanie całkiem interesujące: P
Jeśli ostatnia runda była o jeden mniejsza niż HP, jeśli żadna historia nie stawiła połowy HP plus mała losowa kwota.
Jeśli historia sprawdzi HP przeciwnika i liczbę pozostałych rund i spróbuje przelicytować HP przeciwnika / 2 za pomocą dodatkowego bufora do ułamka pozostałego HP podzielonego przez liczbę pozostałych rund (stara się jakoś zachować pozostałe HP dla rund późniejszych) . Sprawdź, czy wydajesz za dużo HP (nie zabijaj się i nie licytuj więcej niż twój przeciwnik może).
Zawsze poprawiaj więzy, tak jak robią to inne boty.
CautiousBot2
Zbyt agresywny w pierwszych rundach, teraz CautiousBot staje się jeszcze bardziej ostrożny ...
źródło
buffer_bet = np.random.randint(0, buffer) if buffer > 0 else 0 File "mtrand.pyx", line 993, in mtrand.RandomState.randint ValueError: low >= high
. Zauważ, że bufor jest słowem kluczowym w pythonie, możesz chcieć wybrać inną nazwę zmiennej.buff_bet = np.random.randint(0, buff) if buff > 0 else 0 File "mtrand.pyx", line 993, in mtrand.RandomState.randint ValueError: low >= high
. Wygląda na to, że buff jest czasem liczbą zmiennoprzecinkową między 0 a 1, która przypuszczalnie zmienia się na 0 w środkurandint
. To działa, jeśli oddaszbuff
sięint
przed wywołaniemceil
zwraca afloat
. Brakowało tego ... Ty znowu: PW porządku, spróbuję w tym spróbować.
SnetchBot
Sprawdzanie frakcji zdrowia, z którymi zmierzał przeciwnik. Jeśli przeciwnik przebijał, pokonaj go.
EDYCJA: dużo przegrywając w pierwszej rundzie, dostosowałem losowe limity pierwszej tury
źródło
SquareUpBot
Nie wyglądało na to, że wiele botów bawi się mocami zamiast frakcjami, więc postanowiłem zrobić jeden, z pewnymi standardowymi optymalizacjami i zobaczyć, gdzie umieszczę. Całkiem uproszczone.
Próbuje również ustalić, czy bot wroga nie próbuje użyć jakiejś stałej frakcji, ponieważ moce > frakcje .
EDYCJA: Jestem manekinem i mój detektor frakcji nie mógł działać. Naprawiony teraz.
źródło