Página 1 de 1

Combat AI

Publicado: 02 Ago 2022, 20:56
por explorer
El programador Nick Bild ha hecho algo sorprendente: modificar el código del juego COMBAT para la 2600 para agregarle un jugador dotado de inteligencia artificial.


El proceso ha sido el siguiente: Partí del desensamblado del juego original que otros autores hicieron antes. Luego le añadí el algoritmo llamado «k vecinos más próximos» que usa ejemplos de un conjunto de datos de entrenamiento para hacer una predicción sobre cuál es la mejor acción que un tanque controlado por inteligencia artificial puede tomar.

Hay un número de problemas que solventar para meter un algoritmo de IA en una ROM de 2 KiB, en la 2600, un sistema de por sí con recursos muy escasos. Primero, un poco sobre la plataforma: la Atari 2600 tiene una CPU MOS 6507 de 8 bit corriendo a 1.19 MHz y unos miserables 128 bytes de RAM. La mayor parte de los ciclos de procesamiento se consumen en dibujar los gráficos en la pantalla. No existe búfer de vídeo; Las instrucciones de la CPU deben sincronizarse con la pantalla, y la información de los píxeles se especifica en el momento exacto en que se necesita por la televisión. Esto significa que casi toda la lógica del juego (gestión de la entrada de los joystick, detección de colisiones, disparar los misiles, sonido, etcétera) necesita encajarse en el periodo de blanqueo vertical (VBLANK) cuando no se dibuja nada en pantalla.

Desafortunadamente, no hay suficientes ciclos disponibles durante el ciclo VBLANK porque Combat los necesita para, bueno, mover Combat. Para que esto funcione, necesito más ciclos de los disponibles en un VBLANK entero, así que usar los ciclos restantes estaba fuera de cuestión. Mi solución fue secuestrar el VBLANK durante 3 cuadros por cada segundo, para ejecutar mi algoritmo de aprendizaje automático. Ya que la 2600 muestra 30 cuadros por segundo, se sigue permitiendo que la lógica normal del juego se ejecute 27 (de 30) veces por segundo. También reparto estas interrupciones de forma equilibrada (no en cuadros consecutivos), así que son complemente transparentes. No se pueden detectar diferencias en los tiempos de respuesta entre el Combat original y el Combat AI.

Eso me dio suficientes ciclos, pero todas las instrucciones y datos adicionales no entraban en la ROM de 2 KiB. Pero esto fue fácil de arreglar, ya que la 6507 puede direccionar ROM de 4 KiB, y muchos cartuchos de Atari eran de ese tamaño (o incluso de 8 KiB por medio del intercambio de bancos), así que podría simplemente modificar el código para extender el tamaño de la ROM a 4 KiB.

Para predecir la mejor acción que debe tomar el agente IA, necesito saber las coordenadas X e Y de ambos tanques. Las coordenadas Y ya estaban controladas así que aquí no había problemas, pero la Atari no controla las posiciones absolutas X de los sprites. En lugar de eso, los sprites se mueven de forma relativa a su posición actual (por ejemplo: mover 5 píxeles a la izquierda). Para solventar esto, necesito crear variables para controlar cada vez que se actualiza la posición X, y seguir manteniendo un total de todos los cambios. Para encajar esto en la lógica normal del juego necesito reclamar algunos ciclos, así que desactivé los sonidos de motor (que toma una sorprendente cantidad de instrucciones), y unas pocas cosas más que son específicas de los modos de juego diferentes al del tanque.

Finalmente, necesité insertar algún código para simular las entradas del joystick del segundo jugador basadas en las predicciones realizadas por el modelo de aprendizaje automático. Con el código que ya había eliminado, tenía los ciclos suficientes para hacer esa parte. El resultado es un Combat de 1 jugador, en que el tanque del jugador 2 te perseguirá agresivamente y disparará misiles hacia ti cuando estés dentro del radio de acción. Me he centrado completamente en el juego de tanques (variación 1), así que los aviones no están soportados en este momento.


Combat Gets A Computer Controlled Opponent Artículo en Hackaday.
Código y comentarios en Github

Re: Combat AI

Publicado: 02 Ago 2022, 21:22
por alt
Joder, y menuda mala leche que tiene la IA que le ha salido xD

Re: Combat AI

Publicado: 02 Ago 2022, 21:34
por garillete
Un algoritmo que controla tanques... Mmm temblad dictadores....los tanques de occidente estaran controlados por Ataris 2600...

:explosion

Re: Combat AI

Publicado: 02 Ago 2022, 21:53
por explorer
Acabo de darme cuenta de un detalle importante...

Cuando un misil alcanza a un tanque, en el Combat original el tanque sale desplazado una cierta distancia (algo así como que "ha recibido un pepinazo").

En cambio, en esta versión, el tanque no se mueve. Queda noqueado en el mismo sitio, con lo que el oponente tiene una ventaja (acercarse un poco más y seguir acribillándole).

Re: Combat AI

Publicado: 03 Ago 2022, 14:16
por explorer
Acabo de descubrir que no es la primera vez que alguien dota al juego con I.A.

En 2003, otro programador hizo una variación en la que el tanque enemigo tenía la habilidad de moverse por los laberintos (bueno, al menos lo intenta).

Se puede encontrar en Google buscando por Combat Tank AI Zach Matley.

http://www.oldgamesfinder.com/?q=TANK+AI&m=-8

Re: Combat AI

Publicado: 03 Ago 2022, 15:35
por josepzin
¡¡ESPECTACULAR!! me encantan las cosas que hace la gente y estas explicaciones técnicas.