Curso de juegos (8)


Curso “Programación de Juegos”

Curso Gratuito
Entrega 8. La I.A. (Inteligencia artificial) en los juegos


Uno nota el desarrollo mas o menos profundo de un juego a través de la inteligencia artificial ( IA ) que se aplique en ellos. En esta nota hablaremos de la IA. Probablemente la nota salga un ciento por ciento teórica, pero es importante que entienda la teoría para llegar a la práctica.

Un problema que sufrimos todos los programadores es el de la ansiedad crónica… Tendemos a escribir código aún cuando no dominamos la teoría… de ahí la mediocridad creativa en los programadores actuales. Tenga paciencia y lea estas líneas de teoría para programar como los mejores… jaja.

Entrando en el tema: la arquitectura actual de los sistemas permite simular comportamientos independientes al humano y de ese modo compartir la partida con diversos bots (robots) virtuales que hacen más divertido jugar. Mientras más IA tengan los bots mejor será el juego… y más adictivo también.

Para mucho programadores iniciales (y no tanto), la IA es un tema oscuro y difícil. Pero siguiendo el estilo descontracturado de estas notas, voy a explicarle exactamente lo que es la IA y como se puede aplicar a los juegos de un modo práctico y, por supuesto, con un ´código fuente.

Para empezar, como es mi estilo de dar clases, voy a simplificar muchísimo los términos y conceptos porque como programador de base que soy, las intelectualidades no me sirven. A usted tampoco.

Parte del problema de la IA actual es que los programadores se han perdido tanto en la maraña teórica que proponen en la bibliografía los autores de IA, que han perdido el espíritu de aventura de los que programábamos en los 80… Se han vuelto perezosos intelectualmente y como no aplican razonamiento, dependen de los famosos lenguajes de IA y motores de inferencia, siendo incapaces de desarrollar su propio motor de IA.

Eso no le pasará a usted (que lee estas líneas)… porque entenderá al 100% la IA y la aplicará al 100% en sus juegos… o aplicativos… dependiendo de la magia de su imaginación… como todo buen programador de base o de propósito general.

Vamos al grano: ¿Qué es la IA?

Podemos definirla de muchas maneras, pero a nosotros nos interesa la IA aplicada a juegos.
Hay miles de hojas escritas.. miles de autores… miles de libros vendidos. Lo cierto es que la clave de la IA la hemos tenido los programadores de juegos desde los años 80… pero nadie nos ha prestado atención y los intelectualoides de la IA nunca tomaron en serio los juegos. Hoy en día están empezando a darse cuenta de su error… o por lo menos algunos de ellos.

Mi Definición: La IA es la capacidad de tomar decisiones que tiene un sistema basándose en datos previamente almacenados. Esas decisiones pueden tender a hacer una descripción global del conjunto de eventos, sintomas y signos analizados (sistema IA diagnosticador) o hacer un cálculo probabilístico de esos eventos, sintomas y signos para determinar comportamientos futuros (sistema IA predictivo).

Esto… desde el punto de vista que nos interesa por ahora (juegos). Como mencioné, hay otras definiciones pero en esto se basa TODA  la IA.

Fácil…..  ¿Qué no….? Bueno… lo llevaremos al plano cotidiano:

Ejemplo: Usted no metería los dedos en el enchufe de 220 volts… ¿no es así? (a menos que sea idiota… o tenga algún problema grave en la esfera intelectual… o sea un niño sin conocimientos o experiencia… o...o…o… etc)

¿Por qué no lo haría?

  1. Porque sabe que es peligroso (tiene conocimiento o alguien se lo dijo)
  2. Porque ya lo hizo y le dio una “patada” (tiene experiencia previa)
  3. Porque nunca antes estuvo frente a un conector 220 y por eso nunca hizo la prueba  
  4. O nunca se le ocurrió que podía meter sus dedos en el agujero (le falta imaginación o proactividad) 
NOTA >>> si usted califica en los puntos 3 o 4 : POR FAVOR NO META LOS DEDOS NI NADA METALICO EN EL CONECTOR DE 220 VOLTS.

