Publicado en: Boletin de la AEPIA. No. 6. Primavera-Verano'96

TEMPOCLIPS: Integración en CLIPS de un Modelo de Razonamiento Temporal

Oscar A. Alvarado Prieto

Departamento de Sistemas Informáticos y Computación.

Facultad de Informática. Universidad Politécnica de Valencia.

Palabras clave: razonamiento temporal, Sistemas Basados en el Conocimiento, herramientas de desarrollo de SBC.

Resumen: Describimos en este trabajo la implementación de un modelo temporal y su posterior integración en una herramienta para el desarrollo de SBC (CLIPS). Pretendemos, en primer lugar, la obtención de un módulo de razonamiento temporal independiente e integrable en el mayor numero de aplicaciones y ,en segundo lugar, realizar la integración del citado módulo en CLIPS dando lugar a TEMPOCLIPS: una herramienta con capacidad de representación y razonamiento temporal para el desarrollo de SBC.

1. INTRODUCCIÓN.

La necesidad de una representación y un razonamiento temporal surge en dominios de aplicación de la metodología de Sistemas Basados en el Conocimiento (SBC). Así pues, en áreas como la monitorización y control de procesos, la gestión de recursos o la planificación, poder representar y manejar la noción de tiempo es indispensable ya que los problemas que se plantean en estos contextos son dinámicos. Resulta, por tanto, inadecuado considerar los datos de un modo atemporal, y se hace necesaria la observación de éstos como toda la sucesión de valores que han ido tomando a lo largo del tiempo obligándonos a contemplar este último en el proceso deductivo (Barber y Descals, 1993, 2).

Con el ánimo de proporcionar un módulo de razonamiento temporal independiente y de fácil integración en otras aplicaciones, realizamos primeramente el diseño e implementación de un razonador temporal no ligado a ningun sistema concreto.

El modelo temporal en el que se basa la implementación realizada es el desarrollado por el Dr. Federico Barber (Barber ). Dicho modelo comprende a su vez un modelo de puntos de tiempo y otro de duraciones temporales perfectamente integrados de los cuales solo contemplamos el primero de ellos.

Basandonos en las funcionalidades del citado modelo añadimos el concepto de hecho temporal y definimos nuevas operaciones para su manipulación con el porpósito de simplificar la utilización de los mismos.

Proporcionamos además la posibilidad de la retractación de actualizaciones de la información temporal, característica que posibilita, entre otras cosas, la búsqueda de soluciones en un espacio de estados.

Una vez obtenido el módulo de razonamiento temporal, realizamos la integración del mismo en CLIPS (TEMPOCLIPS) extendiendo las funcionalidades de éste con las descritas en los párrafos anteriores.

Finalmente, TEMPOCLIPS nos permitirá comprobar prácticamente la utilidad del razonamiento temporal a través de un ejemplo en el que se monitoriza un sistema de climatización.

2. MODELO TEMPORAL, HECHOS TEMPORALES, RETRACTACIÓN.

Como ya hemos comentado, en el presente trabajo tan sólo ha sido necesario emplear parte del modelo temporal citado, por lo que nos limitaremos a la representación de los puntos de tiempo y las relaciones entre éstos (TCN-P), así como al proceso de razonamiento considerando los elementos anteriores únicamente.

El modelo temporal propuesto define el punto de tiempo como forma de referencia simbólica a un instante. Así tpi representa el punto de tiempo simbólico i. La modelización del tiempo realizada lo hace finito en el inicio, y define el símbolo TP-init como el punto de tiempo inicial.

Se proponen de igual modo, tres tipos de relaciones posibles entre puntos de tiempo:

(after tpi tpj dk): Expresa que la situación del punto de tiempo tpi es posterior a la situación del punto de tiempo tpj más dk unidades temporales.

(before tpi tpj dk): Expresa que la situación del punto de tiempo tpi es anterior a la situación del punto de tiempo tpj más dk unidades temporales.

(at tpi tpj dk): Expresa que la situación del punto de tiempo tpi igual a la situación del punto de tiempo tpj más dk unidades temporales.

Con las relaciones temporales definidas se pueden especificar restricciones métricas y restricciones cualitativas no disyuntivas (fig. 1).

Figura 1.- Tipología de restricciones.

Las restricciones métricas pueden ser binarias o unarias. Las primeras expresan orden y distancia temporal entre dos nodos. Las restricciones métricas unarias son un caso particular de las binarias, en el que uno de los nodos es TP-init, con lo cual es posible especificar de un modo absoluto la posición de un punto de tiempo.

