Está en la página 1de 37

Sistemas Expertos

Eduardo Ramírez Benavides


Universidad de Chiclayo

Primera Unidad
1. Primera Semana:
1.1inteligencia artificial:
1.1.1 Historia de Inteligencia Artificial:
Se podría situar los orígenes de la inteligencia artificial con la definición de la
neurona formal dada por McCulloch y Pitts [1943], como un dispositivo binario
con varias entradas y salidas.

Ya en el año de 1956 se volvió a tocar el tema de inteligencia artificial (IA) en el


instituto de tecnología de Massachussets por John McCarthy donde se celebró
la conferencia de Dartmouth en Hanover (Estados Unidos). En este certamen
McCarthy, Marvin Minsky, Nathaniel Rochester y Claude E. Shannon
establecieron las bases de la inteligencia artificial como un campo
independiente dentro de la informática.

Previamente, en 1950, Alan M. Turing había publicado un artículo en la revista


Mind, titulado “Computing Machinery and Intelligence” (“Ordenador e
inteligencia”), en el que reflexionaba sobre el concepto de inteligencia artificial
y establecía lo que luego se conocería como el Test de Turing, una prueba que
permite determinar si un ordenador o computadora se comporta conforme a lo
que se entiende como artificialmente inteligente o no.

La inteligencia artificial en los años sesentas, como tal no tuvo muchos éxitos ya
que requería demasiada inversión para ese tiempo y la mayoría de tecnologías
eran propias de grandes centros de investigación. En los años 70’s a 80’s se
lograron algunos avances significativos en una de sus ramas llamada Sistemas
Expertos, con la introducción de PROLOG LISP.

Básicamente lo que pretende la inteligencia artificial es crear una máquina


secuencial programada que repita indefinidamente un conjunto de
instrucciones generadas por un ser humano.

