Sei sulla pagina 1di 14

m

Ingeniería en Sistemas Computacionales

Inteligencia Artificial

Reporte de Práctica No.1

Alumno:
García Acosta Alejandro de Jesús
Santos Taxilaga Salvador de Jesús
Grupo 804-A

San Andrés Tuxtla, Veracruz.


Periodo:
Enero-Junio 2019
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

REPORTE DE PRÁCTICA CÓDIGO: SCC-1012


INTELIGENCIA ARTIFICIAL REVISIÓN: 1

ASIGNATURA
Inteligencia Artificial

PRACTICA NO.1
Reglas de Producción

OBJETIVO
Desarrollar reglas de producción para demostrar la relación entre los integrantes
de una familia.

FUNDAMENTO TEÓRICO
SWI PROLOG

SWI-Prolog es una aplicación de código abierto del lenguaje de programación


Prolog; es comúnmente utilizado para la enseñanza y las aplicaciones de web
semántica. [1]

Funcionamiento

Los programas Prolog hay que editarlos con un editor de texto. Se puede usar el
Notepad, pero no conviene, es bastante limitado. Hay uno que se llama emacs que
viene con el SWI. También se pueden usar editores de texto de uso general, p.ej. el
UltraEdit. Conviene guardar los archivos con extensión .pl. El SWI se usa para hacer
consultas a partir de un programa. Hay varias formas de "cargar" un programa en
Prolog, mencionamos dos [1]:

 Darle doble click al fuente .pl en el administrador de archivos o similar (p.ej.


windows commander), abre el SWI y carga el programa.
 Abrir el SWI, y después File -> Consult.

P á g i n a 2 | 14
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

REPORTE DE PRÁCTICA CÓDIGO: SCC-1012


INTELIGENCIA ARTIFICIAL REVISIÓN: 1

Si hay errores en el programa, aparecen en la ventana de SWI indicando la línea de


cada error. También pueden aparecer warnings, esos no importan. Si hay errores
(te das cuenta porque la línea correspondiente empieza con ERROR:) el programa
no se carga, hay que corregir los errores. Una vez que se cargó el programa, las
consultas se hacen escribiéndolas en la ventana del SWI, al lado del prompt ‘?-‘.
Recordar que las consultas también tienen que terminar con punto. Para consultas
existenciales, el SWI muestra la primera respuesta. Si quiero más, pulso ‘;’ (punto y
coma), si no, pulso Enter. Si pulso ‘;’ y responde No es porque no encontró más
respuestas a la consulta. [1]

Edición de archivos

Editor emacs

Para editar el código de SWI, por defecto se usa el Notepad de Windows. El


SWI trae incorporado un editor: el "emacs". Este editor colorea las cláusulas
de forma que las hace mucho más claras y por lo tanto facilita la detección
de errores. [1]

Para usarlo, solo tienen que escribir: ?- emacs. [1]

Esto va a abrir una ventana con el editor. Si se quiere editar un archivo nuevo,
se puede usar directamente. Caso contrario, se cierra y listo. Cuando se haya
usado una vez, los siguientes archivos que se abran también se van a ver
con este editor. [1]

Editor UltraEdit

Para que el UltraEdit conozca la sintaxis de Prolog, se baja este archivo de


texto: prologwordfile.txt y su contenido se copia y se pega al final del
wordfile.txt que viene en el directorio de instalación de UltraEdit. Ahora la
próxima vez que se entre al programa, en View -> View as se van a ver en la
opción número 20 la opción del Prolog. [1]

P á g i n a 3 | 14
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

REPORTE DE PRÁCTICA CÓDIGO: SCC-1012


INTELIGENCIA ARTIFICIAL REVISIÓN: 1

