A* Pathfinding para Samurais Informáticos

3 comments »

En algún post anterior hemos visto como funciona el algoritmo
A* o ‘A Estrella’ pero aqui lo repasaremos aplicándolo a la noble
vía de la búsqueda de caminos.

El aprendiz de Samurai Informático no tiene porqué conocer ningún
detalle del pathfinding para aprender lo que aqui se contará.

En primer lugar nuestro entorno quedará dividido en casillas que
representarán las posiciones alcanzables de los elementos que van
a ser desplazados. Partimos de una posición inicial y buscamos una
la lista de casillas que nos llevan a la posición final.

En nuestro entorno encontraremos obstáculos que harán que el camino
pueda variar.

Configuración inicial

A partir de ahora cada uno de los elementos de la malla los llamaremos
nodos.

>El procedimiento de búsqueda

Empezamos a estudiar el comportamiento del algoritmo. El estudio y la práctica
hacen al maestro Samurai Informático.

Tenemos 3 elementos sobre los que trabajaremos, la katana, la
armadura y el arco de batalla del algoritmo A Star aplicado al Pathfinding:

- La lista abierta de nodos. Son las casillas que requieren ser tenidas en cuenta.
- El ancestro de un nodo es el nodo a través del que se accede a este último, esto
se hace para que una vez sepamos los nodos o casillas que intervienen podamos recuperar
el orden en el que tienen que ser visitados.
- La lista cerrada de nodos. Son aquellos nodos que no deben ser tratados por el momento.

Ahora el código Samurai a seguir, nuestro Giri del A*. Debemos seguir el Giri bajo cualquier concepto.
El Giri del A* será interiorizado por todos los verdaderos Samurais Informáticos.

- 1. Empezar desde el punto inicial y añadirlo a la lista abierta de casillas a tener en cuenta.

- 2. Mirar todos los cuadrados válidos adyacentes al punto de inicio,
pasando de los inalcanzables. Añádir a la lista abierta.
Por cada uno de esos cuadrados, guarda el punto A como su ancestro.

- 3. Sacar la casilla inicial de la lista de abiertos y ponerlos en la lista cerrada.

Foto Expansión inicial

El auténtico Samurai puede extraer ya la dinámica de lo que va a ser nuestro algoritmo de búsqueda de
caminos. Ahora lo que nos queda es repetir el proceso pero no de cualquier manera sino dotando a nuestro
sistema de la intuición genuina ancestral, es decir, lo que llamamos el heurístico. Con el visitaremos
primero los nodos más prometedores, es decir, aquellos en los que la fuerza se detecte mayor.

> Midiendo la calidad de una casilla

La calidad de una casilla es el valor que le damos para comparar entre el resto y decidir cual es el camino
más probable que debemos ir visitando. Aqui entra algo del conocimiento ancestral oculto, solo alcanzable por
los Samurais más avanzados, las matemáticas.

Cada casilla tendra un valor que vendrá determinado por la función: F(x) = G(x) + h(x)

-Donde x es la casilla concreta.
-F(x) es el valor de la función para la casilla x.
-G(x) es el coste que podemos medir. La distancia al inicio del camino
-h(x) es la esencia del algoritmo, el Tao. Aquello que se siente pero no puede ser explicado. El Tao que puede
ser explicado no es el verdadero Tao. En general, es lo que nosotros pensamos que puede quedar para llegar, nosotros
podemos calcular este valor a partir de la intuición de lo que nos queda. Siempre pueden haber obstáculos en medio
que nos perjudiquen pero en general, nos guiará hacia el verdadero Camino.

La esencia del TAOComo medimos las distancias no es problema aqui. El Samurai Verdadero buscará estas respuestas en otras fuentes, lo
realmente interesante es comprender el funcionamiento de nuestra Técnica de Combate A Estrella. No nos preocuparemos
de mejorar la eficiencia de los cálculos por el momento, esto es tarea del Experto Samurai Informático y no entra aqui
ahora, todo a su debido tiempo.

> El estimador o herístico h(x)

Este valor puede calcularse de diferentes maneras bajo diferentes conceptos, orientados a obtener una respuesta rápida
o una respuesta precisa. Generalmente nos pelearemos por buscar un compromiso entre lo rápido y lo preciso.