1.2 Sistemas Expertos(campos de aplicación, s.e. desarrollados, clases de


1.2.1

Los sistemas expertos funcionan de manera que almacenan


conocimientos concretos para un campo determinado y solucionan los
problemas, utilizando esos conocimientos, mediante deducción lógica de
conclusiones. Con ellos se busca una mejora en calidad y rapidez de
respuestas dando así lugar a una mejora de la productividad del experto.

1
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

Los sistemas expertos pueden estar basados en reglas, es decir,


disponen de unos conocimientos predefinidos que se utilizan para tomar
todas las decisiones (aplicando heurística), o basados en casos (CBR, Case
Based Reasoning), aplicando el razonamiento basado en casos, donde la
solución a un problema similar planteado con anterioridad se adapta a un
nuevo problema.
1 Campos De Aplicación:

 Monitoreo

La monitorización consiste en la obtención de información del entorno donde se


implementa para un posterior análisis e interpretación de los resultados.
Este análisis se realiza a través de la comparación continua de los valores de
entrada obtenidos con los valores fijados como estándar.
Es en la interpretación y diagnóstico de los datos donde un Sistema Experto puede
contribuir de forma sustancial a obtener conclusiones, determinar el estado de
funcionamiento de sistemas complejos, anticiparse a posibles incidencias e
incrementar el rendimiento del proceso.

 Diseño

Existen dos variantes del diseño donde puede actuar un Sistema Experto:
Diseño en ingeniería: basado en criterios técnicos y científicos, busca la
optimización económica e incrementar la eficiencia. Diseño industrial: responsable
de rectificar las omisiones del diseño en ingeniería.
En ambos casos, los Sistemas Expertos actúan con el objetivo de encontrar la
solución óptima al propósito marcado.

 Planificación

Se entiende como planificación al proceso de toma de decisiones para alcanzar una


meta deseada, considerando la situación del momento y los factores internos y
externos que pueden influir en la obtención de los objetivos.
Los Sistemas Expertos basados en la planificación consisten en un simulador y un
sistema de control, teniendo como objetivo final la ordenación de una serie de
acciones.

 Control

La complejidad de los sistemas de control (formados por una serie de tareas de


interpretación, diagnóstico y reparación) radica en el gran número de funciones
que debe operar, así como el elevado número de factores a considerar, motivos
suficientes como para implementar un Sistema Experto.

2
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

 Simulación

Se entiende como simulación aquel proceso encargado de generar modelos


basados en hechos, observaciones e interpretaciones, con el objetivo de analizar
su comportamiento, observando las correspondientes salidas para una serie de
entradas.
Debido a la necesidad de generar complejos modelos matemáticos y lógicos, y a la
facilidad de simulación del razonamiento por parte de los Sistemas Expertos,
resulta idóneo el uso de un SE para las simulaciones.

 Instrucción

En aquellas circunstancias donde se requiera realizar un seguimiento del proceso


de aprendizaje, un Sistema Experto tiene la capacidad de detectar errores e
identificar la solución más apropiada, desarrollando un plan de enseñanza para al
usuario que le facilita su propio proceso de aprendizaje, así como su
correspondiente corrección de errores.

 Recuperación de información

El potencial de implementación de los Sistemas Expertos en un sistema de estas


características radica en su capacidad de recuperación de información no explícita
a través del razonamiento con los elementos definidos. Sin un SE tan solo se puede
recuperar lo que existe explícitamente.
Su capacidad se extiende a la asistencia al trabajo del propio usuario a través de
mensajes inteligentes.

2 Sistemas Expertos Desarrollados:

 DENDRAL: Es capaz de calcular o descubrir hechos relativos a las


estructuras moleculares a partir de unos datos químicos sin elaborar.
 MYCIN: el más famoso de todos, diagnostica infecciones en la sangre y
meningitis y además sugiere el tratamiento que se debe seguir en cada
caso.
 PUFF: el hermano menor de MYCIN, que diagnostica y trata
enfermedades del pulmón.
 MOLGENO: ayuda a los biólogos que trabajan en el campo del DNA y la
ingeniería genética.
 PROGRAMMERS APPRENTICE: Se trata de un sistema que ayuda a la
escritura de programas.
 EURISKO: Sistema experto capaz de aprender a medida que funciona,
que crea circuitos microelectricos tridimensionales.
 GENESIS: Permite a los científicos planificar y simular experimentos en
el campo de la unión de genes.

3
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

 EXPERT SYSTEMAS TO COMBAT INETRNATIONAL TERRORRISM: ayuda


a los expertos a la escritura de programas.

3 Clases De Sistemas Expertos:

 BASADOS EN REGLAS:
 BASADOS EN CASOS CBR (Case Based Reasoning):
 BASADOS EN REDES :

1.3 sistema de desarrollo de software visual prolog.


1.3.1 VISUAL PROLOG:

Es un completo sistema de desarrollo de software que incluye un compilador y un


entorno de desarrollo integrado (IDE) para el lenguaje de programación PROLOG,
desarrollado por Borland, dentro de la familia de productos Turbo (Turbo C, Turbo
Pascal, Turbo Assembler, Turbo Basic, etc.).

1 Estructura del programa:

4
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

2 Objetos:

son archivos que tu generas, y estos archivos son realizados para que la
computadora pues "tomar decisiones" en base a las condiciones previas que le
introduces... se basan en los conceptos de unificación y backtracking (deshacer o
regresar) y en base a estos conceptos y las condiciones toma la decisión más
lógica . Se conocen como programas de desición lógica

3 Dominios y Predicados:

Sección de dominios

En la sección DOMAINS se pueden definir dominios no especificados por defecto


por Visual Prolog. Por ejemplo, el dominio integer es estándar para el compilador,
no así el dominio sinónimo ENTERO o dominios complejos. En estos últimos casos,
el programador debe definirlo en esta sección.

Cada sección de dominios debe comenzar con la palabra DOMAINS. Ejemplo:

DOMAINS

ENTERO = INTEGER

Es posible usar 5 formatos de declaraciones para dominios definidos por el


usuario.

Dominios de Objetos Compuestos

El formato es como sigue:

Dominio = [reference] [align {byte|word|dword}] declaracion1; [declaracion2];...

 dominio: nombre dado al dominio especificado por el usuario.


 declaracion1; [declaracion2]: declaración de objetos compuestos
alternativos que tienen que tener la forma siguiente: functor([sub_1 [,
sub_2, ...] ]) donde
functor es el nombre del objeto compuesto alternativo.
sub_1 [, sub_2, ...] son subcomponentes del objeto compuesto que deben
tener su correspondiente nombre y dominio. Este último puede ser
estándar o definido por el usuario.
 reference: indica la declaración de un dominio de referencia. En este tipo
de dominios los argumentos de entrada pueden ser variables libres.
 align: indica el tipo de distribución de memoria que se va a usar.

5
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

Ejemplo:

DOMAINS

LECTOR = lee(SYMBOL Nombre, LECTURA Item)

LECTURA = libro(SYMBOL Autor, SYMBOL Titulo, SYMBOL Editorial);

revista (SYMBOL Titulo, INTEGER Numero)

Los nombres colocados al lado de cada dominio en los subcomponentes de la


definición de los dominios del ejemplo son opcionales y pueden omitirse, ya que
sólo sirven para aumentar la legibilidad del programa.

El símbolo ";" indica que el dominio LECTURA puede referirse tanto a libros como
a revistas, es decir, tanto los objetos libros como los objetos revistas pertenecen al
dominio LECTURA.

El siguiente programa lista lo que cada lector lee en las


variables X e Y respectivamente.

DOMAINS

LECTOR = lee(SYMBOL Nombre, LECTURA Item)

LECTURA = libro(SYMBOL Autor, SYMBOL Titulo, SYMBOL Editorial);

revista (SYMBOL Titulo, INTEGER Numero)

PREDICATES

lectores(LECTOR)

CLAUSES

lectores(lee(antonio, libro(cervantes, quijote, anaya))).

lectores(lee(pepe, revista(hola, 22))).

lectores(lee(juan, libro(delphi4, alvarez, anaya))).

GOAL

lectores(lee(X,Y)).

6
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

El resultado obtenido tras la ejecución del objetivo propuesto en la sección de


metas es:

X=antonio, Y=libro("cervantes","quijote","anaya")

X=pepe, Y=revista("hola",22)

X=juan, Y=libro("delphi4","alvarez","anaya")

Dominios de Objetos Compuestos Functorless

En estos dominios podemos definir tipos de objetos que sólo se pueden comportar
como una única clase de objetos. Mientras que en el caso anterior un determinado
dominio podía definir un objeto u otro, en el caso de dominios de
objetos Functorless dicho dominio sólo puede definir un objeto compuesto. La
sintaxis de este tipo de dominios es similar a la anterior salvo porque es necesario
especificar la palabra struct y no puede haber más de una definición de objeto por
dominio.

dominio = struct [align {byte|word|dword}] declaracion

Con este tipo de declaración los objetos utilizado mantienen una sintaxis muy
parecida a la de C.

Ejemplo:

DOMAINS

ESCULT = struct escultura (INTEGER ns, SYMBOL autor, SYMBOL material)

PINTURA = struct cuadro (INTEGER ns, SYMBOL autor, SYMBOL tecnica)

Sinónimos de Dominios Estándar

En ocasiones, puede ser útil definir sinónimos de dominios que son estándar, para
una mayor legibilidad del programa, por ejemplo. Así pues en la siguiente
declaración:

DOMAINS

ENTERO = integer

ESCULT = struct escultura (ENTERO ns, SYMBOL autor, SYMBOL material)

PINTURA = struct cuadro (ENTERO ns, SYMBOL autor, SYMBOL tecnica)

7
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

Dominios tipo Lista

Las listas son estructuras comunes de datos en Prolog consideradas como una
forma de objeto compuesto. Son secuencias de elementos generalmente
homogéneos. Sin embargo, en Visual Prolog es fácil crear listas heterogéneas
mediante el uso eficaz de declaración de dominios.

La sintaxis para crear una lista de objetos es del modo:

dominiolista = dominiocomponentes*

Si dominiocomponentes define varios objetos distintos, la lista definida será


heterogénea o polimórfica.

Veamos varios ejemplos de listas homogéneas:

DOMAINS

listaenteros = integer* /* Lista de enteros */

listacaracteres = char* /* Lista de caracteres */

listacuadros = cuadro* /* Lista de estructuras del dominio cuadro */

Veamos ahora un ejemplo de lista polimórfica que puede almacenar tanto


estructuras tipo cuadro como estructuras tipo escultura:

DOMAINS

objetos = escultura (ENTERO ns, SYMBOL autor, SYMBOL material);

cuadro (ENTERO ns, SYMBOL autor, SYMBOL tecnica)

/* Los objetos pueden ser esculturas o cuadros */

listapolim = objetos* /* Esto es una lista de objetos */

Dominios tipo Predicado

Un dominio predicado (dominio puntero a predicado), permite la declaración de


un grupo o una clase de predicados. La sintaxis es como sigue:

PredicadoDom = TipoPredicado [Retorno] (ListaArg) [- [[TipoPredicado] patron]]


[lenguaje]

8
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

donde:

 PredicadoDom es el nombre del dominio.


 TipoPredicado es de la forma {procedure | determ | nondeterm | failure |
erroneous | multi}, estos son los tipos de predicados que pueden existir.
 Retorno es el dominio al que pertenecen los datos de retorno cuando el
predicado es una función.
 ListaArg es la lista de argumentos del predicado que son objetos con sus
correspondientes dominios.
 patron (de flujo) define como se van a usar los argumentos, si son de entrada
(i), o de salida (o), o de entrada-salida (i|o).
 lenguaje define el tipo de lenguaje que ha sido usado para definir un tipo de
predicado. Puede ser: language{ asm | c | pascal | prolog | stdcall | syscall }.

Ejemplo:

DOMAINS

par = pares (INTEGER, INTEGER)

listapares = par*

listaenteros = integer*

unaria = determ INTEGER (INTEGER) - (i)

PREDICATES

predicadosuma(par, INTEGER)

cubo: unaria

cuadrado: unaria

operacion(listapares, unaria, listaenteros)

CLAUSES

cubo(E, ECubo):- ECubo=E*E*E.

cuadrado(E, ECuadrado):- ECuadrado=E*E.

predicadosuma(pares(E1, E2), Suma):- Suma=E1+E2.

/*---*/

operacion([],_,[]).

operacion([X|Y], OperacionUnaria, LRes):- predicadosuma(X, S),

9
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

Vamos a explicar detalladamente cómo funciona el ejemplo propuesto para


ilustrar el uso de la sección DOMAINS.

El predicado principal se denomina operacion y admite como argumentos una lista


de predicados del dominio listapares, un predicado del dominio OperacionUnaria y
una lista de enteros. Es interesante notar que en Visual Prolog podemos pasar como
argumentos de nuestros predicados, no sólo datos y objetos compuestos sino
también predicados y funciones que realizan diversas operaciones. De este modo,
el predicado operacion recorre cada par de la lista, suma los números que
componen dicho par y les aplica el predicado (operación unaria), pasado por
parámetro, así el mismo predicado operacion sirve para calcular cuadrados, cubos,
etc., sobre la suma de los pares de la lista original.

Como vemos unaria = determ INTEGER (INTEGER) - (i) es la definición de un dominio


al que pertenecen todos los predicados que tengan esa forma. Cualquier predicado
que realiza una operación unaria de este tipo encaja en ese dominio. Así pues en el
ejemplo tenemos definidos los predicados cuadrado y cubo como del
dominio unaria.

En la sección CLAUSES se define exactamente el cuerpo de ambos predicados que


este caso actúan como funciones.

Para la meta especificada, el resultado de la ejecución es el siguiente:

ListaCuadrados= [25, 9,49], ListaCubos= [125, 27,343]

4 Tipos de dominios:
 Dominios de objetos compuestos.
 Dominios de objetos compuestos functorless.
 Sinónimos de Dominios Estándar.
 Dominós tipo Lista.
 Dominios Tipo Predicado.

2. Segunda Semana:
2.1. aspectos fundamentales de los sistemas expertos:

De acuerdo a estos dos aspectos de determinismo, Visual Prolog soporta los siguientes
tipos de predicados:

 erroneous: nunca debe fallar y debe producir 0 soluciones.


 failure: puede fallar y debe producir 0 soluciones.
 nondeterm: puede fallar y puede producir múltiples soluciones.
 procedure: nunca debe fallar aunque pueden producirse errores en tiempo de
ejecución y debe producir una única solución.

10
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

 determ: puede fallar y debe producir una única solución, es decir, no hacen
backtracking.
 multi: nunca debe fallar y puede producir múltiples soluciones mediante la
técnica de backtracking.

El sistema de control de determinismo de Visual Prolog chequea la


correspondencia de las definiciones de predicados con los modos de determinismo
declarados para los predicados. Por defecto, el compilador verifica las cláusulas o
reglas de predicados y da un warning si no puede garantizar que un predicado
declarado como multi, procedure o erroneous nunca falla.

Todos los predicados se definen internamente con alguno de estos modos. Para los
predicados definidos como determ, procedure, failure o erroneous el compilador
dará un warning para cada cláusula o regla del programa que dé como resultado
un predicado no determinista.

2.2. sección dominas. aplicaciones:

Dominios de aplicación y ensamblados


 En este tema se describe la relación entre los dominios de aplicación y los
ensamblados. Debe cargar un ensamblado en un dominio de aplicación para
poder ejecutar el código que contiene. Al ejecutar una aplicación típica, se
cargan varios ensamblados en un dominio de aplicación.
 El modo en que se carga un ensamblado determina si varios dominios de
aplicación pueden compartir el código compilado Just-in-time (JIT) del
ensamblado en el proceso y si el ensamblado se puede descargar del proceso.
 Si un ensamblado se carga con dominio neutro, todos los dominios de aplicación
que comparten el mismo conjunto de permisos de seguridad pueden compartir
el mismo código compilado JIT, lo que reduce la cantidad de memoria que
necesita la aplicación. Sin embargo, el ensamblado nunca se puede descargar
del proceso.
 Si un ensamblado no se carga con dominio neutro, debe utilizarse la compilación
JIT de ese ensamblado en los dominios de aplicación en que se carga. Sin
embargo, el ensamblado se puede descargar del proceso; para ello, tendrán que
descargarse todos los dominios de aplicación en que está cargado el
ensamblado.
 El host en tiempo de ejecución determina si los ensamblados se cargan con
dominio neutro cuando se carga el motor en tiempo de ejecución en un
proceso. En las aplicaciones administradas, aplique el
atributo LoaderOptimizationAttribute al método de punto de entrada del
proceso y especifique un valor de la
enumeración LoaderOptimization asociada. En las aplicaciones no
administradas que hospedan Common Language Runtime, especifique el
marcador adecuado cuando llame al método CorBindToRuntimeEx (Función).

11
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

 Existen tres opciones para cargar ensamblados neutrales respecto al dominio:


 SingleDomain no carga ensamblados con dominio neutro, a excepción de
Mscorlib que siempre se carga con dominio neutro. Esta configuración se
denomina dominio simple porque suele utilizarse cuando el host ejecuta una
sola aplicación en el proceso.
 MultiDomain carga todos los ensamblados con dominio neutro. Use esta
configuración cuando en el proceso haya varios dominios de aplicación que
ejecutan el mismo código.
 MultiDomainHost carga con dominio neutro los ensamblados que tienen un
nombre seguro si se han instalado junto con todas sus dependencias en la caché
global de ensamblados. La carga y la compilación JIT de los demás ensamblados
se realiza de forma independiente en cada dominio de aplicación y, por tanto,
estos ensamblados pueden descargarse del proceso. Utilice esta configuración
cuando ejecute más de una aplicación en el mismo proceso, o si tiene un grupo
heterogéneo de ensamblados compartidos por varios dominios de aplicación y
ensamblados que es necesario descargar del proceso.
 El código compilado JIT no se puede compartir en los ensamblados que se
cargan en la carga de ensamblado por contexto especificado por el usuario
utilizando el método LoadFrom de la clase Assembly, o que se cargan a partir de
imágenes que utilizan las sobrecargas del método Loadque especifican matrices
de bytes.
 Los ensamblados que se han compilado en código nativo utilizando Ngen.exe
(Native Image Generator) se pueden compartir entre dominios de aplicación si
la primera vez que se cargaron en un proceso lo hicieron con dominio neutro.
 El código compilado JIT del ensamblado que contiene el punto de entrada de la
aplicación sólo se puede compartir si pueden hacerlo todas sus dependencias.
 Un ensamblado con dominio neutro puede someterse a la compilación JIT varias
veces. Por ejemplo, cuando los conjuntos de permisos de seguridad de dos
dominios de aplicación son diferentes, no pueden compartir el mismo código
compilado JIT. Sin embargo, cada copia del ensamblado objeto de compilación
JIT se puede compartir con otros dominios de aplicación que tengan el mismo
conjunto de permisos de seguridad.
 A la hora de determinar si va a cargar los ensamblados con dominio neutro,
deberá decidir si prefiere reducir el consumo de memoria u otros factores
relativos al rendimiento.
 El acceso a los métodos y datos estáticos es más lento en los ensamblados de
dominio neutro porque es necesario aislar los ensamblados.Cada dominio de
aplicación que tiene acceso al ensamblado debe disponer de una copia
independiente de los datos estáticos para impedir que las referencias a objetos
en los campos estáticos atraviesen los límites del dominio. Como resultado, el
motor en tiempo de ejecución contiene lógica adicional para dirigir un llamado
a la copia correspondiente del método o los datos estáticos. Esta lógica adicional
retarda la llamada.
 Todas las dependencias de un ensamblado deben estar presentes y cargarse
cuando el ensamblado se carga con dominio neutro, ya que si una dependencia

12
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

no se puede cargar con dominio neutro, impedirá también que el ensamblado


se cargue con dominio neutro.

Dominios de aplicación y subprocesos


Un dominio de aplicación constituye un límite de aislamiento para la seguridad, el
control de versiones, la confiabilidad y la descarga de código administrado. Los
subprocesos son la construcción del sistema operativo que Common Language Runtime
utiliza para ejecutar código. En tiempo de ejecución, todo el código administrado se
carga en un dominio de aplicación y se ejecuta mediante uno o varios subprocesos
administrados.
No existe una correlación uno a uno entre los dominios de aplicación y los
subprocesos. En un momento dado haber varios subprocesos ejecutándose en un único
dominio de aplicación. Además, cada subproceso concreto no está confinado a un solo
dominio de aplicación. En otras palabras, los subprocesos pueden cruzar los límites del
dominio de aplicación; no se crea un nuevo subproceso para cada dominio de aplicación.
En un momento dado, todos los subprocesos se ejecutan en un dominio de
aplicación. Por tanto, podría haber cero, uno o varios subprocesos ejecutándose en un
dominio de aplicación determinado. En tiempo de ejecución, se realiza un seguimiento
de qué subprocesos se están ejecutando en qué dominios de aplicación. Se puede
localizar en cualquier momento el dominio donde se está ejecutando un subproceso
llamando al método Thread.GetDomain.

Dominios de aplicación y referencias culturales


La referencia cultural, representada por un objeto CultureInfo, se asocia con
subprocesos. Puede obtener la referencia cultural asociada al subproceso que está
actualmente en ejecución utilizando la propiedad CultureInfo.CurrentCulture, y puede
utilizar la propiedad Thread.CurrentCulture para obtener o establecer la referencia
cultural asociada al subproceso que está actualmente en ejecución. Si la referencia
cultural asociada a un subproceso se ha establecido explícitamente mediante la
propiedad Thread.CurrentCulture, seguirá asociada a ese subproceso cuando el
subproceso cruce los límites del dominio de aplicación. De lo contrario, la referencia
cultural que estaba asociada al subproceso en un momento concreto vendrá
determinada por el valor de la propiedad CultureInfo.DefaultThreadCurrentCulture en
el dominio de aplicación en el que se está ejecutando el subproceso:

 Si el valor de la propiedad no es null, se asociará al subproceso la referencia


cultural devuelta por la propiedad (y por consiguiente devuelta por las
propiedades Thread.CurrentCulture y CultureInfo.CurrentCulture).
 Si el valor de la propiedad es null, se asociará al subproceso la referencia
cultural actual del sistema.

13
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

3. Tercera Semana:
3.1. aspectos fundamentales de un sistema experto

o Fases en el desarrollo de un sistema experto:

 En el desarrollo de Sistemas Expertos, intervienen ingenieros del conocimientos y


expertos del dominio en el cual se enmarca el sistema a construir. Un ingeniero del
conocimiento es un especialista en sistemas expertos cuya misión va a ser obtener y
codificar el conocimiento obtenido del experto.

 En general, el proceso de desarrollo puede dividirse en cinco etapas:

ETAPA DESCRIPCIÓN

Determinar las características del


IDENTIFICACIÓN
problema.

Diseñar estructuras para organizar


CONCEPTUALIZACIÓN el conocimiento.

Diseñar estructuras para organizar


FORMALIZACIÓN
el conocimiento.

Formulación de las reglas que


IMPLEMENTACIÓN
incorporen el conocimiento

PRUEBA Implementación de las reglas.

14
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

o Niveles de desarrollo:

o Lenguaje de programación:

15
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

3.2. instrucciones read y write.

16
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

SEGUNDA UNIDAD
4. Semana 4 :
4.1.
4.1.1. Representación de conocimientos:

4.1.2. redes semánticas:

HISTORIA
Los responsables de los primeros esquemas de representación formalizados fueron Quillian
(1968) y Shapiro & Woddmansee (1971). Las redes semánticas han sido muy utilizadas
en Inteligencia Artificial (máquinas inteligentes) para representar el conocimiento y por tanto ha
existido una gran diversificación de técnicas. Los elementos básicos que encontramos en todos
los esquemas de redes son:

1. Estructuras de datos en nodos, que representan conceptos, unidas por arcos que
representan las relaciones entre los conceptos.

2. Un conjunto de procedimientos de inferencia que operan sobre las


estructuras de datos.

Definir qué una Red:


Conjunto de ordenadores o de equipos informáticos conectados entre sí que puede intercambiar
información.

Definir q es una Semántica


Perteneciente o relativo a la significación de las palabras.

17
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

CONCEPTO DE RED
Una red semántica o esquema de representación en Red es una forma de representación de
conocimiento lingüístico en la que los conceptos y sus interrelaciones se representan mediante
un grafo.

En un grafo o red semántica los elementos semánticos se representan pornodos. Dos elementos
semánticos entre los que se admite se da la relación semántica que representa la red, estarán
unidos mediante una línea, flecha o enlace o arista. Cierto tipo de relaciones no simétricas
requieren grafos dirigidos que usan flechas en lugar de líneas

Un Nodo es identificado por objeto

Nodo=Objeto

Donde el Objeto puede ser representado por:

Persona, Animales, Eventos, conceptos y atributos que identifican un objeto.

Los Nodos están unidos por arcos

Una Red Semántica es un conjunto de Nodos y Arcos

Una Red Semántica es una representación gráfica del conocimiento en la que existe una jerarquía
de Nodos.

4.1.3. componentes de las redes semánticas:


COMPONENTES DE LA RED SEMÁNTICA

Nodos:
Representan

· Objetos Físicos: Ver y Tocar


· Objetos Conceptuales: Hechos y Eventos
· Descriptivos: Cualidades

Arcos:

Representan

Elementos con su clase (ES-UN)

Parte con un todo (TIENE-UN)

18
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

ES UN: El cual usa para identificar que un cierto pertenece a una clase mayor de objeto.

TIENE-UN: Este tipo de arcos se utiliza para identificar que un cierto nodo tiene o pase unas
ciertas características o atributo o propiedad.

TIPOS DE ARCOS:

Descriptivos: (Semántica dependiente del dominio)


Propiedades

(Profesión, Color, Pelo etc.)

Relaciones: (No estructurales)

(Amigo-de, Padre-de etc.)

Tipos de Redes
Redes IS-A: En las que los enlaces entre nodos están etiquetados.

Gráficos conceptuales: En los que existen dos tipos de nodos: de conceptos y de relaciones

Redes de marcos: En los que los puntos de unión de los enlaces son parte de la etiqueta del nodo

4.2. Estructuras en visual prolog:


Ejemplos (ej01.pl):
/* Predicados monádicos: PROPIEDADES */
/* mujer(Per) <- Per es una mujer */
mujer(clara).
mujer(chelo).

/* hombre(Per) <- Per es un hombre */


hombre(jorge).
hombre(felix).
hombre(borja).
/* moreno(Per) <- Per tiene el pelo de color oscuro */
moreno(jorge).
/* Predicados poliádicos: RELACIONES */
/* tiene(Per,Obj) <- Per posee el objeto Obj*/
tiene(jorge,moto).

19
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

/*le_gusta_a(X,Y) <- a X le gusta Y */


le_gusta_a(clara,jorge).
le_gusta_a(jorge,clara).
le_gusta_a(jorge,informatica).
le_gusta_a(clara,informatica).
/* es_padre_de(Padre,Hijo-a) <- Padre es el padre de Hijo-a */ es_padre_de(felix,
borja).
es_padre_de (felix,clara).
/* es_madre_de(Madre,Hijo-a) <- Madre es la madre de Hijo-a */
es_madre_de(chelo,borja). es_madre_de(chelo, clara). /* regala(Per1,Obj,Per2) <-
Per1 regala Obj a Per2 */
regala (jorge, flores, clara).

5. Semana 5:
5.1. Aspectos principales del Cálculo de predicados:
 Write (+Termino) Si Termino está instanciada a un término, lo saca por pantalla. Si
Termino no está instanciada, se sacará por pantalla una variable numerada de
forma única (por ejemplo _69).

 Nl Nueva Línea: la salida posterior se presenta en la siguiente línea de la pantalla.

 write_ln (+Termino) Equivalente a write (+Termino), nl

 Writef (+Formato,+Argumentos) Escritura con formato

 Tab (+X) Desplaza el cursor a la derecha X espacios. X debe estar instanciada a un


entero (una expresión evaluada como un entero positivo).

 Display (+Termino) Se comporta como “write”, excepto que pasa por alto
cualquier declaración de operadores que se haya hecho.

 Read (-Termino) Lee el siguiente término que se teclee desde el ordenador. Debe
ir seguido de un punto “.” y un “retorno de carro”. Instancia Término al término
leído, si Termino no estaba instanciada. Si Termino si que está instanciada, los
comparará y se satisfará o fracasará dependiendo del éxito de la comparación.

20
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

5.2. Ejercicios variables libres y acotadas:


Ejemplos (ej07.pl):

/* ibl(L) <- imprime la lista L de forma bonita, es decir saca por pantala los elementosa de
la lista separados por un espacio y terminado en salto de línea
*/ ibl([]) :- nl.

ibl([X|Y]) :- write(X),

tab(1), ibl(Y).

/* Diferencia entre write, display e ibl */

?- write(8+5*6), nl, display(8+5*6).

8+5*6 +(8,*(5,6)) yes

?- write(8*5+6), nl, display(8*5+6).

8*5+6 +(*(8,5),6) yes

?- X=[esto,es,una,lista],write(X),nl,display(X),nl,ibl(X).

[esto,es,una,lista]

.(esto,.(es,.(una,.(lista,[])))) esto es una lista yes

?- writef('Atomo = %w\nNúmero = %w\n',[pepe,4.5]).

Atomo = pepe Número = 4.5 yes

6. Semana 6:
6.1. siguientes aspectos
6.1.1. Reglas de producción

Normalmente se asocia la inteligencia con “regularidades” y el en forma de


producciones o reglas de producción. Se asemeja al proceso de memoria humano:
memoria a corto plazo (deducciones intermedias) y memoria a largo plazo
(producciones).

21
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

Introducción

Normalmente las reglas de producción se ven como un formalismo en el cual


representar el conocimiento y es el formalismo más usado en los sistemas expertos.
Originalmente las producciones eran reglas gramaticales para manipular cadenas de
símbolos.

Sistemas canónicos

Post '43 estudió las propiedades de sistemas de reglas (que llamó sistemas canónicos).
Por ejemplo:

A = {a,b,c} (alfabeto)

Axiomas: a, b, c, aa, bb, cc

Producciones: (p1) $ -> a$a

(p2) $ -> b$b

(p3) $ -> c$c

Sistemas canónicos

Estas reglas nos generan palíndromes, y podemos rastrear qué producciones


se aplicaron (v.g., bacab)

Reglas de producción

Manipulan estructuras de símbolos, como listas o vectores.

Se tiene:

Un conjunto  N de nombres de objetos en el dominio

Un conjunto P de propiedades que representan atributos de los objetos

Un conjunto V de valores que los atributos pueden tener

Generalmente se usa una tripleta: (objeto atributo valor).

22
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

Por ejemplo:

• (juan edad 25)  


(juan edad X)  
(turbina1 capacidad 50)

Estructura de una regla:

Que significa:

IF las condiciones P 1 y P 2 y... y P m se

cumplen THEN realiza las acciones (o concluye) Q 1 y... y Q n

IF Animal es_un carnívoro AND


IF Animal es_un carnívoro AND
Animal tiene rayas
THEN Animal es tigre

Propiedades de las reglas:

Modular: cada regla define un pequeño y relativamente independiente


pedazo de conocimiento
Incremental: nuevas reglas pueden ser añadidas a la base de
conocimiento relativamente independiente de las demás
Modificable: como consecuencia ser modular, las reglas pueden ser
modificadas o se pueden añadir/quitar reglas fácilmente
Transparencia: habilidad de explicar sus decisiones y soluciones

23
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

6.1.2. . Partes de las reglas de Producción

Partes principales
Un sistema de producción tiene:
Un conjunto de reglas (  base de conocimiento)
Un interprete de reglas o máquina de   inferencia (que decide qué regla
aplicar, controla la actividad del sistema)
Una memoria de trabajo (que guarda los   datos, metas, y resultados
intermedios)

Memoria de Trabajo
Guarda inferencias/aseveraciones temporalmente.

Es la estructura de datos que es observada y manipulada/cambiada por las


reglas.

Memoria de Trabajo
Los datos de la memoria de trabajo son los que permiten cumplir las condiciones
de las reglas y dispararlas (las reglas verifican la existencia de elementos en la
memoria de trabajo para disparar).

Las acciones de las reglas: modifican, añaden o quitan elementos de la


memoria de trabajo (o producen efectos secundarios).

Máquina de Inferencia
El interprete o máquina de inferencia realiza el ciclo reconoce-actua:

 Aparea las condiciones (o acciones) de las reglas con los


elementos de la memoria de trabajo
 Si existe más de una regla que puede disparar, escoge una
resolución de conflictos.
 acciones/conclusiones) que puede involucrar cambios la