Comandos básicos

 ?- halt. Sale del entorno Prolog (el punto es muy importante ya que designa
el final de la línea).
 ?- edit ('archivo'). Invoca al editor predeterminado.
 ?- consult ('archivo'). ['archivo']. Consulta el fichero fuente.
 ?- help help ('ayuda). Solicita ayuda al entorno.
 ?- make. Consulta los ficheros que cambiaron desde la última consulta.

PROLOG

Lenguaje de programación diseñado para representar y utilizar el conocimiento que


se tiene sobre un determinado dominio. Los programas en Prolog responden
preguntas sobre el tema del cual tienen conocimiento. Prolog es un lenguaje de
programación especialmente indicado para modelar problemas que impliquen
objetos y las relaciones entre ellos. Está basado en los siguientes mecanismos
básicos: unificación, estructuras de datos basadas en árboles y backtracking
automático. La sintaxis del lenguaje incluye la declaración de hechos, preguntas y
reglas. La popularidad de este lenguaje se debe a su capacidad de deducción y
además es un lenguaje fácil de usar por su semántica y sintaxis. Sólo busca
relaciones entre los objetos creados, las variables y las listas, que son su estructura
básica. [2]

HECHOS

Un hecho, en PROLOG, es una relación entre objetos. [3]

Ejemplo: La capital de Francia es París. [3]

En Prolog se escribe capital (francia,parís). [3]

En general, la sintaxis es [3]:

relación (objeto, objeto, ...). [3]

P á g i n a 4 | 14
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

REPORTE DE PRÁCTICA CÓDIGO: SCC-1012


INTELIGENCIA ARTIFICIAL REVISIÓN: 1

La relación se conoce como el predicado y los objetos como los argumentos. [3]

 Los nombres de todos los predicados y argumentos deben de comenzar con


una letra minúscula.
 Primero, se escribe el predicado. Los argumentos se escriben separándolos
mediante comas y encerrados entre paréntesis.
 Al final del hecho debe ir un punto.

REGLAS

Una regla consta de dos partes, una cabeza y un cuerpo. La cabeza y el cuerpo
están unidos mediante el símbolo ‘: −‘ [3]

cabeza :- cuerpo. [3]

El cuerpo puede estar formado por varios hechos. [3]

cabeza :- hecho1, hecho2, ..., hechon. [3]

La separación ‘: −‘ se lee ”si”.( la cabeza es verdad si el cuerpo es verdad.) [3]

Ejemplo: Es divisible por dos(X) :- par(X). (Se lee X es divisible por dos si X es par.).
Esta cláusula en Prolog es equivalente a la fórmula de primer orden (∀ X) par(X) ⇒
Es divisible por dos(X). Por tanto, si podemos probar que X es par entonces hemos
probado que X es divisible por dos. [3]

Nota: En la cabeza de una regla no puede haber más de un hecho. Ejemplo:


rico(juan) ⇒ feliz(juan) ∧ poderoso(juan) No se puede expresar directamente en
Prolog como feliz(juan),poderoso(juan):-rico(juan). [3]

P á g i n a 5 | 14
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

REPORTE DE PRÁCTICA CÓDIGO: SCC-1012


INTELIGENCIA ARTIFICIAL REVISIÓN: 1

MATERIAL Y EQUIPO EMPLEADO

 SWI Prolog 8.0.2.1 para Microsoft Windows (64 bits)


 Lenguaje de programación lógica: Prolog
 Manual de práctica
 Laptop con sistema operativo Windows 8
 Editor de texto atom

DESARROLLO
Red semántica la cual será utilizada durante todo el proceso de esta práctica, esto
para ver si los resultados son correctos.

P á g i n a 6 | 14
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

REPORTE DE PRÁCTICA CÓDIGO: SCC-1012


INTELIGENCIA ARTIFICIAL REVISIÓN: 1

Como se aprecia al inicio de este


programa se declaran los hechos
los cuales se ocuparan más
adelantes.
En este caso se declaró quien es
mujer y quien hombre.

P á g i n a 7 | 14
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

REPORTE DE PRÁCTICA CÓDIGO: SCC-1012


INTELIGENCIA ARTIFICIAL REVISIÓN: 1

Posteriormente se declara los


hechos de que quienes son padres,
para mediante esto tener una
pequeña relación. La cual será de
gran ayuda al realizar una
búsqueda.

En esta función se busca la


hermana de x persona para ello se
tiene que realizar una condición en
donde la persona x tiene que ser
mujer y a su vez tiene que tener
padres y los padres de y tienen que
ser los mismo padres de la persona
x así dando como resultado si son
hermanas o no.
En la siguiente función se busca la
relación de hermano, esto es igual
que la función anterior solo que en
vez de cumplir con el hecho de que
sea hermana, tiene que cumplir que
sea hermano.

P á g i n a 8 | 14
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

REPORTE DE PRÁCTICA CÓDIGO: SCC-1012


INTELIGENCIA ARTIFICIAL REVISIÓN: 1

En esta función se busca al tío de x


persona para ello se tiene que
comprobar si la persona x tiene
padres, posteriormente si los
padres tienen hermanos, esto se
realiza buscando de una forma
similar a la función hermana o
hermano.
En esta función se busca a todos los
abuelos, como se aprecia en el
código primero se valida que la
persona x tenga como tal padres,
posteriormente z que es el padre
tenga padre y madre y una
validación donde el mismo padre no
puede ser el abuelo.
Posteriormente se realiza el mismo
proceso para la madre la cual es
representada por w.

P á g i n a 9 | 14
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

REPORTE DE PRÁCTICA CÓDIGO: SCC-1012


INTELIGENCIA ARTIFICIAL REVISIÓN: 1

RESULTADOS ESPERADOS

Primero se realiza las pruebas con la función hermana para mostrar el resultado de
las hermana de x personas, en esta ocasión se basó en la red semántica que se
mostró al inicio del desarrollo.

Se ingresa el nombre de Isabel y los resultado son los siguientes:

Posteriormente se comprueba la función hermano dando como resultado lo


siguiente:

P á g i n a 10 | 14
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

REPORTE DE PRÁCTICA CÓDIGO: SCC-1012


INTELIGENCIA ARTIFICIAL REVISIÓN: 1

Para continuar con las muestras de los resultados ahora se utiliza la función tío la
cual debe de devolver un valor en caso de que tenga un tío, para este caso se
ingresara Carmen, y los resultados son:

Por último se realizara la comprobación de la función que busca al abuelo, para ello
se ingresa el dato de Isabel, y se obtiene el siguiente resultado:

P á g i n a 11 | 14
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

REPORTE DE PRÁCTICA CÓDIGO: SCC-1012


INTELIGENCIA ARTIFICIAL REVISIÓN: 1

CONCLUSIÓN
Como se observó durante el desarrollo de esta práctica, es de gran importancia
tener hechos ya que es la base para que se cumplan las condiciones que se
especifican.

La creación de la red semántica fue muy importante, porque mediante ella se logró
comparar los resultados que arrojaba el programa realizado en prolog. Y así ver
cuando se tenía un error y poder realizar modificaciones para obtener los resultados
requeridos.

Para el desarrollo de cada función es importante saber las sintaxis ya que en caso
de que este mal marcara error, de igual manera para realizar las condicionales se
tiene que cerrar los paréntesis correctamente ya que en caso de que falte las
condiciones no se cumplirán como se espera.

P á g i n a 12 | 14
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

REPORTE DE PRÁCTICA CÓDIGO: SCC-1012


INTELIGENCIA ARTIFICIAL REVISIÓN: 1

P á g i n a 13 | 14
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

REPORTE DE PRÁCTICA CÓDIGO: SCC-1012


INTELIGENCIA ARTIFICIAL REVISIÓN: 1

REFERENCIAS ELECTRÓNICAS

[1] Anónimos, «SWI Prolog,» EcuRed, [En línea]. Available:


https://www.ecured.cu/SWI_Prolog. [Último acceso: 07 04 2019].

[2] Anónimo, «ProLog,» EcuRed, [En línea]. Available:


https://www.ecured.cu/ProLog. [Último acceso: 07 04 2019].

[3] Unizar, «Hechos y reglas,» Unizar, [En línea]. Available:


http://www.unizar.es/pde/fjgaspar/cap1.pdf. [Último acceso: 07 04 2019].

P á g i n a 14 | 14

Potrebbero piacerti anche