¿Como lo hacemos? Tenemos varias opciones.

-Primera opción. Sabemos donde estamos y donde queremos llegar, lo de en medio es una incognita. Pues bien, calcularemos la distancia
en línea recta desde nuestro punto al punto final. A esto se le llama distancia Euclidea y sin entrar en detalles será
algo del estilo d(x,y) = sqrt((y1-x1)^2 + (y2-x2)^2), es decir la raiz cuadrada de la suma de los cuadrados de las diferencias
entre las coordenadas correspondientes. Los Samurais que comprendan este concepto adquieren automáticamente una grado
adicional en materia de ‘Combate Matematico’.

euclidean

-Segunda opción. Lo hacemos más sencillo. Utilizamos lo que se llama la distancia Manhattan. Es decir, calculamos lo
que nos costaría llegar si recorrieramos el tablero siguiendo las lineas de las mallas como si fueran las calles de
una ciudad dividida en manzanas. A efectos prácticos sería algo por el estilo dM(x, y) = abs(y1-x1) + abs(y2-x2), es decir
el valor absouto de la distancia en coordenadas X (pongamosle horizontal) y coordenadas y (pongamosle vertical).

Distancia ManhattanEn la foto las distancias marcadas con color amarillo, azul y rojo son las que representan la distancia Manhattan, cualquiera de ellas es válida. Para el cálculo nos quedamos con la amarilla o la roja (suma de distancia vertical y de distancia horizontal o al revés).
-Otras formas. Para aquellos Samurais más versados comentar que existen más métodos que intentan mejorar la eficacia y
eficiencia de este cálculo, ya que en definitiva es un estimador de lo buena que creemos que es la solución. Una de ellas
es el uso de la distancia Euclidea cuadrada, d2(x,y) = (y1-x1)^2 + (y2-x2)^2 donde se elimina el cálculo de la raiz. Esta
no es propiamente la distancia entre los puntos x e y pero al aplicarlo sobre todos los elementos, el valor relativo de
cada uno sigue representando la calidad estimada y por tanto nos sirve para guiar a la Espada del A Estrella hacia su objetivo.

Distancia Euclidea Cuadrada

> Seguimos la búsqueda.

De entre todos los bloques que hemos insertado en la lista de abiertos elegimos el que menos valor tenga en F, es decir,
el que la suma de la distancia al origen G y la distancia estimada h sea menor. Con esto dirigiremos la búsqueda.

Ahora el Samurai Informático novicio adquirirá los conceptos necesarios para ampliar definitivamente su conocimiento en
materia de IA para Juegos por lo que se recomienda atención.

Primero – Sacar este elemento de la lista de abiertos y añadir a la lista de cerrados.

Segundo – Repetir el paso de añadir los adyacentes que sean transitables pasando de los que están en la lista de cerrados
Añadirlos a la lista de abiertos si no están ya y poner al cuadro actual como Ancestro de los nuevos cuadros.

Tercero – Si el cuadro adyacente ya está en la lista de abiertos, mira si el camino a ese cuadro es mejor que este.
es decir, si la G de ese cuadro es más baja que la del que estamos usando para ir allí (llegamos más rápido por aqui)
. Si el coste G del nuevo camino es más bajo, cambia el ancestro del cuadro adyacente al cuadro seleccionado
y recalcula la F y la G de ese cuadrado.

Este paso es el que representa el mayor desafio al Samurai novicio, una vez superado le servirá tanto para generar
caminos como para otras muchas cosas en su vida de Samurai Informático.

aStarT7

Para terminar, comentaros que esta es la base del aprendizaje. A partir de aqui se puede trabajar en mejorar las soluciones
creando caminos más suaves, haciendo cálculos más rápidos y adaptando la solución a nuestro problema en concreto por ejemplo con
diferentes tamaños de unidades y diferentes tipos de terreno transitable (arena/asfalto/etc…).

Aqui teneis el código fuente del A* para el Pathfinding provisto por el Samurai Informático Experto Patrick Lester.

Disfrutadlo!

Creación del grafo de claridad para juegos de estrategia