memoria de trabajo

Máquina de Inferencia
Generalmente el ciclo empieza con unos datos iniciales y para cuando no hay
reglas aplicables (o por una regla).

24
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

El sentido/importancia/contribución de cada regla depende de su contribución


dentro de todas las reglas para solucionar el problema.

Máquina de Inferencia
Existen diferentes estrategias de razonamiento: a nivel global las reglas pueden
ser llevadas en un encadenamiento hacia adelante o en un encadenamiento
hacia atrás.

Estrategias de Razonamiento
Encadenamiento hacia adelante (forward chaining/ data driven/ event driven/
bottom-up) parte de hechos para cumplir condiciones y ejecutar acciones
(creando nuevos hechos)

Estrategias de Razonamiento
Encadenamiento hacia atrás (backward chaining/ goal driven/ expectation
driven/ top-down) parte de los estados meta y trata de cumplir las condiciones
necesarias para llegar a ellos.

6.1.3. Encadenamiento de reglas

25
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

Explicación
Explicaciones sirven para:

Mostrar deficiencias de las reglas  

Clarificar suposiciones de la máquina  

Explicar situaciones no anticipadas

Hacer sentir al usuario más seguro

Hacer ver la máquina más “inteligente”

Explicación

Con las reglas podemos resolver preguntas:

