Inteligencia Artificial 2011
Este blog es para todo aquel que le gusta desarrollar maquinas inteligentes y sistemas expertos.
sábado, 21 de mayo de 2011
Algunas practicas y Ejercicios IA
Hola, solo quería informarles que en la pagina central ya se han subido una cantidad de exámenes resueltos, para los que dominan IA, y bueno si necesitan practicar ahí tienen material, posteriormente subiré un post del algoritmo minimax-maximin para los juegos como 3 en raya, o recorrido de ciudades tomando en cuenta el costo de travesía, también se colgara dichos programas.
domingo, 8 de mayo de 2011
Lenguaje Lisp, para IA
Uno de los lenguajes mas antiguos que permiten realizar algo de IA, es el Lisp, este curioso lenguaje de programacion esta echo a base de listas, es por eso que aqui es muy importante los signos "(" que lo vamos a usar muchas veces, generalmente este lenguaje es un poco complejo, y no tanto por su dificultad de comandos y funciones que presenta, sino por los "("s que debemos tener cuidado en abrir y cerrar.
Asi que podemos tener una lista de numeros como: (1 2 -3 4)
Listas de letras o palabras: (a hola c good nice)
En lisp se hacen operaciones sobre estas listas asi que en realidad si quicieramos operar numeros, lo que haremos sera en realidad operar listas unitarias, asi:
(1) + (2) = (3), en lisp la solucion me daria otra lista unitaria. Generalmente se opera en listas, aunque tambien se opera numeros directamente, pero el caso de numeros tiene otro fin y se recomienda el uso de listas.
Por ejemplo, para los que dominan el C, o el Java u otros similares, sabemos muy bien como sumar numeros: usamos por ejemplo en c:
int a=0;
int b=10;
int suma =a+b, con lo que suma toma el valor de 10
Pero en lisp, se debe hacer lo siguiente
setq a '0
setq b '10
setq suma (+ a b), y nos da lo mismo. Aqui abajo un dibujo de como seria en el programa LISP.

Donde: setq "simbolo" "lista", se le asigna a "simbolo", una lista, la lista se declara previamente con una " ' " seguido del numero o letra que queremos asignar, si deseamos asignar por ejemplo la letra "a", sera: setq algo 'a, si queremos asignar los elementos 1, 2 y 3, sera: setq algo '(1 2 3)
Logicamente pueden existir sublistas, como (1 (2 3) 4 (23) ) o listas nulas ().
en la ultima parte donde hago "setq suma (+ a b)", no pongo la " ' " antres del parentesis, debido a que no quiero crear una lista con los elementos +,a y b, sino quiero dar la suma(y en lisp la suma se realiza poniendo el simbolo primero y luego los 2 valores a ser operados), deben estar en parentesis pues si no los hubiera, lisp pensaria que son 3 parametros mas, con lo cual generaria un error en el metodo setq.
Si quieren un manual de lisp lo pueden encontrar en los links favoritos que estan en el blog, donde hay mucha informacion, tambien tengo un pequeño doc con algunos ejercicios, puedes entrar aqui (Esto es para los que saben un poco, para los que no visiten la pagina).
Aun asi es solo una pequeña introduccion a este lenguaje que llevamos haciendo en IA, luego les explicare mas, solo les doy una vision general de este lenguaje.
Asi que podemos tener una lista de numeros como: (1 2 -3 4)
Listas de letras o palabras: (a hola c good nice)
En lisp se hacen operaciones sobre estas listas asi que en realidad si quicieramos operar numeros, lo que haremos sera en realidad operar listas unitarias, asi:
(1) + (2) = (3), en lisp la solucion me daria otra lista unitaria. Generalmente se opera en listas, aunque tambien se opera numeros directamente, pero el caso de numeros tiene otro fin y se recomienda el uso de listas.
Por ejemplo, para los que dominan el C, o el Java u otros similares, sabemos muy bien como sumar numeros: usamos por ejemplo en c:
int a=0;
int b=10;
int suma =a+b, con lo que suma toma el valor de 10
Pero en lisp, se debe hacer lo siguiente
setq a '0
setq b '10
setq suma (+ a b), y nos da lo mismo. Aqui abajo un dibujo de como seria en el programa LISP.
Donde: setq "simbolo" "lista", se le asigna a "simbolo", una lista, la lista se declara previamente con una " ' " seguido del numero o letra que queremos asignar, si deseamos asignar por ejemplo la letra "a", sera: setq algo 'a, si queremos asignar los elementos 1, 2 y 3, sera: setq algo '(1 2 3)
Logicamente pueden existir sublistas, como (1 (2 3) 4 (23) ) o listas nulas ().
en la ultima parte donde hago "setq suma (+ a b)", no pongo la " ' " antres del parentesis, debido a que no quiero crear una lista con los elementos +,a y b, sino quiero dar la suma(y en lisp la suma se realiza poniendo el simbolo primero y luego los 2 valores a ser operados), deben estar en parentesis pues si no los hubiera, lisp pensaria que son 3 parametros mas, con lo cual generaria un error en el metodo setq.
Si quieren un manual de lisp lo pueden encontrar en los links favoritos que estan en el blog, donde hay mucha informacion, tambien tengo un pequeño doc con algunos ejercicios, puedes entrar aqui (Esto es para los que saben un poco, para los que no visiten la pagina).
Aun asi es solo una pequeña introduccion a este lenguaje que llevamos haciendo en IA, luego les explicare mas, solo les doy una vision general de este lenguaje.
Diferencias entre Scripting y IA
Para todos aquellos que saben programacion, la definicion de scripting es bastante obvia, sin embargo para todo aquel que recien se esta integrando este concepto es muy sencillo de comprender. En este post dare una diferencia bastante grande en lo que es crear un programa "scriptado" y otro "inteligente".
Diremos que el scripting es aquella accion(si nos ponemos en la vida real) de lo que hacemos siempre, pero de la misma forma, por poner un ejemplo:
"Todos los dias, me levanto voy al baño, me lavo los diente, me cambio, tomo desayuno..."
Para que la accion sea un script la accion debe realizarse siempre y de la misma forma.
Sin embargo cuando nos referimos a IA, es algo muy diferente, es una accion que se realiza siempre razonando o usando una estrategia determinada.
En el ejemplo anterior: El primer dia puedo hacer eso, pero al siguiente puedo decidir bañarme y no tomar desayuno, y al dia siguiente algo diferente, eso es IA.
Para aquellos que programan, saben bien que el scripting, al igual que IA es una red de expresiones condicionales que permten determinar si se realiza una accion o no, sin embargo el scripting usa las condiciones de una manera muy fuerte, la IA no tiene muchas de esas condicionales, sin embargo su base de datos es algo crucial donde se le otorga una memoria al programa, donde almacene toda su experiencia y permita actuar conforme a las posibilidades y intentar dar solucion a un problema nuevo, cosa que el scripting no puede, si a un script le llega un problema en el cual no estaba "predeterminadamente" preparado para reaccionar, pues simplemente no lo resuelve. Esa es la gran diferencia entre scripting e IA.