Las restricciones cualitativas son aquellas en las que el parámetro dk es igual a 0. Así pues, para expresar que tpi es posterior a tpj podríamos escribir (after tpi tpj 0). De todas las restricciones cualitativas posibles entre dos puntos de tiempo únicamente no es posible expresar la desigualdad ya que supone una disyuntiva (< >).

En general, entre dos puntos de tiempo puede existir cualquier combinación consistente de relaciones temporales considerando éstas de un modo no disyuntivo. De este modo, podemos acotar un punto de tiempo a un instante preciso (at), impreciso (o before o after), o a una ventana temporal (before y after) y todo esto respecto a otro punto de tiempo o a TP-init (fig. 2).

(at tp1 TP-init 20)

(after tp2 tp1 0)

(after tp3 tp1 10) y (before tp3 tp1 30)

(after tp4 tp2 -10)

Figura 2.- Ejemplos de restricciones temporales.

Definimos a continuación las funciones que permiten actuar sobre la información temporal del TCN-P:

(Update R tpi tpj dk): Proceso de actualización. Se utiliza para insertar la restricción temporal (R tpi tpj dk). Si tpi o tpj no existen son creados.

(Retrieve R tpi tpj dk): Proceso de recuperación. Se utiliza para averiguar la consistencia de la relación temporal (R tpi tpj dk) respecto a la información más restrictiva almacenada en el TCN-P.

En ambas operaciones los posibles resultados son:

TRUE: En actualización, la restricción es redundante y no se cambia el TCN-P. En recuperación, la restricción puede obtenerse a partir de la información existente en el TCN-P.

FALSE: En actualización, la restricción es inconsistente y no se cambia el TCN-P. En recuperación, se puede deducir a partir de la información del TCN-P la restricción inversa a la interrogada.

POSSIBLE: En actualización, la restricción es consistente con el TCN-P aportando nueva información, se añade al TCN-P. En recuperación, no hay un camino entre los dos nodos o la información almacenada en la TCN-P no es suficiente para deducir la relación planteada o su inversa y por lo tanto no se puede responder TRUE o FALSE.

Los algoritmos subyacentes a las operaciones anteriores, son definidos igualmente en el citado modelo, realizándose una gestión con propagación del TCN-P.

Con este método de gestión, las consecuencias de cada nueva restricción actualizada entre dos nodos son propagadas a todo el TCN-P. De esta forma, toda combinación de caminos entre dos pares cualquiera de nodos (restricciones derivadas entre ellos) a través de la nueva restricción actualizada es computada e insertada en el TCN-P como restricciones derivadas entre la pareja de nodos.

Esto implica que el proceso de actualización debe ejecutar un mecanismo de propagación de la nueva restricción, mientras que el proceso de recuperación entre cualquier par de nodos puede obtener una respuesta con tan sólo examinar las restricciones directas o derivadas que existen entre ambos nodos, representadas de forma explícita. Las ventajas son evidentes en sistemas en los que se realicen una gran cantidad de recuperaciones (O(1)) y un reducido número de actualizaciones.

Basándonos en los conceptos anteriores, pasamos a definir los hechos temporales. Supondremos una representación basada en objetos de los hechos (temporales o no) de un problema. De un modo general, un hecho estará representado por la terna <objeto atributo valor> y particularmente en hechos temporales, el valor será, a su vez, la terna <punto-inicial punto-final evaluación>.

En lo sucesivo, utilizaremos la siguiente notación:

Hecho temporal:

ht º <objeto atributo valor-temporal>.

Valor temporal:

vt º <punto_inicial punto-final evaluación>

Es de señalar que la representación escogida para hechos temporales establece una correspondencia biunívoca entre un hecho temporal hti y su valor temporal vti de manera que es indiferente referirse a uno u otro, cosa que haremos en lo sucesivo.

Describimos a continuación las relaciones contempladas entre hechos temporales:

Sean vti, vtj valores temporales.

(before vti vtj): Expresa que vti comienza antes que vtj.

(meets vti vtj): Expresa que vti finaliza en el instante en el que comienza vtj.

(overlaps vti vtj): Expresa que vtj comienza en algún punto durante vti y finaliza después que éste.

(during vti vtj): Expresa que vti tiene lugar en algún lapso de tiempo durante vtj.