HOW, e.g., ¿Cómo supiste N?

WHY, e.g., ¿Por qué quieres saber A?

Ejemplo de explicaciones

Reglas:

R1: If una persona tiene $30,000 y tiene grado de licenciatura Then debe de
invertir a plazo fijo

R2: If una persona gana mas de $120,000 al año y tiene licenciatura Then debe
de invertir en acciones

R3: If una persona es menor de 30 y esta invirtiendo a plazo fijo Then debe
invertir en acciones

R4: If una persona es menor de 30 Then tiene nivel licenciatura

R5: If una persona quiere invertir en acciones Then debe de invertir en Telmex

6.1.4. Meta reglas


Algunos sistemas permiten tener reglas que razonan en cuanto a qué reglas
disparar (meta-reglas)

Las meta-reglas tiene el rol de dirigir el razonamiento (más que realizar el


razonamiento).

Ejemplos de meta-reglas

Para una aplicación:

26
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

IF Edad Paciente > 65

THEN Aplica reglas de enfermedades de la vejez

Para una clase de aplicaciones:

IF “Edad” en cierto intervalo

THEN Aplica reglas para dicho intervalo

Apareamiento de Patrones
Normalmente existen variables en las reglas y se tiene que hacer un
“apareamiento de patrones”.

Notación : ?x aparea un elemento, !x aparea varios elementos, v.g.

