Está en la página 1de 6

1

Temas Avanzados en Ingeniera


Informtica (I)-Lgica
Curso 2011-2012

1. Fecha de entrega

La fecha lmite de entrega ser el 22 de Marzo (jueves) hasta las 20:00
horas.


2. Objetivo

El objetivo de esta prctica consiste en realizar una primera toma de
contacto con la Programacin Lgica, y ms concretamente con el lenguaje
de programacin Prolog. Para ello, se implementarn varios ejercicios
simples que permiten definir bases de hechos (o de conocimiento) y reglas
en Prolog.

En esta, y en el resto de las prcticas de la asignatura, podr
utilizarse el intrprete SWI-Prolog (http://www.swi-prolog.org/), o el
intrprete Prolog de GNU (gprolog, http://ftp.gnu.org/gnu/gprolog/).
Tambin puede utilizarse cualquier otro intrprete Prolog que se desee,
siempre y cuando, no se utilicen predicados, instrucciones, o
procedimientos propios. Las prcticas sern corregidas utilizando SWI-
Prolog, o GProlog, por lo que se recomienda la utilizacin de uno de
estos dos intrpretes.

Para aquellos que lo deseen, la instalacin en Linux (distribucin
Ubuntu) tanto de GProlog como de Swi-Prolog (versin 5.6.14 para Linux),
puede realizarse ejecutando desde lnea de comandos:

:~$ sudo apt-get install gprolog
:-$ prolog //ejecuta gnu-prolog
:-$ gprolog //ejecuta gnu-prolog

:-$ sudo apt-get install swi-prolog
:-$ swipl //ejecuta swi-prolog
:-$ swiprolog //ejecuta swi-prolog

La prctica se ha dividido en un conjunto de ejercicios bsicos que deben
ser implementados y documentados.


3. Descripcin de la prctica

3.1. rboles genealgicos

(a) Se pide buscar un rbol genealgico, real o ficticio, y crear
un base de hechos que lo represente y el conjunto de clusulas
necesarias que me permitan establecer las relaciones habituales
en cualquier familia. Se pide crear (como mnimo) los siguientes
predicados:

1. prole(X,Y): cierto, si X es hijo de Y (cualquiera de los dos sexos).
2. hija(X,Y): cierto, si X es hija de Y.
2

3. hijo(X,Y): cierto, si X es hijo varn de Y.
4. progenitor(X,Y): cierto, si X es un progenitor de Y.
5. padre(X,Y): cierto, si X es el padre de Y.
6. madre(X,Y): cierto, si X es la madre de Y.
7. fraterno(X,Y): cierto, si X e Y son hermanos/as.
8. hermano(X,Y): cierto si X es hermano varn de Y.
9. hermana(X,Y): cierto si X es hermana de Y.
10. primo(X,Y): cierto si X e Y son primos (cualquiera de los dos sexos).
11. abuelo(X,Y): cierto si X es abuelo varn de Y.
12. abuela(X,Y): cierto si X es abuela de Y.
13. tio(X,Y): cierto si X es to de Y (tanto carnal como poltico).
14. tia(X,Y): cierto si X es ta de Y (tanto carnal como poltica).
15. suegro(X,Y): cierto si X es suegro de Y.
16. suegra(X,Y): cierto si X es suegra de Y.
17. yerno(X,Y): cierto si X es yerno de Y.
18. nuera(X,Y): cierto si X es nuera de Y.
19. esposo(X,Y): cierto si X e Y estn casados.
20. marido(X,Y): cierto si X es marido de Y.
21. mujer(X,Y): cierto si X es la mujer de Y.
22. varon(X): cierto si X es varn.
23. mujer(X): cierto si X es mujer.


Tambin se disearn clusulas que nos permitan relacionar
diferentes familias, por ejemplo:

24. cuniado(X,Y): cierto si X es cuado de Y.
25. cuniada(X,Y): cierto si X es cuada de Y.

Se crearn clusulas de carcter recursivo como:

26. antepasado(X,Y): cierto si X es antepasado de Y.
27. descendiente(X,Y): cierto si X es descendiente de Y.
28. pariente(X,Y): cierto si X e Y son parientes.


(b) Se modificar el programa anterior, para permitir la insercin
de nuevos hechos en nuestra base de conocimiento. Como
caracterstica bsica se considerar la insercin de este nuevo
conocimiento:

"A, cuyos padres son B y C, decide casarse con D (sus padres
no son conocidos para nuestra base de hechos).
Como efecto de este matrimonio tienen una hija a la que
deciden ponerle el nombre de E."

Es decir, podremos ejecutar un predicado desde el intrprete de
Prolog (por ejemplo, casados(X,Y)) que aadira automticamente
ese conocimiento a la base de hechos.

(c) (opcional) Modificar la base de hechos anterior sobre un caso
libre y aplicar los predicados ya definidos. La complejidad de la
nueva base de hechos, as como particularidades de la misma (i.e.
mltiples padres, mltiples matrimonios) definirn la nota de
este apartado.

(d) (opcional) Modificar la base de hechos anterior y permitir la
utilizacin de listados familiares para generar representaciones
ms compactas de los hechos, modificando adecuadamente las
reglas.
3


3.2. Bsqueda en laberintos

(a) Se desea formalizar en PROLOG el diseo de un pequeo laberinto
que tenga un nico camino vlido y sin posibilidad de ciclos.
nicamente ser posible realizar los siguientes movimientos:
arriba, abajo, izquierda y derecha. El laberinto sera el
siguiente:


Los hechos del problema sern:
o Los pasillos existentes entre dos casillas: pasillo(1,1,1,2),
o La salida: salida(1,4)
Deber implementar las reglas mover, para moverse hacia arriba,
abajo, izquierda y derecha. Puede ser necesaria la implementacin
de alguna regla adicional.
El objetivo ser: mover(1,1,[paso(1,1)],Solucion)
Y devolver:
Solucion=[paso(1,1), paso(1,2), paso(2, 2), paso(3, 2), paso(3, 3),
paso(4, 3), paso(4, 4), paso(3, 4), paso(2, 4), paso(1, 4)]

(b) (opcional) Se trata de ampliar el programa anterior
introduciendo estructuras ms complejas. El nuevo programa deber
funcionar para cualquier laberinto (puede tener bucles). Deber
devolver el camino ptimo entre una entrada y una salida. El camino
ptimo ser aquel que requiere menos pasos. Para optimizar el
proceso de bsqueda deber llevar un listado de caminos visitados,
para evitar recorrerlos de nuevo.

3.3. Parentesco (OPCIONAL)

El parentesco es el vnculo que liga unas personas con otras
(www.iabogado.com/esp/guialegal/guialegal.cfm?IDCAPITULO=01020000). Puede
ser de consanguinidad, que sera el vnculo de sangre que une a las
personas y el de afinidad, tambin denominado poltico, que sera el que
liga a un esposo con los parientes de sangre del otro. Dentro del
parentesco de consanguinidad hay que distinguir lo que es la lnea recta
(ascendente o descendente) de lo que es la lnea colateral.

Lnea recta. La proximidad del parentesco de consanguinidad se mide
por grados, siendo un grado la distancia que hay entre dos personas
engendradas una de otra. De una a otra hay una generacin y por
4

tanto cada generacin es un grado. As padre e hijo son parientes
en primer grado. Abuelo y nieto hay dos grados, uno entre padre e
hijo y otro entre padre y abuelo. Por lo tanto el grado de
parentesco entre el nieto y el abuelo es el de segundo grado de
consanguinidad en lnea recta.

Lnea colateral. Nos viene dada por aquellas personas que no
descienden unas de otras, sino de un antepasado comn (primos entre
s, siendo el antepasado comn el abuelo). La medicin o el grado
de parentesco se calcula de la siguiente manera. Ascendemos hasta
llegar al ms prximo antepasado comn con la otra persona, y luego
se baja por la lnea recta descendente que une a este antepasado
con la otra cuyo parentesco con la primera se mide. Por lo tanto
dos hermanos son parientes en segundo grado de consanguinidad en
lnea colateral.

Se pide crear las clusulas correspondientes para poder calcular
consang(X,Y,Z),afinidad(X,Y,Z), lrecta(X,Y,Z), lcolat(X,Y,Z).


3.4. Diseo de mens para un restaurante

(a) Se desea formalizar en PROLOG el diseo de mens en un
restaurante, para ello se deben construir un conjunto de
predicados que contengan los diferentes tipos de alimentos. A
partir, de esos predicados se definirn otros que nos permitan
construir mens dependiendo del gusto de los posibles clientes.
En el siguiente ejemplo damos algunos predicados donde almaceno
los distintos alimentos de los que dispone el restaurante:

pescados(Besugo,Atun,Emperador,Mero,Sardina).
carnes(Cerdo,Ternera,Pollo,Pato,Jabali).
vegetales(Zanahoria,Lechuga,Repollo,Coliflor,Acelga).


Un men de este restaurante deber constar de tres platos
compuestos por un primer y segundo plato (entrada y plato
principal) y de un postre.
Deberemos crear por lo menos un predicado que me permita definir
un men para vegetarianos, y otro para personas que no deseen
incluir nunca pescado en su comida.

vegetarianos(X,Y,Z). X = primer plato, Y = segundo plato, Z =
postre.
no-pescado(X,Y,Z).

Nota: En el segundo tipo de mens es aconsejable emplear la
negacin.

(b) Se trata de refinar el funcionamiento del programa anterior
introduciendo estructuras ms complejas. En este apartado
debemos de modificar el anterior para poder aadir o eliminar un
determinado alimento a su lista de comida, adems modificaremos
la base de clusulas para permitir la existencia de sublistas,
en estas sublistas introduciremos los valores calricos de cada
alimento. Definir el subconjunto de reglas necesarias para poder
5

modificar un conjunto de alimentos, buscar las caloras que
contiene un alimento en particular, y crear reglas para definir
mens equilibrados.

Ej:

pescados([Besugo,300],[Bacalao,350],[Emperador,400],[Mero,200],[
Sardina,100]).

carnes([Cerdo,700],[Ternera,450],[Pollo,250],[Pato,250],[Jabali,
200]).

Se pueden disear otro tipo de sublistas que organicen la
informacin de una forma ms conveniente, por ejemplo los
pescados podramos definirlos en funcin de la clase a la que
pertenecen:

pescados([blanco,[Besugo,Emperador,Mero] ,azul,[Sardina,Bonito],
marisco,[Langosta,Centollo,Langostino]]).

O bien podemos definir una estructura todava ms compleja que
la anterior, en base a la cual podemos definir nuevos
predicados, Ej:

pescados([blanco,[[Besugo,300],[Emperador,400],[Mero,200]],azul[
[Sardina,100],[Bonito,300]],marisco[[Langosta,150],[Centollo,200
],[Langostino,100]]).

Los nuevos predicados mostrarn, adems de los diferentes mens,
el valor calrico total de los mismos.



4. Entrega de la memoria y del programa

La prctica (tanto el cdigo como la memoria) se entregarn en un fichero
comprimido como se indica en la pgina de la asignatura, y cuyo nombre
debe indicar, el nmero de prctica y el nmero de grupo del que se
trata. Se aceptarn ficheros comprimidos zip, rar, tar.gz, o tgz.
Ejemplo:

par05prac1.tar.gz, par06prac1.tgz, par02prac1.zip, par04prac1.rar

La prctica se entregar utilizando la zona de envo de prcticas de la
EPS (http://www.ii.uam.es/esp/alumnos/practicas/envio_practicas.php3).
El cdigo fuente entregado tendr todo lo necesario para que se pueda
ejecutar los diferentes procedimientos, as como los casos de prueba que
se consideren necesarios. El cdigo deber estar adecuadamente comentado.

La memoria constar de las siguientes secciones:

1. Introduccin (una hoja de descripcin de lo que hay que hacer desde
vuestro punto de vista y no copiando el enunciado).

6

2. Descripcin a alto nivel de lo realizado: qu predicados se han
definido y porqu, qu problema resuelve cada uno de ellos y cmo
se relacionan unos con otros, etc.

3. Cdigo fuente completo con comentarios (el cdigo final no debera
ser muy largo)

4. Consideraciones sobre la eficiencia del programa, si es que se han
tenido en cuenta cuestiones como el orden de las clusulas, orden
de los objetivos en los cuerpos, cut,

5. Conclusiones (qu se ha aprendido, dificultades encontradas,
comentarios sobre PROLOG, etc.).

6. Medida del esfuerzo del desarrollo de la prctica}, en este ltimo
apartado podr mostrarse una tabla donde los alumnos indiquen (de
forma aproximada) el nmero de horas dedicadas al desarrollo de la
misma. Pueden indicarse los siguientes elementos (u otros que se
consideren oportunos): Anlisis del problema, Desarrollo del
programa, Diseo de la solucin, Verificacin y Pruebas, Creacin
de la documentacin.


5. Criterios de evaluacin

Se valorar:

1. La correccin del programa (que funcione en todos los casos)
2. La claridad del cdigo
3. La claridad de las explicaciones en la memoria
4. Las consideraciones que haya hecho el alumno para mejorar la
eficiencia (cambiar el orden de los objetivos, etc.), si estas
estn justificadas en la memoria

También podría gustarte