jueves, 15 de enero de 2015

LENGUAJE DE PROGRAMACIÓN PROLOG


Fecha de la clase: 15 de Enero



INTRODUCCIÓN

El objetivo de esta clase es investigar sobre PROLOG para utilizarlo en ejercicios de Inteligencia Artificial. La resolución de ejercicios en este programa consiste en crear un archivo como la base de conocimiento que contendrá información suficiente para que se tomen correctas decisiones y se arrojen respuestas correctas y otro el cual es el que llevará las reglas, que validaran las solicitudes para dar las respuestas.

MARCO TEÓRICO


PROLOG

PROLOG es un lenguaje de programación muy útil para resolver problemas que implican objetos y relaciones entre objetos. Está basado en los siguientes mecanismos básicos:      
  o   Unificación
  o   Estructuras de datos basadas en árboles
  o   Backtracking automático
La sintaxis del lenguaje consiste en lo siguiente:
    o   Declarar hechos sobre objetos y sus relaciones
    o   Hacer preguntas sobre objetos y sus relaciones
    o   Definir reglas sobre objetos y sus relaciones. (Escrig,T).

HECHOS
ü  Átomos en Lógica de Predicados.
ü  No se permiten disyunciones.
ü  Los nombres de los predicados empiezan con minúscula.
ü El hecho debe terminar con un punto.


PREGUNTAS

En tiempo de ejecución, aparece el prompt ?- y el intérprete de PROLOG espera que el usuario introduzca un objetivo en forma de predicado, con o sin variables.
Al igual que en CLIPS, tendremos ficheros con la descripción de la base de conocimiento (hechos y reglas).

baseconoc.pl (o .pro)
esHombre(juan).
esHombre(pedro).
Para cargar un fichero, escribiremos:
?- [baseconoc].
/* Esto añade a la MT de Prolog los hechos del fichero baseconoc.pl */
?- esHombre(juan).
yes
?- esHombre(pedro).
yes
?- esHombre(juanCarlos).
no
?- esMamifero(leon).
 No
 . (Cubero, J).

REGLAS

Existe en PROLOG la posibilidad de definir la relación “abuelo(X,Y)” o la relación “tio(X,Y)” como reglas, además de poderlo hacer como hechos o como conjunción de objetivos.

abuelo(X,Y):- progenitor(X,Z), progenitor(Z,Y).
tio(X,Y):- progenitor(Z,Y), progenitor(V,Z), progenitor(V,X).

A la primera parte de la regla se le llama cabeza o conclusión, el símbolo ":-" es el condicional (SI), y a la parte de la regla que está después de “:-“ es el cuerpo o parte condicional. El cuerpo puede ser una conjunción de objetivos separados por comas. Para demostrar que la cabeza de la regla es cierta, se tendrá que demostrar que es cierto el cuerpo de la regla.
Por lo visto hasta ahora, las cláusulas PROLOG son de tres tipos: hechos, reglas y preguntas. Las cláusulas PROLOG consisten en una cabeza y un cuerpo. Los hechos son cláusulas que tienen cabeza pero no tienen cuerpo. Las preguntas sólo tienen cuerpo. Las reglas tienen siempre cabeza y cuerpo. Los hechos son siempre ciertos. Las reglas declaran cosas que son ciertas dependiendo de una condición. El programa PROLOG (o base de datos PROLOG) está formado por hechos y reglas y para PROLOG no hay ninguna distinción entre ambas. Las preguntas se le hacen al programa para determinar qué cosas son ciertas. (Escrig,T).

CONCLUSIÓN

Este lenguaje prolog está orientado a la IA , usando para esto la programación lógica. Prolog tiene la facilidad para programar y contiene una sintaxis sencilla gracias a esto los programadores pueden escribir rápidamente un código y no contener muchos errores, además es de fácil entendimiento y puede ser utilizado por inexpertos.


BIBLIOGRAFÍA

Cubero, J. 2009. Tutorial de Prolog. En Línea. Formato PDF. Disponible en http://elvex.ugr.es/decsai/intelligent/workbook/ai/PROLOG.pdf

Escrig,T. 2005. El lenguaje de Programación PROLOG. En línea. Formato PDF. Disponible en http://mural.uv.es/mijuanlo/PracticasPROLOG.pdf

jueves, 8 de enero de 2015

JUEGOS