Un ejemplo exacto de scripting es en los videojuegos, si por ejemplo ya han probado el nuevo CoD Black Ops se habran dado cuenta que la campaña siempre es la misma, suceden las misma cosas: por ejemplo suena la musica de accion en un momento intenso, los personajes hablan lo mismo en en una parte del trama, las misiones son las mismas y se resuelven de la misma forma, y una larga lista de etcs.

Sin embargo existen juegos que intentan emular IA, como es el caso de left for dead, este juego si tiene algo de esto, si jugamos la campaña nunca sera igual, pues los momentos intensos cambian de lugar, esto es debido a su tecnologia “The AI Director 2.0” el cual analiza tus movimientos y conforme a eso cambia el curso del juego el cual al rejugarlo es diferente.
Diremos que el scripting es aquella accion(si nos ponemos en la vida real) de lo que hacemos siempre, pero de la misma forma, por poner un ejemplo:
"Todos los dias, me levanto voy al baño, me lavo los diente, me cambio, tomo desayuno..."
Para que la accion sea un script la accion debe realizarse siempre y de la misma forma.
Sin embargo cuando nos referimos a IA, es algo muy diferente, es una accion que se realiza siempre razonando o usando una estrategia determinada.
En el ejemplo anterior: El primer dia puedo hacer eso, pero al siguiente puedo decidir bañarme y no tomar desayuno, y al dia siguiente algo diferente, eso es IA.
Para aquellos que programan, saben bien que el scripting, al igual que IA es una red de expresiones condicionales que permten determinar si se realiza una accion o no, sin embargo el scripting usa las condiciones de una manera muy fuerte, la IA no tiene muchas de esas condicionales, sin embargo su base de datos es algo crucial donde se le otorga una memoria al programa, donde almacene toda su experiencia y permita actuar conforme a las posibilidades y intentar dar solucion a un problema nuevo, cosa que el scripting no puede, si a un script le llega un problema en el cual no estaba "predeterminadamente" preparado para reaccionar, pues simplemente no lo resuelve. Esa es la gran diferencia entre scripting e IA.

Un ejemplo exacto de scripting es en los videojuegos, si por ejemplo ya han probado el nuevo CoD Black Ops se habran dado cuenta que la campaña siempre es la misma, suceden las misma cosas: por ejemplo suena la musica de accion en un momento intenso, los personajes hablan lo mismo en en una parte del trama, las misiones son las mismas y se resuelven de la misma forma, y una larga lista de etcs.
Sin embargo existen juegos que intentan emular IA, como es el caso de left for dead, este juego si tiene algo de esto, si jugamos la campaña nunca sera igual, pues los momentos intensos cambian de lugar, esto es debido a su tecnologia “The AI Director 2.0” el cual analiza tus movimientos y conforme a eso cambia el curso del juego el cual al rejugarlo es diferente.
Suscribirse a:
Entradas (Atom)