Ir al contenido
YFYass Fuentes

Una IA que pregunta quién gana antes de atacar

Editar en GitHub
Actualizado:
· 10 min

Banner del devlog de Orbafall Legions, entrega 7: antes de atacar, consulta la tabla.

El 19 de octubre, con la primera partida todavía caliente, hice la pregunta que llevaba días sin atreverme a hacer: ¿y cómo vamos a definir correctamente la IA si no tenemos las figuras creadas? Las figuras de verdad, con sus habilidades y sus cifras, se diseñan en la fase 6, y la IA iba antes. La respuesta que me convenció fue que una IA que conozca a las figuras por su nombre está condenada a rehacerse cada vez que cambie una, así que había que hacer una que no las conociera, que leyese los datos de cada figura, preguntase a una función quién gana un combate y se calibrase sola con miles de partidas simuladas. Aquí va esa IA, capa a capa, tal como estaba a finales de octubre. La capa de arriba, la que valora la posición, cambió el 1 de noviembre y tendrá su propia entrega, la 11.

Es también la fase que más he disfrutado hasta ahora. En las anteriores iba aprendiendo casi todo de cero, y aquí, por primera vez en el proyecto, podía tirar de lo que hago en mi trabajo, que es plantear el problema con datos y medirlo con lotes de partidas en vez de a ojo.

1 - Quién gana este combate

La primera capa, que es la base de todo, se pregunta: si ataco con esta pieza a esa otra, ¿quién gana y con cuánta vida? La respuesta es una estimación con su incertidumbre, y la da un contratoUna interfaz fijada por escrito: qué se le pregunta a un componente y qué devuelve, sin decir cómo lo calcula. Dos implementaciones distintas pueden cumplir el mismo contrato. que admite dos formas. Una es simular los duelos en el momento; la otra, la que va en el producto, es una tabla precalculada por paquete de datos, una cachéGuardar el resultado de un cálculo para no repetirlo mientras sus entradas no cambien. exacta de la simulación, de modo que una celda vieja o que falta se simula y un mod sin tabla también funciona, solo que más despacio.

La primera versión de la tabla, el 20 de octubre, tenía 22 500 celdas y tardó 78 minutos con ocho procesos. Mi primera reacción fue preguntar qué pasaba con cada figura nueva o con cada retoque, porque me planteo que haya decenas de figuras agrupadas por temas en futuras actualizaciones, y pagar 78 minutos por cada ajuste me parecía un disparate. De ahí salió una tabla incremental. Cada celda guarda la huellaUn hash: una cifra de longitud fija que resume unos datos y cambia en cuanto cambia un bit de ellos. Sirve para saber si algo ha cambiado sin compararlo entero. de lo que la afecta, de modo que una figura nueva o retocada solo recalcula su fila y su columna (uno o dos minutos), el muestreo para pronto en las parejas claras, que son la mayoría, y la tabla queda fuera de la huella de contenido del paquete, para que regenerarla no obligue a resellarVolver a calcular y guardar las huellas y los resultados esperados de un conjunto de pruebas después de un cambio legítimo. nada.

Por debajo de la tabla hay dos cosas más. La primera es un modelo analítico de carrera de daño [quién mata antes a quién, a pelo, sin simular], que responde en microsegundos, con una tabla de excepciones para los casos en que se equivoca más de un 10 por ciento. La segunda, un almacén de duelos, en el que cada duelo simulado se guarda con una identidad que es la huella de todas sus entradas; así, al cambiar el precio de una unidad solo se rehacen sus duelos. Regenerar la tabla entera pasó de 57 minutos a 18 con el almacén vacío, y a 20 segundos con el almacén lleno.

Tres barras en escala logarítmica: 57 minutos sin almacén, 18 minutos con el almacén vacío, 20 segundos con el almacén lleno.

Imagen 1. Regenerar la tabla de resultado esperado del paquete del producto, en tres momentos.