Siempre habrá alguien que opine con más o menos proposiciones o quiera entablar una polémica al respecto de estos puntos. Dejemos las discusiones inútiles a los post-graduados intelectualoides que todavía discuten la IA y aún no la desarrollan al 100%.

PRIMERO: para que haya IA se necesita un conjunto de información que sirva de base para tomar decisiones (los puntos 1 y 2 reflejan información). El conocimiento en un sistema de IA es una base o un banco de datos o un conjunto de ellos. Se llama “Base de Conocimiento”.
(si no sabe la diferencia entre base de datos y banco de datos… a estudiar…)

SEGUNDO: para que haya IA no basta la información, debe haber un sistema que seleccione la información necesaria para que el sistema pueda tomar una decisión (un mega sistema del tipo IF-THEN-ELSE). A eso se le llama “Motor Inferencial”. Este motor inferencial puede programarse para distintos objetivos (Diagnosticar / Predecir, etc). El motor inferencial está formado por “reglas”.

Nuestra regla sería: 

    IF “con el dedo toco el conector de 220” THEN

        “me electrocuto. Game over.”

    ELSE “ingreso algo metálico al conector de 220”

        “también me electrocuto. Game over.”

    END IF


En el primer gráfico le muestro como funciona el sistema de IA: el motor inferencial debe tener un sistema de consulta. Cuando la consulta entra en el sistema, el motor inferencial determina que información debe recolectar para generar una respuesta.

Sencillo.

Si entendió hasta aquí todo lo que escribí, es usted un experto en alrededor del 50% de lo que es la IA.
 


Todo lo demás en un sistema de IA es un complemento para que estos dos elementos (motor inferencial y base de conocimientos”) funcionen moderadamente bien y se comunique con el exterior razonablemente bien.

Sistema de consulta

Por ejemplo: se puede programar una analizador sintáctico para procesar la consulta. El analizador sintáctico también se conoce como parser.

Si el parser trabaja con un lenguaje técnico específico pre-programado con reglas de escritura, sería algo así como el analizador sintáctico usado en SQL o en mi programa SQL Connector.

Estos analizadores sintácticos son muy sencillos de implementar y se conocen desde hace décadas. Cuando usted programa en su entorno IDE, tiene incorporado un analizador sintáctico. Puede ver un ejemplo de parser para lenguaje de programador en mi compilador VPBasic.

Si el parser trabaja con lenguaje humano, se le llama “procesador de lenguaje natural”. Estos son un poco (sólo un poco, no mucho) más complejos porque deben reaccionar a diferentes modos de expresión.

Le doy un ejemplo: supongamos que se comunica con su novia (a la que quiere mucho) y a través de un mensaje le puede expresar una idea de diversos modos:

-Te amo
-I love you
-Love
-TQM

Su novia (que cuenta con un cerebro humano) tardará una mínima fracción de segundo en entenderlo sin problemas. Y entiende que es el mismo mensaje no importa como lo exprese. Porque su novia cuenta con una mega computadora que procesa en paralelo millones de mensajes al mismo tiempo y a una super velocidad imposible para las computadoras actuales. Tampoco requiere de un sistema de refrigeración de millones de dolares basado en tanques de nitrógeno para pensar (para los que dicen ¿y las computadoras cuánticas…?)

Pero estas opciones le “rompen la cabeza” a un minúsculo cerebro de silicio de 1.000 nucleos que sin importar el precio… depende de un programa cuyo parser debe analizar todas estas escructuras y puede tardar mucho tiempo en “darse cuenta” del sentido del mensaje. Y si no está programado para analizar la frase que usted usó… simplemente no lo entiende.

Sistema de respuesta

Es más facil, porque puede generar frases a partir de un programa pre-establecido por el programador, que sigue sus propias reglas y elimina el componente aleatorio para responder monolíticamente según lo programen.

Entonces ¿Qué hace compleja de implementar a la I.A.?

Como podrá ver, la IA no es tan difícil de implementar. Cualquier lenguaje programa IF-THEN-ELSE, por lo tanto usted puede aplicar IA en cualquier lenguaje. Pero existen un conjunto de problemas en muchas áreas de la IA.

