viernes, 15 de enero de 2016

Estructura de Datos en Prolog

1.1.   INTRODUCCIÓN
Como hemos venido mencionando en las anteriores publicaciones existen diversos lenguajes de inteligencia artificial, entre ellos tenemos a Prolog que es un sistema en el cual maneja hechos y reglas para su funcionamiento, este a su vez esta conformado por una base de conocimiento en donde se almacenan los datos pertinentes al problema que se esta desarrollando y una maquina de inferencia la cual hará uso de esta base para poder sacar conclusiones a las diversos problemas que posea.
Como sabemos este lenguaje es diferente a los lenguajes de programación comunes los cuales estan programados para realizar las funciones que nosotros le proporcionemos a diferencia de esto Prolog es un sistema inteligente el cual hace uso de su conocimiento para obtener diversos resultados.

En este seccion hablaremos sobre las estructuras de datos en Prolog, que tipos de estructuras tenemos disponibles, que son las listas, que operaciones podemos realizar con estas, y cuando es necesario utilizarlas.

1.2.   OBJETIVO
Conocer acerca de las estructuras de datos en prolog para que tipos de estructuras podemos utilizar en los diversos problemas de inteligencia artificial.



MARCO TEÓRICO
2.1. Arboles
Los arboles son un tipo de estructura de datos que utiliza prolog para poder representar su base de conocimiento, estas estructuras poseen un nodo principal del cual se desprende otros nodos dependientes de la raiz. Como podemos ver en el siguiente ejemplo tenemos un ejemplo de una estructura de datos en prolog.


Imagen 2.1. Estructura de arbol en Prolog

2.2. Listas
Las listas son un tipo de estructura que sirven para trabajar en situaciones imprevisibles de una manera facil, es decir que son utilizadas en situaciones en donde es difícil manipular el numero de datos con lo que se esta trabajando y los que van a ser almacenados en base de conocimiento.
En la inteligencia artificial muchos de los programas con los que se trabaja tienen infinidades de soluciones parciales en las cuales al momento de ejecutarlos se pueden tener diversos cambios de forma dinámica.


Imagen 2.2. Listas


2.2.2. Elementos de una lista
Entre los elementos que podemos encontrar dentro de una lista dos, los cuales son:

  • Cabeza: Es el primer elemento que se encuentra en la lista.
  • Cola: El resto de elementos que componen la lista.
Un dato importante que debemos conocer es que una lista no necesariamente tiene que contener elementos dentro de ella, existen listas vacías y estas se definen de esta manera
[ ]


Para poder diferencia cual es la cabeza y la cola en una lista tenemos la siguiente notación:
[Cabeza|Cola]

Para poder explicar como se estructura la lista lo haremos con la imagen 2.3. en donde podemos apreciar varios ejemplos de listas en prolog.


Imagen 2.3. Ejemplos de listas

2.2.3. Unificación de la Lista
Las unificaciones son una manera sencilla de instanciar una lista con cabeza X y cola Y mediante el símbolo |  este seria para diferenciar la cabeza a X y la cola a Y. Un ejemplo seria:

  • [a,b,c]= [X|Y]
  • X=a
  • Y=[b,c]
  • [a,b,c]=[X,Y,Z]
  • X=a
  • Y=b
  • Z=c
2.3. Operaciones con Listas
Las listas se pueden utilizarse para representar conjuntos sin embargo entre las listas y los conjuntos existen algunas diferencias:

  • El orden de los elementos en un conjunto es relevante mientras que en una lista si lo es.
  • En un conjunto pueden existir elementos repetidos mientras que en una lista no
Entre las operaciones que podemos realizar con las listas tenemos:

2.3.1. Pertenencia de un elemento a la Lista
Para verificar la pertenencia de un elemento en especifico en la lista , utilizamos la siguiente regla:
member(X,[X|L]).

