Detalles de crear un bot para Dota 2

El resultado del juego de nuestro bot muestra que jugar contigo mismo [juego personal] puede aumentar seriamente la calidad de los sistemas de aprendizaje automático y elevarlo de un estado mucho más bajo que el nivel de una persona al nivel de un superhombre, si hay una potencia informática adecuada. En un mes, nuestro sistema pasó de un estado que apenas correspondía al nivel de un buen jugador a un estado en el que venció a los mejores profesionales, y ha seguido mejorando desde entonces. La calidad de un sistema de aprendizaje en profundidad supervisado está determinada por el conjunto de datos de entrenamiento, pero para los sistemas que juegan con ellos mismos, el conjunto de datos disponible se mejora automáticamente.

imagen
Cambio en la calificación TrueSkill (similar a la calificación Elo para el ajedrez) de nuestro bot a lo largo del tiempo, calculada simulando juegos entre bots.

El proyecto se desarrolló de la siguiente manera. La calificación del 15% de los jugadores está por debajo de la marca de 1.5K en la escala MMR ; El 58% de los jugadores lo tienen por debajo de 3K; El 99.99% de los jugadores tienen menos de 7.5K.

• 1 de mayo: el primer entrenamiento de refuerzo da como resultado un entorno Dota simple donde el Drow Ranger aprende a luchar contra el Earthshaker codificado.
• 8 de mayo: un probador con un MMR de 1.5K dice que sus resultados mejoran más rápido que el bot.
• Principios de junio: probador de ritmo con MMR 1,5K
• 30 de junio: gané la mayoría de los juegos con un probador con MMR 3000.
• 8 de julio: por primera vez por un pequeño margen, vencí a un probador semiprofesional con un MMR de 7.5K.
• 7 de agosto: Blitz (6.2K, ex profesional) ganó 3-0, Pajkatt ( 8.5K , profesional) 2-1, y CC&C (8.9K, profesional) 3-0. Todos acordaron que SumaiL descubriría cómo vencerlo.
• 9 de agosto: Arteezy derrotado (10K, profesional, uno de los mejores jugadores) 10-0. Dijo que SumaiL podrá manejar este bot.
• 10 de agosto: SumaiL ganó (8.3K, profesional, mejor jugador 1 contra 1) 6-0. El jugador dijo que el bot no puede ser derrotado. Jugó con la versión bot el 9 de agosto, ganó 2-1.
• 11 de agosto: Dendi derrotó (7.3K, profesional, ex campeón mundial) 2-0. Un 60% más de victorias que la versión del 10 de agosto.


El juego contra SumaiL

Desafío


En la versión completa del juego, los jugadores juegan 5 contra 5, pero en algunos torneos también hay juegos 1 contra 1. Nuestro robot jugó de acuerdo con las reglas estándar del torneo: no agregamos simplificaciones especiales para la IA.

El bot trabajó con las siguientes interfaces:

• Observación: API diseñadas para tener las mismas capacidades que los jugadores en vivo con respecto a los héroes, otros personajes del juego y la superficie al lado del héroe. El juego es parcialmente observable.
• Acciones: accesibles a través de la API, con una frecuencia comparable a la humana, incluido el movimiento a un determinado lugar, ataque y uso de objetos.
• Comentarios: el bot recibe recompensas por la victoria, así como parámetros simples, como salud y lastits .

Seleccionamos docenas de artículos disponibles para el bot, y seleccionamos uno de ellos para su estudio. También entrenamos por separado a los creeps de bloqueo usando técnicas de entrenamiento de refuerzo tradicionales, ya que esto sucede antes de que aparezca un oponente.


Bot juega contra Arteezy

El torneo internacional


Nuestro enfoque, combinando el juego con nosotros mismos y aprendiendo del exterior, nos permitió fortalecer significativamente el juego de nuestro bot de lunes a jueves, mientras el torneo continuaba. El lunes por la noche Pajkatt ganó usando una colección de artículos inusuales. Hemos agregado esta asamblea a la lista de artículos disponibles.

Alrededor de la 1 p.m.del miércoles, probamos la última versión del bot. El bot perdió mucha salud después de la primera ola. Decidimos que teníamos que retroceder, pero luego nos dimos cuenta de que el juego posterior era increíble, y el comportamiento en la primera ola era solo un señuelo para otros bots. Los juegos posteriores con él resolvieron el problema cuando el bot aprendió a resistir la estrategia con cebo. Y combinamos esto con el bot del lunes solo para la primera ola, y terminamos solo 20 minutos antes de que apareciera Arteezy.