No comments »

Cuando trabajamos con representaciones del mundo como las
que se utilizan en los juegos de estrategia, nos interesa
tener una abstracción máxima del entorno que represente toda
la información necesaria para el correcto desarrollo, con el
mínimo espacio.

Esto se consigue con el grafo de claridad, que en cada posición
definirá a que distancia se encuentran los obstáculos de la casilla
en cuestión.

Grafo de claridad

Se propone para crear este grafo el algoritmo de Brushfire o tambien
llamado Wavefront. Sin embargo, este algoritmo presenta algunos problemas
desde el punto de vista de un entorno en el que se moverán elementos
de diferente tamaño. Podemos encontrar cuellos de botella que interfieren
en el correcto desarrollo.

Fallo por cuello de botella

Debido a esto, se propone una variante del cálculo para la obtención del
grafo de claridad para diferentes tamaños de unidades. El método en cuestión
se trata de, para cada celda ir ampliando un bloque de NxN creciente hasta
colisionar con un obstáculo, es decir, hasta que en las celdas que pertenecen
al bloque incluyan algún elemento no travesable.

Vemos un ejemplo extremadamente sencillo en las siguientes imágenes donde el
tamaño del bloque crece de izquierda a derecha y de arriba a abajo.

Expansión correcta

Quedando de esta forma:

Forma definitiva

Este procedimiento solventa parcialmente el problema pero no lo resuelve completamente.
Existen, del mismo modo, puntos que no son alcanzables cuando si debieran serlo. Esto es debido
a la orientación del crecimiento de los bloques que crecen en una dirección concreta.

Para esto se propone añadir complejidad O(1) al algoritmo, que no supone un impacto excesivo
al desempeño y que consigue resultados mucho mejores. Se trata de, por un lado repetir el proceso desde
las 4 esquinas del entorno, creciendo en direcciones diferentes para cada propuesta y adquiriendo
el máximo de las distancias obtenidas, esto indica que si bien no se puede llegar desde una dirección
concreta, se puede llegar perfectamente por otra.

Con esto ya tenemos una abstracción adecuada al cálculo de nuestro problema. Conseguir un camino será cuestión
de establecer un procedimiento que respete las restricciones. Esto es lo que veremos más adelante.

Os animo a implementarlo por vuestra cuenta, se trata de un ejercicio sencillo y un buen entrenamiento!

Variante del Algoritmo de Brushfire con varios emisores

No comments »

En el anterior artículo hemos visto que en el algoritmo de Brushfire
sencillo podemos encontrar un camino aplicando un valor creciente desde
el punto de destino propagando valores hasta el punto final.

Esto sin embargo, no genera un grafo adecuado para ser calculado desde
cualquier punto sino que es necesario propagar la ‘ola’ para cada una
de las posiciones de destino.

La variante que se propone ahora es válida para cualquier posición del
entorno. En este caso cada elemento no travesable, es decir, cada obstáculo
es considerado como un generador de ‘Ola’ por lo que en cada posición
se representará la distancia al obstáculo más cercano.

El procedimiento de cálculo será el que vemos en la fotografía inferior.

Desarrollo del algoritmo

Definido en pseudocódigo lo podremos calcular de la siguiente manera para conectividad 4:

check node A at [0][0]

now look north, south, east, and west of this node
(boundary nodes)

if (boundary node is a wall)
ignore this node, go to next node B

else if (boundary node is robot location && has a number in it)
path found!
find the boundary node with the smallest number
return that direction to robot controller
robot moves to that new node

else if (boundary node has a goal)
mark node A with the number 3

else if (boundary node is marked with a number)
find the boundary node with the smallest number
mark node A with (smallest number + 1)

if (no path found)
go to next node B at [0][1]
(sort through entire matrix in order)

if (no path still found after full scan)
go to node A at [0][0]
(start over, but do not clear map)
(sort through entire matrix in order)
repeat until path found

if (no path still found && matrix is full)
this means there is no solution
clear entire matrix of obstacles and start over
this accounts for moving objects! adaptivity!

Os incluyo el código fuente de la variante más sencilla del algoritmo de
Wavefront para que modifiqueis libremente y lo convirtais en la variante
que se explica aqui.

