Вы находитесь на странице: 1из 15

INTELIGENCIA ARTIFICIAL

SISTEMA EXPERTO

UNIVERSIDAD AUTNOMA DE
CHIAPAS
FACULTAD DE CONTADURA Y ADMINISTRACIN
C-1
LICENCIATURA EN SISTEMAS
COMPUTACIONALES

DOCENTE:
GONZALEZ SCARPULLI DANIEL.
MATERIA:
INTELIGENCIA ARTIFICIAL.
TRABAJO:
SISTEMA EXPERTO.

ALUMNO:
JULIO CESAR SANCHEZ SOLANO-A121109.
7 SEMESTRE GRUPO B

INTELIGENCIA ARTIFICIAL
SISTEMA EXPERTO

TUXTLA GUTIERREZ, CHIAPAS


A 26 DE MARZO DE
2015.
_______________________________________Prctica No. 7
________________________________Un sistema experto en
Prolog.
Introduccin
Qu es un sistema experto?
Los sistemas expertos forman parte de un firme y verdadero avance en la inteligencia artificial simblica.
Es el ejemplo ms exitoso de un Sistema Basado en Conocimiento. Los sistemas expertos pueden
incorporar el expertise de algn experto humano de un campo especfico en forma de miles de reglas.
Para una persona sera una experiencia casi "traumtica" el realizar una bsqueda de reglas posibles al
completado de un problema y concordar estas con las posibles consecuencias, mientras que se sigue en un
papel los trazos de un rbol de bsqueda. Los sistemas expertos realizan amablemente esta tarea; mientras
que la persona
responde a las preguntas formuladas por el sistema experto, este busca recorriendo las ramas ms
interesantes del rbol, hasta dar con la respuesta afn al problema, o en su falta, la ms parecida a esta. Los
sistemas expertos tienen la ventaja frente a otro tipos de programas de Inteligencia Artificial, de
proporcionar gran flexibilidad a la hora de incorporar nuevos conocimientos. Para ello solo tenemos que
introducir la nueva regla que deseemos hacer constar y ya est, sin necesidad de cambiar el funcionamiento
propio del programa. Los sistemas expertos son "auto explicativos", al contrario que en los programas
convencionales, en los que
el conocimiento como tal est encriptado junto al propio programa en forma de lenguaje de ordenador.
Los expertos de I.A. dicen que los sistemas expertos tienen un conocimiento declarativo, mientras que los
dems programas tienen un conocimiento procedural.
Prolog puede ser visto como un lenguaje prescriptivo dado que un programa en Prolog consiste de un
conjunto de clasulas, donde cada clasula es, o un hecho o una regla acerca de como puede inferirse
alguna solucin para los hechos dados. Adems, Prolog tiene implementada cierta inteligencia para
resolver el problema (esta inteligencia es un mecanismo de razonamiento automtico llamado motor de
inferencia basado en un algoritmo que se conoce como resolucin). Estas caractersticas de Prolog hace
que sea relativamente sencillo desarrollar un pequeo sistema experto en este lenguaje. El sistema experto
que usaremos en esta prctica consta de 2 partes: Un shell del sistema experto, que se encarga de
interactuar con el usuario y manipular la Base de Conocimientos del sistema y una base de conocimientos,
con reglas
del tipo: (situacin1, [condicion1, condicion2, ..., condicionN]). Este sistema experto puede justificar
su diagnstico y explicar porqu hace ciertas preguntas.
Actividades
1.- Captura el shell del sistema experto y guarda el archivo con el nombre experto.pl
/*

Sistema Experto: experto.pl


Trata los sintomas como una lista. La cabeza es el diagnostico y la cola
son los sintomas.

INTELIGENCIA ARTIFICIAL
SISTEMA EXPERTO
Utiliza assert/1 para cambiar dinamicamente la base de
conocimientos. Determina la verdad y falsedad de los sintomas
conocidos.
Puede contestar a las preguntas 'porque' e incluye capacidad de
explicacion. Elimina dinamicamente las aseveraciones agregadas despues de
cada consulta.

*/
:- dynamic
conocido/1.
consulta:haz_diagnostico(X),
escribe_diagnostico(X),
ofrece_explicacion_diagnostico(X)
, clean_scratchpad.
consulta:write('No hay suficiente conocimiento para elaborar un
diagnostico.'), clean_scratchpad.
haz_diagnostico(Diagnosis):obten_hipotesis_y_sintomas(Diagnosis, ListaDeSintomas),

INTELIGENCIA ARTIFICIAL
SISTEMA EXPERTO
prueba_presencia_de(Diagnosis,
ListaDeSintomas).
obten_hipotesis_y_sintomas(Diagnosis,
ListaDeSintomas):- conocimiento(Diagnosis,
ListaDeSintomas).
prueba_presencia_de(Diagnosis, []).
prueba_presencia_de(Diagnosis, [Head | Tail]):- prueba_verdad_de(Diagnosis,
Head), prueba_presencia_de(Diagnosis, Tail).
prueba_verdad_de(Diagnosis, Sintoma):- conocido(Sintoma).
prueba_verdad_de(Diagnosis, Sintoma):not(conocido(is_false(Sintoma))),
pregunta_sobre(Diagnosis, Sintoma, Reply), Reply = si.
pregunta_sobre(Diagnosis, Sintoma, Reply):- write('Es verdad que
'), write(Sintoma), write('? '),
read(Respuesta), process(Diagnosis, Sintoma, Respuesta, Reply).
process(Diagnosis, Sintoma, si, si):- asserta(conocido(Sintoma)).
process(Diagnosis, Sintoma, no, no):asserta(conocido(is_false(Sintoma))). process(Diagnosis, Sintoma, porque,
Reply):- nl,
write('Estoy investigando la hipotesis siguiente: '),
write(Diagnosis), write('.'), nl, write('Para esto necesito saber si '),
write(Sintoma), write('.'), nl, pregunta_sobre(Diagnosis, Sintoma,
Reply).
process(Diagnosis, Sintoma, Respuesta, Reply):- Respuesta \==
no, Respuesta \== si, Respuesta \== porque, nl,
write('Debes contestar si, no o porque.'),
nl, pregunta_sobre(Diagnosis, Sintoma,
Reply).
escribe_diagnostico(Diagnosis):- write('El diagnostico es
'), write(Diagnosis), write('.'), nl.
ofrece_explicacion_diagnostico(Diagnosis):pregunta_si_necesita_explicacion(Respuesta),
actua_consecuentemente(Diagnosis,
Respuesta).
pregunta_si_necesita_explicacion(Respuesta):write('Quieres que justifique este diagnostico? '),
read(RespuestaUsuario),
asegura_respuesta_si_o_no(RespuestaUsuario,
Respuesta).
asegura_respuesta_si_o_no(si,
si).
asegura_respuesta_si_o_no(no,
no).
asegura_respuesta_si_o_no(_, Respuesta):- write('Debes contestar si o
no.'), pregunta_si_necesita_explicacion(Respuesta).
actua_consecuentemente(Diagnosis, no).
actua_consecuentemente(Diagnosis, si):- conocimiento(Diagnosis,
ListaDeSintomas), write('Se determino este diagnostico porque se
encontraron los siguentes

INTELIGENCIA ARTIFICIAL
SISTEMA EXPERTO
sintomas: '), nl,
escribe_lista_de_sintomas(ListaDeSintomas)
.
escribe_lista_de_sintomas([]).
escribe_lista_de_sintomas([Head |
Tail]):write(Head), nl, escribe_lista_de_sintomas(Tail).
clean_scratchpad:- retract(conocido(X)),
fail. clean_scratchpad.
conocido(_):- fail.
not(X):- X,!,fail.
not(_).

INTELIGENCIA ARTIFICIAL
SISTEMA EXPERTO

2.- Para poder utilizar este shell debemos definir una base de conocimientos. Vamos a definir la primera
base de conocimientos para un sistema de diagnstico mdico. Captura las siguientes reglas y salva el
archivo con el nombre BaseConocimientos1.pl:
/*
BaseConocimientos1:
diagnosticos
y
sintomas
Dominio: diagnostico medico. Trata los sintomas como una lista multi-elementos
*/
conocimiento('sarampion',
['el paciente esta cubierto de puntos', 'el paciente tiene temperatura alta',
'el paciente tiene ojos rojos','el paciente tiene tos seca']).
conocimiento('influenza',
['el paciente tiene dolor en las articulaciones', 'el paciente tiene
mucho estornudo','el paciente tiene dolor de cabeza']).
conocimiento('malaria',
['el paciente tiene temperatura alta','el paciente tiene dolor en
las articulaciones', 'el paciente tiembla violentamente', 'el paciente
tiene escalofrios']).
conocimiento('gripe',
['el paciente tiene cuerpo cortado', 'el paciente tiene dolor de cabeza',
'el paciente tiene temparatura alta']).
conocimiento('tifoidea',
['el paciente tiene falta de apetito', 'el paciente tiene temperatura alta',
'el paciente tiene dolor abdominal', 'el paciente tiene dolor de cabeza', 'el
paciente tiene diarrea']).

3.- Para poder utilizar el sistema experto con esta base de conocimientos, dentro de Prolog debemos teclear:
consult('experto.pl').
consult('BaseConocimientos1.pl')
.

3.1.- Para poder determinar una enfermedad, se teclea consulta.<enter> y se contestan las preguntas
que va haciendo el sistema. En cualquier momento se puede constestar con un porque en lugar de si o
no. Entonces el sistema explicar cul es el diagnstico que trata de probar. Al proporcionar un
diagnstico, el sistema preguntar si se quiere una justificacin para su diagnstico. Si se contesta
afirmativamente el sistema mostrar los hechos que lo llevaron al diagnstico presentado.
3.2.- Usando el sistema experto, trata de determinar las enfermedad de las personas que cursan los
siguientes sintomas:

i) temperatura alta, dolor de cabeza y cuerpo cortado.


Diagnostico: gripe.
Justificacin: Se determino este diagnostico porque se encontraron los siguentes sintomas: el paciente tiene el cuerpo
cortado, el paciente tiene dolor de cabeza y el paciente tiene temparatura alta.
ii)dolor en las articulaciones, temblor violento y escalofrios.
Diagnostico: no existe.
Justificacin: no hay suficente conocimiento para elaborar el diagnostico.
iii)dolor de cabeza, estornudos y dolor en las articulaciones
Diagnostico: influenza.

INTELIGENCIA ARTIFICIAL
SISTEMA EXPERTO
Justificacin: Se determino este diagnostico porque se encontraron los siguentes sintomas: el paciente tiene dolor en las
articulaciones, el paciente tiene mucho estornudo y el paciente tiene dolor de cabeza.

INTELIGENCIA ARTIFICIAL
SISTEMA EXPERTO

4.- Considera la siguiente base de conocimientos para un sistema de diagnstico automotriz:


Diagnstico: Banda del alternador defectuosa
Sntomas: Tiene grietas, est cristalizada, y esta floje.
Diagnstico: Banda del alternado defectuosa
Sntomas: La banda est engrasada y rechina al girar.
Diagnstico: Bateria defectuosa
Sintmas: Luces y ventilador encendidos y Motor apagado y Voltaje de bateria menor a 10.5Volts.
Diagnstico: Regulador defectuoso
Sintmas: Si motor en marcha y luces encendidas y se intensifican al acelerar.
Diagnstico: Alternador defectuoso
Sintmas: Si la batera esta en buenas condiciones y luz de advertencia permanece encendida y motor
de arranque gira lentamente.
Diagnstico: Sistema de frenos defectuoso
Sintmas: Pedal del freno duro y al frenar se produce un tirn lateral y ruedas rechinan al frenar.
4.1.- Representa esta base de conocimientos en Prolog y captralos en un archivo llamado
BaseConocimientos2.pl
Base capturada: OK
4.2.- Desde SWI-Prolog, ahora consulta la BaseConocimientos2.pl Base cargada en Prolog: OK
4.3.- Realiza 4 consultas al sistema de diagnstico automotriz, reporta las consultas que hiciste y el
resutlado de la consulta.
Consulta 1: Es verdad que Tiene grietas? si. Es verdad que est cristalizada? si. Es verdad que esta
floja? si.
Diagnstico 1: Banda del alternador defectuosa
Consulta 2: Es verdad que Tiene grietas? no. Es verdad que La banda est engrasada? si. Es verdad que
rechina al girar? no. Es verdad que Las Luces y ventilador estan encendidos? si. Es verdad que El Motor
esta apagado? si. Es verdad que El Voltaje de la bateria es menor a 10.5Volts? no. Es verdad que el motor
esta en marcha? si. Es verdad que tiene las luces encendidas? si. Es verdad que se intensifican al acelerar?
si.
Diagnstico 2: Regulador defectuoso
Consulta 3: Es verdad que Tiene grietas? no. Es verdad que La banda est engrasada? no. Es verdad que
Las Luces y ventilador estan encendidos? si. Es verdad que El Motor esta apagado? si. Es verdad que El
Voltaje de la bateria es menor a 10.5Volts? si.
Diagnstico 3: Bateria defectuosa
Consulta 4: Es verdad que Tiene grietas? no. Es verdad que La banda est engrasada? no. Es verdad que
Las Luces y ventilador estan encendidos? no. Es verdad que el motor esta en marcha? si. Es verdad que
tiene las luces encendidas? no. Es verdad que la batera esta en buenas condiciones? si. Es verdad que la
luz de advertencia permanece encendida? si. Es verdad que el motor de arranque gira lentamente? si

INTELIGENCIA ARTIFICIAL
SISTEMA EXPERTO

Diagnstico 4: Alternador defectuoso

INTELIGENCIA ARTIFICIAL
SISTEMA EXPERTO

5.- Considera ahora la siguiente base de conocimientos para un sistema experto que ayuda a
identificar animales:
Diagnstico: cheeta
Sintmas: Si es mamifero, carnivoro, tiene color leonado y puntos negros.
Diagnstico: tigre
Sintmas: Si es mamifero, es carnivoro, tiene color leonado y tiene rayas negras.
Diagnstico: jirafa
Sintmas: Si en ungulado, tiene cuellos largo y piernas largas.
Diagnstico: zebra
Sintmas: Si es ungulado y tiene rayas negras.
Diagnstico: aveztruz
Sintmas: Si es un pjaro, no vuela y tiene cuello largo,
Diagnstico: pingino
Sintmas: Es un pjaro, no vuela, sabe nadar y es blanco con negro.
Diagnstico: albatros
Sintmas: Es un pjaro, aparece en historias marinas y vuela bien.
5.1.- Representa esta base de conocimientos en Prolog y captralos en un archivo llamado
BaseConocimientos3.pl
Base capturada: OK
5.2.- Desde SWI-Prolog, ahora consulta la BaseConocimientos3.pl Base cargada en Prolog: OK
5.3.- Realiza 4 consultas al sistema de identificacin de animales, reporta las consultas que hiciste y
el resutlado de la consulta.
Consulta 1: Es verdad que es mamifero? si. Es verdad que es carnivoro? si. Es verdad que tiene color
leonado? si. Es verdad que tiene puntos negros? si.
Diagnstico 1: cheeta.
Consulta 2: Es verdad que es mamifero? no. Es verdad que es ungulado? si. Es verdad que tiene cuellos
largo? si. Es verdad que tiene piernas largas? no. Es verdad que tiene rayas negras? si.
Diagnstico 2: zebra.
Consulta 3: Es verdad que es mamifero? no. Es verdad que es ungulado? no. Es verdad que es un pjaro?
si. Es verdad que no vuela? no. Es verdad que es un pjaro? si. Es verdad que aparece en historias marinas?
si. Es verdad que vuela bien? si.
Diagnstico 3: albatros.
Consulta 4: Es verdad que es mamifero? no. Es verdad que es ungulado? no. Es verdad que es un pjaro? si.
Es verdad que no vuela? si. Es verdad que tiene cuello largo? no. Es verdad que sabe nadar? si. Es verdad
que es blanco con negro? si.
Diagnstico 4: pingino.

INTELIGENCIA ARTIFICIAL
SISTEMA EXPERTO

6.- Comentarios y conclusiones.


En este trabajo determinamos el uso de las conocimientos de la base 1. Implemente la
interraciones entre el expert y dado sus sintomas dio un efectivo diagnostic nuestra
consulta.

11

INTELIGENCIA ARTIFICIAL
SISTEMA EXPERTO

7.- Codigo Fuente de experto animal y las Bases de conocimientos 1,2 y 3.


/* Sistema Experto: expertoanimal.pl
Trata los sintomas como una lista. La cabeza es el diagnostico y la cola son las
caracteristicas.
Utiliza assert/1 para cambiar dinamicamente la base de conocimientos. Determina la
verdad y falsedad de las caracteristicas conocidos.
Puede contestar a las preguntas 'porque' e incluye capacidad de explicacion. Elimina
dinamicamente las aseveraciones agregadas despues de cada consulta.
*/
:- dynamic conocido/1.
consulta:haz_diagnostico(X),
escribe_diagnostico(X),
ofrece_explicacion_diagnostico(X),
clean_scratchpad.
consulta:write('No hay suficiente conocimiento para elaborar un diagnostico.'),
clean_scratchpad.
haz_diagnostico(Diagnosis):obten_hipotesis_y_sintomas(Diagnosis, ListaDeSintomas),
prueba_presencia_de(Diagnosis, ListaDeSintomas).
obten_hipotesis_y_sintomas(Diagnosis, ListaDeSintomas):conocimiento(Diagnosis, ListaDeSintomas).
prueba_presencia_de(Diagnosis, []).
prueba_presencia_de(Diagnosis, [Head | Tail]):- prueba_verdad_de(Diagnosis, Head),
prueba_presencia_de(Diagnosis, Tail).
prueba_verdad_de(Diagnosis, Sintoma):- conocido(Sintoma).
prueba_verdad_de(Diagnosis, Sintoma):- not(conocido(is_false(Sintoma))),
pregunta_sobre(Diagnosis, Sintoma, Reply), Reply = si.
pregunta_sobre(Diagnosis, Sintoma, Reply):- write('Es verdad que '),
write(Sintoma), write('? '),
read(Respuesta), process(Diagnosis, Sintoma, Respuesta, Reply).

12

INTELIGENCIA ARTIFICIAL
SISTEMA EXPERTO

process(Diagnosis, Sintoma, si, si):- asserta(conocido(Sintoma)).


process(Diagnosis, Sintoma, no, no):- asserta(conocido(is_false(Sintoma))).
process(Diagnosis, Sintoma, porque, Reply):- nl,
write('Estoy investigando la hipotesis siguiente: '),
write(Diagnosis), write('.'), nl, write('Para esto necesito saber si '),
write(Sintoma), write('.'), nl, pregunta_sobre(Diagnosis, Sintoma, Reply).
process(Diagnosis, Sintoma, Respuesta, Reply):- Respuesta \== no,
Respuesta \== si, Respuesta \== porque, nl,
write('Debes contestar si, no o porque.'), nl,
pregunta_sobre(Diagnosis, Sintoma, Reply).
escribe_diagnostico(Diagnosis):- write('El diagnostico es '),
write(Diagnosis), write('.'), nl.
ofrece_explicacion_diagnostico(Diagnosis):pregunta_si_necesita_explicacion(Respuesta),
actua_consecuentemente(Diagnosis, Respuesta).
pregunta_si_necesita_explicacion(Respuesta):write('Quieres que justifique este diagnostico? '),
read(RespuestaUsuario),
asegura_respuesta_si_o_no(RespuestaUsuario, Respuesta).
asegura_respuesta_si_o_no(si, si).
asegura_respuesta_si_o_no(no, no).
asegura_respuesta_si_o_no(_, Respuesta):- write('Debes contestar si o no.'),
pregunta_si_necesita_explicacion(Respuesta).
actua_consecuentemente(Diagnosis, no).
actua_consecuentemente(Diagnosis, si):- conocimiento(Diagnosis, ListaDeSintomas),
write('Se determino este diagnostico porque se encontraron las siguentes
caracteristicas: '), nl,
escribe_lista_de_sintomas(ListaDeSintomas).
escribe_lista_de_sintomas([]).
escribe_lista_de_sintomas([Head | Tail]):write(Head), nl, escribe_lista_de_sintomas(Tail).
clean_scratchpad:- retract(conocido(X)), fail.
clean_scratchpad.
conocido(_):- fail.
13

INTELIGENCIA ARTIFICIAL
SISTEMA EXPERTO

not(X):- X,!,fail.
not(_).
/* BaseConocimientos1: diagnosticos y sintomas
Dominio: diagnostico medico. Trata los sintomas como una lista multi-elementos
*/
conocimiento('sarampion',
['el paciente esta cubierto de puntos', 'el paciente tiene temperatura alta',
'el paciente tiene ojos rojos','el paciente tiene tos seca']).
conocimiento('influenza',
['el paciente tiene dolor en las articulaciones', 'el paciente tiene mucho
estornudo','el paciente tiene dolor de cabeza']).
conocimiento('malaria',
['el paciente tiene temperatura alta','el paciente tiene dolor en las
articulaciones', 'el paciente tiembla violentamente', 'el paciente tiene
escalofrios']).
conocimiento('gripe',
['el paciente tiene cuerpo cortado', 'el paciente tiene dolor de cabeza', 'el
paciente tiene temparatura alta']).
conocimiento('tifoidea',
['el paciente tiene falta de apetito', 'el paciente tiene temperatura alta', 'el
paciente tiene dolor abdominal', 'el paciente tiene dolor de cabeza', 'el paciente
tiene diarrea']).
---------------------------------------------------------------------------------------------------------/* BaseConocimientos2: diagnosticos y sintomas
Dominio: diagnostico automotriz. Trata los sintomas como una lista multielementos
*/
conocimiento('Banda del alternador defectuosa',
['Tiene grietas', 'est cristalizada',
'esta floja']).
conocimiento('Banda del alternado defectuosa',
['La banda est engrasada', 'rechina al girar']).
conocimiento('Bateria defectuosa',
['Las Luces y ventilador estan encendidos','El Motor esta apagado', 'El Voltaje
de la bateria es menor a 10.5Volts']).
14

INTELIGENCIA ARTIFICIAL
SISTEMA EXPERTO

conocimiento('Regulador defectuoso',
['el motor esta en marcha', 'tiene las luces encendidas', 'se intensifican al
acelerar']).
conocimiento('Alternador defectuoso',
['la batera esta en buenas condiciones', 'la luz de advertencia permanece
encendida', 'el motor de arranque gira lentamente']).
conocimiento('Sistema de frenos defectuoso',
['el Pedal del freno esta duro', 'al frenar se produce un tirn lateral', 'las ruedas
rechinan al frenar']).
------------------------------------------------------------------------------------------------------------/* BaseConocimientos3: diagnosticos y caracteristicas
Dominio: diagnostico animales. Trata las caracteristicas como una lista multielementos
*/
conocimiento('cheeta',
['es mamifero', 'es carnivoro',
'tiene color leonado', 'tiene puntos negros']).
conocimiento('tigre',
['es mamifero', 'es carnivoro', 'tiene color leonado', 'tiene rayas negras']).
conocimiento('jirafa',
['es ungulado','tiene cuellos largo', 'tiene piernas largas']).
conocimiento('zebra',
['es ungulado', 'tiene rayas negras']).
conocimiento('aveztruz',
['es un pjaro', 'no vuela', 'tiene cuello largo']).
conocimiento('pingino',
['es un pjaro', 'no vuela', 'sabe nadar', 'es blanco con negro']).
conocimiento('albatros',
['es un pjaro', 'aparece en historias marinas', 'vuela bien']).

15

Вам также может понравиться