Veamos algunos (no todos, solo algunos para darnos una idea). Usted puede analizar otros factores. Obviamente la clave es el programador. Con un buen programador usted analizará multiples problemas externos, pero si tiene un programador mediocre… no hay solución posible que sea satisfactoria.

Veamos esos problemas técnicos…. El motor inferencial puede trabajar más o menos eficiente dependiendo de algunos factores clave:


  1. El nivel del lenguaje usado. Mientras más de alto nivel sea el lenguaje, la traducción a lenguaje máquina tarda más ciclos de reloj. De ahí el intento de crear lenguajes específicos para implementar IA 
  2. La rapidez del algoritmo. Depende de la experiencia del programador pero esto también choca con el límite del bajo nivel. Dependiendo de la estructura de bajo nivel del compilador que se use las instrucciones y funciones de toma de decisión del alto nivel pueden incluir más o menos ciclos de reloj una vez creado el ejecutable.
  3. La cantidad y calidad de la información recoletada en la base de conocimientos. A mayor información analizada, menos rapidez pero mayor efectividad del análisis. Esto depende del diseño del algoritmo y de como se crean las reglas de conocimiento del motor de inferencia.


Si lo piensa un poco, se dará cuenta que cada motor inferencial requiere de un diseño de base de conocimiento especialmente diseñada para él.

Ejemplos:


  1. Información de cotización de la bolsa >>> predicciones de valores bursátiles
  2. Signos, sintomas y valores de laboratorio >>> diagnosticador médico de sindromes o enfermedades
  3. Signos y sintomas de sindromes depresivos >>> bot conversacional terpeutico psicologico
  4. Analizador de datos quinielas y loterías >>> prediccion de resultados 

 Algunos de estos ejemplos ya existen desde hace mucho tiempo. Por ejemplo, hay notas periódisticas escritas por robots desde hace varios años en prestigiosos periódicos del mundo, analizadores bursátiles que generan información en tiempo real que influyen sobre las cotizaciones de bolsa de algunas empresas… hay ejemplos para todos los gustos posibles.

Aplicación de I.A. en juegos

Le dejo toda la información para que usted investigue. Ahora vamos a lo que nos importa: como aplicar la IA en nuestros juegos.

Obviamente vamos a decir que implementaremos (por una cuestión didáctica) 3 niveles de IA

a) Nivel 0 (estrictamente sin IA). Implementaremos un bot con movimientos al azar para comenzar a ver cómo se crean interfaces de sofware que nos sirven de base para implementar técnicas de programación con enemigos activos en nuestros juegos, pero que se moverán independientemente pero sin analizar al jugador humano.
Este programa ya lo tengo armado. Sólo tenga paciencia.

b) Nivel 1 (con IA de primer nivel). En este nivel crearemos un enemigo que tendrá una tendencia a “buscar” acercarse al jugador humano para confrontarlo. Sus movimientos serán entonces programados para que se acerquen al jugador. La base de conocimientos será entonces la ubicación del jugador y el motor inferencial simplemente será el encargado de sugerirle al bot que camino tomar para acercarse al jugador.


c) Nivel 2 (con IA de segundo nivel). Aquí haremos un salto porque la idea es que el bot no sólo se acerque al jugador humano, sino que prediga que movimientos hará para anticiparse a él.  Su base de conocimiento será la información de la posición actual del jugador humano y un sistema de análisis estadistico que almacene los movimientos del jugador, detectando que posiciones son las más usadas por el humano dentro del tablero de juego. Parece complicado, pero verá que no lo es tanto. Estos son sistemas que, mientras más se juego, más inteligente se vuelve el bot porque analiza más infomración y aumenta su probabilidad de acierto. Esto se conoce como predicción de rama o juegos predictivos.

Espero haber sido claro en los conceptos. Por supuesto que estos postulados se irán aclarando en la medida que vea el código escrito y vaya implementando las soluciones propuestas.

Seguiremos usando el viejo Qbasic (por lo menos para el nivel 0). En cualquier momento “saltaremos” a un lenguaje algo más potente.

Por ahora el viejo entorno de caracteres sigue siendo útil para analizar técnicas de programación.

Hasta la próxima.

----------------------------------------------------------------------


Share:

No hay comentarios:

Publicar un comentario