Curso “Programación de Juegos”
Curso Gratuito
Entrega 8. La I.A. (Inteligencia artificial) en los 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?
- Porque sabe que es peligroso (tiene conocimiento o alguien se lo dijo)
- Porque ya lo hizo y le dio una “patada” (tiene experiencia previa)
- Porque nunca antes estuvo frente a un conector 220 y por eso nunca hizo la prueba
- 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:
- 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
- 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.
- 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:
- Información de cotización de la bolsa >>> predicciones de valores bursátiles
- Signos, sintomas y valores de laboratorio >>> diagnosticador médico de sindromes o enfermedades
- Signos y sintomas de sindromes depresivos >>> bot conversacional terpeutico psicologico
- 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.
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.
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.
Por ahora el viejo entorno de caracteres sigue siendo útil para analizar técnicas de programación.
Hasta la próxima.
----------------------------------------------------------------------
Curso Gratuito de Programación de VideoJuegos
1. Introducción
2. A quienes va dirigido el curso
3.Temario del curso / Herramientas
4.Primer programa (codigo fuente)
5.Detectando colisiones y comiendo objetos
6.Eliminando el bug de nuestro programa
7.Juego completo "El Minero"
8.La I.A. ( Inteligencia artificial ) en los juegos
9.La generación de bots enemigos en el juego
6.Eliminando el bug de nuestro programa
7.Juego completo "El Minero"
8.La I.A. ( Inteligencia artificial ) en los juegos
9.La generación de bots enemigos en el juego
----------------------------------------------------------------------
Por Ricardo Ponce
Links de Interés:
Colabora con nosotros
Indice General de Notas y Clases Desgrabadas
Últimas notas agregadas
Colabora con nosotros
Indice General de Notas y Clases Desgrabadas
Últimas notas agregadas
Cursos de Formación Profesional
Toda la oferta de cursos
Libros Gratuitos para Usted
Nuestro Canal YouTube
Toda la oferta de cursos
Libros Gratuitos para Usted
Nuestro Canal YouTube
Servicio Técnico en Sistemas, Redes y CiberSeguridad
Márketing en Internet y Redes Sociales
Su Aula Virtual en Internet
Su Taller en Internet
Su empresa en Internet
No hay comentarios:
Publicar un comentario