¿Olvidates tu contraseña?

Inteligencia artificial

2013-05-02
3 comentarios

Los aliados y los antagonistas son dos facciones presentes en casi cualquier juego, y si este juego no es online, será la inteligencia artificial la encargada de darle coherencia conceptual, es decir, que actúen como se supone que deben hacerlo. Dicho esto, no somos pocos los jugadores que alguna vez hemos estado a punto de maltratar la pantalla por culpa de unos compañeros de viaje estúpidos, o que nos hemos reído por lo tontos que son los enemigos. Las dos situaciones son un problema, y la solución es más compleja de lo que a priori podría parecer.

Una gran mayoría de los jugadores que se encuentran con este tipo de situaciones estúpidas en las que la inteligencia artificial del juego se comporta de manera poco elocuente, culpan sobre todo a los programadores del juego, argumentando para ello que el código no es eficiente, que está mal escrito, que está lleno de errores, que no funciona, etc. ¿Tiene realmente el programador la culpa de la estupidez de la inteligencia artificial?

No. El programador no tiene la culpa. Es más, ofuscar a la inteligencia artificial es una de las tareas principales de los encargados de este tipo de sistemas. Desde el punto de vista práctico para un programador, es mucho más sencillo realizar una inteligencia artificial perfecta que una deficiente. Cuando se programa, es mucho más fácil trabajar con valores absolutos que con valores medianos. Dicho de otra manera, es mucho más fácil crear un enemigo que siempre acierta al dispararnos, siempre toma la mejor decisión para acabar con nosotros y siempre se anticipa a nuestras decisiones; que un enemigo que a veces acierta y la mayoría de veces falla al dispararnos, casi nunca toma la mejor decisión y pocas veces se anticipa a nosotros. Lo mismo se aplica a los aliados: es increíblemente fácil programar un aliado que atine a todo lo que se proponga aniquilar, aunque la tarea de crear un compañero que no moleste al jugador se sigue presentando ardua.

De media, cualquier inteligencia artificial de un juego tiene la capacidad de pensar 30 veces por segundo. Dicho de otra manera, en un segundo, la máquina es capaz de tomar 30 veces la mejor decisión en función de las acciones del jugador. Ningún ser humano tiene la capacidad de reacción instantánea tan alta como para ser capaz de tomar una treintena de decisiones correctas en un segundo. Sería la inteligencia artificial invencible y perfecta, a la par que injugable. Si el reto que se le plantea al usuario es insuperable, no existe reto y, por tanto, tampoco existe diversión.

Efectivamente, a la hora de programar una inteligencia artificial, en lugar de empezar siendo esta “estúpida” e ir mejorándola, en la mayoría de casos la inteligencia artificial es perfecta y el gran trabajo del programador es hacer lo posible para que no sea invencible. Formas de desoptimizar segmentos de código hay muchas, siendo la más común que se reduzca la frecuencia de toma de decisión de 30 veces por segundo a tan sólo una o dos veces por intervalo – y aun con todo, sigue siendo muchísimo.

Esta forma de enfocar la inteligencia artificial va intrínsecamente ligada a la forma de graduar la dificultad de un juego. Como es tan difícil mermar a una inteligencia y ajustar coherentemente el nivel de eficiencia de esta, en casi ningún juego seleccionar niveles de dificultad superiores implica una mejor programación de los enemigos, de la misma manera que elegir uno inferior tampoco supone mayor probabilidad de enemigos deficientes. La eficacia de la inteligencia artificial permanece inmutable, pero lo que sí que cambia es la facilidad que tiene el jugador para morir. En otras palabras, la inteligencia artificial en modo difícil no es más espabilada, sino que el jugador puede cometer menos errores para acabar con ella. Esto significa que el daño que recibe el jugador es multiplicado según el factor de dificultad del juego, al tiempo que el daño que es capaz de realizar el jugador queda también reducido por otro factor similar.

El problema, pues, de una mala inteligencia artificial no reside en la pericia que tiene el desarrollador para programar, sino en la pericia que tiene éste para deteriorar algo perfecto. Parece increíble, pero la perfección técnica es el principal problema de los videojuegos; y esto es algo que no sólo se aplica a la inteligencia artificial.

Modelar ángulos rectos, paredes de un blanco impecable, texturas impolutas de piedras, barriles perfectos o animaciones sin ningún tipo de microexpresión es una tarea sencilla. Lo difícil es que tengan naturalidad, y en el mundo de la perfección, todo resulta tan extremadamente estético que nuestro ojo primitivo lo percibe como antinatural, ergo desaparece la mentira que el jugador se quiere creer: el videojuego.

