Clasificación final
+ ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + El | Nombre | Puntuación | WinRate | TieRate | Probabilidad de eliminación | + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + El | 1. SarcomaBotMk11 | 0,06333 | 6,13% | 0,41% | [42 24 10 8 6 4]% | El | 2. WiseKickBot | 0,06189 | 5,91% | 0,56% | [51 12 7 10 7 6]% | El | 3. StrikerBot | 0,05984 | 5,78% | 0,41% | [46 18 11 8 6 5]% | El | 4. PerfectFractionBot | 0,05336 | 5,16% | 0,35% | [49 12 14 10 6 4]% | El | 5. MehRanBot | 0,05012 | 4,81% | 0,41% | [57 12 8 7 6 5]% | El | 6. OgBot | 0,04879 | 4.66% | 0,45% | [50 15 9 8 7 5]% | El | 7. SnetchBot | 0,04616 | 4,48% | 0.28% | [41 29 8 9 5 3]% | El | 8. AntiKickBot | 0,04458 | 4,24% | 0,44% | [20 38 17 10 6 4]% | El | 9. MehBot | 0,03636 | 3,51% | 0.25% | [80 3 4 4 3 3]% | El | 10. Meh20Bot | 0,03421 | 3,30% | 0.23% | [57 12 8 7 9 3]% | El | 11. GenericBot | 0,03136 | 3.00% | 0.28% | [18 39 20 11 5 3]% | El | 12. HardCodedBot | 0,02891 | 2,75% | 0.29% | [58 21 3 6 5 4]% | El | 13. GangBot1 | 0,02797 | 2,64% | 0,32% | [20 31 35 6 3 2]% | El | 14. SarcomaBotMk3 | 0,02794 | 2,62% | 0,34% | [16 15 38 17 7 4]% | El | 15. GangBot0 | 0,02794 | 2,64% | 0,30% | [20 31 35 6 3 2]% | El | 16. GangBot2 | 0,02770 | 2,62% | 0,31% | [20 31 35 6 3 2]% | El | 17. TitTatBot | 0,02740 | 2,63% | 0.21% | [54 10 15 10 5 2]% | El | 18. MataHari2Bot | 0,02611 | 2,35% | 0,51% | [39 26 11 11 6 5]% | El | 19. PolyBot | 0,02545 | 2,41% | 0.27% | [53 18 6 13 5 3]% | El | 20. SpitballBot | 0,02502 | 2,39% | 0.22% | [84 10 1 1 0 1]% | El | 21. SquareUpBot | 0,02397 | 2,35% | 0,10% | [10 60 14 7 4 3]% | El | 22. CautiousGamblerBot2 | 0,02250 | 2,19% | 0,13% | [60 18 10 5 3 1]% | El | 23. Bot13 | 0,02205 | 2,15% | 0,11% | [90 0 2 3 2 1]% | El | 24. AggroCalcBot | 0,01892 | 1,75% | 0.29% | [26 49 13 5 3 3]% | El | 25. CautiousBot | 0,01629 | 1,56% | 0.14% | [15 41 27 11 4 1]% | El | 26. CoastBotV2 | 0,01413 | 1,40% | 0,02% | [83 12 3 1 0 0]% | El | 27. CalculatingBot | 0,01404 | 1,29% | 0.22% | [87 9 1 1 1 1]% | El | 28. HalfPunchBot | 0,01241 | 1,15% | 0,18% | [47 20 13 12 5 2]% | El | 29. HalflifeS3Bot | 0,01097 | 1,00% | 0,20% | [76 9 5 4 2 2]% | El | 30. AntiGangBot | 0,00816 | 0,76% | 0,11% | [94 1 1 1 1 1]% | El | 31. GeometricBot | 0,00776 | 0,74% | 0,07% | [19 46 25 7 2 1]% | El | 32. GuessBot | 0,00719 | 0,05% | 1,34% | [65 17 4 6 5 3]% | El | 33. BoundedRandomBot | 0,00622 | 0,60% | 0,05% | [42 39 12 5 2 0]% | El | 34. SpreaderBot | 0,00549 | 0,54% | 0,02% | [32 43 19 4 1 0]% | El | 35. DeterminBot | 0,00529 | 0,45% | 0.16% | [22 41 20 11 4 2]% | El | 36. PercentBot | 0,00377 | 0,38% | 0.00% | [85 8 4 2 1 0]% | El | 37. HalvsiestBot | 0,00337 | 0.29% | 0,08% | [32 43 15 6 2 1]% | El | 38. GetAlongBot | 0,00330 | 0,33% | 0,01% | [76 18 4 1 0 0]% | El | 39. BandaidBot | 0,00297 | 0.29% | 0,02% | [76 9 10 4 1 0]% | El | 40. TENaciousBot | 0,00287 | 0.29% | 0.00% | [94 4 1 0 0 0]% | El | 41. SurvivalistBot | 0,00275 | 0.25% | 0,04% | [92 6 1 0 0 0]% | El | 42. RandomBot | 0,00170 | 0,13% | 0,07% | [42 36 14 5 2 1]% | El | 43. AggressiveBoundedRandomBotV2 | 0,00165 | 0.14% | 0,06% | [8 46 34 9 2 1]% | El | 44. BloodBot | 0,00155 | 0,01% | 0,30% | [65 28 5 1 1 0]% | El | 45. OutBidBot | 0,00155 | 0,03% | 0.25% | [65 6 21 6 1 1]% | El | 46. BoxBot | 0,00148 | 0,10% | 0,09% | [10 51 33 5 1 1]% | El | 47. LastBot | 0,00116 | 0,08% | 0,07% | [74 6 16 2 1 0]% | El | 48. UpYoursBot | 0,00088 | 0,07% | 0,03% | [37 40 17 5 1 0]% | El | 49. AverageBot | 0,00073 | 0,06% | 0,03% | [74 3 10 10 2 0]% | El | 50. PatheticBot | 0,00016 | 0,01% | 0,02% | [94 0 5 1 0 0]% | El | 51. OverfittedBot | 0,00014 | 0,01% | 0.00% | [58 40 2 0 0 0]% | El | 52. RobbieBot | 0,00009 | 0,01% | 0.00% | [32 41 24 2 0 0]% | El | 53. WorstCaseBot | 0,00002 | 0.00% | 0.00% | [4 71 23 2 0 0]% | El | 54. SmartBot | 0,00002 | 0.00% | 0.00% | [44 51 5 0 0 0]% | El | 55. AAAAUpYoursBot | 0,00000 | 0.00% | 0.00% | [40 58 2 0 0 0]% | El | 56. KickbanBot | 0,00000 | 0.00% | 0.00% | [67 32 1 0 0 0]% | El | 57. OneShotBot | 0,00000 | 0.00% | 0.00% | [2 95 3 0 0 0]% | El | 58. KickBot | 0,00000 | 0.00% | 0.00% | [100 0 0 0 0 0]% | El | 59. KamikazeBot | 0,00000 | 0.00% | 0.00% | [100 0 0 0 0 0]% | El | 60. MeanKickBot | 0,00000 | 0.00% | 0.00% | [100 0 0 0 0 0]% | + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- +
¡Gracias a todos los que participaron y felicidades a @Sarcoma por la victoria!
Reglas:
Todos comienzan con 100 hp. En cada ronda, se eligen al azar 2 jugadores del grupo de concursantes que aún no han competido en esa ronda. Ambos jugadores eligen un número entre 0 y su HP actual, y revelan esos números al mismo tiempo. El jugador que eligió el número más bajo muere inmediatamente. El otro jugador resta su número elegido de sus CV restantes y pasa a la siguiente ronda.
El torneo funciona así:
Del grupo de concursantes, 2 son elegidos al azar. Se enfrentan y uno o ambos mueren. Un jugador muere si:
- Eligen un número más pequeño que el de su oponente.
- Su CV cae a cero o menos
- Empatan tres veces seguidas con su oponente
En el caso de los empates, ambos jugadores simplemente generan nuevos números, hasta 3 veces. Después del enfrentamiento, el sobreviviente (si lo hay) es trasladado al grupo para la siguiente ronda, y el proceso se repite hasta que hayamos agotado el grupo de ronda actual. Si hay un número impar en el grupo, entonces el número impar pasa a la siguiente ronda de forma gratuita.
Su tarea es escribir una función en python2.7 que tome como entradas su actual hp
, una lista de la oferta de su oponente history
y un número entero ties
que le indica cuántas veces ya ha empatado con su oponente actual, y un número entero que le dice cómo todavía hay muchos bots alive
(incluido usted) y un número entero que enumeró el número de bots en start
el torneo. Tenga en cuenta que la historia no incluye lazos. La función debe devolver un número entero entre 0 y su hp total actual. A continuación se muestran algunos ejemplos simples, que ignoran los lazos:
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)
Si su función devuelve un número mayor que su HP, se restablecerá a 0. Sí, es posible suicidarse. Su función no debe intentar acceder o modificar ningún miembro de ningún objeto de la clase RouletteBot. No tienes permitido realizar ninguna acción que identifique inequívocamente a tu oponente, independientemente de futuros bots adicionales. La inspección de la pila está permitida siempre y cuando sea teóricamente posible que más de un oponente distinto pueda haber producido la información que obtienes de ella, incluso si actualmente solo existe un bot que pueda. es decir, no puedes leer la pila para ver qué función enemiga se llamó.
Según estas reglas, es posible que no haya un ganador, y los dos últimos concursantes se matan entre sí. En ese caso, ambos finalistas obtienen medio punto cada uno.
Este es mi primer intento de rompecabezas de programación, ¡así que las críticas son bienvenidas!
El controlador se puede encontrar aquí .
fuente
Respuestas:
BinaryBot
¿Alguien ha hecho esto todavía? Apuesta la mitad de su salud cada ronda derribada.
SarcomaBot
Si la última batalla ofreció hp: 1. Si es la primera ronda de batalla, ofrezca medio hp más una cantidad aleatoria adicional de hasta un cuarto de hp. Si puede vencer a un oponente con una oferta directa después de esa oferta, el oponente hp + 1. Si tiene una salud menor que la cantidad aleatoria de la oferta del oponente entre 75% y su actual hp - 1.
SarcomaBotMk2
Ajustes menores intentan reducir el gasto de vida.
SarcomaBotMk3
Actualizar ajuste fino
SarcomaBotMk4
SarcomaBotMk5
SarcomaBotMk6
SarcomaBotMk7
SarcomaBotMk8
SarcomaBotMk9
SarcomaBotMk10
Entrada final
SarcomaBotMk11
Actualización de
protección UpYoursBot agregada
Actualización de la
protección AntiAntiUpYoursBot agregada
Actualizar
AntiAnitAntiAntiUpYoursBot Estoy derrotado
fuente
UpYours
Llegando tarde para ingresar, pasé un tiempo admirando los bots existentes, pasé un tiempo complicando demasiado las ideas de sus muchachos, luego las descompuse en exceso. Entonces vino a mí
"Up Yours" porque estoy robando descaradamente (y algunas veces agregando un punto o dos en las ofertas de tus bots para aumentarlos).
Pero de verdad, esta es una gran competencia, muchachos. Amo a esta comunidad en días como este.
fuente
Kamikaze
¿Por qué molestarse con una lógica complicada cuando todos vamos a morir de todos modos ...
Un trago
Sobrevivirá al menos una ronda si no encuentra el kamikaze.
fuente
Pathetic Bot obtiene una actualización muy necesaria:
El intento patético de un bot que intenta incorporar las características de otros bots
Este bot incorpora características de Survivalist Bot y Geometric Bot para derribos de bot más eficientes.
Pre-actualización:
El intento patético de un bot que analiza la historia de su oponente.
Si hay un historial previo de su oponente, entonces calcula el HP de su oponente. Luego, realiza una de las siguientes acciones:
Si no hay historial, entonces hace algunos cálculos sofisticados que pirateé juntos y los oferta. Si el valor excede 100, entonces automáticamente ofrece su hp menos 1.
Pirateé este código juntos durante el trabajo y esta es mi primera presentación, por lo que probablemente no gane ni nada, y perderá ante el kamikaze.
EDITAR: debido a algunas sugerencias, el comportamiento inicial del bot ha cambiado para ofrecer un valor más alto.
EDIT 2: parámetro de inicio agregado que no hace nada
EDITAR 3: Se agregó un nuevo bot spin-off:
[El intento patético de un bot que ataca a Gang Bots (además de hacer todo lo que hace el bot anterior)] ELIMINADO
[Este bot analiza si su oponente es un gangbot o no y pretende ser uno también para obtener las dulces ofertas bajas que puede superar fácilmente.]
Este bot ha sido descartado, por favor quítelo de las tablas de clasificación.
EDIT 4: errores corregidos, función de empate cambiada.
fuente
opp_hp +1
le falta un espacio para ser pitónico; sus comentarios comienzan con cantidades desequilibradas de espacios en blanco. Finalmente, su función carece de una cadena de documentación.Kick Bot
La mejor opción para mi oponente es apostar la mitad de su vida. Luego ofertamos hasta la mitad de su vida + 1 si no podemos eliminarlo con una oferta sólida, que es una oferta menor a la mitad de nuestra vida.
¡El kick bot es obviamente el enemigo del punch bot!
Mean Kick Bot
Este nuevo KickBot patea más suave en la primera ronda para que pueda patear más fuerte en las siguientes rondas, ¡eso es malo!
Sabio Kick Bot
Tanto su hermano tuvo que suicidarse, pero WiseKickBot aprendió de los caídos.
fuente
Tat bot
Un intento de un equivalente de un bot tit-for-tat. Asume que la mayoría de las apuestas son aproximadamente iguales entre rondas. Usando esa suposición, intenta vencer al bot enemigo mientras se mantiene bastante frugal. Gasta alrededor de 40 de salud en la primera ronda.
AntiAntiAntiAntiUpYoursBot
Una solución para la protección anti-UpYours de SarcomaBot, ¡robando la mayor parte de su código para mi propio uso! ¿O estoy tomando el código de UpYoursBot? Una pregunta para reflexionar mientras lees mi bot ...
¡AntiAntiUpYours Bot ha evolucionado para convertirse en AntiAntiAntiAntiUpYours Bot! Ahora con más parches de mono.
Poly bot
Polybot realiza una regresión polinómica en el historial de tu bot y supera la puntuación prevista en una pequeña cantidad.
Bot elegante
El robot con clase lo ha pasado bien, pero ha decidido acostarse temprano. Duerme bien, elegante bot.fuente
1/2 Punch Bot, revisitado
Creo que morirá bastante rápido. Vale la pena. Función renombrada, olvidé cambiar el nombre allí.
La versión revisada está disponible, mejores posibilidades de ganar (aún más en la ronda final) y una ligera protección contra los bots de pandillas
Striker Bot
1/2 Punch Bot fue intimidado demasiado e incluso se convirtió en un lacayo para UpYoursBot, por lo que su hermano mayor, el StrikerBot , vino a ayudar.
No es una gran diferencia con 1/2 Punch optimizado, pero es un poco más inteligente y lo hizo bien en las carreras que hice (10k y 35k, aunque podría perder con KickbanBot)
Se acabó la última versión, se acabó el tiempo. A menos que surjan algunas sorpresas, debería asegurar el segundo lugar, si no es el primero (hay una pequeña posibilidad de vencer a kickbanbot)
fuente
ceil
parece no estar definida.Gang Bot
La idea era que potencialmente dos o más bot podrían usarse en la misma simulación. El bot intenta dar "victorias fáciles" a otros bots de la pandilla, al ver si su historial es múltiplo de 7 ofertas. Por supuesto, esto también podría ser fácilmente manipulado por otros bots. Luego calculo una suposición sobre las ofertas de bots que no pertenecen a pandillas en función de la relación de mi salud con la de ellos y la relación de su salud anterior con su oferta anterior y agrego 1.
fuente
Peor de los casos
Bot simple Se devuelve
hp - hp / (start - alive + 4)
para la mayoría de los casos, y en caso de empate, aumenta en 2 (¡tengo uno arriba!) Para cada empate, asegurándose de no devolver un número por encima de élhp
.fuente
alive==8
. Puedo cambiarlo manualmente al recuento total de bots, pero está estirando las reglas ya que eso no es una entrada para tu función: todo lo que sabes si cuántos oponentes te quedan en un momento dado, no con cuántos empezaste.Outbidder
Bot intentará ofertar más de lo que su oponente puede ofertar cuando sea posible.
fuente
where np.random.randint(hp/5, hp/2)
puede fallar sihp/5 == hp/2
, es decir, sihp==0
ohp==1
Spitball Bot
Decide cuánto de su salud debería sacrificar en función de la cantidad de bots restantes. Si solo quedan dos bots, hace una oferta
hp-1
, pero si quedan tres, muerde la mitad, quedan cuatro, un tercio, etc.Sin embargo, en un concurso muy grande, creo que tendré que pujar más de 3 o 4 hp para evitar morir en la primera ronda, así que puse un límite inferior en 10. Por supuesto, todavía no pujaré más que
hp-1
.También agrega 1.5 hp para lazos, ya que veo varios bots de "agregar 1 hp para lazos". No estoy seguro si eso cuenta como trampa. Si lo hace, lo cambiaré.
¡Gran idea por cierto!
Spitball Bot 2.0
¿Qué hay de nuevo?
Cambió a dividir por el número de rondas restantes en lugar del número de bots restantes (¡Gracias a @Heiteira!). En realidad, ahora estoy dividiendo por ese número elevado a la potencia
.8
, para adelantar mis ofertas un poco más.Oferta mínima mejorada de 10 a 20 (¡Gracias @KBriggs!)
Comprobación insertada de si la oferta de spitball está por encima del HP actual del oponente, y baje si es así.
(SO no representará el siguiente código como código a menos que ponga texto aquí, así que OK)
fuente
Geométrico
fuente
Bot 13
Intenta maximizar las ganancias con el menor esfuerzo:
¿Por qué?
Trata de aprovechar la probabilidad: ganar la primera ronda jugando bajo es la mejor manera de comenzar el torneo. 13 parece ser el punto ideal: la segunda ronda es una victoria segura, y el resto es un Spaziergang en el parque.
fuente
Guess Bot
Primera vez publicando aquí. Esto parecía muy divertido, así que estoy enviando mi intento más allá de lo terrible y adivinando qué apostarán los otros bots.
Edición 1: se agregó otro 1 a la primera apuesta, simplemente para reducir la posibilidad de un empate con otras personas que apuestan 51.
Edición 2: Robó el movimiento de apertura del bot Sarcoma ya que tenía una buena posibilidad de no ser eliminado primero de manera consistente.
Edición 3: Bot sobrevive muy bien en la primera ronda, pero se destruye fácilmente en etapas posteriores. Cambió la forma en que el robot piensa en la segunda ronda ahora que los mejores jugadores están muertos en el agua.
Edición 4: ahora que la primera ronda es buena, cambié la forma en que maneja la segunda ronda. Muriendo mucho en la segunda ronda, así que necesito sobrevivir de alguna manera.
Blood Bot
Hizo un robot sediento buscando una muerte. La idea es tratar de ganar contra los bots de apuestas bajas y una vez que haya pasado el baño de sangre de la primera ronda, debería ser imparable ya que debería tener enormes cantidades de HP para superar a los enemigos.
fuente
meh_bot
Solo oferte un poco más de la mitad de su CV
MehBot 20
mehRan
fuente
Ruleta Robbie
Este bot realiza un análisis simple de la historia del bot enemigo o, de lo contrario, ofrece la mitad de los puntos de golpe restantes
fuente
Haga una oferta más alta cuanto menos competencia tenga. Gracias a los comentaristas por sugerir mejoras.
fuente
SurvivalistBot and HalvsiesBot
Gracias por responder mis preguntas. El resultado final es un bot más complejo.
HalvsiesBot es un robot caprichoso de 'solo sigue pasando la mitad' con una probabilidad de 50/50 de ganar. Supongo.
SurvivalistBot toma una serie de decisiones de árbol binario if-else basadas en el conjunto de datos, incluida una anulación en un empate (si golpea 2 empates, kamikazes evita la muerte del triple empate).
Mi python está un poco oxidado, por lo que el código puede ser un poco defectuoso, así que siéntase libre de corregirlo o actualizarlo.
Está diseñado para tratar de obtener fragmentos de datos para inferir cosas como cuánto HP le queda, la cantidad mínima de bots con los que es probable que luche, la cantidad mínima de HP que queda, la oferta promedio. También explota la aleatorización en situaciones ambiguas, como las jugadas de apertura o los problemas de pujas óptimos.
BoxBot
fuente
Opponent_Average_Bid = Opponent_Remaining_HP / float(len(history)) ZeroDivisionError: float division by zero
. Esta línea necesita manejar el caso del historial de longitud 0.else
,math.[func] -> np.[func]
y en un momento dado se utilizaLowest
cuando quieres decirLowestBid
. Todo arreglado en el controlador en github y las puntuaciones se actualizaron en breve.Bot calculador
Bot de cálculo agresivo
Anti Kick Bot
Si podemos predecir las acciones del oponente, ¡podemos hacer las apuestas óptimas! Si no podemos (no hay suficientes datos o el oponente es demasiado aleatorio), entonces al menos podemos hacer lo que maximizaría nuestro potencial de ganancia. Teóricamente, al menos la mitad del número de bots vivos morirá en cada ronda. Por lo tanto, puedo esperar que haya como máximo rondas log2 (vivas). Idealmente, dividiríamos nuestro HP de manera uniforme entre todas las rondas. Sin embargo, sabemos que algunos bots serán estúpidos y se suicidarán / morirán temprano, por lo que deberíamos apostar un poco más en las rondas anteriores.
El código de Bot calculador agresivo modifica el código de Bot calculador para intentar mantenerse vivo siendo más agresivo, a costa de la salud a largo plazo. Solo las simulaciones dirán si el tempo o el valor ganan.
Anti Kick Bot siempre debe vencer al actual líder KickBot: P
EDITAR: Bot determinista reemplazado con Anti Kick Bot, un bot más inteligente con casi exactamente los mismos valores de retorno. También impidió votar más que los oponentes HP
fuente
return np.max(theoreticalBet, hp - 1): AxisError: axis 23 is out of bounds for array of dimension 0
. Publiqué un enlace al controlador para que pueda probarlo.GenericBot
Es muy tarde ... Estoy cansado ... no puedo pensar en un nombre ... y el formato de este bot es realmente similar a otros, solo con un algoritmo ligeramente diferente dado el historial. Intenta obtener la tasa actual que el oponente tiende a apostar ... o algo así ... zzz
fuente
np.maximum
lugar denp.max
, lo mismo paramin
HalflifeS3
fuente
Coast Bot [Retirado]
Intentará atravesar la competencia dividiendo equitativamente su HP entre las rondas. Ofrecerá cualquier HP restante en la primera ronda para tener una mejor oportunidad de llegar a las rondas "costeables".
Coast Bot V2
Como me gusta tanto este desafío, solo tuve que hacer otro bot. Esta versión sacrifica parte de su posterior inercia de HP al usar más hp en las dos primeras rondas.
Porcentaje de bot
Trata de calcular el porcentaje promedio de HP que gasta el oponente, y las ofertas basadas en eso.
fuente
ConsistenteBot
Apuesta la misma cantidad en cada ronda. No es muy probable que sobreviva a las primeras rondas, pero si tiene la suerte de llegar al final, aún debería tener una cantidad razonable de HP.
fuente
Kickban Bot
Este bot simplemente trata de contrarrestar al líder actual Mean Kickbot al vencerlo en la primera ronda y jugar más agresivamente a partir de entonces si lo reconoce.
fuente
Bot de tres cuartos
No va a vencer a MehBot o SarcomaBot (s), pero creo que lo hace bastante bien. Cuando vi el desafío por primera vez, esto fue lo primero que me vino a la mente: siempre * apuesta tres cuartos de tu salud a menos que no haya razón para hacerlo.
* después de batear la primera ronda.
Cuatro Séptimos Bot
Después del éxito moderado de 3/4 bot hay una nueva fracción en la ciudad, solo es racional.
La fracción perfecta
Estoy completo
fuente
BandaidBot
¡BandaidBot quiere que todos jueguen bien! Si su oponente fue bueno la última ronda, se sacrificará para incentivar un buen comportamiento en los demás. Si su oponente fue malo la última ronda, causará el mayor daño posible a su oponente, sacrificándose si es necesario. Ofrece una tercera parte de su CV si no tiene historial para trabajar. (Espero que este bot tenga interesantes efectos en otras estrategias, no tanto como para que este bot tenga una alta tasa de victorias en sí mismo. Podría ser divertido tener un par de estos en juego)
GetAlongBot
GetAlongBot será tan bueno como sea necesario para aprovechar BandaidBot. Regresará un poco menos de un tercio de su CV a menos que pueda matar a su oponente por menos de eso. Si su oponente se parece a BandaidBot, ofertará 2, sabiendo que BandaidBot ofertará 1 porque GetAlongBot se ha llevado muy bien con todos los demás, una victoria fácil siempre que realmente fuera BandaidBot en el otro extremo.
fuente
return np.random.randint(history[-1], hp/2): ValueError: low >= high
este caso debe ser manejado de alguna maneraTENacious bot
Este bot intenta mantener su valor favorito de 10, pero cambia su elección ocasionalmente si es necesario para romper un empate (con su valor favorito duplicado o cuadruplicado) o para ahorrar para rondas futuras, pero no por una cantidad óptima porque quiere confundir oponentes y no quiere considerar ofertar menos de 2 en ningún momento ya que está convencido de que es mucho mejor que esperar que el oponente oferte menos de 1, es decir, 0.
PD: este bot puede tener problemas estratégicos si hay más de 2 ^ 9 bots.
fuente
CautelosoBot
¡Primera presentación a Puzzles de programación! Encontraste tu desafío bastante interesante: P
Si la última ronda mordió uno menos que hp, si no hay historial, apueste medio hp más una pequeña cantidad aleatoria.
Si el historial verifica la HP del oponente y el número de rondas restantes e intenta superar a hp / 2 del oponente usando un búfer adicional de hasta la fracción de HP restante dividido por el número de rondas restantes (intenta conservar el HP restante de alguna manera para las rondas posteriores) . Comprueba si estás gastando demasiado HP (no te mates ni pujes más de lo que tu adversario puede).
Siempre corrija las ataduras como lo hacen otros bots.
CautiousBot2
Demasiado agresivo en las primeras rondas, ahora CautiousBot se vuelve aún más cauteloso ...
fuente
buffer_bet = np.random.randint(0, buffer) if buffer > 0 else 0 File "mtrand.pyx", line 993, in mtrand.RandomState.randint ValueError: low >= high
. Tenga en cuenta que el búfer es una palabra clave en python, es posible que desee elegir un nombre de variable 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 buff es a veces un número de coma flotante entre 0 y 1, que presumiblemente se convierte en 0 en el interiorrandint
. Esto funciona si lanzasbuff
aint
antes de la llamadaceil
devuelve afloat
. Se lo perdió ... Ty nuevamente: PMuy bien, intentaré con esto.
SnetchBot
Verificando las fracciones de salud con las que el oponente ha estado yendo. Si el oponente ha estado subiendo, golpéalo.
EDITAR: perder mucho en la primera ronda, ajustar los límites aleatorios del primer turno
fuente
SquareUpBot
No parecía que muchos bots estuvieran jugando con poderes en lugar de fracciones, así que decidí hacer uno, con algunas optimizaciones estándar y ver dónde colocaré. Bastante simplista.
También trata de determinar si el robot enemigo no está tratando de usar una fracción constante, porque poderes > fracciones .
EDITAR: Soy un tonto y mi detector de fracciones no pudo funcionar. Reparado ahora
fuente