(starts vti vtj): Expresa que vti y vtj comienzan a la vez.

(finishes vti vtj): Expresa que vti y vtj finalizan a la vez.

(equal vti vtj): Expresa que vti y vtj comienzan y finalizan a la vez.Obviaremos por motivos de espacio la definición de las relaciones entre hechos temporales anteriores en términos de relaciones temporales entre sus puntos de inicio y finalización.

Definimos seguidamente las funciones especificas de manipulación de relaciones entre hechos temporales:

(Updatetfr R vti vtj): Proceso de actualización. Se utiliza para insertar la restricción (R vti vtj). Tanto vti como vtj deben existir previamente.

(Retrievetfr R vti vtj): Proceso de recuperación. Se utiliza para averiguar la consistencia de la relación (R vti vtj dk) respecto a la información más restrictiva almacenada en el TCN-P.

En ambas operaciones los posibles resultados son:

· TRUE: En actualización, la restricción es redundante y no se cambia el TCN-P. En recuperación, la restricción puede obtenerse a partir de la información existente en el TCN-P.

· FALSE: En actualización, la restricción es inconsistente y no se cambia el TCN-P. En recuperación, se deduce del TCN-P la relación inversa a alguna de las relaciones subyacentes entre los puntos inicio y fin de ambos hechos.

· POSSIBLE: En actualización, la restricción es consistente con el TCN-P aportando nueva información y añadiéndose al TCN-P. En recuperación, o el TCN-P no contiene información suficiente para responder TRUE o FALSE o no existe información sobre alguna de las relaciones subyacentes entre los puntos inicio y fin de ambos hechos.

Las operaciones anteriormente definidas se basan por entero en las funciones de actualización y recuperación de relaciones temporales entre puntos de tiempo. Tan sólo señalaremos aquí la importancia de realizar de un modo atómico todas las actualizaciones del TCN-P que componen una única actualización de la relación entre dos hechos temporales.

Por último y de modo informal, describimos la retractación de actualizaciones en la TCN. La realización de un borrado que mantenga la consistencia de la TCN-P se lleva a cabo mediante la inserción de marcas de retorno. Una marca de retorno puede ser insertada en un instante cualquiera. Posteriormente, podremos deshacer todo lo acontecido desde la inserción de dicha marca, o descartar la misma y con ello la posibilidad de retractarse hasta ésta. Como se puede observar, el borrado descrito no es genérico, pero es sencillo de implementar y suficiente para un gran número de aplicaciones como por ejemplo las que obtienen soluciones mediante la búsqueda en un espacio de estados, pues, generalmente sólo necesitan retractarse de las últimas actualizaciones.

3. IMPLEMENTACIÓN DEL MÓDULO DE RAZONAMIENTO TEMPORAL.

Sin ánimo de ser exhaustivos, describimos a continuación las principales funcionalidades aportadas por el software desarrollado, así como, algunos aspectos de relevancia referentes a estructuras de datos e integración.

Se requiere una manipulación de nodos y relaciones temporales con las siguientes características:

Creación de puntos de tiempo.

Actualización y propagación de relaciones temporales entre puntos de tiempo.

Recuperación de restricciones temporales.

Razonamiento sobre la consistencia de relaciones temporales propuestas.

Retractamiento de las últimas actualizaciones sobre la TCN-P.

Por otro lado, es necesaria una gestión de hechos temporales con las siguientes características:

Creación de hechos temporales.

Actualización y propagación de relaciones entre hechos temporales.

Recuperación de restricciones temporales entre hechos temporales.

Actualización de duraciones de hechos temporales.

Recuperación de duraciones de hechos temporales.

Retractamiento coherente con el realizado sobre la TCN-P.

Obtención de puntos de tiempo inicial y final de los hechos temporales.

Actualización del atributo valor de los hechos temporales (univaluado o multivaluado).

En otro orden de cosas, el diseño e implementación del razonador temporal ha estado guiado por la búsqueda de la eficiencia temporal y la facilidad de integración en otras aplicaciones.

Las estructuras de datos empleadas han sido definidas observando su utilización en los algoritmos aportados por el modelo temporal. Las dos principales estructuras de datos utilizadas han sido las tablas de dispersión y los árboles binarios. Las primeras se han empleado para el almacenamiento de nodos y hechos temporales aportándose, por otro lado, un mecanismo por el que se consigue, de un modo progresivo, mantener el equilibrio entre las listas de éstas. Los árboles binarios se han utilizado para almacenar relaciones temporales siendo de señalar que el sistema de equilibrado nombrado para las tablas de dispersión afecta de igual modo al equilibrio de los árboles binarios.

