# Inteligencia artificial para videojuegos

Bienvenido a este proyecto de aprendizaje dedicado a ampliar conocimientos tanto teóricos como prácticos en torno a la investigación y el desarrollo de inteligencia artificial aplicada a videojuegos y aplicaciones multimedia interactivas en general.
Este proyecto forma parte de la Wikiversidad. Te invitamos a saber más sobre ella y a descubrir cómo dar tus primeros pasos por aquí. Además te informamos de que la Wikiversidad tiene un manual de estilo y ha definido unas políticas que deben respetarse a la hora de editar cualquiera de sus wiki-páginas.
Existe un proyecto de aprendizaje en la Wikipedia inglesa creado a partir de este.

## Objetivos

Este proyecto de aprendizaje ofrece la posibilidad de conocer los fundamentos de la inteligencia artificial, así como las principales técnicas de modelización y desarrollo así como algunas herramientas y lenguajes disponibles para desarrollar este tipo de sistemas informáticos, buscando su aplicación práctica en la industria del entretenimiento interactivo. El énfasis se pone en capacitar a los participantes para comprender y analizar problemas relacionados con el razonamiento y la planificación automática, el comportamiento de agentes inteligentes, o la creatividad computacional, para después diseñar e implementar soluciones informáticas eficaces y eficientes a dichos problemas.
Además se incita a los participantes a poner en uso lo aprendido mediante el desarrollo de una serie de prácticas que ilustran todos los principios y procesos vistos en la teoría, y que permiten ir iniciándose en el trabajo de un Ingeniero de Inteligencia Artificial para Videojuegos.
En esta página pueden consultarse los conceptos que se abordan formalmente en este proyecto de aprendizaje:
* Lista de conceptos

## Materiales didácticos

Los principales materiales didácticos de este proyecto son las lecciones que se desarrollan colaborativamente entre todos los participantes. Estas lecciones, y en general las actividades de este proyecto de aprendizaje, pueden tener asociadas lecturas recomendadas: fuentes bibliográficas, guías, artículos de la propia Wikipedia o de Wikilibros. Los complementos más relevantes para todo el proyecto de aprendizaje se recopilan en la sección de referencias de esta misma página.
Aunque tenga una cierta componente teórica, este proyecto de aprendizaje incluye numerosas actividades de carácter práctico. Son bienvenidos los ejercicios, casos prácticos, pruebas de nivel de conocimientos, trabajos en grupo o tareas similares, todas ellas actividades que deberán estar asociadas a sus respectivas lecciones.
Existe un calendario de clases con las fechas reales de las distintas ediciones del curso universitario que realizan los participantes y que suponen el inicio de este proyecto de aprendizaje. El calendario incluye las tareas y prácticas reales que semana a semana se han realizando, de manera que pueda servir como referencia a la hora de adaptar el proyecto de aprendizaje a las circunstancias concretas de cada nuevo participante:
* Calendario del curso

### Lecciones

A continuación se presenta el listado con las distintas lecciones que se han ido generando como material didáctico de este proyecto de aprendizaje. Las lecciones están organizadas en distintos bloques (o temas) y al final hay una sección con anexos que complementan la información de las lecciones.
Es importante que, a la hora de crear o editar lecciones, tengas en cuenta los siguientes consejos:
* Consejos para redactar lecciones

#### Bloque 1: Introducción a la Inteligencia Artificial

Estas lecciones introducen cuestiones básicas sobre la inteligencia artificial y su relación con el mundo del videojuego.
Lecciones:
* Fundamentos de la inteligencia artificial
* Historia de la inteligencia artificial para videojuegos
En este bloque se sugiere continuar investigando en tipos de inteligencia distintas de la humana (más como una herramienta expresiva), aplicaciones habituales de la IA en videojuegos (distinguiendo según géneros y tecnologías disponibles). No se profundiza sin embargo en aplicaciones que estén alejadas del ámbito del videojuego.

#### Bloque 2: Resolución de Problemas

Estas lecciones entran de lleno en el problema de desarrollar sistemas informáticos capaces de resolver problemas mediante el razonamiento, o al menos sabiendo que requieren cierta inteligencia similar de alguna forma a la del ser humano. Nos centramos en modelar la resolución de problemas como una búsqueda en el espacio de estados posibles, y a su vez cuando usamos diversas estrategias para esta búsqueda. Una aplicación típica en videojuegos es la planificación de rutas, como se estudiará más adelante.
Lecciones:
* Modelos racionales de resolución
* Búsqueda en el espacio de estados
* Estrategias de búsqueda no informada
* Estrategias de búsqueda informada
* Búsqueda con adversarios
* Planificación automática
En este bloque se sugiere continuar investigando en otros paradigmas de la IA, uso de librerías que ofrecen diversas estrategias de búsqueda, variantes aún más específicas de los algoritmos. No podremos sin embargo profundizar en los problemas de satisfacción de restricciones, muy útiles en Logística, pero que no abordaremos al no ser tan relevante en videojuegos.

#### Bloque 3: Conocimiento, Razonamiento y Decisión

