Rivales. Ese impedimento antes de salvar a la princesa, meter el gol o encontrar aquella reliquia perdida en las ruinas de una civilización antigua. Qué sería de la emoción del juego si no hubiera alguien o algo intentando frenarnos en nuestro objetivo. Y en muchísimos juegos y géneros, dada la dificultad de tener siempre disponibles rivales humanos, nuestro impedimento estará regido por una inteligencia artificial.
Una cuestión de diseño
En realidad la inteligencia artificial en un videojuego es una de las partes más importantes del diseño, incluso la no necesidad de la inteligencia artificial es una decisión inicial del diseño de un juego (por ejemplo, en un juego de puzles, a no ser que le añadamos un multijugador competitivo como en Puzzle Fighter o Puyo Puyo). Según lo que busquemos en un juego nos puede bastar con que un personaje simplemente se mueva de un sitio a otro y, colocándolo en el lugar adecuado del escenario, cumpla perfectamente el cometido de proponerle un reto al jugador.
En juegos de plataformas esta aproximación sirve muy bien. Pero probablemente necesitemos que nuestros enemigos puedan reaccionar a lo que haga el jugador o, simplemente, apuntarle para dispararle. Aquí el desarrollador parte de una ventaja muy clara y tentadora, y es que en todo momento sabemos lo que hace el jugador y podemos trampear la decisión del personaje. Un ejemplo muy claro está en los primeros Mortal Kombat, en los que podías intentar un gancho y, sorprendentemente, el rival siempre se agachaba justo a tiempo (incluso antes de ejecutarse el gancho tras introducir el comando) y te lo devolvía, o esquivaban los movimientos alejándose a una distancia con una precisión de píxels. También algunos juegos de cartas conocían las cartas del jugador con lo que se juega de una forma muy tramposa.
Una inteligencia artificial debe ser diseñada y definida teniendo en cuenta las mecánicas del juego y adaptarse a ella. Aunque pueda sonar bien la idea de inteligencia artificial realista, puede ir en contra de la diversión del juego y suele ser interesante tener cierto elemento de predictibilidad, pero dando sensación de realismo. Y, para dar esa sensación, hagamos que nuestro personaje disponga de unos estímulos similares a los que tenemos los jugadores, en lo que llamaremos percepción.
Percepción
Como he mencionado anteriormente, a los personajes les tenemos que dar la sensación de comportarse como si fueran jugadores, y para ello haremos que respondan a los mismos estímulos. El principal es la vista, y lo más común es dar la vista en forma de cono frontal que es más o menos la proyección que tenemos los seres humanos. Muchos juegos hasta muestran gráficamente esta percepción como parte de las mecánicas.
Commandos
Siguiendo con sentidos humanos, tenemos el oído. En este caso, seguramente queramos definir a qué estímulos responde nuestra IA, con lo que en vez de hacerle “oír” propiamente dicho, le iremos avisando de los sonidos que nos interesen y, dependiendo de la reacción deseada en cada momento, nuestra propia IA decidirá si omite o hace caso del aviso recibido.
El último sentido humano que es importante es el tacto, simplemente buscar una reacción al impactar o ser impactados por otros objetos. Nos sirve para que el personaje en caso de choque pueda rectificar su trayectoria, o al recibir un disparo pueda decidir por defenderse, y precisamente para este sentido viene muy bien ayudarse de la simulación física para detección de impactos.
He dejado los sentidos del gusto y del olfato aparte por razones bastante obvias, pues no suele ser habitual que afecten a la jugabilidad, aunque sí hay conceptos de juego en los que se podría implementar un sentido del gusto (¿un posible juego de cocina con jueces?) o que el olfato pueda servir para detectar a un personaje maloliente (en cuyo caso el sistema sería muy similar al del oído).
Alejados ya de los sentidos, hay un elemento importante, que es la percepción del entorno, o más bien su “modelado” de cara a utilizarlo para poder moverse. Un método es el uso de puntos de ruta, o waypoints, de tal forma que para llegar a un punto se recorrerá el camino desde la posición actual al waypont más cercano, y luego desde ese waypoint se calcula una ruta de waypoints (mediante diversos algoritmos matemáticos de recorrido de grafos, como pueda ser A*, para los que sepan de matemáticas) a seguir hasta llegar al más cercano a nuestro destino, punto desde el cual ya se podrá alcanzar el destino final. La pega de este método es que produce un movimiento un tanto robótico al forzar el paso por los waypoints. Para solventar eso, mejor se usan las mallas de navegación, dividiendo el espacio caminable en sectores que ocupan más o menos espacio y con formas que permiten más amplitud a la hora de mover al personaje, pudiendo ajustar el espacio de movimiento de manera más precisa al escenario.
Toma de decisiones
Y ahora que tenemos sentidos y sabemos movernos…¿qué hacemos con ello? Hay muchos sistemas ideados para controlar el comportamiento, y es algo que está en continua ampliación y renovación. Voy a mencionar algunos, aunque el mundo de la IA es muy amplio.
Uno de los más típicos son las máquinas de estado, bastante sencillas de entender. Nuestro personaje está siempre en un estado concreto en el que realizará una acción asociada a ese estado como, por ejemplo, patrullar. Cuando ocurre un cambio que sea importante para nuestro estado, como podría ser ver al jugador, cambiamos de estado y, por tanto, la acción que estamos haciendo; en nuestro ejemplo podría ser perseguirle o dispararle. Es uno de los elementos más fáciles para diseñar, pues se puede hacer visualmente en un sencillo diagrama, pero el problema ocurre cuando toca hacer alguna modificación o cambio, pues en ocasiones no es fácil meter algún estado intermedio sin modificar el comportamiento.
Otro sencillo es el scripting. Se utilizan una serie de reglas, hechos y órdenes programadas en un lenguaje muy simplificado y la mezcla entre ellas produce comportamientos. Se suelen usar lenguajes como LUA o Prolog para estos casos. Un ejemplo de regla de scripting podría definir “Si veo personaje entonces ataco”. El problema de éstos es que no tiene fácil la reacción a elementos externos y las reacciones suelen ser muy similares.
Entrando ya en asuntos más complejos, un sistema que ha sido bastante utilizado es el de árboles de comportamiento (behaviour trees). Es otro método muy visual que usa una estructura de árbol, es decir, cada rama se va dividiendo en otras siguiendo una estructura de raíz a hojas. Las acciones más básicas están situadas en las hojas, las cuales darán éxito o fallo dependiendo de si la acción o comprobación se realizó con éxito, y hay una serie de reglas definidas al dibujar el árbol que sirven para ver a qué hoja se llega en cada momento y, por tanto, elegir la acción actual. Esos nodos que definen el camino son los selectores (representado habitualmente por una interrogación) y nodos secuencia (representados por una flecha). El nodo selector ejecuta una rama y, si es exitosa, ya no ejecuta más, mientras que en caso de fallo seguirá probando con el resto. Los nodos secuencia ejecutan una rama tras otra (en orden de izquierda a derecha) siempre y cuando todos los nodos ocurran con éxito, y en caso de fallo, acaba.
Por mostrar un ejemplo sencillo en la siguiente imagen, sacada de una presentación de Alex J. Champandard (quien trabajó en Rockstar y en las IAs de Killzone 2 y 3), los círculos amarillos y naranjas son acciones, los rombos con L son comprobaciones sobre el entorno y los cuadrados y el círculo con interrogación son los nodos secuencia y selectores. En la imagen el nodo raíz es un selector y el primer nodo ejecutado da éxito, con lo que termina, pero si hubiera fallado habría seguido con el nodo secuencia, el cual tras comprobar, por ejemplo, que ve al jugador, ejecutaría la acción siguiente, seguir. Si fallara ver al jugador, pasaríamos al siguiente nodo secuencia que tiene dos comprobaciones, una para encontrar un destino de patrulla y otra para ver si es alcanzable, y tras ellas pasaría a otra secuencia que ejecutaría el movimiento en dos pasos, girar y moverse. Es algo complejo de explicar, pero el tener programadas las acciones más básicas y tener todo visual en un árbol, creando subárboles para elementos más complejos, da muchas facilidades de cara al diseño y ampliación de IAs. Así también quedan bien definidos los roles, dado que el programador se encarga de hacer las acciones básicas y el diseñador de juntarlas conforme a la idea que tiene.
Luego está el control de manadas, o cómo un grupo de individuos actúa siendo conscientes unos de otros. En realidad mezcla cualquiera de las ideas anteriores, pero hay una inteligencia artificial superior que se encarga de manejar una serie de variables y constantes que el resto de individuos puede consultar en su comportamiento y también dicha inteligencia artificial puede mandar órdenes a los individuos para necesidades de grupo.
Aprendizaje
El aprendizaje es algo que se lleva estudiando mucho en inteligencia artificial, pero la aplicación en videojuegos no suele ser directa. Lo que se suele hacer es utilizar diversas técnicas de aprendizaje avanzado (fuera del juego) para obtener datos de jugadores reales y aplicarlos a las IAs que luego se usarán en los juegos, muy habitual en bots. Ahora con las conexiones a internet muchos juegos ya empiezan a no usar sólo los datos de los testers que había durante el desarrollo, sino también los de los propios usuarios finales para ir mejorando las IAs del juego, y parece que va a ser una tendencia cada vez mayor.
Todo este artículo ha sido una pequeña introducción, dado que el mundo de la inteligencia artificial aplicada a videojuegos daría para libros y libros sobre el tema y, además, cada poco tiempo van surgiendo nuevas técnicas más eficientes o, al menos, con más facilidades para utilizarlo. Es un tema que tiene también varios equipos de investigación no necesariamente ligados a videojuegos. Un buen campo de trabajo para buscar la innovación logrando resultados en otras aplicaciones fuera del mundo de los videojuegos.
La entrada Un poco de Inteligencia Artificial es 100% producto Deus Ex Machina.