Como señalábamos anteriormente el empleo de un lenguaje de amplia utilización ("C") facilita en gran medida su integración en otras aplicaciones. Esta circunstancia la hemos podido constatar en la integración realizada del razonador temporal con CLIPS. Aún cuando CLIPS propone su interfaz para la definición de funciones "C", siempre es posible incluir un nivel de funciones cuyo cometido es el de la adaptación de ambas interfaces y conversión de tipos.

4. TEMPOCLIPS: INTEGRACIÓN EN CLIPS DEL RAZONAMIENTO TEMPORAL, NUEVAS FUNCIONES Y PREDICADOS.

Utilizando el módulo de razonamiento temporal genérico descrito, junto con las facilidades que CLIPS ofrece para la integración de nuevas funciones "C", hemos generado TEMPOCLIPS, una herramienta para el desarrollo de SBC con capacidad de razonamiento temporal, representación de hechos temporales y posibilidad de retractación.

Describimos a continuación las convenciones tipográficas que utilizaremos para definir la sintaxis y el resultado de las nuevas funciones y predicados.

En general, la ubicación de espacios en blanco será significativa. Utilizaremos la escritura en negrita para denotar todo aquello que deba escribirse literalmente, la escritura en cursiva para denotar tipos o un elemento de un tipo, y finalmente, la escritura normal para denotar los símbolos: "[", "]" y "|" cuyo significado será:

[x] x es opcional.

x1 | x2 | ... | xn xi (1 <= i <= n).

Haciendo uso de las normas anteriores, definimos los siguientes tipos básicos:

tn tnnatural

tf tfnatural

tnr at | after | before

tfr before | meets | overlaps | during | starts | finishes | equal

tfc less | equal | greater

lapso entero*

duración natural

valor símbolo* | entero* | flotante* | string* | multifield[*]

error ERRORnatural

bool TRUE | FALSE

Por último, hemos de señalar la existencia de dos nodos especiales: tn0 y now. El primero es creado automáticamente cuando se arranca la aplicación, a modo de nodo temporal inicial denotando el punto de tiempo origen. El segundo -now- no es un nodo que esté almacenado en el TCN-P, pero a todos los efectos es utilizable como cualquier otro y simboliza el instante actual, instanciándose en cada momento en que es invocado.

Funciones referentes a nodos temporales:

Función: createtn.

a) Sintaxis: (createtn [tn])

b) Resultado: tn | error.

c) Propósito: Crear un nuevo nodo temporal de nombre aleatorio o crear el nodo temporal de nombre tn. En cualquier caso, el nuevo nodo temporal será relacionado con tn0 con una relación de tipo after y duración -1.

Función: timeabs.

a) Sintaxis: (timeabs tn)

b) Resultado: (entero entero) | (entero +infinite) | error

c) Propósito: Obtener el intervalo de vigencia de un nodo temporal respecto a tn0.

Funciones referentes a relaciones temporales:

Función: updatetr.

a) Sintaxis: (updatetr tnr tn|now tn|now lapso)

b) Resultado: bool | error

c) Propósito: Actualizar la relación de tipo tnr de duración lapso entre dos nodos temporales. El resultado será TRUE si la relación es redundante o se pudo actualizar y FALSE si la relación es contradictoria. En caso de no existir alguno de los nodos temporales, serán creados y relacionados con tn0 con una relación de tipo after y duración -1.

Función: retrievetr.

a) Sintaxis: (retrievetr tnr tn|now tn|now [lapso])

b) Resultado: lapso | bool | ERRORentero

c) Propósito: Interrogar sobre una relación de tipo tnr de duración lapso entre dos nodos temporales, el resultado será TRUE si la relación es redundante o posible y FALSE si la relación es contradictoria. Obtener el parámetro duración de una relación, el resultado será la duración requerida.

Funciones referentes a los ficheros imagen:

Función: tnimage.

a) Sintaxis: (tnimage [tn])

b) Resultado: tn.natural | tn_image.natural

c) Propósito: Obtener una representación en un archivo de todos los nodos temporales definidos, así como de las relaciones existentes entre los mismos. Obtener una representación en un archivo del nodo temporal tn. En cualquier caso el resultado será el nombre del archivo creado.