>Codigo fuente del algortimo Wavefront, cortesía de John Palmisano

Nos vemos!

Grafos de claridad. Algoritmo de Brushfire o Wavefront

No comments »

El algoritmo Brushfire o Wavefront para grafos de Claridad presenta dos variantes, la de un solo emisor y la de varios emisores. Veremos las dos variantes.

Los grafos de claridad representan el mundo donde se mueven los agentes como medidas al obstáculo más cercano, es decir, se abstraen del entorno generando una representación más ligera del mismo y computacionalmente más apropiada.

Un ejemplo de grafo de claridad es el que vemos a continuación, en el se
pueden apreciar las distancias al objeto no travesable más cercano. En este
caso para simplificar el cálculo se divide en zeldas el mundo y se calcula a partir de
aqui. Para generalizar se define una unidad de grid o generalizada, que define que tamaño tiene cada una de ellas en pixels. Las unidades usarán tambien esta medida, por ejemplo un soldado ocupará 1×1 grids un tanque 2×2 …etc.

Grafo de claridad simple

Conforme la complejidad del entorno crece, se necesitan los Grafos de claridad con varios tipos de terreno,
es decir, cada zelda vendrá identificada con un valor de terreno {agua/tierra/aire…etc}.

Grafo de claridad con diferentes terrenos

Para calcular este grafo de claridad se emplea el algoritmo Brushfire o tambien llamado wavefront.
Este algoritmo se utiliza tambien en robótica móvil para generar caminos de forma dinámica en función del entorno.
De esta forma, lo que aprendeis aqui os sirve también para cualquier entorno donde podamos dividir en
malla el mundo: robots moviles, juegos, aplicaciones industriales…etc. Esta variante se centra en la meta como único
emisor de la ‘Ola’

Cómo calculamos la distancia a los obstaculos. Lo vemos mediante un ejemplo, en el que de momento no se tienen en cuenta los tamaños de las unidades.

-Primero.Creamos el mundo
-Segundo. Rellenamos con los valores adecuados.
-Tercero. Aplicamos el Wavefront o Brushfire

>1.Creando el mundo

Lo primero que tenemos que hacer es calcular el mallado a partir de nuestro mundo. Esto se hará
como hemos comentado anteriormente definiendo el tamaño de malla y creando el entorno a partir de
estos valores.

>2. Rellenando con valores adecuados

En este paso definimos un punto de inicio y otro de meta. {Start/Goal points}

Marcamos todos los elementos de la malla que no son obstáculos con un 0
y todos los demás con un 1. El punto de meta lo marcamos con un 2, por ejemplo.

Wavefront de un solo emisor

>3. Desde la casilla de meta aplicamos la ola o el wavefront asignando a todos los
valores adyacentes el valor de la casilla mas una unidad.

Wavefront rellenado

>4. Buscamos el camino recorriendo los adyacentes de la casilla desde el punto de
partida siempre disminuyendo en 1 los valores. Esto hace que sobre caminos cerrados
no se propague la ‘ola’ y siempre encuentre el camino a la meta, si este existe.

En este caso el camino será:
(0,7) -> (1,7) -> (2,7) -> (3,7) -> (4,7) -> (5,7) -> (6,7) -> (7,7)
-> (8,7) -> (9,7) -> (10,7) -> (10,6) -> (11,6) -> (11,5) -> (12,5) ->
(12,4) -> (12,3) -> (13,3) -> (13,2) -> (14,2) -> (14,1) -> (15,1) -> (15,0)

Este es uno de los métodos más sencillos para aplicar pathfinding, hay otros mucho más
eficientes que veremos posteriormente. Lo siguiente será ver la variante de este algoritmo donde no solo el destino genera la ‘Ola’ sino cada obstáculo es emisor, por lo que se puede aplicar a diferentes tamaños de unidades.

Hasta la próxima!

El pathfinding en los juegos de estrategia

No comments »

Age of Empires III

Entramos en materia en una de las ramas de la IA aplicada a los juegos que
casi siempre está presente en los juegos de actualidad. En este caso nos centramos
en los juegos de estrategia en los que independientemente de la visión que tengamos
del mundo en el que nos movemos, generalmente se puede representar por una malla
cuadrada.