La revisión del almacén destapó, de paso, un fallo que venía de antes: la huella de la tabla no veía la sección de la arena de los datos de la IA, así que al cambiar un piloto la tabla seguía sirviendo filas viejas como exactas. Se corrigió y se regeneraron las tres tablas sin jugar un solo duelo, porque solo cambiaba la columna de huellas. Y me llevé una lección de coste que pagué con una noche: las tablas se pararon dos veces seguidas porque la regla de la muerte súbita seguía cambiando, y cuando pregunté por qué no se había propuesto antes abaratar lo sintético, no había buena razón. La idea, al final, es que lo sintético sea lo más barato que siga probando la maquinaria; con dos pilotos y cuatro muestras, la tabla sintética bajó de 39 minutos a 53 segundos. Como dije entonces, lo importante de esa tabla es que es sintética: sirve para comprobar que el contrato funciona, y para nada más.

2 - Qué recuerda

La segunda capa es un mapa de conocimiento. La IA recuerda el último avistamiento de cada pieza rival y la vida que le vio en la arena, y ese recuerdo decae y se olvida con las rondas, a un ritmo que depende de su habilidad. Me parece importante que la IA juegue con la misma información que una persona, es decir, con lo que vio y cuándo lo vio; las ventajas de información las dejé para otro eje, y apagadas.

3 - Compra y colocación

La tercera capa llegó el 22 de octubre. La IA compone varios ejércitos candidatos, los enfrenta en un torneo con desgaste sobre el resultado esperado, compra trampas y coloca al portador a salvo con escolta. Todo es determinista por la semilla de la partida y su configuración vive en un fichero de datos de la IA, fuera de las mecánicas. Un hallazgo se quedó anotado para el equilibrado, y es justo la clase de cosa que prefiero que me encuentre la IA antes que un jugador: con los números de entonces, un ejército de 47 piezas de la unidad más barata ganaba el torneo en todos los niveles.

4 - El turno

La IA juega el turno completo en el tablero desde el 23 de octubre: asigna atacantes por valor esperado, protege al portador con escolta, lo hace huir si peligra y reparte órdenes de avance hacia puestos. Medir ese turno fue lo que destapó que el motor era lento, y de ahí salió la aceleración de siete veces de la entrega 2.

Al día siguiente la IA empezó a usar sus poderes, que en el paquete del producto son 44. No los conoce uno a uno: cada poder recibe un papel según lo que hace (golpe, invocación, ilusión, cura, refugio, recolocación, sacrificio, área, forma) y la IA decide con perillasUn parámetro numérico de la IA que se gira como el mando de una radio: cuánto arriesga, cuánto recuerda, cuánto espera antes de atacar. genéricas por papel, con excepciones por poder si hacen falta. También desarma las trampas ajenas que conoce. La revisión independienteUn agente distinto del que escribió el código lo lee entero antes de fusionarlo, con las decisiones de diseño delante, y puede parar la fusión. encontró tres fallos que podían colgar una partida real [invocar una y otra vez sobre una trampa oculta que anula la invocación, un portador capaz de sacrificarse, un desarmador que alternaba órdenes sin fin] y se corrigieron antes de fusionarIntegrar en la rama principal los cambios preparados en una rama aparte. En inglés, merge., con una red de seguridad: si la IA repite una orden que no cambia nada, se le acaba el turno. Esa semana también pedí dos cosas que todavía estoy pagando: que la escolta fija de dos guardias se revise, porque quiero una IA inteligente, y que haya variabilidad en los caminos, en el tablero y en la arena, para que la IA pueda innovar.

Cinco capas apiladas de la IA, con una columna lateral de dificultad en dos ejes.

Imagen 2. La IA por capas: cada capa responde a una pregunta y ninguna conoce las figuras por su nombre.

5 - Dificultad en dos ejes