Función: tfimage.

a) Sintaxis: (tfimage [tf])

b) Resultado: tf.natural | tf_image.natural

c) Propósito: Obtener una representación en un archivo de todos los hechos temporales definidos. Obtener una representación en un archivo del hecho temporal tf. En cualquier caso el resultado será el nombre del archivo creado.

Funciones referentes a hechos temporales:

Función: createtf.

a) Sintaxis: (createtf [tf])

b) Resultado: tf | error

c) Propósito: Crear un nuevo hecho temporal de nombre tf o crear un nuevo hecho temporal de nombre aleatorio. En cualquier caso el resultado es el nombre del nuevo hecho temporal.

Función: begin.

a) Sintaxis: (begin tf)

b) Resultado: tn | error

c) Propósito: Obtener el nodo temporal inicial del hecho temporal tf. El resultado será el nodo temporal requerido.

Función: end.

a) Sintaxis: (end tf)

b) Resultado: tn | error

c) Propósito: Obtener el nodo temporal final del hecho temporal tf. El resultado será el nodo temporal requerido.

Función: retrievevalue.

a) Sintaxis: (retrievevalue tf)

b) Resultado: valor | none | error

c) Propósito: Obtener el valor del hecho temporal tf. El resultado será el valor requerido.

Función: updatevalue.

a) Sintaxis: (updatevalue tf [valor])

b) Resultado: tf | error

c) Propósito: Actualizar el valor del hecho temporal tf al valor valor o borrar el valor asignado al hecho temporal tf. En cualquier caso el resultado será hecho temporal actualizado.

Función: retrievetfr.

a) Sintaxis: (retrievetfr tfr tf tf)

b) Resultado: bool | error

c) Propósito: Interrogar sobre una relación de tipo tfr entre dos hechos temporales. El resultado será TRUE si la relación es redundante o posible y FALSE si la relación es contradictoria.

Función: updatetfr.

a) Sintaxis: (updatetfr tfr tf tf)

b) Resultado: bool | error

c) Propósito: Actualizar la relación de tipo tfr entre dos hechos temporales. El resultado será TRUE si la relación es redundante o posible y FALSE si la relación es contradictoria.

Función: retrievetfd.

a) Sintaxis: (retrievetfd tf)

b) Resultado: (natural natural) | error

c) Propósito: Recuperar las duraciones mínima y máxima por este orden del hecho temporal tf.

Función: updatetfd.

a) Sintaxis: (updatetfd tfc tf duración)

b) Resultado: bool | error

c) Propósito: Actualizar la duración del hecho temporal tf mediante el comparativo tfc y una duración temporal.

Funciones referentes a la retractación:

Función: mark.

a) Sintaxis: (mark entero)

b) Resultado: mark entero

c) Propósito: Colocar una marca numerada.

Función: undo.

a) Sintaxis: (undo entero)

b) Resultado: retracted to mark entero | retracted to first mark | nothing to do

c) Propósito: Retractar hasta una marca numerada.

Función: clearmarks.

a) Sintaxis: (clearmarks)

b) Resultado: marks cleared | nothing to do

c) Propósito: Eliminar todas las marcas numeradas.

5. EJEMPLO PRÁCTICO.

Planteamos seguidamente un problema en el que es necesario el seguimiento temporal de ciertos valores, así como, poder razonar sobre los mismos.

Se desea monitorizar el funcionamiento de un sistema de climatización de una piscina en el que son recogidas periódicamente las temperaturas del ambiente y del agua, además de información referente a la actividad de los dos climatizadores existentes, uno para el ambiente y otro diferente para el agua.

Supondremos un conocimiento experto tal que, ante una temperatua (del ambiente o del agua) permite deducir si está dentro de la normalidad (funcionamiento correcto del sistema de climatización) o es, por el contrario, anormalmente alta o baja.

Para poder predecir una temperatura es necesario acceder a los valores de temperatura anteriores (ambiente y agua) y a la actividad de ambos climatizadores en un cierto intervalo de tiempo pasado, por lo que se hace patente la necesidad de una representacion y un razonamiento temporal.

Si suponemos que las lecturas de los valores de temperatura se hacen de un modo asíncrono, una representación adecuada de estos valores se puede hacer mediante hechos temporales de duración 0 cuya evaluación sea el valor de la temperatura (fig. 3a).

Figura 3.- Representación de hechos temporales.