Generar una estrategia de búsqueda de caminos o pathfinding en un juego de estrategia
y en general para cualquier juego, calculando teniendo en cuenta todos los píxeles o
incluso a una resolución menor, a nivel interno por ejemplo mediante cálculos matemáticos
es una tarea tanto ineficiente como ineficaz ya que generalmente no es necesario un nivel
de precisión tan ajustado, ni siquiera a la mínima unidad que podemos medir (no calcular),
el píxel.

Starcraft II. Volumen alto de unidades

Lo adecuado en este caso es generar una malla que se situa sobre el entorno y que define
las posiciones que una unidad puede ocupar. Para aumentar el realismo se puede definir
un sistema de posicionamiento aleatorio que genera una posición exacta a nivel de píxel
que hace que la unidad se coloque de forma aleatoria en cualquier lugar de la malla.

Centrandonos en los juegos de estrategia nuestros algoritmos tendrán que tratar principalmente
con dos particularidades: los diferentes tamaños de unidades y los diferentes terrenos.

En cuanto a los tamaños de las unidades, para simplificar y hacer más rápidos y sencillos
nuestros algoritmos utilizaremos unidades enteras. De este modo una unidad militar puede tener
un tamaño de 1, 2 o N.

Diferentes unidades

Los diferentes terrenos pueden ser por ejemplo tierra, espacio solo para unidades voladoras,
agua para vehículos acuáticos o cualquier otro tipo. Los diferentes vehículos pueden no solo
ceñirse a terreno, por ejemplo anfibios o aéreos.

Diferentes unidades Age of Empires

El mundo se convierte en una malla como la que vemos a continuación donde cada posición de la
estructura es una posición abarcable por las unidades, en caso de que puedan moverse por el tipo
de terreno. De este modo, la representación del mundo queda definida por un conjunto de posiciones
con un tipo de terreno en cada posición. Las unidades se definen además de por sus características
usuales, por su capacidad para moverse por diferentes terrenos.

Por ejemplo. Vehículo terrestre: Movilidad { tierra }. Marine
Vehículo marino: Movilidad { agua }. Barco
Vehículo aereo: Movilidad {agua, tierra, etc}

Vista del mallado

Una vez definidos los elementos que permiten hacer el problema abarcable y manejable, nos preocuparemos
en ver que algoritmos y procedimientos nos permiten generar una trayectoria o camino válido
para las posiciones de las unidades: Grafos de ckaridad, A estrella simple, A estrella anotado,
algoritmo de Brushfire, Algoritmo A estrella Anotado Jerárquico. Hierarquical Anotated A Star (HAA*),
Pathfinding basado en grafos de claridad y búsqueda con el Algoritmo A estrella anotado jerárquico
, Planificación de caminos jerárquico para agentes de múltiples tamaños en entornos heterogéneos,
Búsqueda de caminos Jerárquica Casi óptima
o Pathfinding y funciones potenciales.

A partir de Ahora cuando vayais a comprar el pan o a hacer algun recado acordaros de dividir vuestra escena en mallas para optimizar el proceso. El procedimiento automático también es valido por eso.

Por lo pronto hasta aqui llegamos hoy. Lo demás lo veremos en detalle.

Hasta la próxima

Instalar y Poner a punto el ORTS

3 comments »

Bueno amigos hoy una pequeña guia sobre como poner a punto el ORTS y empezar a trabajar con el.

Orts game view

>En primer lugar instalaremos, si no lo tenemos ya, el Visual C++.

- Descargar Visual c++ 2008 Express edition
- Instalar la distribución

Es gratuito como el resto de la versión Express, sin embargo os pedirá que registreis el producto antes de 30 dias. De cualquier forma no os costará ni un duro.

> Ahora que tenemos la IDE (Integrated Development Enviroment)
pasamos a la estructura descargar los diferentes elementos
de ORTS.

- Descarga los archivos del proyecto
- Descargar Paquete Win32

> Ponemos a punto el entorno

- 1. Copiamos los elementos a c:\orts
De este modo quedará C:\orts\trunk…

Orts Sistema de Carpetas