Después de los partidos con Arteezy, actualizamos el modelo de bloqueo de fluencia, que aumentó TrueSkill en uno. Las sesiones de entrenamiento posteriores antes del partido con SumaiL el jueves aumentaron TrueSkill en dos puntos. SumaiL señaló que el bot aprendió a lanzar hechizos destructivos [arrasar] fuera del campo de visión del enemigo. Esto sucedió gracias a la mecánica, de la que no sabíamos: lanzar fuera del campo de visión del enemigo no le permite cargar a los maravillosos.

Arteezy jugó un partido con nuestro probador de 7.5K. Arteezy ganó el juego, pero nuestro probador logró sorprenderlo con la ayuda de una estrategia espiada por el bot. Arteezy luego notó que Paparazi había usado una vez esta estrategia contra él, y que rara vez recurrían a ella.


Paykatt gana el bot del lunes. Atrae al bot y luego usa la regeneración.

Vulnerabilidades de bot


Aunque SumaiL llamó al bot "invencible", aún puede confundirse en situaciones demasiado diferentes de lo que vio. Lo lanzamos en uno de los eventos celebrados en el torneo, donde los jugadores jugaron más de 1000 juegos para derrotar al bot de todas las formas posibles.

Las vulnerabilidades exitosas se dividieron en tres categorías:

• Tirón de pelos de punta. Siempre puedes hacer que los pelos de punta de la línea te persigan justo después de que aparezcan. Como resultado, varias docenas de creeps correrán detrás de ti a través del mapa, y los creeps enemigos destruirán la torre de bot.
• Orbe de veneno + encaje de viento: te da una ventaja en la velocidad de movimiento sobre el bot en el primer nivel y te permite causar daño rápidamente.
• Raze en el primer nivel: requiere habilidades, pero varios jugadores de la clase 6-7K pudieron matar al bot en el primer nivel, completando con éxito 3-5 hechizos en poco tiempo.

La solución de problemas para los enfrentamientos uno a uno será similar a la reparación de un error con Pajkatt. Pero para los partidos 5v5, estos problemas no son vulnerabilidades, y necesitaremos un sistema que pueda hacer frente a situaciones extrañas que no había visto antes.

La infraestructura


Todavía no estamos listos para discutir las características internas del bot: el equipo está trabajando en una solución al problema con un juego 5 contra 5.

El primer paso del proyecto fue comprender cómo ejecutar Dota 2 en la nube en una GPU física. El juego dio un error incomprensible en tales casos. Pero al iniciar en la GPU en el escritorio de Greg (durante el show, este escritorio fue llevado al escenario), notamos que Dota arranca con un monitor conectado y muestra el mismo mensaje sin monitor. Por lo tanto, configuramos nuestras máquinas virtuales para simular como si un monitor físico estuviera conectado a ellas.

En ese momento, Dota no era compatible con servidores dedicados, es decir, el lanzamiento con escala y sin GPU solo era posible en la versión con un procesamiento de software muy lento. Luego creamos un código auxiliar para la mayoría de las llamadas de OpenGL, excepto las que se necesitaban para cargar.

Al mismo tiempo, escribimos bots en scripts, como referencia para la comparación (en particular, porque los bots integrados no funcionan bien en el modo 1 a 1) y para comprender la semántica de la API para bots . El robot de script alcanza 70 latigazos en 10 minutos en un camino vacío, pero aún así pierde para las personas que juegan lo suficientemente bien. Nuestro mejor bot jugando 1 a 1 alcanza el nivel de aproximadamente 97 (destruye la torre antes, por lo que solo podemos extrapolar), y el máximo teórico es 101.


El bot juega contra SirActionSlacks. La estrategia de desvío de bots no funcionó con una multitud de correos

Cinco a cinco


Jugar 1 contra 1 es una tarea difícil, pero 5 contra 5 es un océano de complejidad. Tendremos que ampliar las capacidades de la IA para que pueda lidiar con ella.

De la manera habitual, comenzamos copiando el comportamiento. Dota alberga alrededor de un millón de juegos públicos por día. Los registros de coincidencias se almacenan en los servidores de Valve durante dos semanas. Descargamos cada entrada del juego a nivel experto desde noviembre pasado y recopilamos un conjunto de datos de 5.8 millones de juegos (cada juego dura aproximadamente 45 minutos con 10 jugadores). Usamos OpenDota para buscar registros y les transferimos $ 12,000 (diez veces más de lo que querían recaudar en un año) para apoyar el proyecto.

Todavía tenemos muchas ideas y contratamos programadores (interesados ​​en el aprendizaje automático, pero no necesariamente expertos) e investigadores para que nos ayuden. Agradecemos a Microsoft Azure y Valve por su apoyo en nuestro trabajo.

Source: https://habr.com/ru/post/es406359/


All Articles