If Persona nombre ?x edad ?y

And ?y > 12

And ?y < 20

Then ?x es_un adolescente

Hecho: Persona nombre Juan edad 25.

Apareamiento de Patrones
En Bwd: Hipótesis (con variables) apareamos consecuencias (con variables) y
producimos nuevas hipótesis (con variables). Se acerca más a unificación.

27
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

Tercera unidad
7. Semana 7:
7.1. Reporta el avance de proyecto1.
Portada
Introducción (Para que sirve la aplicación.)
Desarrollo (Diagrama de red semántica)
Preguntas que se le pueden hacer al sistema para obtener el diagnostico
Código

Reglas en Prolog
En prolog una regla consiste de una cabeza y un cuerpo.
La cabeza y el cuerpo están conectados por el símbolo :- que se pronuncia si.
Por ejemplo las reglas anteriores.
Ace(x):-animal(x), tiene(X, Plumas)
Hermana(X,Y):- mujer(x)
Padres(x,m,p), padres(y,m,p)

Programa ejemplo:
Console(user)
Varon(eduardo)
Varon(Alberto)
Mujer(Alicia)
Mujer(Victoria)
Padres(Eduardo, victoria, alberto)
Padres (Alicia, Victoria, Alberto)
Hermana(x,y):- mujer(x)
Padres(x,m,p), padres(y,m,p).
Ctrl+d = mensaje de compilación correcta