2.3.2. Concatenación de Listas
Esta operación sirve para unir los elementos de una lista con otra en una sola lista nueva, utilizamos la siguiente regla:
contat([X|Y],Z[X|W]):-append(X,Z,W).

2.3.3. Adición de un elemento a la Lista
Sirve para agregar un elemento nuevo a la lista, se tiene que considerar que este nuevo elemento será parte de la cabeza, por lo tanto se escribe de esta manera:
add(X,L,[X|L]).

2.3.4. Eliminar elementos de la Lista
Como su nombre lo indica sirve para eliminar un elemento de la lista, se denota de la siguiente manera:

delete(X,[X|R],R)

CONCLUSIONES
Las estructuras de datos en Prolog son de suma importancia, las listas son una de estas y nos ayudan a facilitar el trabajo en situaciones en donde la cantidad de datos con los que se esta trabajando es inmenso.
Gracias a este tipo de estructuras podemos manejar gran cantidad de elementos en los que comúnmente no podríamos trabajar con una estructura simple. 

BIBLIOGRÁFICA
Galiano, F. (2012). Tutorial de PROLOG. (En linea). Consultado el 12 de Enero del 2015. Disponible en: http://elvex.ugr.es/decsai/intelligent/workbook/ai/PROLOG.pdf

Universidad Nacional del centro de la Provincia de Buenos Aires. (2014). Listas:Prolog. (En linea). Consultado el 14 de Enero del 2015. Disponible en: http://www.exa.unicen.edu.ar/catedras/prog_exp/apuntes/clase3.pdf

Universidad de Zaragoza (2015). Inteligencia Artificial Capitulo 5 Listas. (En linea). Consultado el 13 de Enero del 2015. Disponible en: http://www.unizar.es/pde/fjgaspar/cap5.pdf.

Russell, S., Norvig, P. 2008. Inteligencia Artificial Un Enfoque ModernoSegunda Edición. Pearson Education. España

jueves, 14 de enero de 2016

Ejercicios en el Lenguaje de Programación Prolog

1.1.   INTRODUCCIÓN
En la publicación anterior explique acerca del lenguaje de Programación Prolog y cuales son sus principales elementos, en este nueva publicación vamos a realizar algunos ejercicios del lenguaje de programación Prolog y como, como declarar en la base de conocimientos, como se consulta y a repasar las temáticas de la publicación anterior

1.2.   OBJETIVO
Realizar ejercicios básicos en el lenguaje de Programación Prolog, realizar ejercicios con operadores aritméticos.

MARCO TEÓRICO

2.1. Ejemplos Comunes

2.1.1. Ejercicio 1
Realizar un ejercicio de una familia en donde se sepa el sexo de cada integrante, la relación de los padres y la relación entre hermanos
Imagen 1. Base de Conocimiento familia

Imagen 2. Consulta familia


2.1.2. Ejercicio 2
Se desea expresar en una base de conocimientos todas las personas a las que estima María. 

  • María estima a juan, pedro, luis, ana y mateo.
  • Se indica ademas que les gusta bailar a pedro y luis y les gusta comer a juan y ana.
  • Se sabe que María estima a aquellas personas que son de sexo masculino y le gusta bailar.

Imagen 3. Base de Conocimiento Estima Maria 

Imagen 4. Consulta Estima Maria


2.1.3. Ejercicio 3
Escriba una Base de Conocimiento que permita identificar a determinado animal. Utilice los predicados es y tiene.
Imagen 5. Base de Conocimiento Estima Animales

Imagen 6. Consulta Estima Animales



2.1.4. Ejercicio 4
Escribir un programa Prolog que ayude a una agencia matrimonial, respondiendo consultas sobre qué parejas son compatibles. 
Definimos a una pareja como un par (mujer, varón), no al revés. 
Incluir en el programa la siguiente información : 
A)
  • Las mujeres melancólicas son compatibles con los varones serenos. 
  • Las mujeres decididas son compatibles con los varones reflexivos.
  • Las mujeres soñadoras son compatibles con los varones Decididos. 
  • Juan es sereno y decidido. 
  • María es melancólica.
  • Ursula es decidida.
  • Juana es soñadora.
  • Pedro es reflexivo.
  • José es melancólico. 
