# Inteligencia artificial para videojuegos/Toma de decisiones simples
## Introducción

Normalmente, Inteligencia artificial para videojuegos, es un término que que se suele utilizar para referirse al conjunto de técnicas, sistemas y algoritmos controlados por la máquina, que gobiernan a las criaturas, aliados o enemigos del juego.
El sistema de toma de decisiones suele ser lo más característico de la Inteligencia Artificial de un videojuego, ya que hace de puente entre la lógica de alto nivel y el mundo del juego.

## Árboles de decisión

Son modelos de predicción utilizados en diversos ámbitos mediante los cuales, dado un conjunto de datos se fabrican diagramas de construcciones lógicas, muy similares a los sistemas de predicción basados en reglas, que sirven para representar y categorizar una serie de condiciones que ocurren de forma sucesiva, para la resolución de un problema.
Los árboles de decisión es la técnica más sencilla para la toma de decisiones de una entidad del juego, básicamente consiste en una estructura para flexibilizar sentencias "if".
La manera más eficaz de utilizarlos es mediante árboles binarios aunque, es fácil que se vayan añadiendo nodos utilizando conectores lógicos llegando incluso a convertirse en grafos dirigidos acíclicos.
La complejidad de este mecanismo de toma de decisiones es mínima en general, aunque es mejor utilizar ramas equilibradas, postergando y hasta cortocircuitando las decisiones más costosas.
Es fácil crear variantes nuevas como incluir nodos aleatorios, con memoria para no cambiar mucho de decisión, pero con caducidad, para tampoco atascarse.
Para sofisticar este sistema, es posible usar aprendizaje automático para ampliar el árbol sobre la marcha.

## Máquina de estados finitos

Este modelo de predicción surge por la necesidad de las entidades de hacer una acción hasta que sucede algo en el juego. Suelen ser estructuras genéricas, aunque a veces se programan sólo con enumerados y switch.
Se utilizan jerarquías para recibir interrupciones aunque la implementación de las transiciones se complica. Para sustituir estas transiciones se suele utilizar árboles de decisión.

## Incertidumbre y utilidad

Millington y Funge proponen lógica difusa, pero reconocen que es mejor razonar con probabilidad como ya hemos estudiado.
Se pueden crear máquinas de estados finitos considerando la incertidumbre también, Esto puede hacerse en las transiciones o en los estados o también usando probabilidades, incluso viendo su evolución en el tiempo.
Con respecto a la utilidad, sólo con medir la de varias acciones para satisfacer varios deseos de una entidad se consigue bastante credibilidad en su comportamiento. Millington y Funge proponen también tener en cuenta el tiempo que duran las tareas.
Si queremos elegir la secuencia de acciones más útil, debemos pasar a planificar. El algoritmo más conocido para ello se conoce como GOAP (Goal Oriented Action Planning) que se implementa con búsqueda primero en profundidad o con A*.

## Bolt en Unity

El motor de videojuegos Unity dispone de múltiples Assets sobre máquinas de estado finito. Uno de los más usados es Bolt.
Permite crear realizar programación visual y crear máquinas de estado con su diagrama y todo.
Sería interesante crear una subpágina con más información.

## Resumen

* El sistema de toma de decisiones más simple y fácil de usar es el árbol de decisión.
* La máquina de estados finitos representa mejor "estar" actuando, y el árbol de comportamiento es aún más natural.
* Podemos añadir incertidumbre y utilidad.
* El sistema de reglas es la técnica más sofisticada, y la pizarra la más flexible.
* La IA se completa con guiones, y también es útil tener gestor de ejecución de acciones.