Preguntas
?- hermana(Alicia, edurado).
True
?- hermana(Alicia,x)
X=Eduardo

Programa ejemplo
Ladron(juan)
Gusta(maria, alimento)
Gusta(maria, vino)
Juan(gusta, x) . gusta(x, vino)
Puede robar(x,y) – ladron (x), gusta (x,y)
Control+d

Ejercicio para prolog


Varon(eduardo)
Varon(francisco)
Varon(Luis)

28
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

Varon (mario)

Mujer(Alicia
Mujer(veronica)
Mujer(victoria)
Mujer(beatriz)

Padres(eduadro,francisco, victoria)
Padres(Alicia, francisco, victoria)
Padres(luis, Eduardo, veronica)
Padres(Beatriz, Alicia, mario)

Esposos(Eduardo, veronica)
Esposos(mario, alicia)
Esposos(francisco, victoria

Hermana(ella, x)
Mujer(ella).padres(ella,m,p),padres(x,m,p)
Hermano(el, x):- varon(el), padres(el,m,p),padres(x,m,p)

Hijo(el,x):-varon(el),padres(el,x,_)
Hijo(el,x):-varon(el),padres(el,_,x)
Hija(ella,x):-mujer(ella),padres(el,x,_)
Hija(ella,x):-mujer(ella),padres(el,_,x)

Se pueden hacer en bloc de notas para utilizarlos en prolog. Con extensión .pl

¿Eduardo y Alicia son hermanos?111


Hermano (Eduardo, alicia)
Hermana(Alicia, eduardo)
¿Quiénes son los padres de beatriz?
Padres(Beatriz, x, y)
¿Eduardo es hijo de Mario?
Hijo(Eduardo, mario)
¿Luis es hijo de Veronica?
Hijo(luis, veronica)
¿de quien es hija beatriz?
Hija(Beatriz, x)
Ejercicio en clase para prolog.
Abuelos(Luis, Francisco, Victoria)
Abuelos(Beatriz, Francisco, Victoria)

Nieto(El, x):-varon(El), abuelos(El, X, _)


Nieto(El, x):-varon(El), abuelos(El, _, X)
Nieta(Ella, x):-mujer(Ella), abuelos(El, X, _)

29
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

7.2. Aplica el concepto de listas en visual prolog.


Creación y consulta de listas

Plantas ([manzana, naranja, limón, espinaca, gardenia, alfalfa, pino]).

Lista ([1, 2,3]).

?-lista([H|T]).

H=1

T=[2,3]

?-lista([H,J|T]).

H=1

J=2

T=[3]

Longitud de una lista

% Si queremos hallar la longitud de una lista.

% La longitud de una lista vacía es 0.

% La longitud de cualquier lista es la longitud de la cola + 1.

Longitud ([],0).

Longitud ([_|T],N):-longitud(T,N0), N is N0 + 1.

?- longitud([a,b,c],L).

L=3

?- longitud([a,b,c],4).

No
Búsqueda de un elemento

% Si queremos determinar si un elemento pertenece a una lista.

% El elemento pertenece a la lista si coincide con la cabeza de la lista.

% El elemento pertenece a la lista si se encuentra en la cola de la lista.

30
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

pertenece(X,[X|_]) .

pertenece(X,[_|R]):- pertenece(X,R).

?- pertenece(b,[a,b,c]).

Yes

?- pertenece(b,[a,[b,c]]).

No

?- pertenece([b,c],[a,[b,c]]).

Yes

?- pertenece(X,[a,b]).

X=a;

X=b
Eliminar elemento de una lista

% Si queremos eliminar un elemento de la lista.

% Si X es la cabeza de la lista, la cola T es la lista sin X

% Si X no es la cabeza de la lista, conservamos la cabeza de la lista

% como parte de la respuesta y continuamos eliminando X de la cola T.

Elimina(X,[X|T],T).

Elimina(X,[H|T],[H|T1]):- elimina(X,T,T1).

?- elimina(1,[1,2,3,4],R).

R = [2,3,4]

?- elimina(1,R,[2,3]).

R = [1, 2, 3] ;

R = [2, 1, 3] ;

R = [2, 3, 1]

?- elimina(X,[1,2,3],Y).

X = 1, Y = [2,3] ;

X = 2, Y = [1,3] ;

31
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

X = 3, Y = [1,2]

Concatenar listas

% Si queremos concatenar dos listas lista.

% Concatenar una lista vacia con L es L.

% Concatenar X|L1 con L2 es poner el primer

% elemento de la primera lista (X) más la

% concatenación del resto de la lista (L1) con L2

concatenar([],L,L).

concatenar([X|L1],L2,[X|L3]):-concatenar(L1,L2,L3).

?- concatenar([1,2],[3,4],R).

R = [1, 2, 3, 4].

?- concatenar(X,Y,[1,2]).

X = [], Y = [1,2] ;

X = [1], Y = [2] ;

X = [1,2], Y = []
Comprobar si una lista es la inversa de otra

% Si queremos calcular la inversa de una lista.

% La inversa de una lista vacia es una lista vacia.

% La inversa de H|T es la inversa de T concatenada con H.

inversa([],[]).

inversa([H|T],L):- inversa(T,R), concatenar(R,[H],L).

?- inversa([a,b,c,d],[d,c,b,a]).

Yes/Si

% Utilizando un parametro acumulador.

inver(L1,L2):-inver(L1,L2,[]).

inver([],L,L).

32
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

inver([H|T],L,S):-inver(T,L,[H|S]).

?- inver([a,b,c,d],[d,c,b,a]).

Yes

8. Semana 8:
8.1.
8.1.1. Reconoce las estrategias de inferencia.
8.1.2. Encadenamiento de reglas hacia atrás y hacia adelante.
Un grupo de múltiples reglas de inferencia que contiene un problema con su
solución se llama cadena.

Una cadena que realiza una búsqueda o camino desde el problema a la solución
se llama una cadena hacia adelante.

Este tipo de cadena va desde los hechos hsta las conclusiones que siguen a partir
de los hechos.

Una cadena que transita hacia atrás desde una hipótesis hasta los hechos que
soportan tal hipótesis se llama una cadena hacia atrás. Otra forma de definirla
es en términos de una meta que puede estar formada por submetas que se han
cumplido.

El encadenamiento se puede expresar con cierta facilidad en términos de


inferencia si suponemos que tenemos reglas del tipo Modus-poner.

p->q
p conejo(x)->mamifero(x)
_____________ mamifero(x)->animal(x)
:. q
Por tanto una cadena causal de encadenamiento hacia adelante se representa
mediante una secuencia de enlaces que conectan el consecuente de una regla
con el antecedente de la siguiente.

Ejemplo:

conejo(Bugs Bunny)

33
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

conejo(x)-> mamifero(x)

mamifero(x)-> animal(x)

aminal(Bugs Bunny)

Un enlace, por otra parte también indica la unificación de variables a hechos.


Por ejemplo la variable x en el predicaco conejo(x) debe ser unificada en el
primer lugar con el hecho conejo(Bugs Bunny)antes de que la regla conejo se
pueda aplicar, por lo que la cadena causal será en realidad una sucesión de
implicaciones y unificaciones

En el encadenamiento hacia atrás el proceso es el inverso: queremos probar la


hipótesis de animal(Bugs-Bunny). El problema central del encadenamiento
hacia atrás es encontrar una cadena de enlace entre la evidencia y la hipótesis.

El hecho conejo(Bugs Bunny>) se llama la evidencia en el encadenamiento hacia


atrás, para indicar que se usará para sostener la hipótesis, siendo esta evidencia
usada para probar dicha hipótesis. Tenemos una estructura de claúsulas.

Los encadenamientos hacia adelante y hacia atrás son en realidad caminos a


través de un espacio de estados de un problema. En este espacio de estados del
problema los estados intermedios se corresponden con hipótesis intermedias
bajo el encadenamiento hacia atrás o conclusiones intermedias bajo el
encadenamiento hacia adelante.

Características comunes
Conozco más el encadenamiento hacia atrás ya que conozco el pasado, pero el
futuro no.

34
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

En un sistema basado en reglas tenemos el siguiente grafico:

8.2. Utiliza la recursividad en listas.


 Estructura básica
 Unificación
 Member
 Append
 Ejercicio
 Árbol de seguimiento

9. Semana 9:
9.1. Reconoce en que consiste el interfaz del usuario.
La interfaz de usuario es el espacio donde se producen las interacciones entre seres
humanos y máquinas. El objetivo de esta interacción es permitir el funcionamiento y
control más efectivo de la máquina desde la interacción con el humano.

Las interfaces básicas de usuario son aquellas que incluyen elementos como menús,
ventanas, contenido gráfico, cursor, los beeps y algunos otros sonidos que la
computadora hace, y en general, todos aquellos canales por los cuales se permite la
comunicación entre el ser humano y la computadora.

35
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

El objetivo del diseño de una interfaz es producir una interfaz que sea fácil de usar
(explicarse por sí misma), eficiente y agradable para que al operar la máquina dé el
resultado deseado.

9.2. Aplica a ejercicios la lógica del primer orden.


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.

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), 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.

36
Sistemas Expertos
Eduardo Ramírez Benavides
Universidad de Chiclayo

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 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(_).

37

También podría gustarte