- 2. Descomprimimos el archivo anterior ‘win32.zip’ y copiamos
el contenido en C:\orts\trunk\
Tendremos entonces C:\orts\trunk\win32

- 3. Copiamos el contenido de win32\include en la carpeta
de sistema de windows System32
Descargamos glew y copiamos tambien la dll en System32
http://sourceforge.net/projects/glew/

- 4. Nos vamos a c:\orts\trunk\misk\windows
y copiamos el contenido en c:\orts\trunk\ para asegurarnos

- 5. Ejecutamos VSTool.exe (Nos pedirá la ruta a los datos)
Escribimos> c:\orts\trunk\        <– No olvidar la barra
Escribimos> tecla enter
Escribimos> orts             <– Nombre del ejecutable

- 6. Ejecutamos: c:\orts\trunk\make_vcproj.bat    (Para definir las rutas)
y creae los proyectos orts.vc7 y ortsg.vc7

- 7. Creamos la carpeta c:\orts\trunk\bin

- 8. Abrimos independientemente    orts.vc7 y ortsg.vc7 y los generamos

- 9. Vamos a buscar los ejecutables orts.exe y ortsg.exe y los pegamos
en la carpeta c:\orts\trunk
- 10. Ejecutamos, asi de facil :P

Puede pareces un poco laborioso a simple vista sin embargo dada la cantidad
de elementos que intervienen y la complejidad del sistema, esta es solo una
ínfima parte. De hecho el código es tan valioso desde el punto de vista ya no
del desarrollo de juegos en general sino de la inteligencia artificial, que
merece la pena dedicar los esfuerzos necesarios a poner a punto el entorno.

Al final es lo más pesado pero una vez listo ya podreis empezar a programar  todos los aspectos del juego, especialmente los que se encargan de la IA. Una vez dominado el entorno se pueden pasar a aspectos más interesantes como el pathfinding o las estrategias de batalla.

Animo con eso

Programar juegos de estrategia en tiempo real

1 comment »

Hola amigos,

Que se espera de alguien que vaya a encargarse de la inteligencia
artificial de un juego de estrategia en tiempo real (Real Time
Strategy). Pues bien, eso es lo que vamos a ver de forma muy resumida
en este apartado. Progresivamente nos iremos poniendo en materia y
profundizando en los diferentes aspectos.

Cuando hablo de programar la IA de juegos RTS me ciño al más puro
aspecto académico, es decir, a la búsqueda de conocimiento basado
en cálculos y algoritmos que simulan una situación ‘real’ o si más
no factible. ¿A qué me refiero con esto? La IA de los juegos comerciales
debe en muchas ocasiones (por no decir en la práctica totalidad) hacer
determinadas trampas o acceder a información que el usuario desconoce
con la finalidad de ser realmente competitiva.

Por ejemplo, la IA puede conocer la posición de todas las unidades aunque
estas esten en una zona de niebla de guerra (o warfog). Puede conocer
las órdenes que el jugador da a sus unidades o incluso el tipo de las
mismas, para centrarse en construir ella misma las que mejor pueden
desenvolverse en caso de que ataque o de recibir un ataque. Puede
también incrementar la velocidad de minado o incluso los recursos reales de
los que dispone. Con esto, se generan IA’s altamente competitivas pero
que a la hora de la verdad, NO están resolviendo problemas a situacioens
reales y por lo tanto interesan solo desde el punto de vista comercial
pero no desde el científico. Es por eso que estas prácticas se rechazan
y se dejan como elementos a implementar en determinadas aplicaciones.

Mundo orts

Nosotros nos centraremos en estudiar diferentes áreas como:
- Razonamiento de los sistemas
- Planificación de estrategias
- Aprendizaje o machine learning
- Pathfinding o búsqueda de caminos
- Cooperación o sistemas multiagente

Cooperative Pathfinding in Dynamic Enviroments

Strategic Tank Combat

Simplified RTS Game