Fecha de la clase: 8 de Enero



INTRODUCCIÓN
En esta clase se realizaron unos trabajos de investigación en clase en los que se expusieron cada uno de los trabajos en uno de estos vimos sobre los juegos y las decisiones óptimas para estos donde tenemos que estos multiagentes pueden ser cooperativos o competitivos.


MARCO TEÓRICO

JUEGOS

La Teoría de Juegos estudia de manera formal y abstracta las decisiones óptimas que deben tomar diversos adversarios en conflicto, pudiendo definirse como el estudio de modelos matemáticos que describen el conflicto y la cooperación entre entes inteligentes que toman decisiones. Tales decisiones se consideran estratégicas, es decir, que los entes que participan en el juego actúan teniendo en cuanta las acciones que tomarían los demás.
La teoría de juegos es capaz de ofrecer cuestiones de interés para estudiantes de todas las ramas de las Ciencias Sociales y la Biología, así como técnicas para tomar decisiones prácticas. (Fernández, F)
Los juegos son interesantes porque son demasiado difíciles de resolver. El ajedrez, por ejemplo, tiene un factor de ramificación promedio de 35 y los juegos van a menudo a 50 movimientos por cada jugador:
Grafo de búsqueda: aproximadamente 10^40 nodos distintos árbol de búsqueda: 35^100 o 10^154. Los juegos, como el mundo real, requieren la capacidad de tomar alguna decisión (la jugada) cuando es infactible calcular la decisión óptima. (Ceccaroni, L).

DESICIONES ÓPTIMAS EN JUEGOS

Un juego puede definirse formalmente como una clase de problemas de búsqueda con los componentes siguientes:
El estado inicial
Una función sucesor, que devuelve una lista de pares (movimiento, estado)
 – Un test terminal, que determina cuándo termina el juego (por estructura o propiedades o función utilidad)
 – Una función utilidad. (Ceccaroni, L).

ALGORITMO MINIMAX:

El algoritmo calcula la decisión minimax del estado actual. Usa un cálculo simple recurrente de los valores minimax de cada estado sucesor, directamente implementando las ecuaciones de la definición. La recursión avanza hacia las hojas del retroceder árbol, y entonces los valores minimax retrocedió por el árbol cuando la recursión se va deshaciendo. Por ejemplo, en la Figura, el algoritmo primero va hacia abajo a los tres nodos izquierdos, y utiliza la función Utilidad para descubrir que sus valores son 3, 12 y 8 respectivamente. Entonces toma el mínimo de estos valores, 3, y lo devuelve como el valor del nodo B. Un proceso similar devuelve hacia arriba el valor de 2 para C y 2 para D. Finalmente, tomamos el máximo de 3, 2 y 2 para conseguir el valor de 3 para el nodo de raíz.
El algoritmo minimax realiza una exploración primero en profundidad completa del árbol de juegos. Si la profundidad máxima del árbol es m, y hay b movimientos legales en cada punto, entonces la complejidad en tiempo del algoritmo minimax es O(b^m). La complejidad en espacio es O(bm) para un algoritmo que genere todos los sucesores a la vez, o O(m) para un algoritmo que genere los sucesores uno por uno.
Para juegos reales, desde luego, los costos de tiempo son totalmente poco prácticos, pero este algoritmo sirve como base para el análisis matemático de juegos y para algoritmos más prácticos. (Russell, S y Norvig, P).




CONCLUSIÓN

En anteriores temáticas tratamos sobre agentes que usaban estrategias en la que solo un agente realizaba la búsqueda a la solución, pero en los juegos tenemos dos agentes luchando por tratar de buscar un mismo objetivo.

BIBLIOGRAFÍA

Ceccaroni, L. 2007. Inteligencia Artificial Busqueda entre Adversarios. En Línea. Formato PDF. Disponible en http://www.cs.upc.edu/~luigi/II/IA-2007-fall/2d-busqueda-entre-adversarios-(es).pdf

Fernández, F. 2005. Teoría de Juegos. En Línea. Formato PDF. Disponible en http://imarrero.webs.ull.es/sctm05/modulo1lp/5/ffernandez.pdf


Russell, S y Norvig, P. 2004.  INTELIGENCIA ARTIFICIAL. UN ENFOQUE MODERNO. Segunda edición.  PEARSON EDUCATION, S.A. Impreso en España.