Classificação Final
+ ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + | Nome Pontuação | WinRate | TieRate | Probabilidade de eliminação | + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + | 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]% | + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- +
Obrigado a todos que participaram e parabéns a @Sarcoma pela vitória!
Regras:
Todo mundo começa com 100 hp. A cada rodada, dois jogadores são escolhidos aleatoriamente dentre os competidores que ainda não competiram nessa rodada. Ambos os jogadores escolhem um número entre 0 e seu hp atual e revelam esses números ao mesmo tempo. O jogador que escolheu o número mais baixo morre imediatamente. O outro jogador subtrai o número escolhido do hp restante e passa para a próxima rodada.
O torneio funciona assim:
Entre os concorrentes, 2 são escolhidos aleatoriamente. Eles se enfrentam e um ou os dois morrem. Um jogador morre se:
- Eles escolhem um número menor que o do oponente
- O hp deles cai para ou abaixo de zero
- Eles empatam três vezes seguidas com seu oponente
No caso de empate, ambos os jogadores simplesmente geram novos números, até 3 vezes. Após o confronto, o sobrevivente (se houver) é movido para a piscina para a próxima rodada, e o processo se repete até esgotarmos a piscina da rodada atual. Se houver um número ímpar na piscina, o número ímpar passa para a próxima rodada de graça.
Sua tarefa é escrever uma função no python2.7 que tenha como entrada a sua corrente hp
, uma lista da oferta do seu oponente history
e um número inteiro ties
que informa quantas vezes você já empatou com o seu oponente atual e um número inteiro que informa como muitos bots ainda estão alive
(incluindo você) e um número inteiro que lista o número de bots no start
torneio. Observe que o histórico não inclui laços. A função deve retornar um número inteiro entre 0 e seu hp total atual. Alguns exemplos simples, que ignoram os vínculos, são mostrados abaixo:
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)
Se sua função retornar um número maior que seu hp, ela será redefinida para 0. Sim, é possível se matar. Sua função não deve tentar acessar ou modificar qualquer membro de qualquer objeto da classe RouletteBot. Você não tem permissão para executar nenhuma ação que identifique inequivocamente seu oponente, independentemente de futuros bots adicionais. A inspeção da pilha é permitida desde que seja teoricamente possível que mais de um oponente distinto possa ter produzido as informações que você extrai dela, mesmo que apenas um bot exista atualmente. ou seja, você não pode simplesmente ler a pilha para ver qual função inimiga foi chamada.
Sob essas regras, é possível que não haja vencedor, e os dois últimos competidores se matam. Nesse caso, os dois finalistas ganham meio ponto cada.
Esta é minha primeira tentativa de quebra-cabeça de programação, então críticas são bem-vindas!
O controlador pode ser encontrado aqui .
fonte
Respostas:
BinaryBot
Alguém já fez isto? Aposta metade da sua saúde a cada rodada.
SarcomaBot
Se a última batalha licitar hp - 1. Se for a primeira rodada de batalha, ofereça meio HP mais um valor aleatório adicional de até um quarto de HP. Se ele puder vencer um lance definitivo do oponente após esse lance, o oponente hp + 1. Se tiver menos pontos de vida do que o lance oponente, o valor aleatório será entre 75% e o atual hp - 1.
SarcomaBotMk2
Pequenos ajustes tentam reduzir o gasto de vida.
SarcomaBotMk3
Atualizar ajuste fino
SarcomaBotMk4
SarcomaBotMk5
SarcomaBotMk6
SarcomaBotMk7
SarcomaBotMk8
SarcomaBotMk9
SarcomaBotMk10
Entrada Final
SarcomaBotMk11
Atualização da
proteção UpYoursBot adicionada
Atualização da
proteção AntiAntiUpYoursBot adicionada
Atualizar
AntiAnitAntiAntiUpYoursBot Estou derrotado
fonte
UpYours
Chegando atrasado para entrar, passei um tempo admirando os bots existentes, passei um tempo complicando demais as idéias de seus colegas e depois descomplicando-as. Então, veio para mim
"Up Yours" porque estou roubando descaradamente (e às vezes colocando um ou dois pontos nos lances dos seus bots para aumentar um deles).
Mas, na verdade, essa é uma grande competição, pessoal. Eu amo essa comunidade em dias como esse.
fonte
Kamikaze
Por que se preocupar com lógica complicada quando todos nós vamos morrer de qualquer maneira ...
Um disparo
Vai sobreviver pelo menos uma rodada, se não encontrar o kamikaze.
fonte
O Patetic Bot recebe uma atualização muito necessária:
A tentativa patética de um bot que tenta incorporar os recursos de outros bots
Este bot incorpora recursos do Survivalist Bot e Geometric Bot para quedas de bot mais eficientes.
Pré-atualização:
A tentativa patética de um bot que analisa a história de seu oponente
Se houver histórico anterior de seu oponente, ele calculará o HP do oponente. Em seguida, siga um destes procedimentos:
Se não há histórico, ele faz alguns cálculos sofisticados que eu hackeei e lancei. Se o valor exceder 100, então ele lance automaticamente seu hp menos 1.
Eu hackeei esse código juntos durante o trabalho e esta é minha primeira submissão, então provavelmente não vai ganhar nem nada, e vai perder para o kamikaze.
EDIT: Devido a algumas sugestões, o comportamento inicial do bot foi alterado para oferecer um valor mais alto.
EDIT 2: adicionado parâmetro inicial que não faz nada
EDIT 3: Adicionado novo bot de spinoff:
[A tentativa patética de um bot que ataca Gang Bots (além de fazer tudo o que o bot acima faz)] REMOVIDO
[Esse bot analisa se seu oponente é um gangbot ou não e finge ser um também para obter os lances doces e baixos que ele pode superar facilmente.]
Este bot foi descartado. Remova-o das tabelas de classificação.
EDIT 4: Correção de erros, alteração do recurso de empate.
fonte
opp_hp +1
falta um espaço para ser pitônico; seus comentários começam com quantidades desequilibradas de espaço em branco. Finalmente, sua função está sem uma sequência de caracteres.Kick Bot
A melhor escolha para o meu oponente é oferecer metade da vida dele. Em seguida, oferecemos lances para metade da vida dele + 1, se não pudermos eliminá-lo com um lance sensato, ou seja, um lance menor que a metade da nossa vida.
O chute bot é obviamente o inimigo do soco bot!
Mean Kick Bot
Este novo KickBot chuta mais suave na primeira rodada, apenas para que ele possa chutar mais forte nas próximas rodadas, isso é mau!
Wise Kick Bot
O irmão dele teve que cometer suicídio, mas o WiseKickBot aprendeu com os que haviam caído.
fonte
Tat bot
Uma tentativa de um equivalente a um bot tit-for-tat. Supõe que a maioria das apostas seja aproximadamente a mesma entre as rodadas. Usando essa suposição, ele tenta derrotar o bot inimigo enquanto permanece bastante econômico. Gasta cerca de 40 pontos de vida na rodada de abertura.
AntiAntiAntiAntiUpYoursBot
Uma solução alternativa para a proteção anti-UpYours do SarcomaBot, cortando a maior parte do código para meu próprio uso! Ou estou usando o código do UpYoursBot? Uma pergunta para refletir enquanto você lê meu bot ...
O AntiAntiUpYours Bot evoluiu para se tornar AntiAntiAntiAntiUpYours Bot! Agora com mais remendos de macacos.
Poly bot
O bot poli faz uma regressão polinomial no histórico do bot e supera a pontuação prevista em uma pequena quantidade.
Bot elegante
Bot elegante tem se divertido, mas decidiu ir para a cama cedo. Durma bem, bot elegante.fonte
1/2 Punch Bot, revisitado
Eu acho que vai morrer muito rapidamente. Vale a pena. Função renomeada, esqueci de mudar o nome lá.
Versão revisitada, melhores chances de ganhar (ainda mais na rodada final) e proteção leve contra bots de quadrilha
Striker Bot
1/2 Punch Bot sofreu bullying demais e até se tornou lacaio do UpYoursBot, então seu irmão mais velho, o StrikerBot , veio ajudar.
Não há muita diferença do 1/2 Punch otimizado, mas ele é um pouco mais inteligente e se saiu bem nas corridas que eu fiz (10k e 35k, embora ele possa perder para o KickbanBot)
A última versão acabou, o tempo acabou. A menos que surjam algumas surpresas, deve garantir o segundo lugar, se não ficar em primeiro lugar (há uma pequena chance de vencer o kickbanbot)
fonte
ceil
parece não estar definida.Gang Bot
A ideia era que potencialmente dois ou mais dos bot pudessem ser usados na mesma simulação. O bot tenta dar "vitórias fáceis" a outros bots da gangue, verificando se sua história é múltipla de 7 lances. Obviamente, isso também pode ser facilmente manipulado por outros bots. Depois, calculo um palpite sobre os lances de bots que não são de gangues com base na proporção entre minha saúde e a deles e a proporção entre a saúde anterior e o lance anterior e adiciono 1.
fonte
Pior caso
Bot simples. Retorna
hp - hp / (start - alive + 4)
na maioria dos casos e, em caso de empate, aumenta em 2 (precisa de um!) Para cada empate, certificando-se de não retornar um número acima do seuhp
.fonte
alive==8
. Eu posso alterá-lo manualmente para a contagem total de bots, mas está esticando as regras, já que isso não é uma entrada para sua função - tudo o que você sabe se quantos oponentes restam em um determinado momento, e não com quantos você começou.Outbidder
O Bot tentará fazer lances mais altos do que o seu oponente pode oferecer quando possível.
fonte
where np.random.randint(hp/5, hp/2)
pode falhar sehp/5 == hp/2
, ou seja, sehp==0
ouhp==1
Spitball Bot
Faz um julgamento sobre quanto de sua saúde deve sacrificar com base no número de bots restantes. Se houver apenas dois bots restantes, ele fará lances
hp-1
, mas se houver três restantes, ele terá metade disso, quatro restantes, um terço etc.No entanto, em uma competição muito grande, acho que precisarei fazer lances maiores que 3 ou 4 hp para evitar a morte no primeiro turno, por isso coloquei um limite menor em 10. É claro que ainda nunca lances mais que
hp-1
.Ele também adiciona 1,5 hp para empate, pois vejo vários bots "adicionar 1 hp para empate". Não tenho certeza se isso conta como trapaça. Se isso acontecer, eu vou mudar.
Ótima idéia, a propósito!
Spitball Bot 2.0
O que há de novo?
Alterou para dividir pelo número de rodadas restantes, em vez do número de bots restantes (obrigado a @Heiteira!). Na verdade, agora estou dividindo pelo número aumentado para o poder
.8
, de modo a antecipar um pouco mais meus lances.Aumento do lance mínimo de 10 para 20 (Obrigado @KBriggs!)
Verificação inserida se o lance de spitball está acima do HP atual do oponente e diminua-o, se for.
(SO não processará o código abaixo como código, a menos que eu coloque texto aqui, então tudo bem)
fonte
Geométrico
fonte
Bot 13
Tente maximizar as vitórias com o mínimo de esforço:
Por quê?
Tente tirar proveito da probabilidade: vencer a primeira rodada jogando baixo é a melhor maneira de começar o torneio. 13 parece ser o ponto ideal: a segunda rodada é uma vitória segura, e o resto é um Spaziergang no parque.
fonte
Guess Bot
Primeira postagem aqui. Pareceu muito divertido, então estou enviando minha tentativa além do terrível e adivinhando o que os outros bots vão apostar.
Editar 1: Adicionado outro 1 à primeira aposta, simplesmente para reduzir a chance de empate com outras pessoas que apostam 51.
Edit 2: Roubou o movimento de abertura do bot de Sarcoma, pois ele tinha uma boa chance de não ser eliminado primeiro de forma consistente.
Edit 3: Bot sobrevive muito bem no primeiro turno, mas está sendo destruído facilmente nos estágios posteriores. Mudou a maneira como o robô pensa sobre o segundo turno agora que os meio-apostadores estão mortos na água.
Edit 4: Agora que o primeiro turno está bom, mudei a maneira como ele lida com o segundo turno. Morrendo muito no segundo turno, então eu preciso sobreviver de alguma forma.
Blood Bot
Fez um bot com sede procurando uma morte. A idéia é tentar vencer os bots de baixa aposta e, após o banho de sangue do primeiro turno, deve ser imparável, já que deve ter uma quantidade enorme de HP para superar os inimigos.
fonte
meh_bot
Apenas ofereça um pouco mais da metade do seu hp
MehBot 20
mehRan
fonte
Robbie Roulette
Esse bot faz uma análise simples da história do bot inimigo ou oferece metade dos pontos de vida restantes
fonte
Faça lances mais altos quanto menos concorrência você tiver. Agradecemos aos comentaristas por sugerirem melhorias.
fonte
SurvivalistBot e HalvsiesBot
Obrigado por responder às minhas perguntas. O resultado final é um bot mais complexo.
HalvsiesBot é um bot caprichoso 'apenas continue passando pela metade' com 50/50 de chance de ganhar. Eu acho.
O SurvivalistBot toma uma série de decisões caso-outra da árvore binária com base no conjunto de dados, incluindo uma substituição em um empate (se atingir 2 empates, kamikazes para evitar a morte do empate triplo).
Meu python está um pouco enferrujado; portanto, o código pode ser um pouco complicado, portanto, fique à vontade para corrigi-lo ou atualizá-lo.
Ele foi criado para tentar calcular bits de dados para inferir coisas como a quantidade de HP restante, o número mínimo de bots com os quais é provável que ele lute, quantidade mínima de HP que sai, lances médios. Ele também explora a randomização em situações ambíguas, como peças de abertura ou problemas ideais de lances.
BoxBot
fonte
Opponent_Average_Bid = Opponent_Remaining_HP / float(len(history)) ZeroDivisionError: float division by zero
. Esta linha precisa lidar com o caso do histórico de 0 comprimento.else
,math.[func] -> np.[func]
e em um ponto você usarLowest
onde você quer dizerLowestBid
. Tudo corrigido no controlador no github e pontuações atualizadas em breve.Calculando Bot
Bot de cálculo agressivo
Anti Kick Bot
Se conseguirmos prever as ações do oponente, podemos fazer as melhores apostas! Se não pudermos (dados insuficientes ou oponente são muito aleatórios), podemos pelo menos fazer o que maximizaria nosso potencial de vitória. Teoricamente, pelo menos metade do número de bots vivos morrerá a cada rodada. Assim, posso esperar que haja no máximo log2 (vivo) rodadas. Idealmente, dividiríamos nosso HP igualmente entre todas as rodadas. No entanto, sabemos que alguns bots serão estúpidos e se suicidam / morrem cedo, por isso devemos apostar um pouco mais nas rodadas anteriores.
Cálculo agressivo do bot Modifica o código do calculador do bot para tentar permanecer vivo, sendo mais agressivo, à custa da saúde a longo prazo. Somente simulações dirão se o tempo ou o valor vence.
O Anti Kick Bot deve sempre vencer o atual líder KickBot: P
EDIT: Substituído Bot determinístico por Anti Kick Bot, um bot mais inteligente com quase exatamente os mesmos valores de retorno. Também impediu votar mais do que os adversários HP
fonte
return np.max(theoreticalBet, hp - 1): AxisError: axis 23 is out of bounds for array of dimension 0
. Publiquei um link para o controlador para que você possa testá-lo.GenericBot
É muito tarde ... Estou cansado ... não consigo pensar em um nome ... e o formato desse bot é muito parecido com os outros, apenas com um algoritmo ligeiramente diferente, dado o histórico. Ele tenta obter a taxa atual que o oponente está tendendo para jogar ... ou algo assim ... zzz
fonte
np.maximum
vez denp.max
, o mesmo paramin
HalflifeS3
fonte
Coast Bot [Aposentado]
Tentará percorrer o caminho da competição dividindo uniformemente seu hp entre as rodadas. Oferecerá qualquer HP restante no primeiro turno para ter uma chance melhor de chegar às rodadas "com capacidade para o litoral".
Coast Bot V2
Como eu gosto muito desse desafio, eu apenas tive que fazer outro bot. Esta versão sacrifica parte de seu hp mais tarde, usando mais hp nas duas primeiras rodadas.
Percent Bot
Tenta calcular a porcentagem média de hp gasto pelo adversário e faz lances com base nisso.
fonte
ConsistentBot
Aposta o mesmo valor a cada rodada. Não é muito provável que sobreviva às primeiras rodadas, mas se tiver sorte o suficiente para chegar ao fim, ainda deve haver uma quantidade razoável de HP restante.
fonte
Kickban Bot
Este bot simplesmente tenta combater o atual líder Mean Kickbot, vencendo-o na primeira rodada e jogando de forma mais agressiva a partir de então, se o reconhecer.
fonte
Bot de três quartos
Ele não vai vencer o MehBot ou o SarcomaBot (s), mas acho que ele se sai muito bem. Quando vi o desafio pela primeira vez, essa foi a primeira coisa que me veio à mente: sempre * aposte três quartos da sua saúde, a menos que não haja motivo para isso.
* após baixa bola no primeiro turno.
Four Sevenths Bot
Após o sucesso moderado de 3/4 de bot, há uma nova fração na cidade, é apenas racional.
A fração perfeita
Eu sou inteiro
fonte
BandaidBot
BandaidBot quer que todos joguem bem! Se o seu oponente foi bom na última rodada, ele se sacrificará para incentivar um bom comportamento nos outros. Se seu oponente foi malvado na última rodada, ele causará o máximo de dano possível ao oponente, sacrificando-se, se necessário. Oferece um terço do seu hp se não tiver histórico para trabalhar. (Espero que esse bot tenha efeitos interessantes em outras estratégias, não tanto que ele tenha uma alta taxa de vitórias. Pode ser divertido ter alguns deles em jogo)
GetAlongBot
GetAlongBot será tão bom quanto necessário para tirar vantagem do BandaidBot. Ele retornará pouco menos de um terço do seu HP, a menos que possa matar seu oponente por menos do que isso. Se o seu oponente se parecer com o BandaidBot, ele fará um lance 2, sabendo que o BandaidBot fará um lance 1 porque o GetAlongBot está se dando tão bem com todos os outros - uma vitória fácil, desde que realmente fosse o BandaidBot do outro lado.
fonte
return np.random.randint(history[-1], hp/2): ValueError: low >= high
Este caso precisa ser tratado de alguma formaTENacious bot
Esse bot tenta manter seu valor favorito de 10, mas muda sua escolha ocasionalmente, se necessário, para romper um empate (com seu valor favorito duplicado ou quádruplo) ou para economizar nas próximas rodadas, mas não na quantidade ideal, pois deseja confundir oponentes e não deseja considerar licitar menos de 2 a qualquer momento, pois está convencido de que é muito melhor do que esperar que o oponente lance menos de 1, ou seja, 0.
PS: este bot pode ter problemas estratégicos se houver mais de 2 ^ 9 bots.
fonte
CautiousBot
Primeira submissão para os quebra-cabeças de programação de todos os tempos! Achei seu desafio bastante interessante: P
Se a última rodada tiver um bit abaixo de hp, se nenhum histórico apostar meio hp mais uma pequena quantia aleatória.
Se o histórico verificar hp do oponente e o número de rodadas restantes e tentar superar o hp / 2 do oponente usando um buffer adicional de até a fração do hp restante dividido pelo número de rodadas restantes (ele tenta conservar o hp restante de alguma forma nas rodadas posteriores) . Verifique se você está gastando muito hp (não se mate ou lance mais do que o seu adversário pode).
Sempre corrija os laços como outros bots.
CautiousBot2
Muito agressivo nas primeiras rodadas, agora o CautiousBot fica ainda mais cauteloso ...
fonte
buffer_bet = np.random.randint(0, buffer) if buffer > 0 else 0 File "mtrand.pyx", line 993, in mtrand.RandomState.randint ValueError: low >= high
. Observe que buffer é uma palavra-chave em python; convém escolher um nome de variável diferente.buff_bet = np.random.randint(0, buff) if buff > 0 else 0 File "mtrand.pyx", line 993, in mtrand.RandomState.randint ValueError: low >= high
. Parece que o buff às vezes é um número de ponto flutuante entre 0 e 1, que presumivelmente é convertido em 0 por dentrorandint
. Isso funciona se você converterbuff
paraint
antes da chamada #ceil
retorna afloat
. Perdeu aquele ... Ty novamente: PTudo bem, vou tentar minha mão nisso.
SnetchBot
Verificando as frações de saúde com as quais o oponente está passando. Se o oponente estiver aumentando, derrote-o.
EDIT: perdendo muito no primeiro turno, ajustado os limites aleatórios do primeiro turno
fonte
SquareUpBot
Não parecia que muitos bots estavam jogando com poderes em vez de frações, então eu decidi fazer um, com algumas otimizações padrão e ver onde irei colocar. Bastante simplista.
Também tenta determinar se o bot inimigo não está tentando usar uma fração constante, porque poderes > frações .
EDIT: Eu sou um manequim e meu detector de frações não pôde funcionar. Reparado agora.
fonte