Entre otras. Pasando a la plataforma Open Real Time Strategy (ORTS),
estamos en un entorno de juego real donde creamos y gestionamos ejercitos,
disponemos de movimiento en tiempo real(Real time object motion en 2.5D),
tratamos con información imperfecta (niebla, desconocimiento de los recursos
del oponente, detalles de unidades enemigas …etc), recursos y árbol
de tecnología. Con esto tenemos juego más que de sobra para aplicar muchos
de los conceptos de inteligencia artificial que nos interesan.

Los objetivos ahora serán:
- Poner a punto el entorno.
- Compilar el proyecto.
- Ver la estructura general del mismo.
- Empezar a profundizar en los detalles.

En próximos artículos pondremos veremos como poner a punto el entorno
y empezaremos a trabajar con este juego de estrategia real con el mismo
entorno que tendriais que utilizar si trabajaseis como programadores
de inteligencia artificial para videojuegos.

Diversión y aprendizaje garantizados. ¿Quien ha dicho que los juegos
no valen para nada? Por lo pronto ya facturan más que la industria del cine.
Un buen aliciente para aquellos que disfrutamos creando puesto que habrán muchas inversiones
y muchos proyectos en los que trabajar. La próxima vez que alguien os
diga que estais demasiado enganchados a los juegos la respuesta es clara…
…lo siento, soy adicto al trabajo!

Hasta nueva vista.

ORTS. Estrategia en tiempo real OpenSource

1 comment »

Hola amigos,

Hoy tengo el placer de presentaros un proyecto que hará las  delicias de muchos aficcionados y profesionales de la inteligencia artificial aplicada a los videojuegos. Se trata del Open Source Real Tyme Strategy (ORTS) que actualmente desarrolla un equipo de investigadores del grupo de Games Research del Departamento de Tecnologías de la Información de la Universidad de Alberta.

Todo un lujo ya que trabajan tanto en la IA aplicada a los juegos clásicos como la aplicada a los grandes juegos comerciales. Una interesante mezcla del rigor académico y las grandes posibilidades de los sistemas actuales del entorno comercial.

Aunque hoy vamos a ver un juego de estrategia en tiempo real, no dejeis de echarle un vistazo a la web del grupo. Poker, ajedrez e incluso ‘go’ que es un juego difícil de trabajar con él en materia de inteligencia artificial. Uno de los integrantes Michael Buro, creador de ORTS, es el constructor de un programa de Othello que venció al campeón mundial del juego por 6 a 0.

El proyecto ORTS empieza en el año 2003 con la finalidad de crear un sistema cliente-servidor para el desarrollo de técnicas de Inteligencia Artificial en juegos interactivos de estrategia en tiempo real. El resultado es Open Real Time Strategy.

Elementos de ORTS

Elementos de ORTS

Base

Base

En este juego varias facciones disponen sus unidades sobre el campo de batalla y se encargan de  hacer crecer sus recursos.  La finalidad es acabar con el oponente. Un ejemplo de juego es el que vemos a continuación:

Hay mucha documentación al respecto que podemos encontrar en la red. Además se ha documentado de forma exhaustiva la estructura del código por lo que no es muy difícil empezar a probar algunas cosas. En posteriores artículos nos adentraremos aún más en el mundo de ORTS que promete ser muy enriquecedor.

Hoy todos los interesados en la IA que no conocierais el proyecto acabais de conseguir un juguete muy pero que muy elaborado y tan divertivo o más que cualquier otro que nos pueda caer en navidad.

Ya tenemos un punto de vista distribuido en cuanto a las aplicaciones que podemos utilizar para adentrarnos en el mundo de la IA para videojuegos. Ahora es tiempo de profundizar en aspectos más interesantes y en conceptos propios de los problemas que nos encontramos a la hora de trabajar en esta área.

Hasta la próxima

Quake III Arena, código fuente completo.

No comments »

Para la mayoría de los jugones veteranos el Quake ha sido una fuente de alegrías continuas. Para los que no lo conozcáis, el Q3 es un juego de acción shooter primera persona creado por Id Software donde la finalidad es competir contra bots o contra otros jugadores en el modo multiplayer en mapas en los que se distribuyen armas a punta pala. La acción está garantizada.

Quake I

Quake I

Quake II

Quake II

Quake III

Quake III

En este juego no faltan las máquinas humanas capaces de realizar proezas con el armamento. En el video a continuación se muestra un fragmento homenaje de uno de esos sujetos.

