Programacion Orientada a Agentes

6
Inteligencia Artificial, Revista Iberoamericana de Inteligencia Artificial. No.13 (2001), pp. 94-99 . ISSN: 1137-3601. © AEPIA (http://www.aepia.dsic.upv.es/). JavaLog: un Lenguaje para la Programación de Agentes Alejandro Zunino, Luis Berdún, Analía Amandi ISISTAN Research Institute, Facultad de Ciencias Exactas, Universidad Nacional del Centro de la Pcia. de Buenos Aires Campus Paraje Arroyo Seco - (B7001BBO) Tandil - Bs. As., Argentina email: {azunino,lberdun,amandi }@exa.unicen.edu.ar Resumen La programación de sistemas multi-agentes ha sido generalmente soportada por lenguajes orientados a objetos o lenguajes lógicos. Ambos paradigmas muestran poseer características para soportar parcialmente el desarrollo de agentes. Sin embargo, si ambos paradigmas son integrados, una solución a la programación de agentes aparece en forma evidente. En este artículo, un lenguaje multi-paradigma para la programación de agentes denominado JavaLog es presentado. Este lenguaje integra el lenguaje orientado a objetos Java y el lenguaje lógico Prolog. Esta combinación permite que agentes sean construidos como objetos manipulando un estado mental definido a través de cláusulas lógicas que son encapsuladas en módulos lógicos. Estos módulos lógicos permiten combinar dinámicamente actitudes mentales para adaptar el comportamiento de agentes considerando diferentes contextos o circunstancias. Palabras clave: Agentes, Programación Orientada a Agentes. 1. Introducción La programación de agentes involucra tanto el encapsulamiento de sus comportamientos como el de su estado mental. Estas características nos han llevado a utilizar lenguajes orientados a objetos para programar sistemas multi-agentes. Los lenguajes orientados a objetos han mostrado poseer varias de las características necesarias para codificar funciones clásicas de agentes. Sin embargo, cuando estados mentales complejos deben ser administrados, la programación lógica ha mostrado ser una mejor alternativa para la implementación de actitudes mentales. En consecuencia, viejas ideas con relación a lenguajes multi-paradigmas (Ishikawa, 1986) (Fukunaga, 1986) (Mello, 1987) aparecen como una posible solución a la programación de agentes. Entre las propuestas existentes, sólo aquellas ubicadas en el contexto de utilizar cláusulas lógicas para representar conocimiento interno de objetos hemos utilizado, intentando resolver los inconvenientes encontrados en la programación de agentes y sistemas multi-agentes. En esta línea de trabajo, se propone JavaLog, un lenguaje multi- paradigma que permite construir agentes a partir de objetos Java capaces de manipular conocimiento en formato de cláusulas lógicas Prolog o extensiones de este lenguaje lógico. La integración de programación orientada a objetos y programación lógica alcanzada en JavaLog ha sido basada en el concepto de módulo lógico. Un módulo lógico es la encapsulación de una secuencia de cláusulas lógicas. Estos módulos pueden ser ubicados tanto en métodos Java como en variables, para luego ser combinados de diversas maneras. En este artículo se presenta el lenguaje JavaLog

Transcript of Programacion Orientada a Agentes

Page 1: Programacion Orientada a Agentes

Inteligencia Artificial, Revista Iberoamericana de Inteligencia Artificial. No.13 (2001), pp. 94-99 .ISSN: 1137-3601. © AEPIA (http://www.aepia.dsic.upv.es/).

JavaLog: un Lenguaje para la Programación de Agentes

Alejandro Zunino, Luis Berdún, Analía Amandi

ISISTAN Research Institute, Facultad de Ciencias Exactas,Universidad Nacional del Centro de la Pcia. de Buenos Aires

Campus Paraje Arroyo Seco - (B7001BBO) Tandil - Bs. As., Argentinaemail: { azunino,lberdun,amandi } @exa.unicen.edu.ar

Resumen

La programación de sistemas multi-agentes ha sido generalmente soportada por lenguajes orientados a objetoso lenguajes lógicos. Ambos paradigmas muestran poseer características para soportar parcialmente eldesarrollo de agentes. Sin embargo, si ambos paradigmas son integrados, una solución a la programación deagentes aparece en forma evidente. En este artículo, un lenguaje multi-paradigma para la programación deagentes denominado JavaLog es presentado. Este lenguaje integra el lenguaje orientado a objetos Java y ellenguaje lógico Prolog. Esta combinación permite que agentes sean construidos como objetos manipulando unestado mental definido a través de cláusulas lógicas que son encapsuladas en módulos lógicos. Estos móduloslógicos permiten combinar dinámicamente actitudes mentales para adaptar el comportamiento de agentesconsiderando diferentes contextos o circunstancias.

Palabras clave: Agentes, Programación Orientada a Agentes.

1. Introducción

La programación de agentes involucra tanto elencapsulamiento de sus comportamientos como elde su estado mental. Estas características nos hanllevado a utili zar lenguajes orientados a objetos paraprogramar sistemas multi-agentes.

Los lenguajes orientados a objetos han mostradoposeer varias de las características necesarias paracodificar funciones clásicas de agentes. Sinembargo, cuando estados mentales complejos debenser administrados, la programación lógica hamostrado ser una mejor alternativa para laimplementación de actitudes mentales.

En consecuencia, viejas ideas con relación alenguajes multi-paradigmas (Ishikawa, 1986)(Fukunaga, 1986) (Mello, 1987) aparecen como unaposible solución a la programación de agentes.

Entre las propuestas existentes, sólo aquellasubicadas en el contexto de utili zar cláusulas lógicaspara representar conocimiento interno de objetoshemos utilizado, intentando resolver losinconvenientes encontrados en la programación deagentes y sistemas multi-agentes. En esta línea detrabajo, se propone JavaLog, un lenguaje multi-paradigma que permite construir agentes a partir deobjetos Java capaces de manipular conocimiento enformato de cláusulas lógicas Prolog o extensionesde este lenguaje lógico.

La integración de programación orientada a objetosy programación lógica alcanzada en JavaLog hasido basada en el concepto de módulo lógico. Unmódulo lógico es la encapsulación de una secuenciade cláusulas lógicas. Estos módulos pueden serubicados tanto en métodos Java como en variables,para luego ser combinados de diversas maneras.

En este artículo se presenta el lenguaje JavaLog

Page 2: Programacion Orientada a Agentes

mostrando ejemplos en su utili zación paramanipular estados mentales de agentes de interfaz.

Por claridad, el artículo se organiza de la siguientemanera. La sección 2 presenta los componentes másrelevantes del lenguaje. La sección 3 presenta unejemplo de manipulación de módulos lógicos. Lasección 4 presenta algunos aspectos sobreintegración de paradigmas. La sección 5 describealgunos trabajos relacionados. En la sección 6 sepresentan experiencias en el uso de JavaLog.Finalmente, las conclusiones son expuestas.

2. JavaLog

JavaLog es un lenguaje de programación quecombina los paradigmas de orientación a objetos ylógicos a través de la utili zación de Java y Prolog.En el proceso de integrar estos lenguajes parafacilit ar la programación de agentes se hadesarrollado un interprete Prolog en el lenguaje Javacon el fin de posibilit ar extensiones del mismo através de sub-clasificación.

Programar agentes con JavaLog es programar unagente como un objeto Java, el cual es instancia deuna clase que representa ese tipo de agente. Lafuncionalidad del agente es implementada enmétodos codificados básicamente en Java.

Módulos lógicos compuestos por una secuencia decláusulas lógicas Prolog son también utilizados en laprogramación de los agentes. Conocimiento privadoa un agente es ubicado en módulos lógicosreferenciados por variables de instancia de losagentes. Conocimiento común a los agentes de unaclase es ubicado en módulos lógicos que puedenlocalizarse en los propios métodos de la clase oreferenciados por variables accesibles por todos losobjetos de la clase.

Las clases que definan algún tipo de agente seasociarán a una clase denominada Brain que permiteque cada instancia de esas clases genere unainstancia de este Brain que representa una instanciadel intérprete Prolog. En otras palabras, cada objeto-agente tendrá asociado un objeto Brain que lepermitirá manipular cláusulas lógicas.

La base de conocimiento de una instancia delintérprete Prolog de un agente cualquiera estaráinicialmente vacía. Los módulos lógicos definidosen variables o métodos de la clase no están ubicadosen esta base de conocimiento. Los módulos lógicosreferenciados por variables tienen que serexplícitamente agregados o retirados en la base deconocimiento. Los módulos lógicos localizadosentre el código Java de métodos serán trasladados

temporalmente a la base de conocimiento cuandoestos métodos sean invocados y mientras esténsiendo ejecutados.

3. Módulos lógicos

Como hemos mencionado, el lenguaje JavaLogpermite definir módulos lógicos dentro de métodosy variables. De esta manera, un agente puede serdefinido como un objeto con conocimientorepresentado como cláusulas lógicas, de manera talde aprovechar mejor las características de laprogramación orientada a objetos y la programaciónlógica para construir agentes. La presente seccióndescribe a través de un ejemplo, las diversas formasde utili zación de módulos lógicos aprovechando lascaracterísticas de integración con Java.

Con el fin de ejempli ficar las diversas formas deutili zar módulos lógicos se describirá un agenteasistente personal. Dicho agente tiene la función deorganizar los horarios de un usuario teniendo encuenta sus preferencias, tales como tipos deactividades, horarios, lugares, amistades, etc.

En las siguientes secciones se asume que los objetosen los cuales se utili za la integración Prolog-Javaposeen una variable de instancia brain, la cualreferencia una instancia del intérprete JavaLog,encargado de almacenar y manipular los estadosmentales de los agentes. Se denominará objeto-agente a un objeto con las propiedades antesmencionadas, es decir, capaz de representar ymanipular estados mentales.

En las siguientes sub-secciones se analizan partesdel agente asistente, exponiendo los principalesaspectos de integración de paradigmas lógico y deorientación a objetos.

3.1 Módulos lógicos en var iables y métodos Java

La utili zación de módulos lógicos en JavaLog puederealizarse tanto en métodos como en variables. Paraclarificar la utilización de módulos lógicos porvariables, la Figura 1 muestra el diagrama de unagente representado por un objeto-agente de la claseAsistentePersonal. Dicha clase posee tres variablesde instancia contexto1, contexto2 y contexto3,referenciando cada una de ellas un módulo lógicocon diversas preferencias de un usuario sobreeventos sociales, de negocios, deportes, etc. Porejemplo, la variable contexto1 define para unusuario que la realización de un evento de negociosen el cual participe su jefe tiene una preferencia convalor 10 y que un evento de golf tiene unapreferencia valorada en 9.

Page 3: Programacion Orientada a Agentes

Es importante destacar que aunque un objeto-agentedefina varios módulos lógicos, esto no significa queutili ce todos en un instante determinado. El lenguajepermite a un objeto-agente decidir qué móduloslógicos utili zar. Es decir que cuando se realiza unaconsulta sobre los estados mentales de un agente,sólo se utili zan los módulos lógicos activos en esemomento para resolver dicha consulta, mientras quelos módulos lógicos inactivos son ignorados.

contexto1 = {{ preferencia(A,10):-evento(A, negocios, P,Fecha, Hora, Lugar), member(X,P), jefe(P).preferencia(A,10):- evento(A,golf,_,_,_,_,_).}}

contexto3 = {{ preferencia(A,1):- evento(A, negocios, _, Fecha, _, _), noLaborable(Fecha)

preferencia(A,10):- evento(A,golf,_,Fecha,_,_,_), noLaborable(Fecha).}}

unAsistentePersonal

contexto2 = {{preferencia(A,10):- evento(A, social, PFecha, _, _), noLaborable(Fecha),member(X,P), amigo(X).

Figura 1. Módulos lógicos en var iables deinstancia

Este mecanismo es utili zado por el programador enforma directa, es decir, indicando qué módulos sonutili zados en un determinado punto de la ejecucióndel agente. Esto es realizado colocando el siguientecódigo Java: contexto1.enable().

De esta manera, uno o más módulos lógicos puedenser habilit ados u activados. La habilit ación demódulos implica que estos módulos son ubicados enla base de conocimiento del intérprete Prolog delagente que los habil ita, considerando estrictamenteel orden de las cláusulas según el orden deactivación. Así, cuando un agente realiza unaconsulta, por ejemplo a través del código?- preferencia(X,9), se utili zan sólo las cláusulas delos módulos lógicos habil itados en la base deconocimiento del agente que realiza la consulta.

Módulos lógicos también pueden ser definidos enmétodos, expresando así conocimiento común de losagentes de la clase. La figura 2 expone un ejemploen el cual el módulo lógico referenciado por lavariable contexto1 es habilit ado y seguidamente otromódulo sería habil itado. Este segundo módulo estáexplícitamente definido en el método Java mediantecláusulas Prolog colocadas entre llaves. En estemódulo lógico se define que un evento tiene unapreferencia 10 si éste es relativo a negocios en elexterior. Este último módulo es activado,localizándose en la base de conocimiento del objeto-agente receptor del mensaje, cuando es invocado elmétodo que lo contiene.

En la misma figura 2, un segundo módulo lógicoentre llaves es definido. Éste contiene sólo unaconsulta que es realizada en el momento que seejecute el método que la contiene. El resultado de laconsulta queda referenciado por el variable local X,la cual es accesible por el sector de código Java deese método.

// Definición de variables locales....this.preferencias(contexto1).....{{ preferencia(A,5):-.... ?-preferencia(A1,X). }}.....

En este punto es posible obtener el valor de la variable Prolog X

Figura 2. Módulos lógicos en métodos Java

Las reglas de ámbito del lenguaje establecen que, enun punto en donde se efectúa una consulta seutili zan todos los módulos lógicos definidos hasta elmomento (mediante llaves dobles) según las reglasde ámbito de Java y los módulos activadosexplícitamente. Así, por ejemplo, en la consulta dela Figura 2 se utili za el módulo contexto1 y elmódulo entre llaves.

Luego de efectuada la consulta, los módulos lógicosutili zados en ese momento pueden ser desactivados.Por defecto, una vez que un método terminó suejecución los módulos activados por éste soneliminados de la base de conocimiento del objeto-agente receptor del mensaje.

La deshabilitación explícita de módulos lógicos espermitida si estos están referenciados por variables.Así, el código contexto1.disable() elimina el módulológico contexto1 de la base de conocimiento delagente que ejecuta este código.

Los mecanismos de integración ejemplificadosmuestran algunas de las posibili dades del lenguajepara manipular estados mentales representadoscomo cláusulas lógicas por parte de un objeto-agente. A continuación se describen las operacionespara combinar módulos lógicos.

3.2. Operando con módulos lógicos

JavaLog permite combinar módulos lógicos segúnlas operaciones definidas en (O'Keefe, 1985). Ellenguaje define las siguientes operaciones:

• redefinición: la operación “a rewrite b” ,siendo a y b módulos lógicos, denota unmódulo lógico que contiene todas las cláusulasdefinidas en b añadidas a las de a cuyo nombrede cabeza no es el mismo que para alguna

Page 4: Programacion Orientada a Agentes

cláusula de b.

• adición: la operación “a add b” , siendo a y bmódulos lógicos denota un módulo lógico quecontiene todas las cláusulas del módulo a y acontinuación las del módulo b.

JavaLog permite utili zar estas operaciones conmódulos definidos tanto en variables como enmétodos.

Con el fin de ejempli ficar la combinación demódulos lógicos referenciados por variables,considérese el asistente personal anteriormentedescripto. Dicho agente posee tres variables deinstancia contexto1, contexto2 y contexto3conteniendo las preferencias de un usuario. Así, porejemplo contexto1.add(contexto2) resulta en unmódulo lógico conteniendo las siguientes cláusulas:

preferencia(A,10):-evento(A,negocios,P,Fecha,Hora,Lugar),member(X,P), jefe(P).

preferencia(A,9):-evento(A,golf,_,_,_,_).

preferencia(A,10):-evento(A,social,P,Fecha,_,_),noLaborable(Fecha), member(X,P),amigo(X).

contexto2.add(contexto1) resulta en un módulológico conteniendo las siguientes cláusulas:

preferencia(A,10):-evento(A,social,P,Fecha,_,_),noLaborable(Fecha), member(X,P),amigo(X).

preferencia(A,10):-evento(A,negocios,P,Fecha,Hora,Lugar),member(X,P), jefe(P).

preferencia(A,9):-evento(A,golf,_,_,_,_).

contexto1.rewrite(contexto2) resulta en un módulológico conteniendo las siguientes cláusulas:

preferencia(A,10):-evento(A,negocios,P,Fecha,Hora,Lugar),member(X,P), jefe(P).

preferencia(A,9):-evento(A,golf,_,_,_,_).

Para combinar módulos lógicos localizados enmétodos se utiliza el concepto de herencia de laprogramación orientada a objetos. Considérese laclase AsistentePersonal presentada en la figura 3. Elmétodo evaluarPreferencias se utiliza para, dado unevento, obtener el valor numérico de dicho evento

que representa la valoración del mismo según laspreferencias del usuario.

La clase AsistentePersonalTrabajo redefine elmétodo evaluarPreferencias para dar mayorprioridad a los eventos relacionados con actividadeslaborales. En este caso, las cláusulas de lasuperclase son redefinidas mediante el operadorrewrite. Nótese que el módulo lógico de la subclaseestá delimitado por { % y %} . Esto denota laoperación rewrite del módulo lógico de la subclasecon el de la superclase.

AsistentePersonal

evaluarPreferencias()...{{preferencia(A,5) :- ... ...}};...

AsistentePersonalTrabajo

evaluarPreferencias()...{%preferencia(A,9) :- ... ...%};

Figura 3. Redefinición de un módulo lógico

Considérese otro escenario, en el cual no se deseanredefinir las cláusulas presentes en la superclase,sino que se necesitan añadir cláusulas queespecifican la forma de tratar eventos relacionadoscon el trabajo. En la Figura 4 se ejemplifica estecaso.

AsistentePersonal

evaluarPreferencias() ...{{preferencia(A,5) :- ... ...}};...

AsistentePersonalTrabajo

evaluarPreferencias()...{{preferencia(A,9) :- ... ...}};...

Figura 4. Adición de módulos lógicos

En esta sección se ejempli ficó la utili zación demódulos lógicos. La siguiente sección trata acercade la integración de los paradigmas al nivel deobjetos y términos.

Page 5: Programacion Orientada a Agentes

4. Integración al nivel de objetos ytérminos

Uno de las mayores dificultades en la integración delos paradigmas de objetos y lógico, lo constituyenlas diferencias de ambos en lo referido a lasconstrucciones que cada uno de ellos es capaz demanipular. Así, por ejemplo, el paradigma deobjetos se limita a tratar con objetos y mensajesentre objetos. Por otro lado, la programación enlógica utiliza cláusulas y términos.

Para que la integración de los paradigmas seaefectiva, es necesario que el lenguaje definamecanismos que posibilit en la manipulación deambas construcciones desde cualquiera de los doslenguajes.

Con el fin de lograr tales objetivos, el lenguajeJavaLog permite:

1. Convertir objetos en términos.2. Utili zar objetos en cláusulas como si fuesen

términos Prolog.3. Manipular objetos disponibles en el ámbito de

un módulo lógico.4. Manipular términos lógicos utili zados en un

método desde la parte no lógica (o sea, desdecódigo Java) del método.

La idea de convertir objetos en términos lógicos esla de permiti r manipular objetos Java desde unprograma Prolog. Considérese, por ejemplo, unobjeto de la clase Fecha. Dicho objeto posee tresvariables de instancia: día, mes y año. En la Figura5 se muestra el término equivalente. El término querepresenta a un objeto tiene el mismo nombre que laclase del objeto que representa. El primer argumentoes una referencia al objeto, de forma tal de poderacceder al objeto a partir del término. El resto de losargumentos son las variables de instancia del objeto.

unaFecha:10 Mar 2001 fecha(unaFecha, 10, Mar, 2001).asClause

Figura 5. Objetos como términos

JavaLog permite manipular objetos, es decir,enviarles mensajes, de forma tal de permiti r tanto elacceso a sus datos, como a su comportamiento. Paraenviarle un mensaje a un objeto se utili za la cláusulasend. Por ejemplo, send(unaFecha, toString, [ ] , Str)instancia Str con una representación textual delobjeto unaFecha. Este efecto se obtiene a partir delenvío del mensaje toString al objeto unaFecha. El

tercer argumento de send ([]) especifica que elmensaje toString no tiene argumentos.

El ítem 3 de nuestra lista se refiere a la posibili dadde utili zar variables Java en un módulo lógicoperteneciente al mismo ámbito, como si fuese unavariable Prolog. Por ejemplo, el método de la Figura6 se invoca cuando el asistente personal recibe unnuevo evento. Dicho método define un módulológico con los datos del evento recibido para luegoser evaluado de acuerdo a las preferencias delusuario. Para poder utili zar una variable Java dentrode un módulo lógico, ésta debe estar delimitadapor #.

Así, en nuestro ejemplo, la variable Java nominada ees utilizada en una cláusula Prolog dentro delmódulo lógico en este caso definido en el mismométodo.

nuevoEvento( Fecha f, Vector participantes, Hora hora, Lugar lugar, Asunto asunto ) {...Evento e = new Evento( Asunto, .... );....{{ evento(#e#, #Asunto#, #participantes#....... }};....}

Figura 6. Var iables Java en módulos lógicos

Finalmente, el lenguaje permite manipular lostérminos utilizados en un módulo lógico de unmétodo desde el ámbito de un método Java. Estopermite, por ejemplo, obtener valores de variablesutili zadas en una consulta Prolog desde Java.

5. Trabajos Relacionados

Varios lenguajes han sido propuestos para laprogramación de agentes (Kellett, 2001) (Denti,1999) (Fisher, 1994) (Poggy, 1994) (Weerasooriya,1995). Algunos de ellos utili zan conceptos delparadigma de orientación a objetos en un contextológico. Por ejemplo, el lenguage Metatem (Kellett,2001) (Fisher, 1994) está basado en lógica temporal,encapsulando un conjunto de reglas.

La mayoría de los lenguajes para la programaciónde agente (por ejemplo, (Poggy, 1994)(Weerasooriya, 1995) (Denti, 1999)) estánsoportados por conceptos de programaciónorientada a objetos sin considerar en absoluto losfundamentos lógicos de la especificación de estadosmentales. Esta carencia podría ser solucionadautili zando alguna arquitectura que materialice estas

Page 6: Programacion Orientada a Agentes

ideas en términos de objetos, pagando de estamanera el costo de manipular manualmente lasrelaciones entre actitudes mentales.

A diferencia de los trabajos mencionados, nuestroenfoque intenta tomar ventaja de ambos paradigmasa partir de una integración de ambos estilos deprogramación.

6. Experiencias

Varias experiencias han sido realizadas con estelenguaje. Por ejemplo, un agente de interfaz paragenerar periódicos personalizados en Internetdenominado NewsAgent (Cordero, 1999) es una deestas experiencias.

NewsAgent es un agente que aprende laspreferencias de los usuarios observándolos cuandoellos están leyendo noticias en periódicoslocalizados en la WWW. A partir de esteaprendizaje, el agente genera diariamente unperiódico personal para cada usuario respetando suspreferencias, ahorrándole así tiempo en laexaminación de noticias que no son de su interés ycolocando prioritariamente aquellas de mayorinterés.

7. Conclusiones

Se ha presentado en este artículo el lenguaje deprogramación JavaLog que permite laimplementeación de sistemas multi-agentesutili zando tanto Java como Prolog. Un agente esdefinido como un objeto Java, el cual manipula suestado mental a través de programación lógica yaque sus actitudes mentales están definidas porcláusulas lógicas.

Nuestras experiencias han mostrado su utili dad en lasimplificación de manipulación de estados mentalesen sistemas multi-agentes implementadosbásicamente con objetos.

Referencias

D. Cordero, P. Roldan, S. Schiaffino, A. Amandi.(1999) “ Intell igent Agents Generating PersonalNewspapers” . In Proceedings of theInternational Conference on EnterpriseInformation Systems, Portugal.

E. Denti, A. Omicini, (1999) “Engineering Multi-Agent Systems in LuCe” in Proceedings of theWorkshop on Multi-Agent Systems in LogicProgramming - MAS’99 (in conjunction with theInternational Conference on Logic Programming

1999), Las Cruces, New Mexico, USA,December 4, 1999.

M. Fisher. (1994) “Representing and ExecutingAgent-Based Systems” . In Proceedings of theECAI-94 Workshop on Agent Theories,Architectures, and Languages

K. Fukunaga, S. Hirose. (1986) “An Experiencewith a Prolog-Based Object-Oriented Language.Proc. OOPSLA´86 Conference.

Y. Ishikawa, M. Tokoro. (1986) “A ConcurrentObject-Oriented Knowledge RepresentationLanguage Orient84/K: It’s features andimplementation” . SIGPLAN Notices, 21(11):232-241.

A. Kellett, M. Fisher (2001) “CoordinatingHeterogeneous Components Using ExecutableTemporal Logic”. In, Meyer and Treur (eds),Agents, Reasoning and Dynamics. Vol. 6 inSeries of Handbooks in Defeasible Reasoningand Uncertainty Management Systems. KluwerAcademic Publishers.

P. Mello, A. Natali . (1987) “Objects asCommunicating Prolog Units” . In Proceedingsof ECCOP’87, European Conference on Object-Oriented Programming.

R. O'Keefe. (1985) “Towards an Algebra forConstructing Logic Programs” . In J. Cohen andJ. Conery (eds), Proceedings of IEEESymposium on Logic Programming, IEEEComputer Society Press, New York, pages 152-160, 1985.

A. Poggy. (1994) “Daisy: an Object-OrientedSystem for Distributed Artificial Intell igence”.In Proceedings of the ECAI-94 Workshop onAgent Theories, Architectures, and Languages.

D. Weerasooriya, A. Rao, K. Ramamohanarao.(1995) “Design of a Concurrent Agent-OrientedLanguage”. In Wooldridge, M.; Jennings, N.(Eds.). Intelli gent Agents (LNAI 890).