La lista de temperauras ambiente podría ser actualizada mediante la siguiente regla:

(defrule Nueva-T-ambiente

?NTamb <- (Nueva-T-ambiente ?t) ;hecho que indica la llegada de una nueva lectura de temp.

?LTamb <- (T-ambiente $?tal) ;antigua lista de temperaturas ambiente

=>

(retract ?NTamb) ;se elimina el hecho "nueva lectura de temp. ambiente"

(bind ?tf (createtf)) ;nuevo hecho temporal

updatevalue ?tf ?t) ;actualizacion de la temperatura

(updatetr at (begin ?tf) now 0) ;vigente desde ahora

(updatetfd equal ?tf 0) ;es un valor puntual

(retract ?LTamb) ;se elimina la antigua lista de temperaturas

(assert (T-ambiente ?tal ?tf))) ;se crea la nueva lista de temperaturas

En cambio, la información de la actividad de los climatizadores debe ser representada mediante hechos temporales de una determinada duración (tiempo de funcionamiento del climatizador) cuya evaluación sea la potencia a la que funciona el mismo (fig. 3b). La siguiente regla podría actualizar la lista de actividad del climatizador:

(defrule Nueva-C-ambiente

?NCamb <- (Nueva-C-ambiente ?p ?d) ;hecho que indica la llegada de una nueva lectura de climat

?LCamb <- (C-ambiente $?cal) ;antigua lista de actividad del climatizador de ambiente

=>

(retract ?LCamb) ;se elimina el hecho "nueva lectura de activ. climat. amb."

(retract ?NCamb) ;se elimina la antigua lista de actividad

(updatevalue (bind ?tf (createtf)) ?p) ;se crea y actualiza el valor de un nuevo hecho temporal (updatetr at (begin ?tf) now 0) ;vigente desde ahora

(updatetfd less ?tf (+ ?d 1)) ;su duración es como máximo de d segundos

(bind ?l (length ?cal)) ;se averigua si es la primera lectura recibida

(if (> ?l 0)

then ;habia lecturas previas

(bind ?utf (nth ?l ?cal)) ;última lectura recibida

(if (retrievetfr before ?utf ?tf) ;se averigua si se ha reprogramado el climatizador

then ;la última actividad conocida finalizó hace algun tiempo

(updatetfr meets (bind ?wtf (createtf)) ?utf) ;para recoger la falta de lecturas

(updatetfr meets ?utf ?tf) ;se vuelve a tener una lectura.

(assert (C-ambiente ?cal ?wtf ?tf)) ;se actualiza la lista de lecturas de actividad

else ;se pretende variar la última lectura

(updatetf meets ?utf ?tf) ;la nueva lectura es adyacente al final de la anterior

(assert (C-ambiente ?cal ?tf))) ;se actualiza la lista de lecturas de actividad

else ;no existian lecturas previas

(bind ?wtf (createtf)) ;nuevo hecho temporal para recoger la falta de lecturas

(updatetr at (begin ?wtf) tn0 0) ;ausencia de lecturas desde el comienzo de los tiempos

(updatetfr meets ?wtf ?tf) ;se tiene la primera lectura

(assert (C-ambiente ?cal ?wtf ?tf)))) ;se actualiza la lista de lecturas de actividad

Figura 4.- Búsqueda en el pasado de la actividad del climatizador.

Una posible utilización de la información temporal almacenada para predecir la temperatura ambiente podria contemplar, sin intentar ser realistas, la tendencia de la temperaura a seguir descendiendo o aumentando. Asímismo, podría tener en cuenta las interrelaciones entre la temperatura del agua, en un cierto intervalo de tiempo pasado, y la del ambiente actual.

La siguiente regla predice la temperatura actual, en el momento en que se recibe una nueva lectura de la misma. Para ello investiga en el pasado la actividad del climatizador de ambiente (fig. 4):

(defrule Comprueba-Nueva-T-ambiente

?LCamb <- (C-ambiente $?cal) ;lista de actividad del climatizador

(T-ambiente $?) ;necesaria para disparar la regla

=>

(mark 32) ;inserta marca de retorno

(bind ?vtn (createtn)) ;crea un nodo temporal

(updatetr at ?vtn now -20) ;lo sitúa 20 s. en el pasado

(bind ?cali (length ?cal)) ;longitud de la lista de actividad del climatizador

(if (> ?cali 0)

then ;hay datos que mirar

(while (> ?cali 0)

(bind ?tf (nth ?cali ?cal))

if (and

(retrievetr after ?vtn (begin ?tf) 0)

(retrievetr before ?vtn (end ?tf) 0))

then ;se encuentra un dato posiblemente útil

(break))

(bind ?cali (- ?cali 1))))