Estas lecciones abordan el temas de representación (marcos, lógica, reglas de producción...) y uso del conocimiento (y sus tipos), así como la toma de decisiones.
Lecciones:
* Representación del conocimiento
* Representación en lógica de primer orden
* Razonamiento como inferencia lógica
* Conocimiento incierto
* Razonamiento probabilista
* Teoría de la decisión
En este bloque se sugerirá continuar investigando en: razonadores que pueden conectar externamente o ir integrados con un videojuego, herramientas y lenguajes para definir comportamiento mediante reglas u otras técnicas, e incluso ontologías. Aunque es un tema de suma importancia, no abordaremos en ningún bloque el campo del Aprendizaje automático porque queda pendiente para ser tratado en otras asignaturas y sus correspondientes proyectos de aprendizaje.

#### Bloque 4: Percepción, Comunicación y Acción

Estas lecciones abordan el concepto de agente inteligente así como las técnicas más habituales para conseguir comportamiento autónomo en videojuego, profundizando en cuestiones relativas a lo que hace un agente inteligente en el juego, además de pensar: percibe, se comunica y actúa. La aplicación típica en videojuegos es el diseño de personajes no jugadores (NPCs).
Lecciones:
* Sistemas multi-agente
* Percepción
* Planificación de rutas
* Movimiento
* Toma de decisiones simples
* Toma de decisiones complejas
* Tácticas y estrategias
* Herramientas de autoría
En este bloque se sugerirá continuar investigando en Inteligencia Artificial distribuida y sistemas multiagente, en Procesamiento de Lenguaje Natural y modelos probabilísticos para realizar algunas de estas funciones. No veremos nada sobre Visión artificial y Robótica, aunque son campos muy relacionados, tampoco profundizaremos en el uso de los actuales servicios cognitivos que ofrecen las grandes plataformas en la nube de Microsoft Azure, IBM Bluemix y otras.

#### Bloque 5: Creatividad y Expresividad

Estas lecciones profundizan en cuestiones relativas a técnicas avanzadas para conocer al jugador, adaptar dinámicamente el juego y evaluar el impacto de la inteligencia artificial en la experiencia final del jugador (todo relacionado con un campo llamado Creatividad Computacional, donde de hecho, incluso se habla de máquinas que demuestran Expresividad Artística). La aplicación típica en videojuegos es la generación procedimental (automática o semiautomática) de contenidos como niveles, misiones, personajes o argumentos enteros.
Lecciones:
* Creatividad computacional
* Generación procedimental de contenido
En este bloque se sugerirá continuar investigando en modelado del jugador, adaptación dinámica del juego (con evaluación automática del juego) y evaluación de la experiencia.

#### Anexos

Para complementar y resumir el contenido más relevante de las lecciones se ofrecen anexos complementarios a estas. No se trata de hacer listados exhaustivos sino de reunir aquí referentes mencionados en las lecciones y listados relevantes para este proyecto de aprendizaje.
Se proponen los siguientes anexos que estarán en permanente proceso de construcción y ampliación:
* Glosario de términos y acrónimos
* Lista de videojuegos relevantes

### Actividades

Las actividades de este proyecto de aprendizaje son talleres sobre temas específicos y prácticas relacionadas con estos y desarrolladas por los participantes. Estas actividades se irán exponiendo a continuación para que sirvan como ejemplos y casos prácticos para el estudio.
Es importante que, a la hora de crear o editar actividades, tengas en cuenta los siguientes consejos:
* Consejos para redactar actividades

#### Talleres
##### Introducción

A la hora de ponernos prácticos siempre hay problemas técnicos, sobre todo si es algo tan sofisticado como una IA. Es vital conocer técnicas y usar herramientas y sobre todo ver como se aplican a la hora de usarlas, lo que haremos serán prototipos de IA. Hay que tener en cuenta que al ser IAs de videojuegos el factor audiovisual es importante a diferencia de una IA convencional, por lo que tiene un desarrollo de trabajo ligeramente distinto:
* Recibe o propone una dinámica del juego.
* Investiga el tema y recoge referencias.
* Analiza el problema y crea un modelo.
* Diseña la solución, el sistema o algoritmo.
* Desarrolla el prototipo y aquello que servirá como banco de pruebas (testbed).
* Prueba el prototipo.
* Vuelve al paso anterior si el resultado no es el pretendido.
Lo mas importante a tener en cuenta para los talleres a la hora de trabajar es desarrollar cuento antes un buen banco de pruebas, ya que te ahorrara mucho tiempo para no empezar de 0 todas las practicas y también probar cada avance poco a poco, no esperar a tenerlo todo hecho sin llegar a verificar su funcionamiento primero, ya que si te lías a buscar nodos que fallen... buena suerte!
Estos son los talleres donde se abordan cuestiones específicas del desarrollo de sistemas de inteligencia artificial:
* Resolviendo puzles
* Moviendose por el tablero
* Exploradores y Vigilantes
* Decisiones de Supervivencia
* Aliados y enemigos en combate

#### Prácticas

Estas prácticas son casos que han realizado los alumnos a lo largo de este proyecto de aprendizaje:
* Puzle de bloques deslizantes
* Control de unidades en juego RTS
* Detective en escena del crimen nocturna
* Frente de guerra zombi
* Tiroteo entre fantasmas