SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
IIINNNTTTEEELLLIIIGGGEEENNNCCCIIIAAA EEENNN RRREEEDDDEEESSS DDDEEE CCCOOOMMMUUUNNNIIICCCAAACCCIIIOOONNNEEESSS
SSIISSTTEEMMAA EEXXPPEERRTTOO
DDEE
RREECCOONNOOCCIIMMIIEENNTTOO DDEE SSEETTAASS
EENN PPRROOLLOOGG
HHHéééccctttooorrr PPPééérrreeezzz MMMaaarrrtttííínnn
LLLaaauuurrraaa AAAssseeennnjjjooo MMMaaannnzzzaaannnooo
2
SSIISSTTEEMMAA EEXXPPEERRTTOO DDEE RREECCOONNOOCCIIMMIIEENNTTOO DDEE SSEETTAASS
ÍÍNNDDIICCEE
ÍNDICE __________________________________________________________ 2
INTRODUCCIÓN______________________________________________________ 3
SISTEMA EXPERTO___________________________________________________ 3
BÚSQUEDA Y METODOS ______________________________________________ 4
ENTRENAMIENTO DEL SISTEMA______________________________________ 5
RESULTADOS ________________________________________________________ 7
Archivo preguntas.dat_________________________________________________________ 7
Archivo DBHechos.dat________________________________________________________ 8
Archivo DBReglas.dat ________________________________________________________ 8
MEJORAS PROPUESTAS ______________________________________________ 9
DISCUSION Y CONCLUSIÓN__________________________________________ 10
BIBLIOGRAFÍA______________________________________________________ 12
CÓDIGO COMENTADO ______________________________________________ 13
3
IINNTTRROODDUUCCCCIIÓÓNN
El sistema experto de reconocimiento de setas que se ha desarrollado, tiene como objetivo
la identificación de éstas en base a características externas que presenta la seta u hongo a tipificar,
dando como resultado su reconocimiento y obteniendo así su nombre en latín, los diferentes
nombres comunes con los que podemos encontrarla descrita en libros de micología y su posible
‘comestibilidad’ (comestible, mortal, etc.), sistematizando para ello el conocimiento de uno o mas
expertos en micología, generando una base de datos de conocimiento dinámica que pueda ser usada
posteriormente.
El sistema se encuentra desarrollado en el lenguaje PROLOG y hace uso de listas, bases de
datos internas y dinámicas, técnicas de backtracking y recursividad así como medios de
comunicación con el usuario; esta basado en procesos de pregunta y respuesta interactivos los
cuales permiten la identificación de patrones (características o propiedades) conocidos por el
sistema, la satisfacción plena de las características establecidas dan como resultado la respuesta por
parte del sistema de la seta identificada.
Este sistema experto tiene como base fundamental el conocimiento del experto y por tanto
tiene como una característica principal el autoaprendizaje y la recursividad, por lo que es
recomendable que la base de datos de conocimiento que se genere debe ser debidamente analizada
antes de su implantación.
SSIISSTTEEMMAA EEXXPPEERRTTOO
Un SISTEMA EXPERTO es un sistema informático que incorpora, en forma operativa, el
conocimiento de una o varias personas experimentadas, de forma que es capaz de proporcionar
respuestas y explicar los mecanismos de razonamiento que ha utilizado para llegar hasta ellas, así
como de modificar o ampliar su conocimiento.
Elementos de un sistema experto:
1. Base del conocimiento En ella se almacena el conocimiento proporcionado por
el experto humano en un área de la ciencia o el conocimiento humano.
2. Motor de inferencia. Se encarga de realizar las búsquedas en la base del
conocimiento de acuerdo con los parámetros definidos en la heurística del sistema y
que permitirá inferir la solución de un problema o llevar a cabo la toma de
decisiones.
3. Subsistema de explicación Permite que el usuario no experto pueda entender los
parámetros de funcionamiento del sistema sin necesidad de tener que ver más allá
de la aplicación del mismo.
4. Adquisición del conocimiento Es la interfaz que permite al experto humano
mantener actualizada la base del conocimiento.
5. Subsistema de aprendizaje Permite al sistema experto, mediante experiencias,
realizar la adquisición automática del conocimiento.
4
BBÚÚSSQQUUEEDDAA YY MMEETTOODDOOSS
El sistema se encuentra desarrollado en el lenguaje de programación PROLOG haciendo
uso de listas, bases de datos internas y dinámicas, técnicas de backtracking y recursividad así como
medios de comunicación con el usuario y entornos de interacción.
El sistema se basa en el empleo extensivo de tres bases de datos, archivos de texto plano:
(Pregunta.dat, DBHechos.dat, DBReglas.dat).
Las preguntas efectuadas por el sistema se encuentran contenidas en la base de datos de
preguntas (Pregunta.dat) la misma que se puede visualizar desde el sistema. La elección de dichas
preguntas es fundamental para un eficiente y correcto funcionamiento del sistema, deberán ser
preguntas decisivas a la hora de catalogar una seta, por tanto será un experto el encargado de
escribir este fichero. En un principio, no está previsto que el archivo de preguntas pueda crecer, de
modo que el primer trabajo del experto será elegir unas preguntas que permitan identificar
unívocamente cada una de las setas de nuestro dominio.
La clasificación de las setas y hongos identificados por el sistema se encuentra contenida en
la base de datos de Hechos (DBHechos.dat) la cual es cargada como base de datos dinámica toda
vez que se inicia el entorno de preguntas con el usuario. Este fichero contendrá una línea por cada
una de las setas de las que conoce su descripción: nombre en latín, nombres comunes con los que
podemos conocerla y su comestibilidad.
Las reglas que presentan las características identificativas de las diferentes setas
reconocidos por el sistema se encuentran contenidas en la base de datos de reglas (DBReglas.dat) en
forma de cadenas con nombre en latín de la correspondiente seta, las preguntas realizadas al usuario
junto con las respuestas correspondientes con fines de filtro y selección.
5
El programa carga todas las características identificativas del archivo de reglas,
convirtiéndolas en hechos usando assert. Así, al inicio de la ejecución, el sistema conoce todas
las propiedades de cada una de las setas.
Cuando el usuario responde a una pregunta del sistema, el sistema hace una búsqueda en
todos los hechos conocidos, buscando las setas que contienen el hecho pregunta-respuesta
introducido. Estas setas son identificadas positivamente; el programa se encarga después de
eliminar las setas identificadas negativamente de la memoria, de forma que se reduce el ámbito de
búsqueda y el uso de memoria.
Si el sistema se queda con al menos una seta identificada positivamente, se continúa
haciendo las siguientes preguntas (eliminando recursivamente el ámbito de búsqueda) para
asegurarse de hacer una identificación correcta, reduciendo la posibilidad de emitir un falso
positivo. Sin embargo se muestra al usuario el nombre de esa seta durante todo el proceso. Al
responder a la última pregunta de la batería, se muestran los datos de la seta que se ha identificado.
Al haber diseñado correctamente las preguntas, sólo se debería haber encontrado una coincidencia
(no puede haber dos setas cuyas preguntas sean totalmente iguales). El programa considera esta seta
como identificada y muestra los datos correspondientes a esa seta de la base de datos de hechos.
Con la finalidad de proporcionar al sistema un mayor conocimiento, se le ha provisto de un
mecanismo automático de aprendizaje cuyo proceso inicia su ejecución de forma automática toda
vez que el propio sistema reconoce la inexistencia de información (en sus bases de datos de
conocimiento) relacionada con las características proporcionadas por el usuario. El presente
mecanismo de aprendizaje es permanente debido al registro en las correspondientes bases de datos
de la información proporcionada por medio de preguntas-respuestas, asimismo dicho aprendizaje es
dinámico estando disponible para su posterior identificación inmediatamente después de suministrar
los datos de clasificación solicitados por el sistema. La nueva información aprendida se añade tanto
al fichero DBHechos.dat como a DBReglas.dat.
Para poder facilitar la identificación por parte del usuario, se ha añadido una carpeta con el
nombre Imágenes, que contendrá las fotos de las diferentes setas que el sistema es capaz de
reconocer inicialmente cuando sólo cuenta con el conocimiento proporcionado por el experto. Para
poder localizar la foto asociada a la seta que ha sido identificada por el sistema, y que por tanto
entre otras cosas contamos con su nombre en latín, hemos nombrado al archivo precisamente con el
nombre en latín de la seta, así “agaricus campestris.jpg” contendrá una imagen del champiñón
silvestre. Esta información extra puede ser utilizada en una posible mejora al añadir un interfaz
gráfico al sistema.
EENNTTRREENNAAMMIIEENNTTOO DDEELL SSIISSTTEEMMAA
El primer paso a la hora de dotar al sistema de conocimientos fue el de escribir las
preguntas que nuestro experto consideró importantes a la hora de clasificar una seta. Nos
centraremos en las características macroscópicas ya que son más directas. Las preguntas que hizo el
experto son las que se indican en la tabla. Anotamos también algunas respuestas posibles para las
preguntas, ya que nuestro sistema permite introducir respuestas no booleanas.
PREGUNTA RESPUESTAS POSIBLES
¿Tiene láminas? S, N
¿Tiene poros? S, N
¿Tiene sombrero? S, N
6
PREGUNTA RESPUESTAS POSIBLES
¿Tiene velo? S, N
¿Tiene volva? S, N
¿Tiene pie? S, N
¿Con cutícula? S, N
¿Tipo de láminas? Libres, decurrentes, adnatas
¿Color de las láminas? Blanco, rosa, verde, pardo...
¿Color del sombrero? Pardo, blanco, rojo, verde...
¿Forma del sombrero? Convexo, cónico, globoso, plano, deprimido, umbonado, embudado, n/a
¿Forma del borde? Plano, curvado, convoluto, n/a
¿Pie con anillo? S, N, n/a
¿Pie hueco? S, N, n/a
Una vez diseñadas las preguntas, el experto introdujo un número de setas mediante el
propio sistema de aprendizaje. Las setas elegidas por el experto fueron una combinación de setas
comunes, prestando atención en introducir setas de la misma familia o setas fácilmente
confundibles, para detectar posibles fallos en la elaboración de las preguntas.
Se puede ver un ejemplo de introducción de una nueva seta en las siguientes capturas de
pantalla:
(1) Bases de Datos (2) Clasificador (3) Salir
==>2
¿Tiene laminas? n
Hay 4 setas encontradas.
Piptoporus Betulinus, Langermannia Gigantea, Boletus Pinicola, Boletus Edulis.
¿Tiene poros? s
Hay 3 setas encontradas.
Piptoporus Betulinus, Boletus Pinicola, Boletus Edulis.
¿Tiene sombrero? s
Hay 3 setas encontradas.
Piptoporus Betulinus, Boletus Pinicola, Boletus Edulis.
¿Tiene velo? n
Hay 3 setas encontradas.
Piptoporus Betulinus, Boletus Pinicola, Boletus Edulis.
¿Tiene volva? n
Hay 3 setas encontradas.
Piptoporus Betulinus, Boletus Pinicola, Boletus Edulis.
¿Tiene pie? s
Hay 2 setas encontradas.
Boletus Pinicola, Boletus Edulis.
El experto está introduciendo los datos correspondientes al Boletus Satanás, seta venenosa
que se podría confundir con otros boletus. Como se ve en el último paso, se ha restringido el
dominio de búsqueda a las setas de esta familia.
¿Tipo de laminas? n/a
Hay 2 setas encontradas.
Boletus Pinicola, Boletus Edulis.
¿Color de las laminas? naranja
No hay setas que se correspondan con esta descripcion.
Comenzamos proceso de aprendizaje...
7
Cuando se pregunta el color de las láminas (o de los poros, en este caso), el experto
introduce la característica que diferencia este boleto de los otros, el sistema lo detecta, y nos
informa de que va a pasar al modo de aprendizaje. En este modo se preguntan las características
restantes de la seta directamente.
¿Color del sombrero? pálido
¿Forma del sombrero? convexo
¿Forma del borde? curvado
¿Pie con anillo? n
¿Pie hueco? n
Una vez que el experto ha satisfecho las preguntas del programa, este le pide identificar
manualmente la seta, dando sus datos específicos;
****** Seta no identificada *******
La seta no estaba en nuestros archivos. Por favor, introduzca los siguientes
datos sobre la seta:
Nombre latino : Boletus Satanas
Nombre(s) comun(es): Boleto de Satanás
Comestibilidad : Venenosa
Tras esto, el programa guarda los nuevos conocimientos y vuelve al menú principal.
RREESSUULLTTAADDOOSS
Tras el proceso de aprendizaje descrito arriba, se clasificaron 17 setas a modo de ejemplo.
Este proceso rellenó los archivos preguntas.dat, DBHechos.dat y DBReglas.dat.
AArrcchhiivvoo pprreegguunnttaass..ddaatt
En este archivo quedaron registradas las preguntas que el experto consideró necesarias para
la clasificación y su orden. Son la piedra angular del sistema, y podrían ser ampliadas si se detecta
que no permiten la identificación unívoca de alguna seta. Estas preguntas son las que tiene que
responder el usuario cuando quiera clasificar la seta. Hay que hacer hincapié en que estas preguntas
sólo se pueden cambiar a mano, el programa no añadirá preguntas si detecta dos setas con idénticas
características (en su lugar dará un falso positivo).
Los contenidos del archivo son:
Tiene laminas
Tiene poros
Tiene sombrero
Tiene velo
Tiene volva
Tiene pie
Con cuticula
Tipo de laminas
Color de las laminas
Color del sombrero
Forma del sombrero
Forma del borde
Pie con anillo
Pie hueco
8
AArrcchhiivvoo DDBBHHeecchhooss..ddaatt
Este archivo es el resultado de la clasificación de cada seta, y es el que el programa usa para
después mostrar la información sobre cada seta. La información para cada seta se guarda en forma
de triplas (Nombre latín, Nombres comunes, Comestibilidad). Los contenidos alcanzados son:
clasificacion("Macrolepiota Procera","Parasol, apagador, matacandil","Excelente")
clasificacion("Cortinarius Odorifer","Cortinario perfumado","No comestible")
clasificacion("Russula Cyanoxantha","Carbonera, Urretxa","Excelente")
clasificacion("Lactarius Torminosus","Niscalo falso","Venenosa")
clasificacion("Lactarius Deliciosus","N¡scalo, M¡zcalo","Exquisito")
clasificacion("Piptoporus Betulinus","Yesquero del Abedul","No comestible")
clasificacion("Langermannia Gigantea","Bej¡n gigante","Comestible")
clasificacion("Pleurotus Eryngii","Seta de cardo","Excelente")
clasificacion("Pleurotus Eryngii var. Nebrodensis","Seta de ca¤a","Excelente")
clasificacion("Pleurotus Ostreatus","Orellana, oreja blanca, seta de chopo","Buena")
clasificacion("Boletus Pinicola","Boleto de pino","Excelente")
clasificacion("Boletus Edulis","Boleto comestible, sureny","Excelente")
clasificacion("Boletus Satanas","Boleto de Satan s","Venenosa")
clasificacion("Amanita Caesarea","Oronja, Ou de reig","Excelente")
clasificacion("Amanita Muscaria","Matamoscas","Venenosa")
clasificacion("Amanita Phalloides","Cicuta verde","Mortal")
clasificacion("Agaricus campester","Champi¤¢n","Excelente")
AArrcchhiivvoo DDBBRReeggllaass..ddaatt
Este archivo es el resultado de la tipificación de cada seta introducida, y guarda las
características de cada seta de forma que luego el programa pueda usar esos conocimientos
adquiridos. El formato que sigue este fichero será:
Línea 1 Nombre en latín de la seta
Línea 2…k Pregunta1~Respuesta1, Pregunta2~Respuesta2,…, PreguntaN~RespuestaN
Línea k+1 Nombre en latín de la seta
…..
Los contenidos de este fichero se listan a continuación:
Macrolepiota Procera
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~S,Tiene pie~S,Con
cuticula~S,Tipo de laminas~LIBRES,Color de las laminas~BLANCO,Color del sombrero~PARDO,Forma
del sombrero~GLOBOSO,Forma del borde~CURVADO,Pie con anillo~S,Pie hueco~S,
Cortinarius Odorifer
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~N,Tipo de laminas~ADNATAS,Color de las laminas~AMARILLO,Color del
sombrero~MARR¢N,Forma del sombrero~CONVEXO,Forma del borde~CURVADO,Pie con anillo~N,Pie
hueco~N,
Russula Cyanoxantha
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~N,Tipo de laminas~ADNATAS,Color de las laminas~BLANCO,Color del
sombrero~VIOLETA,Forma del sombrero~CONVEXO,Forma del borde~CURVADO,Pie con anillo~N,Pie
hueco~N,
Lactarius Torminosus
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~S,Tipo de laminas~DECURRENTES,Color de las laminas~CARNE,Color del
sombrero~OCRE,Forma del sombrero~EMBUDADO,Forma del borde~CONVOLUTO,Pie con anillo~N,Pie
hueco~S,
Lactarius Deliciosus
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~S,Tipo de laminas~DECURRENTES,Color de las laminas~NARANJA,Color del
sombrero~NARANJA,Forma del sombrero~DEPRIMIDO,Forma del borde~CONVOLUTO,Pie con anillo~N,Pie
hueco~S,
Piptoporus Betulinus
Tiene laminas~N,Tiene poros~S,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~N,Con
cuticula~S,Tipo de laminas~N/A,Color de las laminas~BLANCO,Color del sombrero~GRIS,Forma del
sombrero~SEMICIRCULAR,Forma del borde~CURVADO,Pie con anillo~N/A,Pie hueco~N/A,
9
Langermannia Gigantea
Tiene laminas~N,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~N,Con
cuticula~S,Tipo de laminas~N/A,Color de las laminas~ROSADO,Color del sombrero~BLANCO,Forma
del sombrero~GLOBOSO,Forma del borde~N/A,Pie con anillo~N/A,Pie hueco~N/A,
Pleurotus Eryngii
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~S,Tipo de laminas~DECURRENTES,Color de las laminas~OCRE,Color del
sombrero~MARR¢N,Forma del sombrero~APLANADO,Forma del borde~PLANO,Pie con anillo~N,Pie
hueco~N,
Pleurotus Eryngii var. Nebrodensis
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~N,Tipo de laminas~DECURRENTES,Color de las laminas~BLANCO,Color del
sombrero~BLANCO,Forma del sombrero~EMBUDADO,Forma del borde~CONVOLUTO,Pie con anillo~N,Pie
hueco~N,
Pleurotus Ostreatus
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~N,Con
cuticula~N,Tipo de laminas~DECURRENTES,Color de las laminas~BLANCO,Color del
sombrero~GRIS,Forma del sombrero~SEMICIRCULAR,Forma del borde~CONVOLUTO,Pie con
anillo~N/A,Pie hueco~N/A,
Boletus Pinicola
Tiene laminas~N,Tiene poros~S,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~S,Tipo de laminas~N/A,Color de las laminas~AMARILLO,Color del sombrero~ROJO,Forma
del sombrero~CONVEXO,Forma del borde~CURVADO,Pie con anillo~N,Pie hueco~N,
Boletus Edulis
Tiene laminas~N,Tiene poros~S,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~S,Tipo de laminas~N/A,Color de las laminas~AMARILLO,Color del sombrero~PARDO,Forma
del sombrero~CONVEXO,Forma del borde~CURVADO,Pie con anillo~N,Pie hueco~N,
Boletus Satanas
Tiene laminas~N,Tiene poros~S,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~S,Tipo de laminas~N/A,Color de las laminas~NARANJA,Color del sombrero~P LIDO,Forma
del sombrero~CONVEXO,Forma del borde~CURVADO,Pie con anillo~N,Pie hueco~N,
Amanita Caesarea
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~S,Tiene pie~S,Con
cuticula~S,Tipo de laminas~LIBRES,Color de las laminas~AMARILLO,Color del
sombrero~NARANJA,Forma del sombrero~CONVEXO,Forma del borde~PLANO,Pie con anillo~S,Pie
hueco~N,
Amanita Muscaria
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~S,Tiene pie~S,Con
cuticula~S,Tipo de laminas~LIBRES,Color de las laminas~BLANCO,Color del sombrero~ROJO,Forma
del sombrero~CONVEXO,Forma del borde~PLANO,Pie con anillo~S,Pie hueco~N,
Amanita Phalloides
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~S,Tiene pie~S,Con
cuticula~S,Tipo de laminas~LIBRES,Color de las laminas~BLANCO,Color del
sombrero~VERDOSO,Forma del sombrero~APLANADO,Forma del borde~PLANO,Pie con anillo~S,Pie
hueco~N,
Agaricus campester
Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con
cuticula~S,Tipo de laminas~LIBRES,Color de las laminas~ROSA,Color del sombrero~BLANCO,Forma
del sombrero~APLANADO,Forma del borde~CURVADO,Pie con anillo~S,Pie hueco~N,
MMEEJJOORRAASS PPRROOPPUUEESSTTAASS
Pese a haber elaborado un sistema experto totalmente funcional, hemos detectado un buen
número de mejoras en diversos aspectos de nuestro programa. No hemos implementado estas
mejoras debido a la falta de tiempo, pero las comentamos a continuación:
Respecto al motor de inferencias, podemos hacer una optimización, cargando las
características de cada seta justo antes de hacer la pregunta respectiva a esa
característica, con lo que nos ahorraríamos memoria ya que sólo se cargaría una
característica por cada seta en cada pregunta.
El sistema de preguntas puede ser mejorado notablemente. Es obvio que hay
preguntas excluyentes, por ejemplo, si un usuario responde que la seta que está
clasificando no tiene sombrero, es ilógico preguntarle de qué color es el sombrero.
10
Sin embargo, las preguntas de clasificación tampoco se pueden realizar como
árboles, ya que, independientemente de que la seta tenga sombrero o no habrá que
preguntar si tiene pie. Por tanto pensamos que se puede mejorar el sistema de
preguntas lineal que tenemos ahora añadiendo la posibilidad de hacer “desvíos”
dependiendo de la respuesta y después volver a una pregunta en común.
En la implementación actual del sistema, sólo se pueden aprender setas que tienen
algún par pregunta/respuesta distinto a las ya conocidas, lo que implica un diseño
muy cuidadoso de las preguntas por el experto. Sin embargo puede haber dos setas
lo suficientemente parecidas como para que el sistema no las distingan. Una mejora
para esta situación es añadir al programa un modo “edición” de modo que al llegar
a una identificación, el experto pueda decidir que es una identificación errónea y
añadir al sistema una pregunta que permita diferenciar las dos setas.
Finalmente, y gracias a haber usado Visual Prolog para nuestro programa, es
posible hacer una mejora visual, y pasar del sistema de línea de comandos a un
sistema de ventanas. Además se podrían usar las imágenes de las setas incluídas en
la carpeta imágenes para mostrar directamente al usuario la seta que ha clasificado,
o acceder a una base de datos (o un libro) indicando una descripción más detallada
de la seta.
Pensando siempre en facilitar el trabajo al usuario sería conveniente el realizar un
pequeño folleto o manual, con las posibles respuestas a una determinada pregunta.
Así por ejemplo un usuario no sepa exactamente que responder a la pregunta de
“forma del sombrero?”, podría acudir al manual donde tendría todas las posibles
respuestas con la definición o correspondiente dibujo de cada una de ellas (en
nuestro ejemplo: convexo,cónico,globoso,plano,deprimido,embonado,etc), la
respuesta por parte del usuario sería más acertada. Y de esta forma evitaríamos
errores como responder naranja en lugar de anaranjado, siendo lo mismo o
prácticamente (obviamos este debate), darían respuestas totalmente diferentes.
DDIISSCCUUSSIIOONN YY CCOONNCCLLUUSSIIÓÓNN
El trabajo presentado tiene los siguientes objetivos principales:
1. Identificar cualquier tipo de seta en base a características externas que presenta, dando
como resultado el reconocimiento de ésta.
2. Construcción de una base de datos de conocimiento utilizando el concepto de Sistemas
Expertos, resaltando la importancia de usar fuentes de conocimiento, para apoyar el
conocimiento subjetivo del experto .
3. Elaborar un Motor de inferencia en Prolog, necesario para mantener el funcionamiento del
sistema experto.
El sistema desarrollado responde a la necesidad de poder tipificar e identificar setas y
hongos en base a características observables.
Su campo de aplicación se puede dar en dos áreas importantes:
11
Investigación: En estudios de micología, para tipificar en base a la caracterización que
previamente se tiene en la base de datos dinámica del sistema experto, la cual se encuentra
inicialmente alimentada por el experto.
Educación: En la enseñanza o introducción a la micología en base a la interacción sistema–
usuario con preguntas del sistema y respuestas del usuario haciendo que el sistema
identifique que seta ha encontrado el usuario dependiendo de lo acertado de la respuesta del
usuario.
El sistema experto que se presenta se encuentra inicialmente alimentado en su base de datos
por la información que el experto del área pueda proporcionar. Esta base de datos se torna dinámica
por cuanto posteriormente y con el uso que tenga el sistema experto, la base de datos se
incrementará.
El alcance del sistema depende principalmente del experto que alimenta inicialmente la
base de datos, teniendo como limitante principal el uso posterior que se le pueda dar al sistema
experto por parte de usuarios considerados como expertos y que por una alimentación no eficiente
de la base de datos por estos últimos, la base de datos pueda tener datos inconsistentes .
Lo que podría pasar en la realidad si este programa fuera utilizado con alguno de estos fines
es que en una primera prueba el sistema experto con la base de conocimientos implementada tendría
un buen funcionamiento, por cuanto que permite que un segundo usuario no experto en micología
pueda identificar una seta con las características que este ultimo proporciona al sistema.
Si se realizara una segunda prueba con el sistema experto, para la cuál se utilizara un
usuario experto en micología, el cual podía realizar tareas de identificación con la base de datos
predefinida en el sistema y también podía retroalimentar al sistema en base a la interacción usuario-
sistema. En principio esto tendría buen resultado por cuanto algunas características no tipificadas
por el primer experto serían hechas por el segundo experto, aumentando así la precisión del sistema.
El problema sería que en cuanto, la tipificación del segundo experto no coincida en una
característica con la tipificación hecha por el primer experto, esta no coincidencia supondría que
posteriormente el sistema experto entraría en conflicto cuando se tipificaran setas, lo cual no es
realmente cierto por cuanto el sistema experto identificaba a la seta con cualquiera de las
clasificaciones hechas (ya sea con el primer experto o con el segundo experto), pero no es
consistente de que una seta este descrita de diferentes formas.
Como una última anotación para este sistema experto, decir que hemos elegido tipificar o
catalogar setas, pero bastaría con modificar los ficheros correspondientes a las bases de datos
(pregunta.dat, DBHechos.dta y DBReglas.dat) para poder tipificar cualquier otro objeto, ser vivo, o
lo que se nos ocurra, pero no habrá que modificar en ningún momento el código fuente,
simplemente volver a realizar el proceso de entrenamiento del sistema gracias a un experto en el
tema.
12
BBIIBBLLIIOOGGRRAAFFÍÍAA
Lista de correo de prolog. Hispalinux. [en línea]. Disponible en Internet: <
prolog@listas.hispalinux.es> y <https://listas.hispalinux.es/mailman/listinfo/prolog>
José Angel Bañares Bañares, universidad De Zaragoza. Ingeniería de los Sistemas Basados
en el Conocimiento [en línea], 2003, <http://iaaa.cps.unizar.es/docencia/ISBC.html>
Nieves Pavón, Universidad de Huelva. Visual Prolog: entorno de desarrollo [en línea],
2003,
<http://www.uhu.es/nieves.pavon/pprogramacion/practicas/visualprolog/visualprolog.html>
Prolog Development Center A/S. Visual Prolog 5.x language tutorial.[archivo PDF], 2001.
Prolog Development Center A/S. Visual Prolog 5.x getting started.[archivo PDF], 2001.
MENDAZA RINCÓN, Ramón y DÍAZ MONTOYA, Guillermo. Las setas: guía
fotográfica y descriptiva. Iberduero, 1987.
MORENO, Gabriel et al. La guía de Incafo de los hongos de la Península Ibérica. Incafo,
1986.
13
CCÓÓDDIIGGOO CCOOMMEENNTTAADDOO
/*****************************************************************************
INTELIGENCIA EN REDES DE COMUNICACIONES
2003 Universidad Carlos III
Project: Sistema Experto de Reconocimiento de Setas
Written by: Héctor Pérez Martín y Laura Asenjo Manzano
Comments: Extensible para reconocimiento de cualquier otra cosa: plantas,
flores,insectos,etc
******************************************************************************/
/* Domains: En esta sección se define el tipo de objetos con los que trabajaremos.*/
/* Dominios locales. */
domains
Opcion,Longitud,Longitud1,Longitud2,Longitud3,entero,num=integer
Pos,Pos1,Pos2,Pos3,Pos4,Pos5,Pos6,Total,TotalTmp=integer
Salida,Cadena,Cad1,Cad2,Cad3=string
Regla,TotalStr,Resultado1=string
LRegla=Cadena*
ListaSujetos,ListaNegativos=Sujeto*
/* Dominios globales (los usados en las BD de hechos y los archivos.*/
global domains
file=input1;input2
Sujeto,Pregunta,Respuesta,Resultado,Propiedad1,Propiedad2,Estado=string
/* Bases de datos de hechos (dinámicas).
Colocamos cada tipo de hechos por separado por comodidad.*/
global facts - propiedades
propiedad (Sujeto,Pregunta, Respuesta)
global facts - categoria
clasificacion (Sujeto, Propiedad1, Propiedad2)
global facts - encontrado
encontrado (Estado)
/* En la sección PREDICATES definimos el nombre y el tipo de los argumentos de
todos los predicados que se usarán durante el programa.*/
predicates
analiza
analiza_pregunta (string, Pregunta, Respuesta)
barra
borraeliminados (ListaSujetos)
clasifica_resultado (ListaSujetos)
contar (ListaSujetos, entero)
decodifica (Cadena, Sujeto)
escribeLista (ListaSujetos)
existeBD (entero)
graba (LRegla, LRegla)
menu (Opcion, Regla)
novalido (Sujeto, Pregunta, Respuesta)
nuevosujeto
pantallainicio
pregunta (LRegla)
repetir
/* Goal. En esta sección se definen los objetivos a lograr al ejecutar el programa.*/
goal
pantallainicio.
14
/* Clauses. Contiene la implementación del conjunto de hechos y reglas que componen
el programa.*/
clauses
/* Corresponde a la pantalla principal del sistema, presenta opciones para ejecutar
el sistema
1--> Visualizaremos el contenido de los ficheros utilizados por el sistema.
2--> Proceso de pregunta-respuesta para identificar una seta.
3--> Terminamos el programa.*/
barra:-
nl,
write ("(1) Bases de Datos (2) Clasificador (3) Salirn"),
write ("==>"),
readint (Opcion),
nl,
menu (Opcion, "principal").
/* Corresponde al segundo menú del programa, el usuario desea visualizar los archivos
1--> Para visualizar DBHechos.dat.
2--> Para visualizar preguntas.dat.
3--> Para visualizar DBReglas.dat.*/
menu(1,"principal"):-
write("(1)Muestra Clasificacionn"),
write("(2)Muestra Preguntasn"),
write("(3)Muestra Reglasn"),
write("==>"),
readint(Opcion),
nl,
menu(Opcion,"BD").
/* Muestra en pantalla el contenido de DBHechos.dat.*/
menu (1,"BD"):-
/* file_str(File,String). Lee un archivo y lo guarda en String.*/
file_str ("DBHechos.dat",Salida),
write(Salida),
barra.
/* Muestra en pantalla del contenido de pregunta.dat.*/
menu (2, "BD"):-
file_str ("pregunta.dat",Salida),
write(Salida),
nl,
barra.
/* Despliegue en pantalla del contenido de DBReglas.dat.*/
menu (3, "BD"):-
file_str ("DBReglas.dat",Salida),
write(Salida),
nl,
barra.
/* Si el usuario elige una opción incorrecta (distinto de 1,2 ó 3).*/
menu(_,"BD"):-
write("Tecla incorrecta...Intentelo de nuevo"),
menu(1,"principal").
/* Entorno de preguntas-respuetas. Clasificación de setas.*/
menu(2,"principal"):-
/* determ retractall(Hecho, NombreSeccionHechos): Borra todos los hechos encontrados
que casen con el hecho especificado en el argumento. Actúa sobre del dominio
de hechos con nombre NombreSeccionHechos.*/
retractall(_,categoria),
/* consult(String NombreFichero, NombreSeccionHechos): Sirve para leer hechos desde
un fichero de hechos y almacenarlos en la base de hechos de nombre
NombreSeccionHechos. Este fichero debe haber sido salvado con save.*/
consult("DBHechos.dat",categoria),
retractall(_),
retractall(_,encontrado),
15
assertz(encontrado("Falso")),
/* Obtenemos las reglas de clasificación, para decodificarlas y cargarlas al
sistema.*/
openread(input1,"DBReglas.dat"),
repetir,
analiza,
closefile(input1),
/* Abrimos el archivo de preguntas para comenzar el proceso de identificación.*/
openread(input2,"Pregunta.dat"),
repetir,
Pregunta(LRegla),
closefile(input2),
/* Si el sujeto no se encontraba en las reglas lo añadimos.*/
nuevosujeto,
graba(LRegla,LRegla),
/* Vuelta al menú principal.*/
barra.
/* Salir de la aplicación.*/
menu(3,"principal"):-
write("Presione una tecla para salir"),
readchar(_).
/* Si el usuario elige una opción incorrecta (distinto de 1,2 ó 3).*/
menu(_,"principal"):-
write("Tecla incorrecta...Intentelo de nuevo"),
barra.
/* Leemos del fichero DBReglas para cada seta su nombre en latín (sujeto) y sus preguntas
con las respuestas (Cadena).*/
analiza:-
eof(input1),!. /* Llegamos al final del fichero DBReglas.dat.*/
analiza:-
readdevice(input1),
readln(Sujeto),
readln(Cadena),
/* Parseamos las preguntas-respuestas.*/
decodifica(Cadena,Sujeto).
/* Creamos un hecho por cada pregunta-respuesta asociado al sujeto, por tanto deberemos
parsear Cadena, ya que aquí se encuentran concatenadas todas
pregunta1~repuesta1, pregunta2~repuesta2,...*/
decodifica(Cadena,Sujeto):-
/* Cogemos de la posición de la coma y hacemos un substring hasta esa coma
ej:Toma leche~S, */
str_len(Cadena,Longitud),
searchchar(Cadena,',',Pos),
Pos1=Pos-1,
subString(Cadena,1,Pos1,Cadena1),
/* De la subcadena esta tomamos la longitud y creamos una subcadena con lo que hay
delante y detrás de ~ .*/
str_len(Cadena1,Longitud1),
searchchar(Cadena1,'~',Pos2),
Pos3=Pos2-1,
substring(Cadena1,1,Pos3,Pregunta),
Pos4=Pos2+1,
searchchar(Cadena1,'~',Pos6),
Longitud2=Longitud1-Pos6,
substring(Cadena1,Pos4,Longitud2,Respuesta),
/* Una vez que tenemos la pregunta y la respuesta podemos llamar a assetz esta
característica.*/
assertz(propiedad(Sujeto,Pregunta,Respuesta)),
16
Pos5=Pos+1,
Longitud3=Longitud-Pos,
substring(Cadena,Pos5,Longitud3,Cadena2),
/* Y así con todas las preguntas y respuestas de un mismo sujeto.*/
decodifica(Cadena2,Sujeto).
/* Pregunta lleva a cabo el proceso de preguntar, guardar la respuesta del usuario y
eliminar los sujetos que ya no son solución. Si en algún momento no queda ningún sujeto
se pasa al estado de aprendizaje para completar el resto de preguntas. Si se llega a la
última pregunta y queda algún sujeto, entonces ese sujeto es la solución.*/
/* Si hemos terminado las preguntas, comprobar si tenemos algún sujeto concordante.*/
Pregunta([]):-
/* eof(SFN) Es verdadera si el apuntador del archivo ya está al final del mismo.*/
eof(input2),
encontrado("Falso"),
findall(X,propiedad(X,_,_),ListaSujetos),
/* Contamos el numero de sujetos cuya descripción concuerdan con las respuestas
dadas por el usuario, si no hay ninguno será que no tenemos identificada a esa
seta y aprenderemos.*/
contar(ListaSujetos,Y),
Y<>0,
retractall(_,encontrado),
assertz(encontrado("Verdadero")),
/* Imprimimos por pantalla las características del sujeto encontrado.*/
clasifica_resultado(ListaSujetos),!.
/* Identificación el final del archivo preguntas.dat Y como anteriormente hemos averiguado
que no tenemos esa seta en la BD, tendremos que aprender después.*/
Pregunta([]):-
eof(input2),
encontrado("No existe"),!.
/* Pregunta al usuario usando la BD Preguntas. Las respuestas del usuario se convierten en
mayúsculas para facilitar las comparaciones. Las preguntas pueden ser del tipo S/N o con
valores complejos, como colores u otras propiedades. Se guarda el par pregunta-respuesta
en LRegla, para que si no se conoce el sujeto poder usar esos conocimientos en la etapa
de aprendizaje. Después se llama a analiza_pregunta para eliminar los sujetos que no
responden a la nueva característica introducida por el usuario, y se continúa con el
resto de preguntas.*/
Pregunta([Cad3|T]):-
readdevice(input2),
/* Lee una pregunta.*/
readln(Pregunta),
Pregunta<>"",
/* Escribe la pregunta, el usuario podrá responder en mayúsculas o minúsculas.*/
write("168",Pregunta,"? "),
readdevice(stdin),
readln(Respuesta1),
/* Tratamos la cadena para que sea toda en mayúsculas.*/
upper_lower(Respuesta, Respuesta1),
/* Analizamos los sujetos que responden a estas características y eliminamos el
resto.*/
analiza_pregunta("",Pregunta,Respuesta),
/* Concatenamos Pregunta~Respuesta, para poder aprender en caso de que sea
necesario.*/
concat(Pregunta,"~",Cad1),
concat(Cad1,Respuesta,Cad2),
concat(Cad2,",",Cad3),
/* Seguimos mostrando preguntas.*/
pregunta(T).
17
/* Analiza los sujetos que cumplen una pregunta y una respuesta, eliminando al resto.
Si no hay sujetos que cumplan esa pregunta/respuesta, activa el modo de aprendizaje y
desactiva el modo de análisis.
Por aquí entraremos cuando estemos en el proceso de aprendizaje.*/
analiza_pregunta(_,_,_):-
encontrado(XX),
XX<>"Falso",!.
/* Por aquí entraremos cuando estemos en el proceso de análisis.*/
analiza_pregunta(_,Pregunta,Respuesta):-
/* Obtener los sujetos concordantes.*/
findall(X,propiedad(X,Pregunta,Respuesta),ListaSujetos),
/* Y los contamos.*/
contar(ListaSujetos,Y),
/* Dependiendo del número de sujetos concordantes, cambiar de modo o no.*/
existeBD(Y),
/* Mostrar sujetos concordantes (si los hay).*/
escribelista(ListaSujetos),nl,
nl,
/* Buscamos los sujetos que no tengan la misma respuesta que dio el usuario para
una pregunta, esos sujetos no serán solución y los podremos eliminar.*/
findall(XX,novalido(XX,Pregunta,Respuesta),ListaNegativos),
borraeliminados(ListaNegativos).
/* Cuenta los elementos de una lista.*/
contar([],0).
contar([_|T],Total):-
contar(T,TotalTmp),
Total=TotalTmp+1.
/* Obtiene los sujetos cuya respuesta no coincide con una respuesta dada.*/
novalido(Sujeto,Pregunta,Respuesta):-
propiedad(Sujeto,Pregunta,Z),
Z<>Respuesta.
/* Eliminar sujetos que no pueden ser solución.*/
borraeliminados([]).
borraeliminados([H|T]):-
retractall(propiedad(H,_,_)),
borraeliminados(T).
/* Comprueba la cantidad de sujetos encontrados con las características dadas */
/* Si no hay ningún sujeto concordante, pasar al modo de aprendizaje e informar de ello.
Así ahorramos el tener que hacer el análisis una vez que no queden sujetos.*/
existeBD(0):-
retractall(_,encontrado),
assertz(encontrado("No existe")),
write("No hay setas que se correspondan con esta descripcion."),
nl,
write("Comenzamos proceso de aprendizaje...n"),!.
/* Si solo hay uno, informar de ello, pero obligar al usuario a que siga respondiendo
preguntas para asegurarse (minimizar la posibilidad de falsos positivos).*/
existeBD(1):-
write("Hay una seta encontrada. Siga respondiendo a las preguntas para estar
seguro.n"),!.
/* Si el numero de setas que se adecuan a la descripción que da el usuario es distinto de
cero, es porque podemos tener esa seta catalogada, por tanto tendremos que seguir
preguntando y analizar cada pregunta-respuesta.*/
existeBD(Y):-
write("Hay ",Y," setas encontradas.n"),!.
18
/* Grabación de regla en archivo.*/
/* Si el sujeto esta clasificado en DBHechos (encontrado=verdadero) no haremos nada.*/
nuevosujeto:-
encontrado("Verdadero"),!.
/* Si el sujeto no se encuentra en nuestra clasificación de setas (DBHechos) aprenderemos.
Preguntaremos al usuario de que seta se trata y lo almacenaremos convenientemente en los
ficheros DBHechos.dat y DBReglas.dat.*/
nuevosujeto:-
/* Informamos de que el sujeto no estaba en nuestras bases de datos, y pedimos al
usuario que introduzca los datos.*/
nl,nl,
write("****** Seta no identificada *******n"),
write("La seta no estaba en nuestros archivos. Por favor, introduzca los siguientes
datos sobre la seta:"),nl,
/* El usuario introduce los datos del nuevo sujeto para completar el aprendizaje.*/
write("Nombre latino : "),readln(Resultado),
write("Nombre(s) comun(es): "),readln(Propiedad1),
write("Comestibilidad : "),readln(Propiedad2),
/* Añadimos a la BD de hechos los datos introducidos.*/
openappend(input1,"DBHechos.dat"),
writedevice(input1),
write("clasificacion("",Resultado,"","",Propiedad1,"","",Propiedad2,"")n"),
closefile(input1),
/* Añadimos a la BD de reglas las preguntas/respuestas introducidas por el
usuario.*/
openappend(input2,"DBReglas.dat"),
writedevice(input2),
nl,
write(Resultado),nl,
closefile(input2).
/* Imprime por pantalla el resultado y su clasificación.*/
clasifica_resultado([H|_T]):-
Clasificacion(H,Propiedad1,Propiedad2),
nl,
write("********* RESULTADO ENCONTRADO: ********n"),
write("Nombre latino : ",H),nl,
write("Nombre(s) Comun(es): ",Propiedad1),nl,
write("Comestibilidad : ",Propiedad2),nl,
write("****************************************n"),
nl.
/* Identificación y registro en la BD de Reglas de datos aprendidos correspondiente al
sujeto no identificado.*/
/*Si hemos grabado todo el contenido de LRegla(Pregunta1~Respuesta1,Pregunta2~Respuesta2...)
en DBRegla.dat terminamos.*/
graba([],_):-
closefile(input2),!.
/* Si hemos encontrado la seta no necesitamos grabar en DBReglas.dat.*/
graba(_,_):-
encontrado("Verdadero"),!.
/* Si hemos aprendido almacenamos en DBReglas todas las preguntas y respuestas que el
usuario ha ido respondiendo a lo largo de todo el proceso.*/
graba([H|T],LRegla):-
openappend(input2,"DBReglas.dat"),
writedevice(input2),
write(H),
closefile(input2),
graba(T,LRegla).
/* Escribe una pantalla con los créditos del programa.*/
19
pantallainicio:-
write("201205205205205205205205205205205205205205205205205205205
205205205205205205205205205205205205205205205205205205205205205
205205205205205205205205205205205205205205205205205205205187n"),
write("186 SISTEMA EXPERTO DE CLASIFICACION DE SETAS 186n"),
write("186196196196196196196196196196196196196196196196196196196
196196196196196196196196196196196196196196196196196196196196196
196196196196196196196196196196196196196196196196196196196186n"),
write("186 Autores: 186n"),
write("186 LAURA ASENJO MANZANO 186n"),
write("186 H144CTOR P144REZ MARTIN 186n"),
write("186196196196196196196196196196196196196196196196196196196
196196196196196196196196196196196196196196196196196196196196196
196196196196196196196196196196196196196196196196196196196186n"),
write("186 Inteligencia en redes de comunicaci149n 186n"),
write("186 Universidad Carlos III de Madrid, a164o 2003 186n"),
write("186196196196196196196196196196196196196196196196196196196
196196196196196196196196196196196196196196196196196196196196196
196196196196196196196196196196196196196196196196196196196186n"),
write("186Este programa solo tiene fines educativos. Los autores no 186n"),
write("186 se hacen responsable de las consecuencias debidas a una 186n"),
write("186 clasificación erróneaa. Compruebe siempre los resultados.186n"),
write("200205205205205205205205205205205205205205205205205205205
205205205205205205205205205205205205205205205205205205205205205
205205205205205205205205205205205205205205205205205205205188n"),
barra.
/* Imprime por pantalla una lista de elementos, con una puntuación correcta para separarlos.
*/
escribeLista([]).
escribeLista([H]):-
write(H,".").
escribeLista([H|T]):-
write(H,", "),
escribeLista(T).
/*Repeticion */
repetir.
repetir:-
repetir.

Más contenido relacionado

Destacado

stop-the-presses-whitepaper (1)
stop-the-presses-whitepaper (1)stop-the-presses-whitepaper (1)
stop-the-presses-whitepaper (1)Jaron Mandel
 
Robo de identidad y consecuencias sociales
Robo de identidad y consecuencias socialesRobo de identidad y consecuencias sociales
Robo de identidad y consecuencias socialesUABC
 
Communicable and Non-communicable diseases
Communicable and Non-communicable diseasesCommunicable and Non-communicable diseases
Communicable and Non-communicable diseasesKumarlalit750
 
Human Evolution - The drastic change
Human Evolution - The drastic changeHuman Evolution - The drastic change
Human Evolution - The drastic changeKumarlalit750
 
Photosynthesis PPT FOR CLASS 9,10 and 11Th students
Photosynthesis PPT FOR CLASS 9,10 and 11Th studentsPhotosynthesis PPT FOR CLASS 9,10 and 11Th students
Photosynthesis PPT FOR CLASS 9,10 and 11Th studentsKumarlalit750
 
Communicable and Non-communicable diseases
Communicable and Non-communicable diseasesCommunicable and Non-communicable diseases
Communicable and Non-communicable diseasesKumarlalit750
 
קורות חיים - ולנטינה פדייב
קורות חיים - ולנטינה פדייבקורות חיים - ולנטינה פדייב
קורות חיים - ולנטינה פדייבValentina Fadeeva
 
Predictive modeling in trucking how critical decisions are made using data
Predictive modeling in trucking   how critical decisions are made using dataPredictive modeling in trucking   how critical decisions are made using data
Predictive modeling in trucking how critical decisions are made using dataRamprasad Renganathan
 
Urc social management c2 rong do recalling
Urc social management   c2 rong do recallingUrc social management   c2 rong do recalling
Urc social management c2 rong do recallingZenka Lix
 
Mirkrasok sergey grinkevich-for-praktikadays2016-fin
Mirkrasok sergey grinkevich-for-praktikadays2016-finMirkrasok sergey grinkevich-for-praktikadays2016-fin
Mirkrasok sergey grinkevich-for-praktikadays2016-finAlexandra Zhirnovskaya
 
Futujama димтров-футужама260516
Futujama димтров-футужама260516Futujama димтров-футужама260516
Futujama димтров-футужама260516Alexandra Zhirnovskaya
 

Destacado (20)

stop-the-presses-whitepaper (1)
stop-the-presses-whitepaper (1)stop-the-presses-whitepaper (1)
stop-the-presses-whitepaper (1)
 
Sebas 11 2
Sebas 11 2Sebas 11 2
Sebas 11 2
 
La mujer
La mujerLa mujer
La mujer
 
Final Paper- Outline
Final Paper- OutlineFinal Paper- Outline
Final Paper- Outline
 
SEM/EDS Analysis
SEM/EDS AnalysisSEM/EDS Analysis
SEM/EDS Analysis
 
Trabajo de sebastian
Trabajo de sebastianTrabajo de sebastian
Trabajo de sebastian
 
FTIR Analysis
FTIR AnalysisFTIR Analysis
FTIR Analysis
 
Cocina gourmet
Cocina gourmet Cocina gourmet
Cocina gourmet
 
Robo de identidad y consecuencias sociales
Robo de identidad y consecuencias socialesRobo de identidad y consecuencias sociales
Robo de identidad y consecuencias sociales
 
Communicable and Non-communicable diseases
Communicable and Non-communicable diseasesCommunicable and Non-communicable diseases
Communicable and Non-communicable diseases
 
Infraestructura Vial
Infraestructura VialInfraestructura Vial
Infraestructura Vial
 
Human Evolution - The drastic change
Human Evolution - The drastic changeHuman Evolution - The drastic change
Human Evolution - The drastic change
 
Photosynthesis PPT FOR CLASS 9,10 and 11Th students
Photosynthesis PPT FOR CLASS 9,10 and 11Th studentsPhotosynthesis PPT FOR CLASS 9,10 and 11Th students
Photosynthesis PPT FOR CLASS 9,10 and 11Th students
 
Communicable and Non-communicable diseases
Communicable and Non-communicable diseasesCommunicable and Non-communicable diseases
Communicable and Non-communicable diseases
 
קורות חיים - ולנטינה פדייב
קורות חיים - ולנטינה פדייבקורות חיים - ולנטינה פדייב
קורות חיים - ולנטינה פדייב
 
Predictive modeling in trucking how critical decisions are made using data
Predictive modeling in trucking   how critical decisions are made using dataPredictive modeling in trucking   how critical decisions are made using data
Predictive modeling in trucking how critical decisions are made using data
 
Urc social management c2 rong do recalling
Urc social management   c2 rong do recallingUrc social management   c2 rong do recalling
Urc social management c2 rong do recalling
 
Mirkrasok sergey grinkevich-for-praktikadays2016-fin
Mirkrasok sergey grinkevich-for-praktikadays2016-finMirkrasok sergey grinkevich-for-praktikadays2016-fin
Mirkrasok sergey grinkevich-for-praktikadays2016-fin
 
Sistema solar
Sistema solarSistema solar
Sistema solar
 
Futujama димтров-футужама260516
Futujama димтров-футужама260516Futujama димтров-футужама260516
Futujama димтров-футужама260516
 

Similar a 9.mem

Sistema Experto : Juego "3 en Raya" bajo plataforma Linux (Ubuntu)
Sistema Experto : Juego "3 en Raya" bajo plataforma Linux (Ubuntu)Sistema Experto : Juego "3 en Raya" bajo plataforma Linux (Ubuntu)
Sistema Experto : Juego "3 en Raya" bajo plataforma Linux (Ubuntu)jclavotafur
 
Lady informe ia
Lady informe iaLady informe ia
Lady informe ialadyespino
 
Lady informe ia
Lady informe iaLady informe ia
Lady informe ialadyespino
 
Lady informe ia
Lady informe iaLady informe ia
Lady informe ialadyespino
 
Proyecto elaboración y mantenimiento de sistemas de información
Proyecto elaboración y mantenimiento de sistemas de informaciónProyecto elaboración y mantenimiento de sistemas de información
Proyecto elaboración y mantenimiento de sistemas de informaciónAris Juarez
 
Ciclo de vida de un sistema de informacion
Ciclo de vida de un sistema de informacionCiclo de vida de un sistema de informacion
Ciclo de vida de un sistema de informacionSonia Santiago
 
Ciclo de vida de un sistema de informacion
Ciclo de vida de un sistema de informacionCiclo de vida de un sistema de informacion
Ciclo de vida de un sistema de informacionSonia Santiago
 
Sistema de Ventas de Muebles en Prolog
Sistema de Ventas de Muebles en PrologSistema de Ventas de Muebles en Prolog
Sistema de Ventas de Muebles en Prologculquinet
 
Aspectos más importantes del trabajo de una analista
Aspectos más importantes del trabajo de una analistaAspectos más importantes del trabajo de una analista
Aspectos más importantes del trabajo de una analistamyle22
 
Proyecto final 3r parcial herramientas de info
Proyecto final 3r parcial herramientas de infoProyecto final 3r parcial herramientas de info
Proyecto final 3r parcial herramientas de infojuan_gregorio
 
Tópicos 20-10-15
Tópicos 20-10-15Tópicos 20-10-15
Tópicos 20-10-15anxelito
 
Sistema experto para determinar la personalidad de un individuo
Sistema experto para determinar la personalidad de un individuoSistema experto para determinar la personalidad de un individuo
Sistema experto para determinar la personalidad de un individuoBndy Quilcate
 
Sistema_experto de_licuados_nutritivos
Sistema_experto de_licuados_nutritivosSistema_experto de_licuados_nutritivos
Sistema_experto de_licuados_nutritivosNils Gálvez Alcalde
 
Tema 10. unidad iv. eai. equipo scm
Tema 10. unidad iv. eai. equipo scmTema 10. unidad iv. eai. equipo scm
Tema 10. unidad iv. eai. equipo scmacpicegudomonagas
 
Aspectos más importantes de un analista
Aspectos más importantes  de un analistaAspectos más importantes  de un analista
Aspectos más importantes de un analistajuan198
 
Metodología para el desarrollo de sistema de información según jeffrey whitten
Metodología para el desarrollo de sistema de información según jeffrey whittenMetodología para el desarrollo de sistema de información según jeffrey whitten
Metodología para el desarrollo de sistema de información según jeffrey whittentravesuras79
 

Similar a 9.mem (20)

Sistema Experto : Juego "3 en Raya" bajo plataforma Linux (Ubuntu)
Sistema Experto : Juego "3 en Raya" bajo plataforma Linux (Ubuntu)Sistema Experto : Juego "3 en Raya" bajo plataforma Linux (Ubuntu)
Sistema Experto : Juego "3 en Raya" bajo plataforma Linux (Ubuntu)
 
Sistema experto
Sistema expertoSistema experto
Sistema experto
 
3894151.ppt
3894151.ppt3894151.ppt
3894151.ppt
 
Lady informe ia
Lady informe iaLady informe ia
Lady informe ia
 
Lady informe ia
Lady informe iaLady informe ia
Lady informe ia
 
Lady informe ia
Lady informe iaLady informe ia
Lady informe ia
 
Proyecto elaboración y mantenimiento de sistemas de información
Proyecto elaboración y mantenimiento de sistemas de informaciónProyecto elaboración y mantenimiento de sistemas de información
Proyecto elaboración y mantenimiento de sistemas de información
 
Ciclo de vida de un sistema de informacion
Ciclo de vida de un sistema de informacionCiclo de vida de un sistema de informacion
Ciclo de vida de un sistema de informacion
 
Ciclo de vida de un sistema de informacion
Ciclo de vida de un sistema de informacionCiclo de vida de un sistema de informacion
Ciclo de vida de un sistema de informacion
 
Sistema de Ventas de Muebles en Prolog
Sistema de Ventas de Muebles en PrologSistema de Ventas de Muebles en Prolog
Sistema de Ventas de Muebles en Prolog
 
Aspectos más importantes del trabajo de una analista
Aspectos más importantes del trabajo de una analistaAspectos más importantes del trabajo de una analista
Aspectos más importantes del trabajo de una analista
 
Proyecto final 3r parcial herramientas de info
Proyecto final 3r parcial herramientas de infoProyecto final 3r parcial herramientas de info
Proyecto final 3r parcial herramientas de info
 
Tópicos 20-10-15
Tópicos 20-10-15Tópicos 20-10-15
Tópicos 20-10-15
 
Sistema experto para determinar la personalidad de un individuo
Sistema experto para determinar la personalidad de un individuoSistema experto para determinar la personalidad de un individuo
Sistema experto para determinar la personalidad de un individuo
 
Sistemas expertos
Sistemas expertosSistemas expertos
Sistemas expertos
 
Sistema_experto de_licuados_nutritivos
Sistema_experto de_licuados_nutritivosSistema_experto de_licuados_nutritivos
Sistema_experto de_licuados_nutritivos
 
Sistema experto
Sistema expertoSistema experto
Sistema experto
 
Tema 10. unidad iv. eai. equipo scm
Tema 10. unidad iv. eai. equipo scmTema 10. unidad iv. eai. equipo scm
Tema 10. unidad iv. eai. equipo scm
 
Aspectos más importantes de un analista
Aspectos más importantes  de un analistaAspectos más importantes  de un analista
Aspectos más importantes de un analista
 
Metodología para el desarrollo de sistema de información según jeffrey whitten
Metodología para el desarrollo de sistema de información según jeffrey whittenMetodología para el desarrollo de sistema de información según jeffrey whitten
Metodología para el desarrollo de sistema de información según jeffrey whitten
 

Último

Historia de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfHistoria de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfIsbelRodrguez
 
Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.ALEJANDROLEONGALICIA
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALKATHIAMILAGRITOSSANC
 
Conservatorio de danza Kina Jiménez de Almería
Conservatorio de danza Kina Jiménez de AlmeríaConservatorio de danza Kina Jiménez de Almería
Conservatorio de danza Kina Jiménez de AlmeríaANDECE
 
Biología molecular ADN recombinante.pptx
Biología molecular ADN recombinante.pptxBiología molecular ADN recombinante.pptx
Biología molecular ADN recombinante.pptxluisvalero46
 
AVANCE EXPEDIENTE TECNICO POROTO - TRUJILLO
AVANCE EXPEDIENTE TECNICO POROTO - TRUJILLOAVANCE EXPEDIENTE TECNICO POROTO - TRUJILLO
AVANCE EXPEDIENTE TECNICO POROTO - TRUJILLOSANTOSESTANISLAORODR
 
Tiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IITiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IILauraFernandaValdovi
 
Electromagnetismo Fisica FisicaFisica.pdf
Electromagnetismo Fisica FisicaFisica.pdfElectromagnetismo Fisica FisicaFisica.pdf
Electromagnetismo Fisica FisicaFisica.pdfAnonymous0pBRsQXfnx
 
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptx
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptxTEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptx
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptxYEDSONJACINTOBUSTAMA
 
Edificio residencial Tarsia de AEDAS Homes Granada
Edificio residencial Tarsia de AEDAS Homes GranadaEdificio residencial Tarsia de AEDAS Homes Granada
Edificio residencial Tarsia de AEDAS Homes GranadaANDECE
 
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfTAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfAntonioGonzalezIzqui
 
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIACLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIAMayraOchoa35
 
Fijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEFijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEANDECE
 
Fe_C_Tratamientos termicos_uap _3_.ppt
Fe_C_Tratamientos termicos_uap   _3_.pptFe_C_Tratamientos termicos_uap   _3_.ppt
Fe_C_Tratamientos termicos_uap _3_.pptVitobailon
 
CLASE - 01 de construcción 1 ingeniería civil
CLASE - 01 de construcción 1 ingeniería civilCLASE - 01 de construcción 1 ingeniería civil
CLASE - 01 de construcción 1 ingeniería civilDissneredwinPaivahua
 
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdfLEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdfAdelaHerrera9
 
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfPresentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfMirthaFernandez12
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxEduardoSnchezHernnde5
 
Final Ashto método mecánica de suelos info
Final Ashto método mecánica de suelos infoFinal Ashto método mecánica de suelos info
Final Ashto método mecánica de suelos infoMEYERQuitoSalas
 
Físicas 1: Ecuaciones Dimensionales y Vectores
Físicas 1: Ecuaciones Dimensionales y VectoresFísicas 1: Ecuaciones Dimensionales y Vectores
Físicas 1: Ecuaciones Dimensionales y VectoresSegundo Silva Maguiña
 

Último (20)

Historia de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfHistoria de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdf
 
Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
 
Conservatorio de danza Kina Jiménez de Almería
Conservatorio de danza Kina Jiménez de AlmeríaConservatorio de danza Kina Jiménez de Almería
Conservatorio de danza Kina Jiménez de Almería
 
Biología molecular ADN recombinante.pptx
Biología molecular ADN recombinante.pptxBiología molecular ADN recombinante.pptx
Biología molecular ADN recombinante.pptx
 
AVANCE EXPEDIENTE TECNICO POROTO - TRUJILLO
AVANCE EXPEDIENTE TECNICO POROTO - TRUJILLOAVANCE EXPEDIENTE TECNICO POROTO - TRUJILLO
AVANCE EXPEDIENTE TECNICO POROTO - TRUJILLO
 
Tiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IITiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo II
 
Electromagnetismo Fisica FisicaFisica.pdf
Electromagnetismo Fisica FisicaFisica.pdfElectromagnetismo Fisica FisicaFisica.pdf
Electromagnetismo Fisica FisicaFisica.pdf
 
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptx
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptxTEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptx
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptx
 
Edificio residencial Tarsia de AEDAS Homes Granada
Edificio residencial Tarsia de AEDAS Homes GranadaEdificio residencial Tarsia de AEDAS Homes Granada
Edificio residencial Tarsia de AEDAS Homes Granada
 
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfTAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
 
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIACLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
 
Fijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEFijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSE
 
Fe_C_Tratamientos termicos_uap _3_.ppt
Fe_C_Tratamientos termicos_uap   _3_.pptFe_C_Tratamientos termicos_uap   _3_.ppt
Fe_C_Tratamientos termicos_uap _3_.ppt
 
CLASE - 01 de construcción 1 ingeniería civil
CLASE - 01 de construcción 1 ingeniería civilCLASE - 01 de construcción 1 ingeniería civil
CLASE - 01 de construcción 1 ingeniería civil
 
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdfLEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
 
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfPresentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptx
 
Final Ashto método mecánica de suelos info
Final Ashto método mecánica de suelos infoFinal Ashto método mecánica de suelos info
Final Ashto método mecánica de suelos info
 
Físicas 1: Ecuaciones Dimensionales y Vectores
Físicas 1: Ecuaciones Dimensionales y VectoresFísicas 1: Ecuaciones Dimensionales y Vectores
Físicas 1: Ecuaciones Dimensionales y Vectores
 

9.mem

  • 1. IIINNNTTTEEELLLIIIGGGEEENNNCCCIIIAAA EEENNN RRREEEDDDEEESSS DDDEEE CCCOOOMMMUUUNNNIIICCCAAACCCIIIOOONNNEEESSS SSIISSTTEEMMAA EEXXPPEERRTTOO DDEE RREECCOONNOOCCIIMMIIEENNTTOO DDEE SSEETTAASS EENN PPRROOLLOOGG HHHéééccctttooorrr PPPééérrreeezzz MMMaaarrrtttííínnn LLLaaauuurrraaa AAAssseeennnjjjooo MMMaaannnzzzaaannnooo
  • 2. 2 SSIISSTTEEMMAA EEXXPPEERRTTOO DDEE RREECCOONNOOCCIIMMIIEENNTTOO DDEE SSEETTAASS ÍÍNNDDIICCEE ÍNDICE __________________________________________________________ 2 INTRODUCCIÓN______________________________________________________ 3 SISTEMA EXPERTO___________________________________________________ 3 BÚSQUEDA Y METODOS ______________________________________________ 4 ENTRENAMIENTO DEL SISTEMA______________________________________ 5 RESULTADOS ________________________________________________________ 7 Archivo preguntas.dat_________________________________________________________ 7 Archivo DBHechos.dat________________________________________________________ 8 Archivo DBReglas.dat ________________________________________________________ 8 MEJORAS PROPUESTAS ______________________________________________ 9 DISCUSION Y CONCLUSIÓN__________________________________________ 10 BIBLIOGRAFÍA______________________________________________________ 12 CÓDIGO COMENTADO ______________________________________________ 13
  • 3. 3 IINNTTRROODDUUCCCCIIÓÓNN El sistema experto de reconocimiento de setas que se ha desarrollado, tiene como objetivo la identificación de éstas en base a características externas que presenta la seta u hongo a tipificar, dando como resultado su reconocimiento y obteniendo así su nombre en latín, los diferentes nombres comunes con los que podemos encontrarla descrita en libros de micología y su posible ‘comestibilidad’ (comestible, mortal, etc.), sistematizando para ello el conocimiento de uno o mas expertos en micología, generando una base de datos de conocimiento dinámica que pueda ser usada posteriormente. El sistema se encuentra desarrollado en el lenguaje PROLOG y hace uso de listas, bases de datos internas y dinámicas, técnicas de backtracking y recursividad así como medios de comunicación con el usuario; esta basado en procesos de pregunta y respuesta interactivos los cuales permiten la identificación de patrones (características o propiedades) conocidos por el sistema, la satisfacción plena de las características establecidas dan como resultado la respuesta por parte del sistema de la seta identificada. Este sistema experto tiene como base fundamental el conocimiento del experto y por tanto tiene como una característica principal el autoaprendizaje y la recursividad, por lo que es recomendable que la base de datos de conocimiento que se genere debe ser debidamente analizada antes de su implantación. SSIISSTTEEMMAA EEXXPPEERRTTOO Un SISTEMA EXPERTO es un sistema informático que incorpora, en forma operativa, el conocimiento de una o varias personas experimentadas, de forma que es capaz de proporcionar respuestas y explicar los mecanismos de razonamiento que ha utilizado para llegar hasta ellas, así como de modificar o ampliar su conocimiento. Elementos de un sistema experto: 1. Base del conocimiento En ella se almacena el conocimiento proporcionado por el experto humano en un área de la ciencia o el conocimiento humano. 2. Motor de inferencia. Se encarga de realizar las búsquedas en la base del conocimiento de acuerdo con los parámetros definidos en la heurística del sistema y que permitirá inferir la solución de un problema o llevar a cabo la toma de decisiones. 3. Subsistema de explicación Permite que el usuario no experto pueda entender los parámetros de funcionamiento del sistema sin necesidad de tener que ver más allá de la aplicación del mismo. 4. Adquisición del conocimiento Es la interfaz que permite al experto humano mantener actualizada la base del conocimiento. 5. Subsistema de aprendizaje Permite al sistema experto, mediante experiencias, realizar la adquisición automática del conocimiento.
  • 4. 4 BBÚÚSSQQUUEEDDAA YY MMEETTOODDOOSS El sistema se encuentra desarrollado en el lenguaje de programación PROLOG haciendo uso de listas, bases de datos internas y dinámicas, técnicas de backtracking y recursividad así como medios de comunicación con el usuario y entornos de interacción. El sistema se basa en el empleo extensivo de tres bases de datos, archivos de texto plano: (Pregunta.dat, DBHechos.dat, DBReglas.dat). Las preguntas efectuadas por el sistema se encuentran contenidas en la base de datos de preguntas (Pregunta.dat) la misma que se puede visualizar desde el sistema. La elección de dichas preguntas es fundamental para un eficiente y correcto funcionamiento del sistema, deberán ser preguntas decisivas a la hora de catalogar una seta, por tanto será un experto el encargado de escribir este fichero. En un principio, no está previsto que el archivo de preguntas pueda crecer, de modo que el primer trabajo del experto será elegir unas preguntas que permitan identificar unívocamente cada una de las setas de nuestro dominio. La clasificación de las setas y hongos identificados por el sistema se encuentra contenida en la base de datos de Hechos (DBHechos.dat) la cual es cargada como base de datos dinámica toda vez que se inicia el entorno de preguntas con el usuario. Este fichero contendrá una línea por cada una de las setas de las que conoce su descripción: nombre en latín, nombres comunes con los que podemos conocerla y su comestibilidad. Las reglas que presentan las características identificativas de las diferentes setas reconocidos por el sistema se encuentran contenidas en la base de datos de reglas (DBReglas.dat) en forma de cadenas con nombre en latín de la correspondiente seta, las preguntas realizadas al usuario junto con las respuestas correspondientes con fines de filtro y selección.
  • 5. 5 El programa carga todas las características identificativas del archivo de reglas, convirtiéndolas en hechos usando assert. Así, al inicio de la ejecución, el sistema conoce todas las propiedades de cada una de las setas. Cuando el usuario responde a una pregunta del sistema, el sistema hace una búsqueda en todos los hechos conocidos, buscando las setas que contienen el hecho pregunta-respuesta introducido. Estas setas son identificadas positivamente; el programa se encarga después de eliminar las setas identificadas negativamente de la memoria, de forma que se reduce el ámbito de búsqueda y el uso de memoria. Si el sistema se queda con al menos una seta identificada positivamente, se continúa haciendo las siguientes preguntas (eliminando recursivamente el ámbito de búsqueda) para asegurarse de hacer una identificación correcta, reduciendo la posibilidad de emitir un falso positivo. Sin embargo se muestra al usuario el nombre de esa seta durante todo el proceso. Al responder a la última pregunta de la batería, se muestran los datos de la seta que se ha identificado. Al haber diseñado correctamente las preguntas, sólo se debería haber encontrado una coincidencia (no puede haber dos setas cuyas preguntas sean totalmente iguales). El programa considera esta seta como identificada y muestra los datos correspondientes a esa seta de la base de datos de hechos. Con la finalidad de proporcionar al sistema un mayor conocimiento, se le ha provisto de un mecanismo automático de aprendizaje cuyo proceso inicia su ejecución de forma automática toda vez que el propio sistema reconoce la inexistencia de información (en sus bases de datos de conocimiento) relacionada con las características proporcionadas por el usuario. El presente mecanismo de aprendizaje es permanente debido al registro en las correspondientes bases de datos de la información proporcionada por medio de preguntas-respuestas, asimismo dicho aprendizaje es dinámico estando disponible para su posterior identificación inmediatamente después de suministrar los datos de clasificación solicitados por el sistema. La nueva información aprendida se añade tanto al fichero DBHechos.dat como a DBReglas.dat. Para poder facilitar la identificación por parte del usuario, se ha añadido una carpeta con el nombre Imágenes, que contendrá las fotos de las diferentes setas que el sistema es capaz de reconocer inicialmente cuando sólo cuenta con el conocimiento proporcionado por el experto. Para poder localizar la foto asociada a la seta que ha sido identificada por el sistema, y que por tanto entre otras cosas contamos con su nombre en latín, hemos nombrado al archivo precisamente con el nombre en latín de la seta, así “agaricus campestris.jpg” contendrá una imagen del champiñón silvestre. Esta información extra puede ser utilizada en una posible mejora al añadir un interfaz gráfico al sistema. EENNTTRREENNAAMMIIEENNTTOO DDEELL SSIISSTTEEMMAA El primer paso a la hora de dotar al sistema de conocimientos fue el de escribir las preguntas que nuestro experto consideró importantes a la hora de clasificar una seta. Nos centraremos en las características macroscópicas ya que son más directas. Las preguntas que hizo el experto son las que se indican en la tabla. Anotamos también algunas respuestas posibles para las preguntas, ya que nuestro sistema permite introducir respuestas no booleanas. PREGUNTA RESPUESTAS POSIBLES ¿Tiene láminas? S, N ¿Tiene poros? S, N ¿Tiene sombrero? S, N
  • 6. 6 PREGUNTA RESPUESTAS POSIBLES ¿Tiene velo? S, N ¿Tiene volva? S, N ¿Tiene pie? S, N ¿Con cutícula? S, N ¿Tipo de láminas? Libres, decurrentes, adnatas ¿Color de las láminas? Blanco, rosa, verde, pardo... ¿Color del sombrero? Pardo, blanco, rojo, verde... ¿Forma del sombrero? Convexo, cónico, globoso, plano, deprimido, umbonado, embudado, n/a ¿Forma del borde? Plano, curvado, convoluto, n/a ¿Pie con anillo? S, N, n/a ¿Pie hueco? S, N, n/a Una vez diseñadas las preguntas, el experto introdujo un número de setas mediante el propio sistema de aprendizaje. Las setas elegidas por el experto fueron una combinación de setas comunes, prestando atención en introducir setas de la misma familia o setas fácilmente confundibles, para detectar posibles fallos en la elaboración de las preguntas. Se puede ver un ejemplo de introducción de una nueva seta en las siguientes capturas de pantalla: (1) Bases de Datos (2) Clasificador (3) Salir ==>2 ¿Tiene laminas? n Hay 4 setas encontradas. Piptoporus Betulinus, Langermannia Gigantea, Boletus Pinicola, Boletus Edulis. ¿Tiene poros? s Hay 3 setas encontradas. Piptoporus Betulinus, Boletus Pinicola, Boletus Edulis. ¿Tiene sombrero? s Hay 3 setas encontradas. Piptoporus Betulinus, Boletus Pinicola, Boletus Edulis. ¿Tiene velo? n Hay 3 setas encontradas. Piptoporus Betulinus, Boletus Pinicola, Boletus Edulis. ¿Tiene volva? n Hay 3 setas encontradas. Piptoporus Betulinus, Boletus Pinicola, Boletus Edulis. ¿Tiene pie? s Hay 2 setas encontradas. Boletus Pinicola, Boletus Edulis. El experto está introduciendo los datos correspondientes al Boletus Satanás, seta venenosa que se podría confundir con otros boletus. Como se ve en el último paso, se ha restringido el dominio de búsqueda a las setas de esta familia. ¿Tipo de laminas? n/a Hay 2 setas encontradas. Boletus Pinicola, Boletus Edulis. ¿Color de las laminas? naranja No hay setas que se correspondan con esta descripcion. Comenzamos proceso de aprendizaje...
  • 7. 7 Cuando se pregunta el color de las láminas (o de los poros, en este caso), el experto introduce la característica que diferencia este boleto de los otros, el sistema lo detecta, y nos informa de que va a pasar al modo de aprendizaje. En este modo se preguntan las características restantes de la seta directamente. ¿Color del sombrero? pálido ¿Forma del sombrero? convexo ¿Forma del borde? curvado ¿Pie con anillo? n ¿Pie hueco? n Una vez que el experto ha satisfecho las preguntas del programa, este le pide identificar manualmente la seta, dando sus datos específicos; ****** Seta no identificada ******* La seta no estaba en nuestros archivos. Por favor, introduzca los siguientes datos sobre la seta: Nombre latino : Boletus Satanas Nombre(s) comun(es): Boleto de Satanás Comestibilidad : Venenosa Tras esto, el programa guarda los nuevos conocimientos y vuelve al menú principal. RREESSUULLTTAADDOOSS Tras el proceso de aprendizaje descrito arriba, se clasificaron 17 setas a modo de ejemplo. Este proceso rellenó los archivos preguntas.dat, DBHechos.dat y DBReglas.dat. AArrcchhiivvoo pprreegguunnttaass..ddaatt En este archivo quedaron registradas las preguntas que el experto consideró necesarias para la clasificación y su orden. Son la piedra angular del sistema, y podrían ser ampliadas si se detecta que no permiten la identificación unívoca de alguna seta. Estas preguntas son las que tiene que responder el usuario cuando quiera clasificar la seta. Hay que hacer hincapié en que estas preguntas sólo se pueden cambiar a mano, el programa no añadirá preguntas si detecta dos setas con idénticas características (en su lugar dará un falso positivo). Los contenidos del archivo son: Tiene laminas Tiene poros Tiene sombrero Tiene velo Tiene volva Tiene pie Con cuticula Tipo de laminas Color de las laminas Color del sombrero Forma del sombrero Forma del borde Pie con anillo Pie hueco
  • 8. 8 AArrcchhiivvoo DDBBHHeecchhooss..ddaatt Este archivo es el resultado de la clasificación de cada seta, y es el que el programa usa para después mostrar la información sobre cada seta. La información para cada seta se guarda en forma de triplas (Nombre latín, Nombres comunes, Comestibilidad). Los contenidos alcanzados son: clasificacion("Macrolepiota Procera","Parasol, apagador, matacandil","Excelente") clasificacion("Cortinarius Odorifer","Cortinario perfumado","No comestible") clasificacion("Russula Cyanoxantha","Carbonera, Urretxa","Excelente") clasificacion("Lactarius Torminosus","Niscalo falso","Venenosa") clasificacion("Lactarius Deliciosus","N¡scalo, M¡zcalo","Exquisito") clasificacion("Piptoporus Betulinus","Yesquero del Abedul","No comestible") clasificacion("Langermannia Gigantea","Bej¡n gigante","Comestible") clasificacion("Pleurotus Eryngii","Seta de cardo","Excelente") clasificacion("Pleurotus Eryngii var. Nebrodensis","Seta de ca¤a","Excelente") clasificacion("Pleurotus Ostreatus","Orellana, oreja blanca, seta de chopo","Buena") clasificacion("Boletus Pinicola","Boleto de pino","Excelente") clasificacion("Boletus Edulis","Boleto comestible, sureny","Excelente") clasificacion("Boletus Satanas","Boleto de Satan s","Venenosa") clasificacion("Amanita Caesarea","Oronja, Ou de reig","Excelente") clasificacion("Amanita Muscaria","Matamoscas","Venenosa") clasificacion("Amanita Phalloides","Cicuta verde","Mortal") clasificacion("Agaricus campester","Champi¤¢n","Excelente") AArrcchhiivvoo DDBBRReeggllaass..ddaatt Este archivo es el resultado de la tipificación de cada seta introducida, y guarda las características de cada seta de forma que luego el programa pueda usar esos conocimientos adquiridos. El formato que sigue este fichero será: Línea 1 Nombre en latín de la seta Línea 2…k Pregunta1~Respuesta1, Pregunta2~Respuesta2,…, PreguntaN~RespuestaN Línea k+1 Nombre en latín de la seta ….. Los contenidos de este fichero se listan a continuación: Macrolepiota Procera Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~S,Tiene pie~S,Con cuticula~S,Tipo de laminas~LIBRES,Color de las laminas~BLANCO,Color del sombrero~PARDO,Forma del sombrero~GLOBOSO,Forma del borde~CURVADO,Pie con anillo~S,Pie hueco~S, Cortinarius Odorifer Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con cuticula~N,Tipo de laminas~ADNATAS,Color de las laminas~AMARILLO,Color del sombrero~MARR¢N,Forma del sombrero~CONVEXO,Forma del borde~CURVADO,Pie con anillo~N,Pie hueco~N, Russula Cyanoxantha Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con cuticula~N,Tipo de laminas~ADNATAS,Color de las laminas~BLANCO,Color del sombrero~VIOLETA,Forma del sombrero~CONVEXO,Forma del borde~CURVADO,Pie con anillo~N,Pie hueco~N, Lactarius Torminosus Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con cuticula~S,Tipo de laminas~DECURRENTES,Color de las laminas~CARNE,Color del sombrero~OCRE,Forma del sombrero~EMBUDADO,Forma del borde~CONVOLUTO,Pie con anillo~N,Pie hueco~S, Lactarius Deliciosus Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con cuticula~S,Tipo de laminas~DECURRENTES,Color de las laminas~NARANJA,Color del sombrero~NARANJA,Forma del sombrero~DEPRIMIDO,Forma del borde~CONVOLUTO,Pie con anillo~N,Pie hueco~S, Piptoporus Betulinus Tiene laminas~N,Tiene poros~S,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~N,Con cuticula~S,Tipo de laminas~N/A,Color de las laminas~BLANCO,Color del sombrero~GRIS,Forma del sombrero~SEMICIRCULAR,Forma del borde~CURVADO,Pie con anillo~N/A,Pie hueco~N/A,
  • 9. 9 Langermannia Gigantea Tiene laminas~N,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~N,Con cuticula~S,Tipo de laminas~N/A,Color de las laminas~ROSADO,Color del sombrero~BLANCO,Forma del sombrero~GLOBOSO,Forma del borde~N/A,Pie con anillo~N/A,Pie hueco~N/A, Pleurotus Eryngii Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con cuticula~S,Tipo de laminas~DECURRENTES,Color de las laminas~OCRE,Color del sombrero~MARR¢N,Forma del sombrero~APLANADO,Forma del borde~PLANO,Pie con anillo~N,Pie hueco~N, Pleurotus Eryngii var. Nebrodensis Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con cuticula~N,Tipo de laminas~DECURRENTES,Color de las laminas~BLANCO,Color del sombrero~BLANCO,Forma del sombrero~EMBUDADO,Forma del borde~CONVOLUTO,Pie con anillo~N,Pie hueco~N, Pleurotus Ostreatus Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~N,Con cuticula~N,Tipo de laminas~DECURRENTES,Color de las laminas~BLANCO,Color del sombrero~GRIS,Forma del sombrero~SEMICIRCULAR,Forma del borde~CONVOLUTO,Pie con anillo~N/A,Pie hueco~N/A, Boletus Pinicola Tiene laminas~N,Tiene poros~S,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con cuticula~S,Tipo de laminas~N/A,Color de las laminas~AMARILLO,Color del sombrero~ROJO,Forma del sombrero~CONVEXO,Forma del borde~CURVADO,Pie con anillo~N,Pie hueco~N, Boletus Edulis Tiene laminas~N,Tiene poros~S,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con cuticula~S,Tipo de laminas~N/A,Color de las laminas~AMARILLO,Color del sombrero~PARDO,Forma del sombrero~CONVEXO,Forma del borde~CURVADO,Pie con anillo~N,Pie hueco~N, Boletus Satanas Tiene laminas~N,Tiene poros~S,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con cuticula~S,Tipo de laminas~N/A,Color de las laminas~NARANJA,Color del sombrero~P LIDO,Forma del sombrero~CONVEXO,Forma del borde~CURVADO,Pie con anillo~N,Pie hueco~N, Amanita Caesarea Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~S,Tiene pie~S,Con cuticula~S,Tipo de laminas~LIBRES,Color de las laminas~AMARILLO,Color del sombrero~NARANJA,Forma del sombrero~CONVEXO,Forma del borde~PLANO,Pie con anillo~S,Pie hueco~N, Amanita Muscaria Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~S,Tiene pie~S,Con cuticula~S,Tipo de laminas~LIBRES,Color de las laminas~BLANCO,Color del sombrero~ROJO,Forma del sombrero~CONVEXO,Forma del borde~PLANO,Pie con anillo~S,Pie hueco~N, Amanita Phalloides Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~S,Tiene pie~S,Con cuticula~S,Tipo de laminas~LIBRES,Color de las laminas~BLANCO,Color del sombrero~VERDOSO,Forma del sombrero~APLANADO,Forma del borde~PLANO,Pie con anillo~S,Pie hueco~N, Agaricus campester Tiene laminas~S,Tiene poros~N,Tiene sombrero~S,Tiene velo~N,Tiene volva~N,Tiene pie~S,Con cuticula~S,Tipo de laminas~LIBRES,Color de las laminas~ROSA,Color del sombrero~BLANCO,Forma del sombrero~APLANADO,Forma del borde~CURVADO,Pie con anillo~S,Pie hueco~N, MMEEJJOORRAASS PPRROOPPUUEESSTTAASS Pese a haber elaborado un sistema experto totalmente funcional, hemos detectado un buen número de mejoras en diversos aspectos de nuestro programa. No hemos implementado estas mejoras debido a la falta de tiempo, pero las comentamos a continuación: Respecto al motor de inferencias, podemos hacer una optimización, cargando las características de cada seta justo antes de hacer la pregunta respectiva a esa característica, con lo que nos ahorraríamos memoria ya que sólo se cargaría una característica por cada seta en cada pregunta. El sistema de preguntas puede ser mejorado notablemente. Es obvio que hay preguntas excluyentes, por ejemplo, si un usuario responde que la seta que está clasificando no tiene sombrero, es ilógico preguntarle de qué color es el sombrero.
  • 10. 10 Sin embargo, las preguntas de clasificación tampoco se pueden realizar como árboles, ya que, independientemente de que la seta tenga sombrero o no habrá que preguntar si tiene pie. Por tanto pensamos que se puede mejorar el sistema de preguntas lineal que tenemos ahora añadiendo la posibilidad de hacer “desvíos” dependiendo de la respuesta y después volver a una pregunta en común. En la implementación actual del sistema, sólo se pueden aprender setas que tienen algún par pregunta/respuesta distinto a las ya conocidas, lo que implica un diseño muy cuidadoso de las preguntas por el experto. Sin embargo puede haber dos setas lo suficientemente parecidas como para que el sistema no las distingan. Una mejora para esta situación es añadir al programa un modo “edición” de modo que al llegar a una identificación, el experto pueda decidir que es una identificación errónea y añadir al sistema una pregunta que permita diferenciar las dos setas. Finalmente, y gracias a haber usado Visual Prolog para nuestro programa, es posible hacer una mejora visual, y pasar del sistema de línea de comandos a un sistema de ventanas. Además se podrían usar las imágenes de las setas incluídas en la carpeta imágenes para mostrar directamente al usuario la seta que ha clasificado, o acceder a una base de datos (o un libro) indicando una descripción más detallada de la seta. Pensando siempre en facilitar el trabajo al usuario sería conveniente el realizar un pequeño folleto o manual, con las posibles respuestas a una determinada pregunta. Así por ejemplo un usuario no sepa exactamente que responder a la pregunta de “forma del sombrero?”, podría acudir al manual donde tendría todas las posibles respuestas con la definición o correspondiente dibujo de cada una de ellas (en nuestro ejemplo: convexo,cónico,globoso,plano,deprimido,embonado,etc), la respuesta por parte del usuario sería más acertada. Y de esta forma evitaríamos errores como responder naranja en lugar de anaranjado, siendo lo mismo o prácticamente (obviamos este debate), darían respuestas totalmente diferentes. DDIISSCCUUSSIIOONN YY CCOONNCCLLUUSSIIÓÓNN El trabajo presentado tiene los siguientes objetivos principales: 1. Identificar cualquier tipo de seta en base a características externas que presenta, dando como resultado el reconocimiento de ésta. 2. Construcción de una base de datos de conocimiento utilizando el concepto de Sistemas Expertos, resaltando la importancia de usar fuentes de conocimiento, para apoyar el conocimiento subjetivo del experto . 3. Elaborar un Motor de inferencia en Prolog, necesario para mantener el funcionamiento del sistema experto. El sistema desarrollado responde a la necesidad de poder tipificar e identificar setas y hongos en base a características observables. Su campo de aplicación se puede dar en dos áreas importantes:
  • 11. 11 Investigación: En estudios de micología, para tipificar en base a la caracterización que previamente se tiene en la base de datos dinámica del sistema experto, la cual se encuentra inicialmente alimentada por el experto. Educación: En la enseñanza o introducción a la micología en base a la interacción sistema– usuario con preguntas del sistema y respuestas del usuario haciendo que el sistema identifique que seta ha encontrado el usuario dependiendo de lo acertado de la respuesta del usuario. El sistema experto que se presenta se encuentra inicialmente alimentado en su base de datos por la información que el experto del área pueda proporcionar. Esta base de datos se torna dinámica por cuanto posteriormente y con el uso que tenga el sistema experto, la base de datos se incrementará. El alcance del sistema depende principalmente del experto que alimenta inicialmente la base de datos, teniendo como limitante principal el uso posterior que se le pueda dar al sistema experto por parte de usuarios considerados como expertos y que por una alimentación no eficiente de la base de datos por estos últimos, la base de datos pueda tener datos inconsistentes . Lo que podría pasar en la realidad si este programa fuera utilizado con alguno de estos fines es que en una primera prueba el sistema experto con la base de conocimientos implementada tendría un buen funcionamiento, por cuanto que permite que un segundo usuario no experto en micología pueda identificar una seta con las características que este ultimo proporciona al sistema. Si se realizara una segunda prueba con el sistema experto, para la cuál se utilizara un usuario experto en micología, el cual podía realizar tareas de identificación con la base de datos predefinida en el sistema y también podía retroalimentar al sistema en base a la interacción usuario- sistema. En principio esto tendría buen resultado por cuanto algunas características no tipificadas por el primer experto serían hechas por el segundo experto, aumentando así la precisión del sistema. El problema sería que en cuanto, la tipificación del segundo experto no coincida en una característica con la tipificación hecha por el primer experto, esta no coincidencia supondría que posteriormente el sistema experto entraría en conflicto cuando se tipificaran setas, lo cual no es realmente cierto por cuanto el sistema experto identificaba a la seta con cualquiera de las clasificaciones hechas (ya sea con el primer experto o con el segundo experto), pero no es consistente de que una seta este descrita de diferentes formas. Como una última anotación para este sistema experto, decir que hemos elegido tipificar o catalogar setas, pero bastaría con modificar los ficheros correspondientes a las bases de datos (pregunta.dat, DBHechos.dta y DBReglas.dat) para poder tipificar cualquier otro objeto, ser vivo, o lo que se nos ocurra, pero no habrá que modificar en ningún momento el código fuente, simplemente volver a realizar el proceso de entrenamiento del sistema gracias a un experto en el tema.
  • 12. 12 BBIIBBLLIIOOGGRRAAFFÍÍAA Lista de correo de prolog. Hispalinux. [en línea]. Disponible en Internet: < prolog@listas.hispalinux.es> y <https://listas.hispalinux.es/mailman/listinfo/prolog> José Angel Bañares Bañares, universidad De Zaragoza. Ingeniería de los Sistemas Basados en el Conocimiento [en línea], 2003, <http://iaaa.cps.unizar.es/docencia/ISBC.html> Nieves Pavón, Universidad de Huelva. Visual Prolog: entorno de desarrollo [en línea], 2003, <http://www.uhu.es/nieves.pavon/pprogramacion/practicas/visualprolog/visualprolog.html> Prolog Development Center A/S. Visual Prolog 5.x language tutorial.[archivo PDF], 2001. Prolog Development Center A/S. Visual Prolog 5.x getting started.[archivo PDF], 2001. MENDAZA RINCÓN, Ramón y DÍAZ MONTOYA, Guillermo. Las setas: guía fotográfica y descriptiva. Iberduero, 1987. MORENO, Gabriel et al. La guía de Incafo de los hongos de la Península Ibérica. Incafo, 1986.
  • 13. 13 CCÓÓDDIIGGOO CCOOMMEENNTTAADDOO /***************************************************************************** INTELIGENCIA EN REDES DE COMUNICACIONES 2003 Universidad Carlos III Project: Sistema Experto de Reconocimiento de Setas Written by: Héctor Pérez Martín y Laura Asenjo Manzano Comments: Extensible para reconocimiento de cualquier otra cosa: plantas, flores,insectos,etc ******************************************************************************/ /* Domains: En esta sección se define el tipo de objetos con los que trabajaremos.*/ /* Dominios locales. */ domains Opcion,Longitud,Longitud1,Longitud2,Longitud3,entero,num=integer Pos,Pos1,Pos2,Pos3,Pos4,Pos5,Pos6,Total,TotalTmp=integer Salida,Cadena,Cad1,Cad2,Cad3=string Regla,TotalStr,Resultado1=string LRegla=Cadena* ListaSujetos,ListaNegativos=Sujeto* /* Dominios globales (los usados en las BD de hechos y los archivos.*/ global domains file=input1;input2 Sujeto,Pregunta,Respuesta,Resultado,Propiedad1,Propiedad2,Estado=string /* Bases de datos de hechos (dinámicas). Colocamos cada tipo de hechos por separado por comodidad.*/ global facts - propiedades propiedad (Sujeto,Pregunta, Respuesta) global facts - categoria clasificacion (Sujeto, Propiedad1, Propiedad2) global facts - encontrado encontrado (Estado) /* En la sección PREDICATES definimos el nombre y el tipo de los argumentos de todos los predicados que se usarán durante el programa.*/ predicates analiza analiza_pregunta (string, Pregunta, Respuesta) barra borraeliminados (ListaSujetos) clasifica_resultado (ListaSujetos) contar (ListaSujetos, entero) decodifica (Cadena, Sujeto) escribeLista (ListaSujetos) existeBD (entero) graba (LRegla, LRegla) menu (Opcion, Regla) novalido (Sujeto, Pregunta, Respuesta) nuevosujeto pantallainicio pregunta (LRegla) repetir /* Goal. En esta sección se definen los objetivos a lograr al ejecutar el programa.*/ goal pantallainicio.
  • 14. 14 /* Clauses. Contiene la implementación del conjunto de hechos y reglas que componen el programa.*/ clauses /* Corresponde a la pantalla principal del sistema, presenta opciones para ejecutar el sistema 1--> Visualizaremos el contenido de los ficheros utilizados por el sistema. 2--> Proceso de pregunta-respuesta para identificar una seta. 3--> Terminamos el programa.*/ barra:- nl, write ("(1) Bases de Datos (2) Clasificador (3) Salirn"), write ("==>"), readint (Opcion), nl, menu (Opcion, "principal"). /* Corresponde al segundo menú del programa, el usuario desea visualizar los archivos 1--> Para visualizar DBHechos.dat. 2--> Para visualizar preguntas.dat. 3--> Para visualizar DBReglas.dat.*/ menu(1,"principal"):- write("(1)Muestra Clasificacionn"), write("(2)Muestra Preguntasn"), write("(3)Muestra Reglasn"), write("==>"), readint(Opcion), nl, menu(Opcion,"BD"). /* Muestra en pantalla el contenido de DBHechos.dat.*/ menu (1,"BD"):- /* file_str(File,String). Lee un archivo y lo guarda en String.*/ file_str ("DBHechos.dat",Salida), write(Salida), barra. /* Muestra en pantalla del contenido de pregunta.dat.*/ menu (2, "BD"):- file_str ("pregunta.dat",Salida), write(Salida), nl, barra. /* Despliegue en pantalla del contenido de DBReglas.dat.*/ menu (3, "BD"):- file_str ("DBReglas.dat",Salida), write(Salida), nl, barra. /* Si el usuario elige una opción incorrecta (distinto de 1,2 ó 3).*/ menu(_,"BD"):- write("Tecla incorrecta...Intentelo de nuevo"), menu(1,"principal"). /* Entorno de preguntas-respuetas. Clasificación de setas.*/ menu(2,"principal"):- /* determ retractall(Hecho, NombreSeccionHechos): Borra todos los hechos encontrados que casen con el hecho especificado en el argumento. Actúa sobre del dominio de hechos con nombre NombreSeccionHechos.*/ retractall(_,categoria), /* consult(String NombreFichero, NombreSeccionHechos): Sirve para leer hechos desde un fichero de hechos y almacenarlos en la base de hechos de nombre NombreSeccionHechos. Este fichero debe haber sido salvado con save.*/ consult("DBHechos.dat",categoria), retractall(_), retractall(_,encontrado),
  • 15. 15 assertz(encontrado("Falso")), /* Obtenemos las reglas de clasificación, para decodificarlas y cargarlas al sistema.*/ openread(input1,"DBReglas.dat"), repetir, analiza, closefile(input1), /* Abrimos el archivo de preguntas para comenzar el proceso de identificación.*/ openread(input2,"Pregunta.dat"), repetir, Pregunta(LRegla), closefile(input2), /* Si el sujeto no se encontraba en las reglas lo añadimos.*/ nuevosujeto, graba(LRegla,LRegla), /* Vuelta al menú principal.*/ barra. /* Salir de la aplicación.*/ menu(3,"principal"):- write("Presione una tecla para salir"), readchar(_). /* Si el usuario elige una opción incorrecta (distinto de 1,2 ó 3).*/ menu(_,"principal"):- write("Tecla incorrecta...Intentelo de nuevo"), barra. /* Leemos del fichero DBReglas para cada seta su nombre en latín (sujeto) y sus preguntas con las respuestas (Cadena).*/ analiza:- eof(input1),!. /* Llegamos al final del fichero DBReglas.dat.*/ analiza:- readdevice(input1), readln(Sujeto), readln(Cadena), /* Parseamos las preguntas-respuestas.*/ decodifica(Cadena,Sujeto). /* Creamos un hecho por cada pregunta-respuesta asociado al sujeto, por tanto deberemos parsear Cadena, ya que aquí se encuentran concatenadas todas pregunta1~repuesta1, pregunta2~repuesta2,...*/ decodifica(Cadena,Sujeto):- /* Cogemos de la posición de la coma y hacemos un substring hasta esa coma ej:Toma leche~S, */ str_len(Cadena,Longitud), searchchar(Cadena,',',Pos), Pos1=Pos-1, subString(Cadena,1,Pos1,Cadena1), /* De la subcadena esta tomamos la longitud y creamos una subcadena con lo que hay delante y detrás de ~ .*/ str_len(Cadena1,Longitud1), searchchar(Cadena1,'~',Pos2), Pos3=Pos2-1, substring(Cadena1,1,Pos3,Pregunta), Pos4=Pos2+1, searchchar(Cadena1,'~',Pos6), Longitud2=Longitud1-Pos6, substring(Cadena1,Pos4,Longitud2,Respuesta), /* Una vez que tenemos la pregunta y la respuesta podemos llamar a assetz esta característica.*/ assertz(propiedad(Sujeto,Pregunta,Respuesta)),
  • 16. 16 Pos5=Pos+1, Longitud3=Longitud-Pos, substring(Cadena,Pos5,Longitud3,Cadena2), /* Y así con todas las preguntas y respuestas de un mismo sujeto.*/ decodifica(Cadena2,Sujeto). /* Pregunta lleva a cabo el proceso de preguntar, guardar la respuesta del usuario y eliminar los sujetos que ya no son solución. Si en algún momento no queda ningún sujeto se pasa al estado de aprendizaje para completar el resto de preguntas. Si se llega a la última pregunta y queda algún sujeto, entonces ese sujeto es la solución.*/ /* Si hemos terminado las preguntas, comprobar si tenemos algún sujeto concordante.*/ Pregunta([]):- /* eof(SFN) Es verdadera si el apuntador del archivo ya está al final del mismo.*/ eof(input2), encontrado("Falso"), findall(X,propiedad(X,_,_),ListaSujetos), /* Contamos el numero de sujetos cuya descripción concuerdan con las respuestas dadas por el usuario, si no hay ninguno será que no tenemos identificada a esa seta y aprenderemos.*/ contar(ListaSujetos,Y), Y<>0, retractall(_,encontrado), assertz(encontrado("Verdadero")), /* Imprimimos por pantalla las características del sujeto encontrado.*/ clasifica_resultado(ListaSujetos),!. /* Identificación el final del archivo preguntas.dat Y como anteriormente hemos averiguado que no tenemos esa seta en la BD, tendremos que aprender después.*/ Pregunta([]):- eof(input2), encontrado("No existe"),!. /* Pregunta al usuario usando la BD Preguntas. Las respuestas del usuario se convierten en mayúsculas para facilitar las comparaciones. Las preguntas pueden ser del tipo S/N o con valores complejos, como colores u otras propiedades. Se guarda el par pregunta-respuesta en LRegla, para que si no se conoce el sujeto poder usar esos conocimientos en la etapa de aprendizaje. Después se llama a analiza_pregunta para eliminar los sujetos que no responden a la nueva característica introducida por el usuario, y se continúa con el resto de preguntas.*/ Pregunta([Cad3|T]):- readdevice(input2), /* Lee una pregunta.*/ readln(Pregunta), Pregunta<>"", /* Escribe la pregunta, el usuario podrá responder en mayúsculas o minúsculas.*/ write("168",Pregunta,"? "), readdevice(stdin), readln(Respuesta1), /* Tratamos la cadena para que sea toda en mayúsculas.*/ upper_lower(Respuesta, Respuesta1), /* Analizamos los sujetos que responden a estas características y eliminamos el resto.*/ analiza_pregunta("",Pregunta,Respuesta), /* Concatenamos Pregunta~Respuesta, para poder aprender en caso de que sea necesario.*/ concat(Pregunta,"~",Cad1), concat(Cad1,Respuesta,Cad2), concat(Cad2,",",Cad3), /* Seguimos mostrando preguntas.*/ pregunta(T).
  • 17. 17 /* Analiza los sujetos que cumplen una pregunta y una respuesta, eliminando al resto. Si no hay sujetos que cumplan esa pregunta/respuesta, activa el modo de aprendizaje y desactiva el modo de análisis. Por aquí entraremos cuando estemos en el proceso de aprendizaje.*/ analiza_pregunta(_,_,_):- encontrado(XX), XX<>"Falso",!. /* Por aquí entraremos cuando estemos en el proceso de análisis.*/ analiza_pregunta(_,Pregunta,Respuesta):- /* Obtener los sujetos concordantes.*/ findall(X,propiedad(X,Pregunta,Respuesta),ListaSujetos), /* Y los contamos.*/ contar(ListaSujetos,Y), /* Dependiendo del número de sujetos concordantes, cambiar de modo o no.*/ existeBD(Y), /* Mostrar sujetos concordantes (si los hay).*/ escribelista(ListaSujetos),nl, nl, /* Buscamos los sujetos que no tengan la misma respuesta que dio el usuario para una pregunta, esos sujetos no serán solución y los podremos eliminar.*/ findall(XX,novalido(XX,Pregunta,Respuesta),ListaNegativos), borraeliminados(ListaNegativos). /* Cuenta los elementos de una lista.*/ contar([],0). contar([_|T],Total):- contar(T,TotalTmp), Total=TotalTmp+1. /* Obtiene los sujetos cuya respuesta no coincide con una respuesta dada.*/ novalido(Sujeto,Pregunta,Respuesta):- propiedad(Sujeto,Pregunta,Z), Z<>Respuesta. /* Eliminar sujetos que no pueden ser solución.*/ borraeliminados([]). borraeliminados([H|T]):- retractall(propiedad(H,_,_)), borraeliminados(T). /* Comprueba la cantidad de sujetos encontrados con las características dadas */ /* Si no hay ningún sujeto concordante, pasar al modo de aprendizaje e informar de ello. Así ahorramos el tener que hacer el análisis una vez que no queden sujetos.*/ existeBD(0):- retractall(_,encontrado), assertz(encontrado("No existe")), write("No hay setas que se correspondan con esta descripcion."), nl, write("Comenzamos proceso de aprendizaje...n"),!. /* Si solo hay uno, informar de ello, pero obligar al usuario a que siga respondiendo preguntas para asegurarse (minimizar la posibilidad de falsos positivos).*/ existeBD(1):- write("Hay una seta encontrada. Siga respondiendo a las preguntas para estar seguro.n"),!. /* Si el numero de setas que se adecuan a la descripción que da el usuario es distinto de cero, es porque podemos tener esa seta catalogada, por tanto tendremos que seguir preguntando y analizar cada pregunta-respuesta.*/ existeBD(Y):- write("Hay ",Y," setas encontradas.n"),!.
  • 18. 18 /* Grabación de regla en archivo.*/ /* Si el sujeto esta clasificado en DBHechos (encontrado=verdadero) no haremos nada.*/ nuevosujeto:- encontrado("Verdadero"),!. /* Si el sujeto no se encuentra en nuestra clasificación de setas (DBHechos) aprenderemos. Preguntaremos al usuario de que seta se trata y lo almacenaremos convenientemente en los ficheros DBHechos.dat y DBReglas.dat.*/ nuevosujeto:- /* Informamos de que el sujeto no estaba en nuestras bases de datos, y pedimos al usuario que introduzca los datos.*/ nl,nl, write("****** Seta no identificada *******n"), write("La seta no estaba en nuestros archivos. Por favor, introduzca los siguientes datos sobre la seta:"),nl, /* El usuario introduce los datos del nuevo sujeto para completar el aprendizaje.*/ write("Nombre latino : "),readln(Resultado), write("Nombre(s) comun(es): "),readln(Propiedad1), write("Comestibilidad : "),readln(Propiedad2), /* Añadimos a la BD de hechos los datos introducidos.*/ openappend(input1,"DBHechos.dat"), writedevice(input1), write("clasificacion("",Resultado,"","",Propiedad1,"","",Propiedad2,"")n"), closefile(input1), /* Añadimos a la BD de reglas las preguntas/respuestas introducidas por el usuario.*/ openappend(input2,"DBReglas.dat"), writedevice(input2), nl, write(Resultado),nl, closefile(input2). /* Imprime por pantalla el resultado y su clasificación.*/ clasifica_resultado([H|_T]):- Clasificacion(H,Propiedad1,Propiedad2), nl, write("********* RESULTADO ENCONTRADO: ********n"), write("Nombre latino : ",H),nl, write("Nombre(s) Comun(es): ",Propiedad1),nl, write("Comestibilidad : ",Propiedad2),nl, write("****************************************n"), nl. /* Identificación y registro en la BD de Reglas de datos aprendidos correspondiente al sujeto no identificado.*/ /*Si hemos grabado todo el contenido de LRegla(Pregunta1~Respuesta1,Pregunta2~Respuesta2...) en DBRegla.dat terminamos.*/ graba([],_):- closefile(input2),!. /* Si hemos encontrado la seta no necesitamos grabar en DBReglas.dat.*/ graba(_,_):- encontrado("Verdadero"),!. /* Si hemos aprendido almacenamos en DBReglas todas las preguntas y respuestas que el usuario ha ido respondiendo a lo largo de todo el proceso.*/ graba([H|T],LRegla):- openappend(input2,"DBReglas.dat"), writedevice(input2), write(H), closefile(input2), graba(T,LRegla). /* Escribe una pantalla con los créditos del programa.*/
  • 19. 19 pantallainicio:- write("201205205205205205205205205205205205205205205205205205205 205205205205205205205205205205205205205205205205205205205205205 205205205205205205205205205205205205205205205205205205205187n"), write("186 SISTEMA EXPERTO DE CLASIFICACION DE SETAS 186n"), write("186196196196196196196196196196196196196196196196196196196 196196196196196196196196196196196196196196196196196196196196196 196196196196196196196196196196196196196196196196196196196186n"), write("186 Autores: 186n"), write("186 LAURA ASENJO MANZANO 186n"), write("186 H144CTOR P144REZ MARTIN 186n"), write("186196196196196196196196196196196196196196196196196196196 196196196196196196196196196196196196196196196196196196196196196 196196196196196196196196196196196196196196196196196196196186n"), write("186 Inteligencia en redes de comunicaci149n 186n"), write("186 Universidad Carlos III de Madrid, a164o 2003 186n"), write("186196196196196196196196196196196196196196196196196196196 196196196196196196196196196196196196196196196196196196196196196 196196196196196196196196196196196196196196196196196196196186n"), write("186Este programa solo tiene fines educativos. Los autores no 186n"), write("186 se hacen responsable de las consecuencias debidas a una 186n"), write("186 clasificación erróneaa. Compruebe siempre los resultados.186n"), write("200205205205205205205205205205205205205205205205205205205 205205205205205205205205205205205205205205205205205205205205205 205205205205205205205205205205205205205205205205205205205188n"), barra. /* Imprime por pantalla una lista de elementos, con una puntuación correcta para separarlos. */ escribeLista([]). escribeLista([H]):- write(H,"."). escribeLista([H|T]):- write(H,", "), escribeLista(T). /*Repeticion */ repetir. repetir:- repetir.