Desde el principio tenía claro que no quería una IA que ganase con esencia extra, que es lo que hacen muchos juegos de estrategia y lo que yo, como jugador, siempre he sentido como trampa, así que la dificultad es un mismo cerebro para todos los niveles, con un perfil de datos en dos ejes separados. Uno es la habilidad: cuánto sabe, con qué precisión estima, cuánto se equivoca, cómo reacciona en la arena y qué conductas tácticas usa. El otro son las ventajas, esencia y estadísticas extra, que existen como dato y van apagadas en el producto. Hay cinco niveles de partida y, en la arena, pilotosEl perfil de destreza con el que la IA lleva una figura en la arena: cuánto tarda en reaccionar, cuánto adelanta al apuntar, cuánto duda. con distinta destreza [eran tres; ahora serán nueve].

Y una regla que me importa mucho, firmada el 22 de octubre: una IA fija su comportamiento al crear la partida y no cambia cómo juega según a qué jugador se enfrente. Si en una partida hay dos personas y una IA, la IA juega igual contra las dos. Sobre eso se monta el nivel adaptativo: el juego mide la habilidad de arena de cada persona en cinco dimensiones (reflejos, ritmo, posición, defensa y repertorio), la convierte en un EloEl sistema de puntuación del ajedrez. Cada partida mueve la puntuación de los dos jugadores según el resultado y la diferencia que había entre ellos. y en notas de F a SSS, como en los juegos de ritmo, y una IA marcada como adaptativa elige su piloto al crear la partida a partir de la media de sus rivales humanos, desplazada por la dificultad elegida. Ese piloto queda grabado en la partida y es el mismo contra todos. La interfaz de todo esto llegará con el diseño de la experiencia; cómo se calibran los tramos lo contaré en la entrega 11.

6 - Mirar jugar

Para ver qué hacía la IA sin tener que jugar contra ella, el 23 de octubre entró el modo espectador: todos los asientos en manos del ordenador y una pantalla en la que la partida avanza sola a dos órdenes por segundo, con pausa, velocidad de uno a ocho, y la vista de un asiento con su niebla. Los combates se juegan en la arena con los dos cerebros. La regla que sostiene el modo es que la velocidad, la pausa o el cambio de vista nunca cambian el registro de la partida, y la revisión final encontró un camino que la rompía [guardar y salir a mitad de un combate visto y continuar]; se corrigió antes de fusionar. Un día después llegó la vista de observador, con todo el tablero revelado, que quizá algún día sirva para un modo comentarista.

El modo espectador desde la vista de un asiento, con pausa y velocidad.

Imagen 3. El modo espectador el 23 de octubre, desde la vista de un asiento. Las ayudas aún mostraban los nombres de las teclas en crudo; se arregló el 31.

La vista de observador: todo el tablero sin niebla, con los dos ejércitos de la IA frente a frente.

Imagen 4. La vista de observador, el 24 de octubre: todo el tablero sin niebla, con dos ejércitos de cinco fichas frente a frente.

Lo primero que enseñó el espectador fue que ninguna partida entre IA terminaba: tras las primeras escaramuzas, la IA solo pasaba turno, y eso da para la siguiente entrega.

7 - Palabras finales

De la IA de octubre me llevo que una IA que lee datos, en vez de conocer a las figuras, cuesta más de diseñar y menos de mantener (o eso me parece por ahora), y que casi todos sus fallos los encontraron los lotes de partidas simuladas mucho antes de que yo los viera jugando. La duda que me queda es de diseño, y me gustaría leeros: ¿dificultad por ventajas, con esencia y estadísticas extra para la IA, o por habilidad? ¿En vuestros juegos se nota como trampa, o al jugador le da igual mientras la partida tenga tensión?

7.1 - Para el futuro

La siguiente entrega va de las partidas que no terminaban: un criterio de novecientas de cada mil, un fallo de un mil de más, dos bandos que se congelaban para siempre, y el mito del portador que salió de todo eso.

Orbafall Legions es un proyecto personal no oficial, no afiliado con Silicon Knights, SSI, Mindscape ni Ubisoft.


Versión 1.0R1 (02/11/2026)

Changelog