(if (= ?cali 0)

then

(printout t "temperatura datos insuficientes" crlf) ;no se encontró un dato útil

else

(bind ?val (retrievevalue ?tf))

(if (lexemep ?val)

then

(printout t "temperatura datos insuficientes" crlf) ;el dato indicaba desconocimiento de actividad

else

(printout t "temperatura entre " (- ?val 2) " y " (+ ?val 2) crlf))) ;el dato contenía información útil

(undo 32)) ;retracta el TCN-P para dejarlo en el estado anterior a la aplicación de esta regla

Sin pretender dar una solución completa al problema planteado, el ejemplo mostrado es suficiente para apreciar algunas de las características más importantes del software desarrollado como son: la retractación o la manipulación de hechos temporales al margen, por supuesto, de las funcionalidades del modelo temporal utilizado.

Para finalizar este punto, incluimos (Figura 5) un volcado de pantalla de TEMPOCLIPS en el que pueden observarse los efectos de las reglas anteriores ante distintas aserciones.

6. CONCLUSIONES.

Resumimos finalmente, los siguientes aspectos referentes a la implementación del razonador temporal.

a) Eficiencia temporal: Teniendo como punto de partida los algoritmos definidos en el modelo empleado, consideramos que se ha conseguido una implementación eficiente, desde el punto de vista de la velocidad de computación, si bien hemos de tener en cuenta la complejidad temporal intrinseca del algoritmo de propagación utilizado O(n2) y una gestión óptima de memoria mediante estructuras específicas de datos.

b) Integración: El empleo de un lenguaje de amplia utilización y portabilidad ("C") facilita en gran medida su integración en otras aplicaciones.

En cuanto a las funcionalidades conseguidas, comentamos a continuación los siguientes aspectos:

a) Restricciones temporales métricas entre puntos: Las posibilidades del software implementado respecto a la definición y operación de restricciones métricas entre puntos, se corresponden exactamente con las descritas en el modelo temporal empleado conservando, de este modo, toda la expresividad original.

Figura 5.- Volcado de pantalla de TempoCLIPS

b) Nodos, relaciones y hechos temporales: Las funcionalidades específicas incluidas en el razonador temporal para la manipulación de hechos temporales tienen diversas consecuencias directas sobre las aplicaciones. En este sentido, podemos citar la reducción de su código fuente, así como el incremento de la claridad y la corrección de éste, características, por otro lado, acordes con las mostradas por las funciones de manipulación de nodos y relaciones temporales.

c) Retractación: La posibilidad de la retractación de actualizaciones, junto con las diversas operaciones de consulta, abre a las aplicaciones la posibilidad de búsqueda heur’stica de soluciones en un espacio de alternativas.

Agradecimientos: Agradecemos a Federico Barber sus comentarios y sugerencias que han contribuido de manera decisiva en la claridad y correción de este trabajo.

Nota: El software descrito en este art’culo est‡ disponible mediante petici—n a alvarado@dsic.upv.es, o fbarber@dsic.upv.es

BIBLIOGRAFêA

Aho, Hopcroft, Ullman, (1988), "Estructura de datos y algoritmos". Addison-Wesley Iberoamericana.

Barber, F. (1993), "A metric Time-Point and Duration based Temporal Model". Sigart Bulletin, Vol. 4, n[[ordmasculine]] 3.

Barber, F., Botti, V., Onaindia, E. y Crespo, A. (1994), "Temporal Reasoning in REAKT: An Enviroment for Real-Time Knowledge-Based Systems". AICOM, Vol. 7, pp. 175-202.

Barber, F., Descals, V. (1993), "Representación y razonamiento temporal en sistemas basados en el conocimiento". V Conferencia de la AEPIA, pp, 378-391.

Linares, J. (1995), "TCNM: Gestión de Restricciones Métricas entre Puntos y Duraciones".

Stroustrup, B. (1991), "The C++ Programing Languaje". Addison-Wesley Iberoamericana.

Software Technology Branch, Lyndon B. Jhonson Space Center (1993), "CLIPS Reference Manual". Vol 1, 2, 3.