Lo realmente interesante desde nuestro punto de vista es el hecho de que el código haya sido publicado por completo. Sin embargo, no todo el material fue distribuido por lo que el juego no era completo. Desde este panorama surge la iniciativa de los chicos de Open Arena mediante la que con el motor de juego del Quake III Arena se han ido creando contenidos y modos de juego.

Lo que nos llama la atención es el hecho de poder  trabajar con la IA del juego. Existen numerosas iniciativas y comentarios al respecto como los que vemos en Aigamedev o PlanetQuake.

Para empezar a trabajar con él debemos:

Iremos viendo poco a poco la forma de profundizar en el desarrollo de la inteligencia artificial para Quake 3.

Otra interesante iniciativa es la Quake 3 Brainworks mediante la que se ha organizado el desarrollo de la reescritura completa de la IA para los bots.

Entre las características que se han creado están:

  • Sistema de Percepción Visual y Auditiva
  • Esquivando aleatorios en las batallas.
  • Evasión de misiles.
  • Habilidad de juego por saltos. Strafejumping.
  • Puntería del enemigo mejorada.
  • Selección inteligente de recogida de items.
  • Gestión del tiempo de las reapariciones.
  • Selección dinámica del arma.
  • Selección de metas redefinida.
  • Selección de apuntado redefinida.
  • Lógica de juego en equipo redefinida.
  • Código de chat reescrito.
  • Infraestructura lógica interna redefinida.

Y además se han definido bots con 5 niveles de habilidad

  • Skill 1: Alguien que ha jugado a Q3A durante menos de 2 semanas.
  • Skill 2: Alguien que ha jugado a Q3A durante 3 meses.
  • Skill 3: Media de un jugador en un servidor público.
  • Skill 4: El mejor jugador de un servidor público.
  • Skill 5: Jugador de clan profesional que compite en torneos.

Echadle un vistazo, no os arrepentireis!

Skill 1: Alguien que ha jugado a Q3A durante menos de 2 semanas

Crea tu Skynet. Juego de Inteligencia Artificial militar DefCon

3 comments »

¿Os acordais de SkyNET? La perversa IA que crea el caos y la destruccion en Terminator. Ahora teneis la oportunidad de colaborar en el desarrollo de una inteligencia artificial capaz de liderar y defenderse de un ataque nuclear. El juego DEFCON.

El IEEE Symposium Computational on Intelligence  and Games (CIG para los amigos) ha puesto en marcha un concurso en el que se trata de construir un agente de IA(bot) que permita manejar las unidades y los edificios. La finalidad es causar el mayor numero de bajas perdiendo al minimo.

Ataque Termonuclear en Defcon

Ataque en Defcon

Robin Baumgarten ha creado una API que permite trabajar con el juego orientada a crear Bots que cntrolen los sistemas.

Para ello se debe descargar la version de prueba del juego que permite realizar todo lo que necesitemos.

La informacion de la API la podemos obtener aqui:

Poco a poco se iran dando detalles de esta iniciativatan interesante.A lo mejor alguno de vosotros gana la competicion este año. ¿Quien sabe?

Hasta la proxima

¿Os acordais de SkyNET? La perversa IA que crea el caos y la destruccion en Terminator. Ahora teneis la oportunidad de colaborar en el desarrollo de una inteligencia artificial capaz de liderar y defenderse de un ataque nuclear. El juego DEFCON.

El IEEE Symposoum CIG ha puesto en marcha un concurso en el que se trata de construir un agente de IA(bot) que permita manejar las unidades y los edificios. La finalidad es causar el mayor numero de bajas perdiendo al minimo.

(FOTO)

Robim Baumgarthen ha creado una API que permite trabajar con el juego orientada crear Bots que cntrolen los sistemas.

(VIDEO)

Para ello se debe descargar la version de prueba del juego que permite realizar todo lo que necesitemos.

(URL)

La informacion de la API la podemos obtener aqui:

(FILES)

Poco poco se iran dando detalles de esta iniciativatan interesante.A lo mejor alguno de vosotros gana la competicion este ño. ¿Quien sabe?

Hasta la proxima