Vous êtes sur la page 1sur 60

SISTEMAS EXPERTOS

Ing: Chauca Castillo Eduardo


CONTENIDOS

DIRECCIONES DE WEB del Software a utilizar


 Software SWI PROLOG (gratuito)
http://www.swi-prolog.org/

 Software VISUAL PROLOG (free personal edition)


http://www.visual-prolog.com/

 Software Netica (demo)


https://www.norsys.com/netica.html

Desarrollo de ejercicios con el software Swi Prolog


Lenguaje prolog(swi prolog)
Lógica Proposicional
• Las proposiciones equivalen a frases u oraciones del
lenguaje hablado, mientras que los nexos a través de
los cuales puede relacionar estas proposiciones son la
conjunción (y), la disyunción (o) y la implicación (si).

• Cuenta con un lenguaje formal mediante el cual es


posible representar fórmulas llamadas axiomas o
predicados, que permiten describir fragmentos del
conocimiento, y además consta de un conjunto de
reglas de inferencia que aplicadas a los axiomas,
permiten derivar nuevo conocimiento.
Constantes individuales
Las constantes individuales son simplemente símbolos
(nombres) que se usan para referir a algún objeto
individual fijo.

Las constantes individuales hacen referencia


exactamente a un objeto en particular, por ejemplo el
nombre de Juan en español puede ser usado para hacer
referencia a personas diferentes, y podría ser usado dos
veces en un enunciado para hacer referencia a dos
personas diferentes, pero en LPO esto no es posible, el
nombre Juan hace referencia exactamente a un objeto.
Símbolos de predicado
Los símbolos de predicado son utilizados para denotar
alguna propiedad de objetos o alguna relación entre
objetos, formando enunciados atómicos.

Juan es padre de Ana.


En la gramática española esto es analizado como una
oración sujeto-predicado.

En el lenguaje de primer orden, por contraste, vemos a


esto como una afirmación que involucra dos sujetos
lógicos; los nombres Juan y Ana (que son constantes
individuales) y un predicado, es padre de, que expresa
una relación entre los referentes de los nombres.
Se llama proposición atómica, o simple, cuando hace referencia a un único contenido de
verdad o falsedad; vendría a ser equivalente a la oración enunciativa simple en la lengua.
Los enunciados del LPO tienen a veces dos o más sujetos
lógicos que son llamados los argumentos del predicado.

En lenguaje español, algunos predicados tienen


argumentos opcionales.

En este sentido podemos decir Ana regaló, Ana regaló


flores, o Ana regaló flores a Juan.

Aquí el predicado regaló toma uno, dos y tres argumentos


respectivamente.

Pero en LPO, cada predicado tiene un número fijo de


argumentos, una aridad fija.
La aridad es un número que indica cuántas constantes
individuales necesita el símbolo de predicado para formar
una oración.

Por ejemplo, podríamos utilizar el siguiente símbolo de


predicado unario:

Mujer para denotar la propiedad de ser mujer.

Podríamos posteriormente combinar esto con el nombre


“Ana” para lograr la expresión:

Mujer(Ana), que expresa la afirmación que Ana es mujer.


Si la aridad de un predicado es 2 o más, entonces este
predicado será utilizado para representar una relación
entre sus argumentos, como :

Mayor(Juan, Ana) para expresar una afirmación acerca


de Juan y Ana, por ejemplo la afirmación de que Juan es
más viejo que Ana.

de predicado con cualquier aridad. En LPO podemos


tener símbolos
Predicados con consecuentes
Una de las principales motivaciones en el LPO fue hacer
la relación de consecuencia lógica tan clara como sea
posible.

Evitando la complejidad y la ambigüedad del lenguaje


ordinario, esperamos que las consecuencias de nuestras
afirmaciones sean más fácilmente reconocibles.

Un argumento es cualquier serie de enunciados en el que


