Professional Documents
Culture Documents
Usando Prolog
Shell
Incertidumbre
Introducci on
Usando Prolog
Shell
Incertidumbre
Objetivos
I I I
Familiarizarse con la terminolog a propia de los Sistemas Expertos. Experimentar con la construcci on de Sistemas Expertos en Prolog Elaborar un mini-shell para el desarrollo de Sistemas Expertos.
Introducci on
Usando Prolog
Shell
Incertidumbre
Mquina de Inferencia
Ingeniero en Sistemas
Base de Conocimiento
Almacn de Trabajo
Introducci on
Usando Prolog
Shell
Incertidumbre
Componentes
I I I
Base de conocimientos. La representaci on declarativa de la experiencia, muchas veces en forma de reglas IF-THEN. Almac en de trabajo. Los datos espec cos al problema que se est a resolviendo. M aquina de inferencia. El c odigo central del SE que deriva recomendaciones con base en la base de conocimientos y los datos espec cos del problema. Interfaz del usuario. El c odigo que controla el di alogo entre el usuario y el SE.
Introducci on
Usando Prolog
Shell
Incertidumbre
Personas
I I I I
Experto del Dominio. Quien resuelve el problema que el SE intentar a resolver. Ingeniero de Conocimiento. Quien codica el conocimiento de los expertos para que pueda ser usado por el SE. Usuario. Quien consultar a el SE para obtener los consejos que esperar a de un experto del dominio. Ingeniero de Sistemas. Quien construye la interfaz del usuario, dise na el formato declarativo de la base de conocimientos, e implementa la m aquina de inferencia adivinan cual es su rol?
Introducci on
Usando Prolog
Shell
Incertidumbre
Consideraciones
I I
Dependiendo de la talla del SE, el ingeniero de conocimiento y el ingeniero del sistema, pueden ser la misma persona. Al proceso de codicar el conocimiento de los expertos, se le conoce como ingenier a del conocimiento. El dise no del formato de la base de conocimientos y su codicaci on est an ntimamente relacionados. Siendo esta una tarea complicada, se busca reutilizar del conocimiento codicado usando shells.
Introducci on
Usando Prolog
Shell
Incertidumbre
I I I
Razonamiento guiado por las metas o encadenamiento hacia atr as. Inferencia descomponiendo las metas en sub-metas. Manejo de incertidumbre. La habilidad del SE para trabajar con reglas y datos que no son conocidos con precisi on. Razonamiento guiado por los datos o encadenamiento hacia adelante. Inferencia para deducir soluciones a un problema a partir de los datos iniciales disponibles.
Introducci on
Usando Prolog
Shell
Incertidumbre
I I I
Representaci on de datos. La forma en que los datos espec cos a un problema dado, son almacenados y accesados por el SE. Interfaz del usuario. La parte del SE que se usa para una interacci on m as amigable con el usuario. Explicaci on. La habilidad para explicar sus procesos de razonamiento y recomendaciones.
Introducci on
Usando Prolog
Shell
Incertidumbre
I I I
1 2 3 4 5 6 7
Forma eciente de resolver problemas modelados como casos de selecci on estructurada. Ej. identicaci on y diagn ostico. La meta del SE es elegir la mejor opci on de entre varias posibilidades enumeradas. Ej. reglas parte de un SE para identicar aves.
IF familia es albatros AND color es blanco THEN ave es albatros laysan . IF familia es albatros AND color es negro THEN ave es albatros de pies negros .
Introducci on
Usando Prolog
Shell
Incertidumbre
Albatros Laysan
Introducci on
Usando Prolog
Shell
Incertidumbre
Sub-metas
El sistema puede usar otras reglas para resolver ` a la Prolog las sub-metas planteadas por las reglas de alto nivel, por ejemplo:
IF orden es tubonasales AND tama~ n o es grande AND alas es grandes anguladas THEN familia es albatros .
1 2 3 4 5 6
Introducci on
Usando Prolog
Shell
Incertidumbre
Incertidumbre
Es muy com un en la resoluci on de problemas de selecci on estructurada, que la respuesta nal no es conocida con total certeza. Las reglas del experto pueden ser vagas, o el usuario puede estar inseguro sobre sus respuestas. Esto es f acilmente observable en el diagn ostico m edico. Los SE normalmente usan valores num ericos para representar certidumbre. Existen diveras maneras de denirlos y usarlos en el proceso de razonamiento.
Introducci on
Usando Prolog
Shell
Incertidumbre
I I
En algunos problemas no es posible enumerar las soluciones alternativas a las preguntas planteadas. Ej. conguraci on. El encadenamiento hacia adelante usa reglas IF-THEN para explorar el estado actual en la soluci on del problema y moverse a estados m as cercanos a la soluci on. Ej. un SE para acomodar mobiliario.
IF no_colocada tv AND sof a en pared X AND pared Y opuesta a pared X THEN colocar tv en pared Y .
I
1 2 3 4
Introducci on
Usando Prolog
Shell
Incertidumbre
Reglas en Prolog
Podemos usar las reglas de Prolog para representar las reglas del SE.
ave ( al ba t ro s_ la y sa n ) : familia ( albatros ) , color ( blanco ) . ave ( a l b a t r o s _ p a t a s _ n e g r a s ) familia ( albatros ) , color ( obscuro ) . ave ( ci sne_silb ador ) : familia ( cisne ) , voz ( suave_musical ) . ave ( c i s n e _ t r o m p e t e r o ) : famila ( cisne ) , voz ( alta_trompeta ) .
1 2 3 4 5 6 7 8 9 10 11 12
:-
Introducci on
Usando Prolog
Shell
Incertidumbre
Introducci on
Usando Prolog
Shell
Incertidumbre
Para que estas reglas tengan exito al distinguir un ave, necesitamos almacenar hechos acerca del ave que deseamos identicar con el SE.
familia ( albatros ) . color ( obscuro ) .
1 2
Introducci on
Usando Prolog
Shell
Incertidumbre
Representar la naturaleza jer arquica de las reglas del SE. Ej. clasicaci on de un ave.
orden ( nariz_tubular ) : fosas ( e x t e r n a s _ t u b u l a r e s ) , habitat ( mar ) , pico ( gancho ) . orden ( acuatico ) : patas ( membrana ) , pico ( plano ) . familia ( albatros ) : orden ( nariz_tubular ) , tama~ n o ( grande ) , alas ( muy_largas ) . familia ( cisne ) : orden ( acuatico ) , cuello ( largo ) , color ( blanco ) , vuelo ( pesado ) .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Introducci on
Usando Prolog
Shell
Incertidumbre
Ahora el SE puede identicar al albatros a partir de observaciones fundamentales sobre el ave. En la primer versi on, familia/1 fue implementada como un hecho, ahora se implementa como una regla. Los hechos del SE ahora reejan datos m as primitivos:
fosas ( e x t e r n a s _ t u b u l a r e s ) . habitat ( mar ) . pico ( gancho ) . tama~ n o ( grande ) . alas ( muy_largas ) . color ( obscuro ) .
1 2 3 4 5 6
Introducci on
Usando Prolog
Shell
Incertidumbre
Otras relaciones
El ganso canadiense puede usarse para agregar complejidad al sistema. Esta ave pasa los veranos en Canad a y los inviernos en los Estados Unidos:
ave ( g a n s o _ c a n a d i e n s e ) : familia ( ganso ) , estacion ( invierno ) , pais ( es tados_un idos ) , cabeza ( negra ) , pecho ( blanco ) . ave ( g a n s o _ c a n a d i e n s e ) : familia ( ganso ) , estacion ( verano ) , pais ( canada ) , cabeza ( negra ) , pecho ( blanco ) .
1 2 3 4 5 6 7 8
Introducci on
Usando Prolog
Shell
Incertidumbre
Las metas pueden hacer referencia a otros predicados en una jerarqu a (ontolog a) diferente:
pais ( es tados_un idos ) : - region ( oeste_medio ) . pais ( es tados_un idos ) : - region ( sur_oeste ) . pais ( es tados_un idos ) : - region ( nor_oeste ) . pais ( es tados_un idos ) : - region ( a tl an ti c o_ me di o ) . pais ( canada ) : - provincia ( ontario ) . pais ( canada ) : - provincia ( quebec ) . region ( n u e v a _ i n g l a t e r r a ) : - estado ( X ) , member (X ,[ massachusetts , vermont , connecticut , maine ]) . region ( sur_oeste ) : - estado ( X ) , member (X ,[ florida , mississippi , alabama , nueva_orleans ]) .
1 2 3 4 5 6 7 8 9 10 11 12
Introducci on
Usando Prolog
Shell
Incertidumbre
Predicados m ultiples
Otras aves necesitar an de predicados m ultiples para ser identicada. Ej. el Mallard macho (Anas platyrhynchos), o pato com un del norte, tiene la cabeza verde con un anillo blanco; la hembra tiene la cabeza caf e moteada:
ave ( mallard ) : familia ( pato ) , voz ( graznido ) , cabeza ( verde ) . ave ( mallard ) : familia ( pato ) , voz ( graznido ) , cabeza ( cafe_moteada ) .
1 2 3 4 5 6 7 8
Introducci on
Usando Prolog
Shell
Incertidumbre
Introducci on
Usando Prolog
Shell
Incertidumbre
Representaci on
El sistema puede mejorarse considerablemente si proveemos una interfaz para el usuario, que pregunte por la informaci on cuando esto sea necesario, en lugar de forzar al usuario a introducirla como hechos del programa. Todos los datos, manejandos hasta ahora, han sido de la forma atributovalor (proposicional). atributo familia voz cabeza valor pato graznido verde
Introducci on
Usando Prolog
Shell
Incertidumbre
Interacci on
I
Usaremos el predicado pregunta para determinar con ayuda del usuario, cuando un par atributovalor es verdadero:
come ( X ) : - pregunta ( come , X ) . pies ( X ) : - pregunta ( pies , X ) . alas ( X ) : - pregunta ( alas , X ) . cuello ( X ) : - pregunta ( cuello , X ) . color ( X ) : - pregunta ( color , X ) .
1 2 3 4 5
I
1 2 3 4
Introducci on
Usando Prolog
Shell
Incertidumbre
Ejemplo de corrida
I
Si se responde no a la u ltima pregunta, la regla para ave (albratros laysan) falla, y por backtracking, el SE nos preguntar a nuevamente informaci on que ya sabe! pregunta deber a recordar lo preguntado.
Introducci on
Usando Prolog
Shell
Incertidumbre
Conocido
I I
Deniremos un nuevo predicado conocido /3 que nos ayude a recordar las respuestas del usuario. Las respuestas no se guardar an directamente en memoria, sino que ser an guardadas din amicamente con asserta/1 cuando pregunta provea informaci on nueva para el SE:
pregunta (A , V ) : - conocido ( si ,A , V ) , !. pregunta (A , V ) : - conocido (_ ,A , V ) , ! , fail . pregunta (A , V ) : write ( A : V ) , write ? : ) , read ( Resp ) , asserta ( conocido ( Resp ,A , V ) ) , Resp == si .
1 2 3 4 5 6 7 8 9 10
Introducci on
Usando Prolog
Shell
Incertidumbre
Menues contextuales
I
1 2 3 4
Para atributos multivariados, una gu a sobre los valores v alidos se implementa con el predicado menu pregunta.
tama~ no (X) :menu_pregunta ( tama~ n o , X , [ grande , mediano , peque~ n o ]) . color ( X ) : menu_pregunta ( color ,X ,[ blanco , verde , cafe , negro ]) .
1 2 3 4
Introducci on
Usando Prolog
Shell
Incertidumbre
Checar pregunta
I
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Introducci on
Usando Prolog
Shell
Incertidumbre
Revisitando componentes
El SE de identicaci on de aves tiene dos partes: una base de conocimientos, que incluye la informaci on espec ca sobre las aves; y los predicados para controlar la interfaz con el usuario. Al separar estas dos partes, podemos crear un shell de SE. Con ello podemos crear un nuevo SE que identique, por ejemplo, peces y reutilizar la parte de control de la interfaz. Un cambio m nimo es necesario para separar las dos partes de nuestro SE. Necesitamos un predicado de alto nivel que inicie el proceso de identicaci on:
meta ( X ) : - ave ( X ) .
Introducci on
Usando Prolog
Shell
Incertidumbre
Manteninmiento y soluci on
I
El shell tendr a un predicado solucion/0 para labores de mantenimiento del SE, para luego resolver la meta/1:
solucion : abolish ( conocido ,3) , define ( conocido ,3) , meta ( X ) , write ( La respuesta es : ) , write ( X ) , nl . solucion : write ( No se encontr o una respuesta . ) , nl .
1 2 3 4 5 6 7
abolish/2 se usa para eliminar los hechos denidos previamente con conocido /3, cada vez que una consulta se va a ejecutar. dene /2 permite indicarle a Prolog que conocido estar a denido en el SE, para que no cause error.
Introducci on
Usando Prolog
Shell
Incertidumbre
Resultado
De esta manera tenemos que el SE ha sido dividido en dos partes. Los predicados en el shell son:
I I I I
solucion, pregunta, menu pregunta, los predicados auxiliares de estos. meta, las reglas sobre el conocimiento del SE, las reglas sobre los atributos provistos por el usuario, las declaraciones de los atributos multi-variados.
Introducci on
Usando Prolog
Shell
Incertidumbre
Deniendo un REPL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
se : - bienvenida , repeat , write ( > ) , read ( X ) , do ( X ) , X == quit . bienvenida : write ( Este es el shell de su SE . ) , nl , write ( Escriba : cargar , consultar , o salir en el prompt . ) , nl . do ( cargar ) : - cargar_bd , !. do ( consultar ) : - solucion , !. do ( salir ) . do ( X ) : - write ( X ) , write ( no es un comando v a lido . ) , nl , fail . cargar_bd : - write ( Nombre del archivo : ) , read ( F ) , reconsult ( F ) .
Introducci on
Usando Prolog
Shell
Incertidumbre
Arquitectura obtenida
Interfaz del Usuario se pregunta menu_pregunta
Introducci on
Usando Prolog
Shell
Incertidumbre
Un nuevo SE
I I
Desarrollaremos un shell que permita manejar reglas con incertidumbre y encadenamiento hac a atr as. Evidentemente, este SE tendr a un formato de reglas propio, diferente a las reglas de Prolog, y por lo tanto, una m aquina de inferencia propia.
Introducci on
Usando Prolog
Shell
Incertidumbre
La forma m as com un de trabajar con la incertidumbre consiste en asignar un factor de certidumbre a cada pieza de informaci on en el SE. La m aquina de inferencia deber a mantener los factores de incertidumbre conforme el proceso de inferencia se lleve a cabo. Por ejemplo, asumamos que los factores de certidumbre (precedidos por cf) son:
I I
RULE 1 IF not arranca AND bateria_mala THEN problema is bateria . RULE 2 IF luces_debiles THEN bateria_mala cf 50. RULE 3 IF radio_debil THEN bateria_mala cf 50. RULE 4 IF arranca AND olor_gasolina THEN problema is fuga cf 80.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
RULE 5 IF arranca AND i n d i c a d o r _ g a s o l i n a is vacio THEN problema is tanque_vacio cf 90. RULE 6 IF arranca AND i n d i c a d o r _ g a s o l i n a is bajo THEN problema is tanque_vacio cf 30. ASK arranca MENU ( si no ) PROMPT Su motor arranca ? . ASK luces_debiles MENU ( si no ) PROMPT Sus luces est an d e biles ? .
Introducci on
Usando Prolog
Shell
Incertidumbre
Corrida
consultar , reiniciar , cargar , listar , trazar , c o mo , salida : consultar Su motor arranca ? : si Huele a gasolina ? : si Qu e indica la aguja de la gasolina ? : vacio problema - tanque - vacio - cf -90 problema - fuga - cf -80 problema resuelto
Introducci on
Usando Prolog
Shell
Incertidumbre
Observaciones
Observen que a diferencia de Prolog, el sistema no se detiene al encontrar el primer posible valor para problema. En este caso se computan todos los valores razonables para problema y se reporta el valor de certidumbre asociado a estas soluciones. Recordemos que estos factores de certidumbre no son probabilidades, solo ponderan de alguna manera las respuestas.
Introducci on
Usando Prolog
Shell
Incertidumbre
CF en los hechos
De igual manera, el usuario podr a capturar factores de certidumbre sobre sus respuestas, por ejemplo:
: consultar ... Huele a gasolina ? si cf 50 ...
Introducci on
Usando Prolog
Shell
Incertidumbre
Existen diversas maneras de capturar el concepto de factor de certidumbre, pero todas ellas deben de confrontar las mismas situaciones b asicas:
I I I I I I
Reglas cuyas conclusiones son inciertas, Reglas cuyas premisas son inciertas, Datos provistos por el usuario inciertos, Combinaci on de premisas inciertas con conclusiones inciertas, Actualizar los factores de incertidumbre en los datos almacenados en el espacio de trabajo, Establecer un umbral sobre el cual las premisas se consideran conocidas.
Introducci on
Usando Prolog
Shell
Incertidumbre
Revisemos el uso de estos factores por casos. El m as simple, ser a aquel donde las premisas son totalmente ciertas:
arranca cf 100. olor_gas cf 100.
1 2
disparan la regla 4 y por tanto, problema fuga cf 80 deber a agregarse al almac en de trabajo.
Introducci on
Usando Prolog
Shell
Incertidumbre
Normalmente no estamos totalmente seguros de las premisas de una regla y lo normal ser a tener hechos como:
arranca cf 80. olor_gas cf 50.
1 2
Cuando esto sucede, la incertidumbre en las premisas de la regla debe combinarse con las de la conclusi on: CF = CFregla m n CFpremisa/100
Ej. la regla 4 se activar a con un cf = 50 (el m nimo de las dos premisas) y dada la f ormula anterior, agregar amos problema fuga cf 40.
Introducci on
Usando Prolog
Shell
Incertidumbre
Disparo de reglas
I I I
Para que una regla dispare, su factor de certidumbre debe superar un umbral que normalmente se ja en 20. As que bajo la denici on anterior, la regla 4 disparar a. Si tuvi esemos olor gas cf 15, entonces la regla no disparar a.
Introducci on
Usando Prolog
Shell
Incertidumbre
I I
Consideren el caso donde hay m as de una regla que da soporte a cierta conclusi on. Cada una de las reglas que disparan contribuir a al factor de certidumbre de la conclusi on. Si una regla dispara y la conclusi on ya se encontraba en el almac en de trabajo:
CF (X , Y ) CF (X , Y ) CF (X , Y ) = = = X + Y (100 X + Y /1 X )/100. Ambos X , Y > 0 Uno de X , Y < 0 m n(|X |, |Y |).
CF ( X , Y ).
Ambos X , Y < 0
Introducci on
Usando Prolog
Shell
Incertidumbre
Ejemplo
Si disparamos la regla 2 (luces d ebiles) con su premisa sin incertidumbre, tendr amos que agregar al almac en de trabajo bateria mala cf 50. Luego si disparamos la regla 3 (radio d ebil), el factor de certidumbre de este hecho debe modicarse a bateria mala cf 75. Lo cual resulta intuitivo (hay m as evidencia de que la bater a tiene problemas). Lo que tambi en resulta intuitivo es que necesitamos programar nuestra propia m aquina de inferencia.
Introducci on
Usando Prolog
Shell
Incertidumbre
cuando Atributo y Valor son atomos, la estructura general de las reglas se ve como:
regla ( Nombre , premisas ( [ av ( A1 , V1 ) , av ( A2 , V2 ) , ... ] ) , conclusion ( av ( Attr , Val ) , CF ) ) .
I
1 2 3 4
Introducci on
Usando Prolog
Shell
Incertidumbre
Dado el formato de las reglas del SE deseamos que la inferencia tome en cuenta los siguientes aspectos:
I I I
Combine los factores de certidumbre como se indico anteriormente. Mantenga el espacio de trabajo con la informaci on actualizada con las nuevas evidencias obtenidas. Encontrar toda la informaci on acerca de un atributo en particular cuando se pregunte por el, y poner esa informaci on en el espacio de trabajo.
Introducci on
Usando Prolog
Shell
Incertidumbre
Hechos y metas
I
Un predicado meta/2 har a la llamada para resolver un problema dado en estos t erminos. Ej.
? - meta ( av ( problema , X ) , CF ) .
El atributovalor se conoce de antemano; Existen reglas para deducir el atributovalor; Se debe preguntar al usuario.
Introducci on
Usando Prolog
Shell
Incertidumbre
Preguntar
I
Se puede preguntar al usuario autom aticamente por el valor de un atributo, ante la ausencia de reglas; o bien, se puede declarar que atributos pueden ser preguntados al usuario. As el manejo de la base de conocimientos sea m as expl cito y provee mayor control sobre los di alogos usuario SE. Podemos denir un predicado pregunta/2 para declarar el atributo a preguntar y la frase para ello:
pregunta ( pais_residencia , En qu e pa s vive ? ) .
I I
Introducci on
Usando Prolog
Shell
Incertidumbre
Meta: caso 1
Veamos ahora los tres casos para meta/2. El primero de ellos ocurre cuando la informaci on ya est a en la memoria de trabajo:
meta ( av ( Atr , Val ) , CF ) : hecho ( av ( Atr , Val ) , CF ) , !.
1 2 3
Introducci on
Usando Prolog
Shell
Incertidumbre
Meta: caso 2
I
El valor del atributo no se encuentra en la memoria de trabajo, pero es posible preguntar por ello al usuario:
\ meta ( av ( Atr , Val ) , CF ) : \+ hecho ( av ( Atr , _ ) ,_ ) , pregunta ( Atr , Msg ) , preguntar ( Atr , Msg ) , ! , meta ( av ( Atr , Val ) , CF ) .
1 2 3 4
El predicado preguntar /2 interroga al usuario, quien responde con un valor para la atributo Atr y un factor de certidumbre asociado CF . El mensaje Msg da la informaci on necesaria para guiar al usuario en estas consultas:
preguntar ( Atr , Msg ) : write ( Msg ) , read ( Val ) , read ( CF ) , asserta ( fact ( av ( Atr , Val ) , CF ) ) .
1 2 3
Introducci on
Usando Prolog
Shell
Incertidumbre
Meta: caso 3
El valor del atributo es desconocido, pero se puede deducir usando las reglas denidas en el sistema:
meta ( Meta , CFactual ) : buscaReglas ( Meta , CFactual ) .
1 2
I I
Esta llamada hace uso de la m aquina de inferencia que dise naremos para nuestro SE con incertidumbre. El factor de certidumbre se etiqueta como actual, porque es posible que cambie de valor al ir aplicando las reglas denidas en el sistema.
Introducci on
Usando Prolog
Shell
Incertidumbre
Buscando reglas
I
El predicado buscaReglas /2 se encarga de encontrar aquellas reglas cuya conclusi on unica con la Meta en cuesti on y de actualizar el factor de certidumbre con base en las premisas de estas reglas. Si la Meta es un hecho conocido, no hay nada que hacer, s olo regresar true :
buscaReglas ( Meta , CFactual ) : regla (N , premisas ( ListaPremisas ) , conclusion ( Meta , CF ) ) , probar ( ListaPremisas , Contador ) , ajustar ( CF , Contador , NuevoCF ) , actualizar ( Meta , NuevoCF , CFactual ) , CFactual == 100 , !. buscaReglas ( Meta , CF ) : hecho ( Meta , CF ) .
1 2 3 4 5 6 7 8 9 10 11
Introducci on
Usando Prolog
Shell
Incertidumbre
Probando premisas
Dada una lista de premisas pertenecientes a una regla encontrada para satisfacer la Meta del SE, es necesario que buscaReglas /2 las pruebe. Para ello denimos probar /2:
probar ( ListaPremisas , Contador ) : probAux ( ListaPremisas , 100 , Contador ) . probAux ([] , Contador , Contador ) . probAux ([ Premisa1 | RestoPremisas ] , ContadorActual , Contador ) : meta ( Premisa1 , CF , Cont ) , Cont >= 20 , probAux ( RestoPremisas , Cont , Contador ) .
1 2 3 4 5 6 7 8 9
Introducci on
Usando Prolog
Shell
Incertidumbre
Ajuste de factores
1 2 3 4 5 6 7 8 9 10 11
Introducci on
Usando Prolog
Shell
Incertidumbre
1 2 3 4 5 6 7 8 9
Introducci on
Usando Prolog
Shell
Incertidumbre
Combinaci on de CFs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
combinar ( CF1 , CF2 , CF ) : CF1 >= 0 , CF2 >= 0 , X is CF1 + CF2 *(100 - CF1 ) /100 , int_redondear (X , CF ) . combinar ( CF1 , CF2 , CF ) : CF1 < 0 , CF2 < 0 , X is -( -CF1 - CF2 *(100+ CF1 ) /100) , int_redondear (X , CF ) . combinar ( CF1 , CF2 , CF ) : ( CF1 < 0 ; CF2 < 0) , ( CF1 > 0 ; CF2 > 0) , abs_minimum ( CF1 , CF2 , MCF ) , X is 100 * ( CF1 + CF2 ) / (100 - MCF ) , int_redondear (X , CF ) .
Introducci on
Usando Prolog
Shell
Incertidumbre
La interfaz con el usuario es muy parecida a la denida en la secci on anterior. Se incluyen predicados auxiliares necesarios en su denici on:
se : repeat , write ( consultar , cargar , salir ) , nl , write ( : ) , read_line ( X ) , ejec ( X ) , X == salir . ejec ( consultar ) : metas_principales , !. ejec ( cargar ) : cargar_reglas , !. ejec ( salir ) .
1 2 3 4 5 6 7 8 9 10 11 12 13
Introducci on
Usando Prolog
Shell
Incertidumbre
Auxiliares
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
metas_principales :meta _princip al ( Atr ) , principal ( Atr ) , imprime_meta ( Atr ) , fail . metas_principales . principal ( Atr ) : meta ( av ( Atr , Val , CF ) ) , !. principal ( _ ) : - true . imprime_meta ( Atr ) : nl , hecho ( av ( Atr , Val ) , CF ) , CF >= 20 , salidap ( av ( Atr , Val ) , CF ) , nl , fail . imprime_meta ( Atr ) : write ( Meta : ) , write ( Attr ) , write ( solucionada . ) , nl , nl .