Introducción a la programación de videojuegos David Erosa García Luis Rodero Morales
[email protected]
[email protected]
Inteligencia Artificial Ahora toca pensar...
Introducción Problemática
•
• •
Antes de la generalización del uso de técnicas de IA, los PNJ de los juegos se comportaban de una manera fija:
• • •
Desplazamientos según una ruta predeterminada o al azar. Disparos aleatorios. Incapacidad de evaluar situaciones de peligro.
Como consecuencia, el juego resultaba monótono y predecible. Ésto hace que el jugador no se sienta retado por el juego.
3
Introducción Soluciones
•
•
Como solución eficaz se emplean técnicas como:
• • • • • •
FSM (Finite-State Machines). Búsqueda de caminos. Heurística. Algoritmos genéticos. Redes neuronales. Lógica difusa.
Como introducción a la IA, nos centraremos en los dos primeros puntos.
4
Finite State Machines Introducción
• • • •
Una máquina finita de estado es una entidad abstracta compuesta por un conjunto de estados y de transiciones entre dichos estados. Las transiciones se producen según unas condiciones que dependen del exterior y opcionalmente del estado actual. La máquina generará una serie de acciones según el estado actual. Se usan generalmente para manejar unidades a nivel individual.
5
Finite State Machines Introducción
• • • •
Para diseñar una FSM, tenemos que tener en cuenta todo lo que queremos que haga, y de qué manera. Según lo anterior, hemos de agrupar acciones y condiciones de activación (para obtener los estados). Para implementar una FSM existen varios métodos. Nosotros usaremos una estructura simple:
•
Tenemos una interfaz fsmbase, que consiste en:
• •
Una función think(), que se encarga de comprobar las condiciones y cambiar de estado. Una función update(), que produce las acciones correspondientes al estado actual.
6
Finite State Machines Ejemplos de FSM's
•
Un ejemplo básico: Parado
No
¿Lo veo? Sí Cazar No
¿Lo veo? Sí ¿Cerca? Sí Atacar
7
No
Finite State Machines Ejemplos de FSM's
•
Tenemos una FSM que representa a una torreta automática, con las siguientes características:
• • • • • •
Está fija en el suelo e inicialmente está inactiva. Tiene un radar que barre una circunferencia de radio r. Cuando un jugador entra en el área del radar, se activa el modo de búsqueda del objetivo. Cuando fija el objetivo, dispara. Si pierde el objetivo, intenta alinearse de nuevo con él. Si el objetivo se encuentra fuera del alcance del radar, vuelve al estado de inactividad.
8
Finite State Machines Ejemplos de FSM's
• •
Tenemos otra FSM que representa a las balas que dispara la torreta. Tienen las siguientes características:
• • •
Cuando son creadas, tienen inicialmente un estado “volando”, en el que lo único que hacen es avanzar según la dirección con que las hayamos inicializado. Si mientras están volando tocan al jugador, cambiarán al estado “choque”, y consecuentemente al estado “muerta”. Si se salen de la pantalla, pasarán al estado “muerta”.
9
Finite State Machines Ejemplos de FSM's
•
Como propuesta, podemos diseñar una FSM que implemente otro tipo de bala con las cualidades de la anterior y las siguientes:
• • •
Cuando se crean, se les pasa un objetivo, e inicialmente están en el estado “volando”. Mientras estén volando, ajustarán su ángulo para alinearse con la posición del jugador. Si pasado un tiempo no han colisionado con el jugador, dejarán de recalcular su ángulo.
10
Búsqueda de caminos Introducción
• • •
Para conseguir un comportamiento realista en un actor, este debe ser capaz de moverse por el mundo con cierta “conciencia”. El grado de inteligencia a la hora de buscar una ruta depende de la aplicación y del tipo de actor. Ejemplo:
•
En el juego Pac-Man hay cuatro tipos de inteligencia de los fantasmas:
• • • •
Cazador, que intenta llegar al jugador por el camino más corto. Interceptor 1, intercepta al jugador en los cruces. Interceptor 2, intercepta al jugador usando los túneles. “Roamer”, que se mueve al azar por el escenario.
11
Búsqueda de caminos Crash and Turn
Mientras no se llegue al destino { - Intenta avanzar en linea recta hasta el destino. - Si se produce una colisión con un obstáculo { - Elegir uno de los dos lados (izquierda o derecha). - Rodear el obstáculo hasta que volvamos a tener “linea de visión” con el destino. } }
12
Búsqueda de caminos Algoritmo de Dijkstra
• • • •
Útil cuando podemos describir nuestro mundo como un grafo. Los vértices equivalen a zonas o regiones del mundo. Las aristas tienen un peso que representa la distancia entre los vértices que unen. Desde el nodo de origen se explora el grafo siguiendo las aristas de menor peso.
13
Búsqueda de caminos A*
• • • • •
•
El algoritmo A* encuentra el camino entre dos puntos en un mapa. El camino encontrado (si existe) es el más corto. Es un algoritmo dirigido (intenta seguir el mejor camino posible). Los “componentes” del algoritmo son los llamados nodos. Un nodo está compuesto por 3 atributos:
• • •
G: Es el coste desde el nodo de inicio al nodo. H: Coste estimado hasta el nodo destino. F: Representa lo bueno que es el nodo.
Para encontrar el mejor camino, el algoritmo debe encontrar los mejores nodos del mapa. Esto se consigue calculando F: F=G+H
14
Búsqueda de caminos A* - G
• • •
G es la distancia desde el nodo al nodo inicial. Puede tener distintos valores según la topología del mapa P. ej., un movimiento diagonal vale 14 y uno horizontal o vertical, 10.
G = 24
G = 14
G = 10
G = 14
G = 24
G = 20
G = 10
G=0
G = 10
G = 20
G = 24
G = 14
G = 10
G = 14
G = 24
15
Búsqueda de caminos A* - H
• •
H es la estimación al nodo destino. Es la llamada “Heurística”. Nosotros usaremos la distancia Manhattan x 10 . H = | x2 – x1| + | y2 – y1| * 10 1
2
3
4
5
6
H = 60
H = 50
H = 40
H =30
H = 20
H = 10
1
H = 50
H = 40
H = 30
H = 20
H = 10
H=0
2
H = 60
H = 50
H = 40
H = 30
H = 20
H = 10
3
16
Búsqueda de caminos A* - F
•
El camino final se construye calculando en cada iteración la 'F' del mejor nodo vecino y siguiéndolo. 1
2
3
4
5
6
G=0
G = 48
G = 58 -> 52 G = 62
G = 72
H = 70
H = 50
H = 40
H = 30
H = 20
F = 70
F = 98
F = 98 -> 92 F = 95
F = 94
G = 10
G = 44 -> 38
G = 82 ->76
H = 60
H = 40
H = 10
F = 70
F = 84 -> 78
F = 92 -> 86
G = 20
G = 30 -> 24 G = 34
G = 80
G=-
H = 50
H = 40
H = 30
H = 10
H=-
F =70
F = 70 -> 64 F = 64
F = 81
F=-
17
1
2
3
Búsqueda de caminos Caminos - A*
18
Búsqueda de caminos Caminos - A*
•
Así, el algoritmo A* presenta ventajas e inconvenientes:
• •
Ventajas:
•
Siempre que exista, encuentra el camino más corto hasta el destino.
Inconvenientes:
• •
Tiene un coste computacional muy elevado. El camino que encuentra puede ser demasiado perfecto.
19
Búsqueda de caminos Region-Based A*
•
Se basa en usar regiones de más alto nivel de abstracción para realizar las búsquedas.
• • •
Dividir el mapa en zonas conectadas por aristas entre las que no existan obstáculos.
Especialmente útil en regiones convexas, pues podemos movernos entre dos puntos sin encontrar obstáculos. Es útil combinar esta técnica con “Crash and Turn”.
• •
En una habitación cuadrada llena de columnas “cuadradas” se puede navegar usando “Crash and Turn”. Para pasar de una habitación a otra no contigua, se usa Region-Based A*.
20
Búsqueda de caminos Iterative-Deepening A*
• • • •
Otra alternativa para reducir los requerimientos de memoria y CPU del algoritmo A*. Consiste en calcular la ruta en porciones, de forma que no hay que examinar el árbol de una sola vez. El cálculo de la ruta se interrumpe cuando el coste total excede de un límite máximo. Como ejemplo:
• • •
Se comienza con un coste máximo de 10. Cada vez que avancemos 10 nodos, interrumpimos la búsqueda. Cuando corresponda, continuar desde el último nodo.
21
EOD • •
Próximo día: 3D Lo estábais deseando, eh? :P
22