Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Fue creado a partir de 1984, en el Lyndon B. Johnson Space Center de la NASA. Los fondos cesaron a principios de los aos 1990, y hubo un mandato de la NASA para comprar software comercial.
CLIPS
CLIPS es un acrnimo de C Language Integrated Production System (Sistema de Produccin Integrado en Lenguaje C). En la actualidad, entre los paradigmas de programacin que soporta CLIPS se encuentran la Programacin lgica, la Programacin imperativa y la Programacin Orientada a Objetos. .
SISTEMAS EXPERTOS
Los sistemas expertos son llamados as porque emulan el razonamiento de un experto en un dominio concreto y en ocasiones son usados por stos. Con los sistemas expertos se busca una mejor calidad y rapidez en las respuestas dando as lugar a una mejora de la productividad del experto.
PROLOG
El Prolog (o PROLOG), proveniente del francs PROgrammation en LOGique, es un lenguaje para programar artefactos electrnicos mediante el paradigma lgico con tcnicas de produccin final interpretada . Es bastante conocido en el rea de la Ingeniera Informtica para investigacin en Inteligencia Artificial.
SISTEMAS EXPERTOS
INTRODUCCIN
En los ltimos aos se ha despertado un especial inters en el campo de sistemas expertos (tambin conocidos como sistemas basados en el conocimiento) y se han desarrollado desde el aspecto estrictamente acadmico hasta aplicaciones altamente comerciales. Los sistemas expertos proporcionan una buena alternativa para obtener soluciones a una gran variedad de problemas que difcilmente pueden ser tratados con mtodos ortodoxos o tradicionales.
Se puede definir como un sistema informtico (hardware y software) que simula a los expertos humanos en un rea de especializacin dada
El conocimiento de varios expertos humanos pueden combinarse, lo que da lugar a sistemas expertos ms fiables, ya que se obtiene un sistema experto que combina la sabidura colectiva de varios expertos humanos en lugar de la de uno solo. .. Los sistemas expertos pueden responder a preguntas y resolver problemas mucho mas rpidamente que un experto humano. Por ello, los sistemas son muy valiosos en caso de los que el tiempo de respuesta es crtico
EJEMPLO
Ejemplo 1. Control de trfico.- el control de trfico es una de las aplicaciones ms importantes de los sistemas expertos. No hace mucho tiempo, el flujo de trfico en las calles de una ciudad se controlaba guardias de trfico que controlaban el mismo en las intersecciones. Hoy se utilizan sistemas expertos que operan automticamente los semforos y regulan el flujo de trfico en la ciudad y en los ferrocarriles.
CLIPS
Bueno, despus de esta breve descripcin, vamos a ver un pequeo ejemplo hecho en CLIPS que pretende ser un SE bastante simple el cual podra ayudar a un bombero a sofocar un incendio. La idea es la siguiente:
(deffacts inicio (materiales (materiales (materiales (extintores (extintores (extintores ) A B C A B C papel madera tela) aceite gas lubricante) magnesio sodio potasio) agua sustancia-quimica-seca) co2 sustancia-quimica-seca) co2 espuma)
Un Sistema Experto (SE) es una aplicacin que intenta simular el comportamiento de un experto humano en un determinado rea. El objetivo del desarrollo de sistemas de este tipo no es siempre el de sustituir al propio experto, lo cual por otra parte podra ser inviable (computacionalmente) en algunos casos, sino servir de ayuda a ste o liberarle de algunas tareas. Por ejemplo, existen SS.EE. cuya finalidad es el diagnstico de enfermedades a partir de los sntomas del paciente. El funcionamiento de estos sistemas se basa en una serie de reglas y razonamientos que, a partir de unos sntomas y las caractersticas del paciente (edad, peso, etc.), dan como resultado una o varias enfermedades que con cierta probabilidad puede tener el paciente. Evidentemente el objetivo de estos SS.EE. no es sustituir al mdico, sino ayudar a ste.
(defrule tipo-incendio (se-quema ?material) (materiales ?tipo $? ?material $?) => (assert (incendio-tipo ?tipo)) (printout t "Hay un incendio de tipo " ?tipo crlf) (printout t "De que es el extintor?" crlf) (assert (tengo-extintor-de (read))) ) (defrule tipo-extintor (tengo-extintor-de ?x) (extintores ?tipo $? ?x $?) => (assert (tengo-extintor ?tipo ?x)) (printout t "Tenemos un extintor de " ?x " que es de tipo " ?tipo crlf) ) (defrule puedo-apagar (incendio-tipo ?tipo) (tengo-extintor ?tipo ?x) => (assert (puedo-apagar)) (printout t "El incendio se puede apagar con el extintor de " ?x crlf) ) (defrule inicio (initial-fact) => (printout t "Que se quema? " crlf) (assert (se-quema (read)))
EJEMPLO
PROLOG
REQUISITOS
El Prolog (o PROLOG), proveniente del francs PROgrammation en LOGique, es un lenguaje para programar artefactos electrnicos mediante el paradigma lgico con tcnicas de produccin final interpretada . Es bastante conocido en el rea de la Ingeniera Informtica para investigacin en Inteligencia Artificial.
Para hacer unos primeros pinitos en Prolog se necesita unicamente dos cosas: un editor de texto y un entorno de desarrollo Prolog. Como editor de texto resulta altamente recomendable el uso de Emacs.
COMPATIBILIDA D ISO-PROLOG
En esta leccin explicaremos como reconocer los diferentes elementos que componen un programa fuente en Prolog. Como observar en breve, Prolog carece de declaraciones en el sentido imperativo: secciones, declaraciones de tipo, declaraciones de variable, declaraciones de procedimientos, etc.
Comentarios
Los comentarios en Prolog se escriben comenzando la lnea con un smbolo de porcentaje. Ejemplo: % Hola, esto es un comentario. % Y esto tambin. Las vriables en Prolog no son variables en el sentido habitual, por eso las llamamos variables lgicas. Se escriben como una secuencia de caracteres alfabticos comenzando siempre por mayscula o subrayado. Ejemplos de variables: Variable _Hola _ Pero no son variables: variable $Hola p__
Variables lgicas
Trminos
Los trminos son el nico elemento del lenguaje, es decir, los datos son trminos, el cdigo sontrminos, incluso el propio programa es un trmino. No obstante, es habitual, llamar trminosolamente a los datos que maneja un programa.
El mecanismo de unificacin
La unificacin es el mecanismo mediante el cul las variables lgicas toman valor en Prolog. El valor que puede tomar una variable consiste en cualquier trmino, por ejemplo, j(3), 23.2, 'hola que tal', etc. Por eso decimos que los datos que maneja Prolog son trminos.
Una misma variable puede aparecer varias veces en los trminos a unificar. Ejemplo:
Ejemplos paradigmticos
k(Z,Z) y k(4,H). Por culpa del primer argumento, Z se liga al valor 4. Por culpa del segundo argumento, Z y H unifican, pero como Z se liga a un valor, entonces H se liga a ese mismo valor, que es 4. Recuerde que una variable no puede ligarse a dos valores distintos. Por ejemplo: k(Z,Z) y k(4,3) no unifican, sin embargo k(Z,Z) y k(5,5) s unifican. Sera capaz de decir a que valores se ligan las variables de este ejemplo ? a(b(j,K),c(X)) y a(b(W,c(X)),c(W)). Puede estar seguro de que unifican. Cuidado con las variables annimas, recuerde que son todas distintas. Por ejemplo: k(_,_) y k(3,4) unifican perfectamente.
Existe un algoritmo de unificacin ms preciso que las normas dadas aqui. Adems es CULTURILLA
computable, de otra manera, no estariamos hablando de Prolog. Una variable siempre unifica consigo misma: Z y Z. Cuando una variable empieza por el smbolo de subrayado, por ejemplo _Var1, Prolog sobreentiende que no estamos interesados en conocer el valor concreto que tiene esa variable. Esto sirve para evitar ciertos mensajes de advertencia (warnings) del compilador que resultan algo molestos. Una variable puede unificar con un trmino que contiene esa variable: X y a(X). Esto no es muy recomendable puesto que estamos definiendo un trmino infinitamente anidado. No obstante, algunos entornos de desarrollo son tan potentes que pueden manejar dichos trminos dependiendo, eso s, de qu se pretenda hacer con ellos.
CARGANDO EL CDIGO
Para compilar y cargar el cdigo existe el predicado consult/1. Recuerde que puede ser necesario indicar la ruta completa del fichero fuente. En este ejemplo hemos usado el top-level shell de SWI-Prolog: Welcome to SWI-Prolog (Version 2.7.14) Copyright (c) 1993-1996 University of Amsterdam. All rights reserved. For help, use ?- help(Topic). or ?- apropos(Word). 1 ?- consult('arbolgenealogico.pl'). arbolgenealogico.pl compiled, 0.00 sec, 1,108 bytes. Yes 2 ?-
PREDICADOS REVERSIBLES
Una vez que hemos compilado y cargado nuestro programa vamos a estudiar sus caractersticas. Una de ellas es el backtracking, o la posibilidad de obtener varias soluciones, como ya hemos visto. 2 ?- hermano(A,B). A = juan B = luis ; A = luis B = juan ; A = alberto B = geronimo ; A = geronimo B = alberto ; No 3 ?-
PREDICADOS NO REVERSIBLES
No todos los predicados son reversibles. Por ejemplo, los de comparacin aritmtica. El predicado >/2 sirve para saber si un nmero es mayor que otro, pero no sirve para saber todos los nmeros mayores que uno dado (puesto que son infinitos). Otros predicados pueden perder la reversibilidad por deseo expreso de su programador, o solamente ser reversibles para ciertos argumentos pero no otros. As podemos hablar de las posibles formas de invocar un predicado. Esto es lo que se denomina modos de uso.
MODOS DE USO
Los modos de uso indican que combinacion de argumentos deben o no estar instanciados para que un objetivo tenga sentido. Se dice que un argumento est instanciado cuando no es una variable libre. A efectos de documentacin, los modos de uso se describen con un trmino anotado en sus argumentos con un smbolo. Los argumentos pueden ser: De entrada y/o salida indistintamente. Estos argumentos se denotan con un smbolo de interrogacin (?). De solamente entrada. Estos se denotan con un smbolo de suma (+). De solamente salida. Estos se denotan con un smbolo de resta (-).
Un compilador que no utiliza los modos de uso no detecta objetivos invlidos. En ese
caso, el programa se ejecuta sin ms. Cuando le llega el turno al objetivo mal formado pueden ocurrir dos cosas: que el objetivo falle sin ms, o que se lance una excepcin. Cualquiera de ellas suele ir acompaada de un horrendo mensaje por pantalla. La forma de describir los modos de uso "formalmente" varia de un entorno de desarrollo a otro. Si no es posible especificarlos "formalmente", entonces conviene escribir un comentario explicativo. Si el compilador no detecta modos de uso, es responsabilidad del programador no invocar objetivos mal formados, tarea que no resulta nada trivial puesto que hay que saber que variables van a estar ligadas cuando el programa se ejecute. Otra buena prctica es escribir predicados que siempre sean reversibles.
CULTURILLA
RESUMEN Y EJERCICIOS
Hasta este momento, el lector debera haber aprendido: 1. Qu es un entorno de desarrollo Prolog. 2. Qu es una variable lgica. 3. Qu es un trmino. 4. Cmo funciona la unificacin. 5. Cmo se ejecutan objetivos desde el top-level shell. 6. Cmo se ejecutan secuencias de objetivos. 7. Cmo el backtracking permite explorar varias soluciones. 8. Cmo se escribe un fichero fuente en Prolog. 9. Cul es el motivo de que aparezcan puntos de eleccin. 10. Qu es la reversibilidad. 11. Qu son los modos de uso y para qu sirven. 12. Cmo se realizan cmputos aritmticos.
A continuacin aparecen una serie de expresiones. Trate de identificar si se trata de variables, trminos o si estn mal construidos. p(j(G),h(12),j(3),a+b) p(j(G),H(12),j(3),a+b) __abc aBc AbC 3 $ 2 ' '(_,_) _'A'(12) 32.1 pepe > 32.2
AGRADECIMIENTO
ME SINETO MUY AGRADECIDO CON USTED POR INDUCIRNOS EN LA MATERIA QUE NOS SERVIRA EN UN FUTURO COMO PROFESIONAL, GRACIAS POR SU PACIENCIA Y SU GAMAS DE ENSEARNOS