Razón Artificial

La ciencia y el arte de crear videojuegos

El determinismo en la inteligencia artificial

Escrito por carlos el 19 de septiembre de 2010 en Inteligencia Artificial | 8 Comentarios.

Hoy vamos a hablar sobre diferentes técnicas de inteligencia artificial (IA), pero teniendo en cuenta una clasificación un tanto peculiar, dependiendo de si a una misma entrada sabemos que le salida va a producir o no, es decir, si es determinista o por el contrario no determinista, o lo que es lo mismo, si puede hacer cosas para las que no esta programado. Quizás penséis que esto es algo aburrido, pero no os podríais estar equivocando más, aunque así contado pueda parecerlo.

Veremos ahora con más detalle cada tipo:

  • DETERMINISTA

La mayoría de la IA clásica pertenece a este tipo. Es 100% predecible, sin ninguna posibilidad de fallo. por ejemplo, si en un  juego  implementamos un A* (podéis leer sobre el en otros artículos de esta misma página), si conocemos el mapa, el punto de salida y el de llegada siempre podremos saber cual será el camino a seguir. Se puede tratar de añadir más variedad de posibilidades, como por ejemplo usando algo de lógica difusa en una FSM (Finite State Machine, o en español máquina de estados finitos) para añadir más variedad, pero aun así seguiría siendo predecible.

  • NO DETERMINISTA

Este tipo de IA se usa relativamente poco. Tiene la cualidad de poder hacer cosas para las que no esta programada. También tienen la cualidad de adaptarse al entorno y aprender, es decir, es en cierto sentido son algo inteligente, capaz de pensar por si mismo. Para seguir con el ejemplo de un sistema para encontrar un camino de un punto a otro, podemos crear un AG (Algoritmo Genético) capaz de encontrar un camino, pero cada vez el resultado puede ser diferente, unas veces puede ir por unos sitios y otras por otros, sin que de antemano podamos saber con certeza por que camino nos conducirá.Un caso conocido del uso amplio de estas técnicas en los videojuegos fue el del Colin McRae Rally 2.0, en el que para los coches se usaron redes neuronales para conducirlos, debido a que necesitaban poder adaptarse a diferentes situaciones y terrenos.

Quizás os estéis preguntando por que la IA determinista se usa mucho más si es más “tonta”. Esto es porque al ser una sucesión de ordenes, del estilo “si pasa x, haz y, si z=125, ve a tal sitio, …”, son muy fáciles de programar y de depurar, por lo que para una IA de un juego sencillo sirve perfectamente. También se podría complicar más aún el proceso de selección de ordenes y hacer que sea más impredecible. Un ejemplo de que este tipo de AI no es tan mala es el L4D, el que usa una HFSM (similar a las FSM, pero con “herencia”) para que los enemigos tomen decisiones, con muy buenos resultados.

En comparación, la IA no determinista es bastante más compleja, pero por si sola no es muy complicada si se aprende de una manera sencilla y sin tener que hacer muchos cálculos complejos (algo que ocurre con muchas redes neuronales, pero que afortunadamente se puede evitar de una manera muy sencilla). Tratare en futuros artículos de explicar de la mejor y mas sencilla manera  que me sea posible estas técnicas, acompañándolo siempre de código que se ira explicando paso a paso.