uno (llamado conclusión) se sigue o es apoyado por otros
(llamados premisas o consecuentes).
Bueno, después que ya descargaron desde la dirección e instalaron el SWI
Prolog en su versión para Windows. Ahora empecemos abriendo el
programa desde inicio, dando clic en el icono del búho.
En SWI Prolog se trabaja con el shell (caja o ventana) de SWI Prolog y con un
editor. Los editores puede ser un block de notas, así como un editor emacs, el
cual puede ser abierto desde el shell de SWI Prolog, escribiendo la sentencia:
? – emacs.
Al pulsar INTRO (ENTER) aparecerá el editor requerido, el cual
tiene el siguiente aspecto:
Es en este editor en donde colocaremos toda la base del conocimiento,
funciones, predicados, hechos, reglas, etc., que necesitaremos para hacer las
consultas que necesitemos.
En este editor emacs, los comentarios siguen después del carácter `%’.
Luego de que tengamos el editor emacs abierto, nos dirigimos a:
File – Save As, y al hacer clic se abrirá otra ventana.
Ahora en esta ventana nos aseguraremos de ponerle un nombre con la
extensión .pl, por ejemplo: ejempo.pl, y direccionarlo en cualquier
directorio en este caso por defecto en el disco C / administrador/mis
documentos / prolog / ejemplo.pl , Luego de esto, pulsar OK.
Luego de esto, pulsar OK, queda asi:
EJERCICIO 1.- Ahora, a manera de ejemplo, supongamos que
tenemos el siguiente árbol familiar:
En el shell de SWI Prolog, colocaremos el conocimiento, es decir, los
hechos, los cuales se deben escribir de la siguiente forma, que se
deduce del árbol genealógico que aparece en la fig):

esPapa(juan,fidel).
esPapa(juan,mario).
esPapa(fidel,julio).
esPapa(fidel,maria).
esPapa(mario,marcos)
esPapa(mario, pedro) .
esPapa(mario,luis).
esMama(lucy,luis).
esMama(lucy, marcos) .
esMama(susana, julio).
esMama(susana, maria).
Ahora procedemos a pegar el programa escrito
Ahora procedemos a guardar los cambios, para eso: File – Save Buffer.
Después que se procedió a guardar, ahora para realizar consultas,
previamente se tiene que compilar (cargado a memoria) todo lo que
hubiésemos puesto en el editor emacs.

Para compilar vamos al menú del editor emacs y hacemos clic


en Compile.

Si deseamos compilar todo el contenido elegimos la opción Compile


buffer.

Pero si solamente deseáramos compilar una parte, bastaría con que


seleccionemos el contenido a compilar, y luego vamos a: Compile –
Consult selection, como se muestra en la siguiente figura:
Después de compilar se abre la ventana mostrada que se acepta
Antes de continuar cerramos la ventana principal del Prolog.
Buscamos el archivo, por defecto guardado que se encuentra en:
c:/users/eduardo/Documents/Prolog/Ejemplo.pl y lo abrimos.
Ahora dirijámonos al shell para realizar algunas consultas. Primero deseo saber si
Juan es el papa de Fidel, para eso escribimos lo siguiente:
? – esPapa(juan,fidel). (Escribimos desde el teclado)
True (verdadero)

Inmediatamente se dispara un META (final) true que será la respuesta


Un META es una respuesta ante una consulta. Si necesitamos saber quienes
son los hijos de Susana, escribiremos: esMama(susana,X).
? – esMama(susana,X).
La respuesta sera
X = julio
Para continuar , vuelvo a hacer la pregunta anterior consultando por los
demás Papas con sus respectivos hijos. Sin olvidarnos de poner ( ; )
después del ultima respuesta.
EJERCICIO 2 Habrimos el swi prolog y seguimos los mismos pasos iníciales
dados en el ejemplo 1 .
Luego escribimos dentro de nuestra base del conocimiento, los siguientes
hechos y luego lo guardamos en file- save buffer
sucesor(1,2).
sucesor(2,3).
sucesor(3,4).
sucesor(4,5).
sucesor(5,6).
sucesor(6,7).
Ahora la ventana shell sale con error entonces podemos ir donde
esta el archivo guardado y desde ahí lo abrimos
C:\Documents and Settings\Administrador\Mis documentos\Prolog
Nótese como los átomos de información que se desean consultar han sido
reemplazados por variables (letra inicial en mayúscula); en este punto
Prolog busca dentro de su base del conocimiento un hecho que haga
emparejamiento con la información suministrada en la consulta.

Primero, busca una predicado (nombre de la relación) llamado sucesor,


luego hace una comparación entre la información que se tiene (6), para
llenar la variable X con la información almacenada en el hecho, así, prolog
responde X=5.
De la misma forma ocurre con la segunda consulta: sucesor(2,Y).

En la tercera consulta: sucesor(X,Y). no existe información para hacer


emparejamiento en la base del conocimiento, por lo tanto el no responderá.
Es también posible construir en prolog consultas complejas con los
operadores AND(,), OR(;) y NOT(not) de la siguiente forma:

EJERCICIO 3: Escriba las relaciones siguientes en la base del conocimiento en Prolog.

legusta(pepe,pesca).
legusta(maria,bailar).
legusta(ana,pesca).
legusta(pepe,musica).
legusta(maria,musica).
legusta(ana,bailar).
Ahora si la ventana de la figura sale con error como en la fig.

buscamos el archivo, por defecto guardado que se encuentra en:


C:\Documents and Settings\Administrador\Mis documentos\Prolog
hacemos doble click en el símbolo, se habre la ventana donde trabajaremos.
Se pueden realizar las siguientes preguntas sobre la base de información:
¿Le gusta la música a Pepe y AND(,) a Maria? : Entonces escribiremos

?- legusta(pepe,musica),legusta(maria,musica).

La respuesta sera true (verdadero)


Se pueden realizar la siguientes pregunta 2 sobre la base de información:

¿Le gusta bailar a Pepe o OR(;) a Maria le gusta la música?: Entonces


escribiremos

?-legusta(pepe,bailar);legusta(maria,musica).

La respuesta sera true (verdadero)


Se pueden realizar la siguiente pregunta 3 sobre la base de información:

¿Le gusta bailar a Pepe y a Maria no NOT(not) le gusta la música?:

?- legusta(pepe,musica),not(legusta(maria,musica)).
EJERCICIO 3 Habrimos el swi prolog y seguimos los mismos pasos
iníciales dados en el ejemplo 1 .
Luego escribimos dentro de nuestra base del conocimiento, los
siguientes hechos y luego lo guardamos.
EJERCICIO 4 Habrimos el swi prolog y seguimos los mismos pasos
iníciales dados en el ejemplo 1 .
PRACTICA 1:
Desarrollar su árbol familiar genealógico guiándose del ejercicio 1,
escribirlo en Hechos y formular 4 consultas en la ventana shell
utilizando swi prolog. Examen Parcial
ACTIVIDADES DE INVESTIGACIÓN SUGERIDAS

• Lea el tema correspondiente en el material DUED que se le


entregó.
• Realice los ejercicios dados .
• Resuelva la autoevaluación.
• Revise los siguientes enlaces
• http://cs.union.edu/~striegnk/courses/esslli04prolog/

• http://www.cs.bham.ac.uk/~pjh/prolog_course/se207.html
GRACIAS

Vous aimerez peut-être aussi