B)Según la información descripta, la pareja (María, Juan) es compatible, mientras que la pareja (Ursula, Juan) no lo es. 
  • Cualquier pareja formada por un decidido y un melancólico es compatible.  Según esta nueva información, la pareja (Ursula, José) es compatible, mientras que si nos remitimos al punto a. no lo es. 

C)
Agregar al programa la posibilidad de responder a consultas sobre si una persona es deseable. 

  • Decimos que una persona (varón o mujer) es deseable si es compatible con, por lomenos, dos personas distintas. Según la información descripta, Juan es deseable mientras que Juana.
Imagen 7. Base de Conocimiento Compatibles

Imagen 8. Consulta Estima Compatibles


2.1.5. Ejercicio 5
Escribir un programa en Prolog que permita saber los precios de ciertos articulos sabiendo que:
  • bolígrafo = 0,5
  • folios = 2,5
  • portátil = 700
  • carro = 5000
  • tomate = 2
  • Artículos mayores a 100
Imagen 9. Base de Conocimiento Precios

Imagen 10. Consulta Precios


2.2. Ejemplos con Operadores Aritméticos en Prolog

2.2.1. Ejercicio 1
Realizar una suma utilizando el lenguaje de Programación Prolog

Para realizar una suma hacemos uso de tres variables que son:
  • A: Primer digito a sumar
  • B: Segundo digito a sumar
  • C: Resultado de la suma.

Imagen 12. Base de Conocimiento Suma

Imagen 13. Consulta Suma


2.2.2. Ejercicio 2
Realizar una resta utilizando el lenguaje de Programación Prolog

Para realizar una resta hacemos uso de tres variables que son:

  • A: Primer digito a restar
  • B: Segundo digito a restar
  • C: Resultado de la resta.
Imagen 14. Base de Conocimiento Resta

Imagen 15. Consulta Resta


2.2.3. Ejercicio 3
Realizar una multiplicación utilizando el lenguaje de Programación Prolog

Para realizar una multiplicación hacemos uso de tres variables que son:

  • A: Primer dígito a multiplicar
  • B: Segundo digito a multiplicar
  • C: Resultado de la multiplicación.

Imagen 16. Base de Conocimiento Multiplicación


Imagen 17. Consulta Multiplicación


2.2.4. Ejercicio 4
Realizar una división utilizando el lenguaje de Programación Prolog

Para realizar una división hacemos uso de tres variables que son:

  • A: Primer dígito a dividir
  • B: Segundo digito a dividir
  • C: Resultado de la división .
Imagen 18. Base de Conocimiento División

Imagen 19. Consulta División


2.2.5. Ejercicio 5
Realizar una potencia utilizando el lenguaje de Programación Prolog

Para realizar una potencia hacemos uso de tres variables que son:

  • A: Dígito base
  • B: Dígito exponente
  • C: Resultado de la potencia .
Imagen 19. Base de Conocimiento Potencia

Imagen 20. Consulta Potencia

CONCLUSIONES

Se puede concluir que este lenguaje de programación es muy eficaz ya que a diferencia de los lenguajes de programación comunes este lenguaje logra razonar para encontrar las posibles soluciones a los diversos problemas de inteligencia artificial.

BIBLIOGRAFIA

Universidad de Valladoid. (2010). Sintaxis Prolog. (En linea). Consultado el 13 de Enero del 2015. Disponible en: http://www.infor.uva.es/~calonso/IAI/PracticasProlog/Tema2/Tema%202.%20La%20Sintaxis.pdf

Russell, S., Norvig, P. 2008. Inteligencia Artificial Un Enfoque ModernoSegunda Edición. Pearson Education. España