8 Comentarios en "El determinismo en la inteligencia artificial"

  1. carlos dice:

    Bueno, ¿que os parece?

  2. adrigm dice:

    Muy bueno, quedo a la espera de esos ejemplos y usos para ver como aplicar algoritmo genéticos a videojuegos.

  3. carlos dice:

    Me alegro de que te guste. Esta semana empezaré a escribir algo, pero sera algo largo, así que serán algunas entregas. Y no solo se pueden usar por si mismos (sin ningún otra técnica), sino que se pueden combinar con las redes neuronales de una manera muy chula para que aprendan sin supervisión (normalmente suelen tener el aprendizaje supervisado por un humano).

  4. No veo la relación entre determinismo y algoritmo planteada en el artículo. El determinismo es la simple característica de que con los mismos datos de entrada se genera siempre la misma salida. La diferencia que veo entre los algoritmos explicados entre la primera y segunda categoría es que los primeros no suelen usar una función de número aleatorio, mientras que en la segunda categoría este número aleatorio no sólo sirve de entrada sino que habitualmente también se retroalimenta en el algoritmo para una siguiente iteración.

    A nivel de programación ninguno de los dos tipos de algoritmos son indeterministas. Lo que pasa es que es más cómodo “amar la bomba y no preocuparse”. Es decir, todas las funciones de números aleatorios son “pseudo-aleatorias”. Como tal, reciben un valor de semilla para su inicialización. Si coges un algoritmo de redes neuronales que usa estas funciones y lo inicializas con la semilla, tras n iteraciones el estado al que llega la red neuronal tiene que ser el mismo que en la ejecución anterior. Si no es así, ante lo que estamos no es ante el indeterminismo sino ante un fallo de implementación. Precisamente en juegos de red donde se optimiza al máximo la transferencia de información entre nodos cliente, una de las cosas habituales es transmitir la semilla del generador aleatorio (o varios) para que los clientes puedan realizar cálculo de predicciones de movimiento de manera determinista en diferentes máquinas y diferentes plataformas. O bien se usa el generador pseudo-aleatorio para generar contenido y que éste tenga el mismo “aspecto” en ambas máquinas.

    Cabe destacar el hecho de que para la mayoría de los juegos ni si quiera se busca la aleatoriedad completa, sino una aleatoriedad que parezca aleatoria (valga la redundancia): http://blogs.msdn.com/b/shawnhar/archive/2010/09/10/links-5-charles-bloom-on-randomness.aspx.

    Por último, la aleatoriedad verdadera es enemiga de cualquier proceso posible de depuración, enemigo principal de todo programador.

  5. Carlos dice:

    Lo digo desde el respeto, pero no creo que hayas hecho nunca ningún AG, dado que si lo hubieras hecho sabrías que los números aleatorios solo se usan en 3 ocasiones: 1º-para generar una nueva población, 2º-para seleccionar que parte de cada padre pasa a hijo, 3º-para una mutación al azar. La entrada no es aleatoria, la introduces tu, y de ahí pueden salir varios resultados. por ejemplo, si tengo un AG para encontrar cono se puede llegar a un nº (para 4 la salida podría ser 2+2, o 3+1, o 5*2-6, etc.) para un mismo numero tengo muchísimas posibilidades.

  6. adrigm dice:

    Pienso que lo que quiere decir Grzegorz Adam Hankiewicz es que en computación realmente no existe la aletoriedad debido a que los números aleatorios que se generan siempre depender de algún parámetro que genere la semilla.

    Pero si tenemos en cuenta de que hoy en día los algoritmos que generan números aleatorios se basan en la temeratura, los milisegundos, etc. Para casos prácticos se pueden considerar aleatorios, aunque realmente no lo sean.

    Yo no se nada de Algoritmos Genéticos, pero la lógica me lleva a pensar que sin esos tres casos en los que se usan los números aleatorios el resultado sería totalmente predecible. Por tanto la indeterminación del sistema depende de esos tres números. Que a su vez no son aleatorios del todo, pero como ya digo creo que para estos casos se pueden considerar como tal.

    El día que alguien consiga generar un número totalmente aleatorio gana el nobel seguro.

  7. Carlos dice:

    Ahí esta la cosa, en asegurarse que la semilla si que sea diferente siempre, y esto se hace tomando como semilla la hora del ordenador, un nº que no se va a volver a repetir. Y claro, para que sea indeterminista debes dejarle la libertad de que haya decisiones que se tomen “aleatoriamente”, al azar pero siguiendo una serie de criterios. en los AG estos criterios son la supervivencia del más fuerte, del mismo modo que la naturaleza actúa, tratare de dejar esto más claro en el 1º articulo sobre los AG.

  8. morcejo dice:

    Creo que el enfoque que le ha dado Carlos a la explicación es muy correcto. Claro que en computación al final todo es predecible si llegamos a la última instancia pero se trata de ir explicando conceptos poco a poco y dejando de lado los purismos extremos, para lograr un fin didáctico en estos textos. En redes neuronales el determinismo roza la nulidad por el simple hecho de que no se programa el comportamiento del sistema si no que sufre un aprendizaje. Durante ese aprendizaje entran en juego múltiples variables, no se reduce simplemente a una semilla.

Deja un comentario