En esta arte, lograr la imperfección es lograr la auténtica perfección. Arrancar pedazos del mundo de las ideas de Platón y utilizarlas para crear mundos coherentes es el pan de cada día de un equipo desarrollador de videojuegos, y si eso implica que el caballo del malo sea siempre más lento, que así sea.

Inicio Foros Inteligencia artificial

  • Imagen de perfil de Carlos CoronadoCarlos Coronado
    Super administrador
    #38453

    Los aliados y los antagonistas son dos facciones presentes en casi cualquier juego, y si este juego no es online, será la inteligencia artificial la e
    Lee el artículo completo en http://www.zehngames.com/developers/inteligencia-artificial/

    Imagen de perfil de SaxKazeinSaxKazein
    Participante
    #38454

    Bueno, como ya te comenté, aunque lo que comentas es una situación que se puede dar en varias ocasiones, en general, no puedo estar de acuerdo con esta postura. El programador es el responsable absoluto de la ineficiencia de la inteligencia artificial y, en la mayoría de casos, hay un alto grado de incapacidad a la hora de hacer un buen trabajo en este apartado.

    Insisto, es cierto que existen casos en los que la diseñar el comportamiento de la máquina puede resumirse a cuestiones simples o en las que prime tanto la velocidad de reacción que la máquina pueda resultar imbatible. Pero esto no es así en la mayoría de casos. De hecho, en estos casos no se puede hablar siquiera de una inteligencia artificial como tal, sino de un mero patrón de respuestas más o menos dinámico. Hablar de una inteligencia artificial (y permitiéndonos muchos lujos que se me van a tener que perdonar para no andarme demasiado por las ramas), es hacerlo de un programa con la capacidad de resolver diferentes problemas a partir de un cierto grado de información, esto es, que según los datos que se les ofrezcan a la máquina esta sepa responder a la situación que se le plantee de una manera u otra. Por lo que hablar de un enemigo de shooter capaz de visualizar en todo momento donde se encuentra el jugador y que puede apuntar a su posición exacta porque se le proporcionan esos parámetros diréctamente significa que, o bien se ha hecho un mal trabajo al informar al algoritmo de datos que debería calcular, no obtener; o bien no estamos hablando de una inteligencia artificial que estima el comportamiento que debería tener, en todo caso y como decía antes, de un programa que trabaja ya con las soluciones localizadas y se limita a emplear la oportuna.

    A esto hay que sumar, por supuesto, ese muro constante que se encuentra uno siempre que habla de algoritmia: la complejidad de orden no polinomial. Aún cuando tratemos con el más optimizado de los algoritmos, ya se sabe que hay ciertos problemas pertenecientes al conjunto NP que no se pueden resolver en tiempo polinomial, lo que sumado al alto grado de variables con el que se suele trabajar en juegos actuales hace que sea sencillamente imposible obtener la mejor solución posible en un tiempo aceptable. Muchos árboles de búsqueda de soluciones que se emplean para los juegos de estrategia actuales sufren esta dolencia de forma más que evidente y cualquiera que haya jugado una partida a cualquier Civilization en sus últimos turnos habrá notado como la máquina tarda cada vez más en decidir y como se estresa a la CPU de manera mucho más intensiva (aunque para hablar de esto en profundidad también habría que hacerlo de la computación paralela y no creo que sea el momento).

    En definitiva, con esto vengo a referirme a que las inteligencias artificiales como tales no son ni muchísimo menos perfectas en la mayoría de casos, tan sólo están mal implementas. Y aún cuando estamos ante un buen trabajo, la situación es tan complicada que a día de hoy sigue siendo necesario tomar medidas de “recorte” para facilitar la toma de decisiones de la máquina.

    Imagen de perfil de Carlos CoronadoCarlos Coronado
    Super administrador
    #38455

    Obviamente, damas y caballeros, Sax sabe mucho más que yo del tema, pues la inteligencia artificial no es algo con lo que yo suela trabajar. Igualmente Sax, mi intención con el artículo es sencilla; hacer ver a nuestros lectores que en la next gen no se verán inteligencias artificiales tremendamente superiores a las actuales.

    Sobre los ejemplos que he puesto, bien es cierto que acertar o no lo define un parámetro, y no una IA, pero por ejemplo, flanquear al jugador o elegir cuando tirar la granada, etc, si que podría ya considerarse IA pura. Igualmente me remito a lo dicho: tu eres aquí el experto y se que este artículo ha sido una visión muy superficial del tema, y se agradecen los comentarios enriquecedores como los tuyos puto 😛

    Imagen de perfil de EnCarmenaEnCarmena
    Participante
    #38456

    He leído el artículo con el rostro muy serio, mirando fijamente y asintiendo con mucha masculinidad, y a continuación me he dispuesto a escribir la respuesta, cuando de pronto me veo con el post de Sax. Según lo he ido leyendo se me ha puesto cara de paleto, hasta que al final he cogido una boina y me he ido a criar gallinas.

    Y tras comer un poco de pollo y huevos fritos puedo comentar, eso sí, desde el punto de vista de un jugador cuyo mayor nivel de programación es hacer que se abra un cofre del RPG sin sacar el dedo medio:

    Sin saber la dificultad que puede suponer algo así… creo que la gente no quiere tanta maravilla con lo de la IA. Crear la ilusión de una buena inteligencia artificial considero que se hace moviendo al personaje de turno a que responda según unos patrones mínimos.

    Cuando veo quejas de una IA casi siempre se trata de los mismos casos:
    -Enemigos que se echan a correr hacia ti como locos disparando a las nubes.
    -Enemigos que se quedan quietos, meditando muy seriamente la existencia de las musarañas, mientras un edificio explota a su lado o le caen disparos.
    -Enemigos que te olvidan y se quedan tiroteando moscas siempre (lo llamo cariñosamente el síndrome Red Steel, con esos enemigos a mi lado que dispararon a una pared durante media hora de reloj mientras el resto miraban).
    -Aliados que se ponen en medio de tu trayectoria.
    -Aliados que bailan la salsa mientras te desangras en el suelo.
    -Aliados a los que puedes dar órdenes que jamás te obedecerán.

    Y creo que más de uno estará de acuerdo en que esos no son, bajo ningún concepto, ejemplos de IA “sobreperfeccionada” ni nada por el estilo. Que nadie me haga creer que para un [Inserte habitante de una nación alguna vez hostil con EEUU] entrenado en combate la mejor opción es “corre de frente aunque te den escopetazos en la cara”. Para contentar a alguien, al menos con los enemigos, basta con dar algunos toques coherentes, tipo cubrirse de vez en cuando, que alguno intente rodearte, o no quedarse en el mismo punto. Los soldados de Half Life son considerados un ejemplo a seguir respecto a IA enemiga, y en esencia lo “único” que hacían era procurar ir en grupos y no lanzarte a por ti en plan Doom. De hecho, con cuidar pequeños detalles han llegado a dar la ilusión de que las CUCARACHAS tienen mejor IA que un enemigo de FPS actual, “solo” con hacer que salgan corriendo si alguien se acerca o si hay luz fuerte, y que se acerquen a la carne muerta que hagas con enemigos o aliados.

    Sobre estos últimos… creo que con que no se pongan en medio y vayan a ayudarte cuando estás en problemas -dígase con la pantallita parpadeando en rojo, o tirado en el suelo… lo típico- basta, y sobre todo, aunque esto debería ser OBVIO, que si hay un sistema de órdenes las cumplan. No digo casos como Binary Domain, donde si le caes mal a un compañero te puede mandar a tomar viento a la farola cuando le mandas algo, sino que pienso más en el compañero del nuevo Star Trek donde pulsas el botoncito para abrir una puerta, te piden que el compañero te ayuden, y el buen capitán/Spock estén en el pasillo de al lado cortándose las uñas mientras dice “Sí, estoy en camino, ahora mismito voy”.

    Que ojo, entiendo que la lógica de un ordenador no comprende de contextos. Que a lo mejor el terrorista que va corriendo a por ti tiene la IA diciéndole a la oreja “lo bueno es ir a saco porque le matas más rápido” porque de verdad sea una opción óptima en lugar de esconderte y dejar que el PJ se regenere. Pero nuestra mente no funciona así, y se ha demostrado más de una vez que se puede enseñar al programa a hacer las cosas “human-style”. Porque ni los bichos del Gears, ni los del Halo, ni los piratas del Uncharted, ni las cucarachas de Half Life me han hecho tanta burrería junta.

Viendo 4 publicaciones - del 1 al 4 (de un total de 4)

Debes estar registrado para responder a este debate.