Combat AI

Wii, PS3, XBox y consolas de televisión
Avatar de Usuario
explorer
MSX Turbo R
MSX Turbo R
Mensajes: 326
Registrado: 11 May 2014, 17:10
Sistema Favorito: Atari ST
primer_sistema: Atari 800XL/600XL
consola_favorita: Atari 2600
Primera consola: Atari 2600
Ubicación: Valladolid, España
Gracias recibidas: 116 veces
Contactar:

Combat AI

Mensajepor explorer » 02 Ago 2022, 20:56

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
Última edición por explorer el 02 Ago 2022, 21:49, editado 1 vez en total.

Avatar de Usuario
alt
Amiga 2500
Amiga 2500
Mensajes: 3926
Registrado: 07 Sep 2004, 21:52
Ubicación: madrid
Gracias dadas: 806 veces
Gracias recibidas: 1298 veces
Contactar:

Re: Combat AI

Mensajepor alt » 02 Ago 2022, 21:22

Joder, y menuda mala leche que tiene la IA que le ha salido xD

garillete
Amiga 2500
Amiga 2500
Mensajes: 3100
Registrado: 08 May 2006, 19:31
Gracias dadas: 157 veces
Gracias recibidas: 289 veces

Re: Combat AI

Mensajepor garillete » 02 Ago 2022, 21:34

Un algoritmo que controla tanques... Mmm temblad dictadores....los tanques de occidente estaran controlados por Ataris 2600...

:explosion
Antiguos Bytes.
http://zonadepruebas.org/garillete

Avatar de Usuario
explorer
MSX Turbo R
MSX Turbo R
Mensajes: 326
Registrado: 11 May 2014, 17:10
Sistema Favorito: Atari ST
primer_sistema: Atari 800XL/600XL
consola_favorita: Atari 2600
Primera consola: Atari 2600
Ubicación: Valladolid, España
Gracias recibidas: 116 veces
Contactar:

Re: Combat AI

Mensajepor explorer » 02 Ago 2022, 21:53

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).

Avatar de Usuario
explorer
MSX Turbo R
MSX Turbo R
Mensajes: 326
Registrado: 11 May 2014, 17:10
Sistema Favorito: Atari ST
primer_sistema: Atari 800XL/600XL
consola_favorita: Atari 2600
Primera consola: Atari 2600
Ubicación: Valladolid, España
Gracias recibidas: 116 veces
Contactar:

Re: Combat AI

Mensajepor explorer » 03 Ago 2022, 14:16

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

Avatar de Usuario
josepzin
Amiga 2500
Amiga 2500
Mensajes: 3074
Registrado: 12 Ene 2009, 14:36
Sistema Favorito: C64
primer_sistema: ZX81
Ubicación: Carthagonova
Gracias dadas: 4 veces
Gracias recibidas: 54 veces
Contactar:

Re: Combat AI

Mensajepor josepzin » 03 Ago 2022, 15:35

¡¡ESPECTACULAR!! me encantan las cosas que hace la gente y estas explicaciones técnicas.


Volver a “Consolas salón”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado