Está en la página 1de 291

JADE – Java Agent

DEvelopment
Framework
Taller de sistemas multiagentes
Prof. Dr. Ariel Monteserin
amontese@exa.unicen.edu.ar
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina
2021

1
Agenda
 Java Agent DEvelopment Framework

 Plataforma multiagente

 Agentes en JADE

 Comportamientos

 Agentes con interfaz gráfica


2
Introducción
 Framework para el
desarrollo de sistemas
multi-agente en
conformidad con las
especificaciones de FIPA.
 JADE provee:
 Plataforma multiagente
conforme a FIPA.
 Paquete para el desarrollo
JAVA de agentes.
 Set de herramientas
gráficas para administrar y
monitorear la ejecución de
los agentes.
3
Características
 JADE ofrece al programador:
 Plataforma distribuida.
 Interfaces graficas para administración remota de agentes.
 Herramientas de debugging.
 Movilidad de agentes inter-plataforma.
 Soporta la ejecución en paralelo de múltiples agentes.
 Transporte de mensajes ACL dentro de la plataforma.
 FIPA-complaint Agent Platform (incluye AMS, DF y ACC).
 Librería de protocolos de interacción FIPA.
 Servicio de nombres (GUID: Globally Unique Identifier).
 Interface para que aplicaciones externas inicien agentes
autónomos.
4
Plataforma multiagente
Agent Platform
Agent
Directory
Agent Management
Facilitator
System

Message Transport System (o ACC)

5
Plataforma multiagente
distribuida
A1

AMS DF

Main container
Is registered
A4 Is registered with A2 A3
with

Container 2 Platform 1 Container 1

Network

A5

AMS DF

Main container
Platform 2
7
Agenda
 Java Agent DEvelopment Framework

 Plataforma multiagente

 Agentes en JADE

 Comportamientos

 Agentes con interfaz gráfica


8
Creando un agente JADE
 La clase Agent
 Incluida en el paquete jade.core
 Define las características básicas para que el agente
interactúe con la plataforma
 registro
 configuración
 administración remota
y los métodos para implementar el comportamiento del
agente
 envío y recepción de mensajes
 uso de protocolos de interacción estándar
 Modelo computacional multitarea.
 Identificación
 AID: local-name@platform-name 9
Ciclo de vida del agente

Waiting Wait Resume Suspended

Suspend
Wake up Unknow
Destroy
Active
Quit

Move Invoke
Create

Execute
Transit Initiated

10
Creando un agente JADE
import jade.core.Agent;

public class MiAgente extends Agent {


protected void setup() {
System.out.println("El agente “ +
getAID().getName()+" está activo.");
}
}

Descargar JADE e
implementar el agente MiAgente

11
Ejecutando el agente

 Desde Eclipse
 Run…
 Java Application
 Main Class: jade.Boot
 Argumentos: -gui nombre_agente:class_agente

12
Interface de la plataforma
JADE

13
Finalización del agente
 Finalizar la ejecución agente
 doDelete()
 Invoca a
 takeDown()

14
Pasaje de argumentos
 Por línea de comando.
 java jade.Boot nombre:clase(arg1,arg2,arg3)
 Array de Object
 getArgument()

15
Crear un agente desde otro
agente/aplicación

MiAgente a = new MiAgente();


a.start();
a.micomportamiento();

16
Crear un agente desde otro
agente/aplicación
import jade.wrapper.*;

AgentContainer c = getContainerController();
try {
AgentController a = c.createNewAgent( "X1",
“MiAgente", null ); • Nombre = “X1”
a.start(); • Clase: “MiAgente”
} • Argumentos: null
catch (StaleProxyException e){}

Implementar una agente que active una


instancia
de si mismo cuando sea eliminado

17
Agenda
 Java Agent DEvelopment Framework

 Plataforma multiagente

 Agentes en JADE

 Comportamientos

 Agentes con interfaz gráfica


18
Comportamientos del agente
 Un comportamiento es una tarea que el
agente puede ejecutar.
 Son implementados como objetos de las
clases que extienden
 jade.core.behaviours.Behaviour
 Se agregan comportamientos al agente con
 addBehaviour()

 removeBehaviour()
19
Comportamientos del agente
 Cada clase que extiende Behaviour debe
implementar
 action() define la acción a ser ejecutada cuando se
ejecute el comportamiento
 done() determina si el comportamiento ha sido
completado.
 El agente puede ejecutar varios comportamientos
concurrentemente.
 Métodos onStart() y onEnd()

20
Comportamientos del agente
 Todos los comportamientos del agente son
manejados por el mismo thread
 Permite tener un único thread por agente.
 Provee mejor performance ya que el switch de
comportamiento es mas rápido que el switch de
thread en Java.
 Elimina los problemas de sincronización entre
comportamientos concurrentes que acceden al
mismo recurso.
 Facilita la persistencia y la movilidad.
21
Path de ejecución del thread
del agente setup()
Inicialización
Adición del
comportamiento
inicial

¿El agente ha SI
sido cancelado
(doDelete())?

NO
Tomar el siguiente
comportamiento del pool de
comportamientos activos
"Vida" del agente
b.action() (Ejecución de los
comportamientos)

NO
b.done()?

SI
Remover el comportamiento
actual del pool de
comportamientos activos
Operaciones de
takeDown() limpieza 22
Comportamientos
public class MiBehaviour extends Behaviour {
public void action() {
System.out.println("El agente “ +
myAgent.getAID().getName()+" está activo.");
}
public boolean done() {
return true;
}
}

Implementar el agente MiAgente


utilizando comportamientos

23
Comportamiento en un thread
dedicado
 Desventaja de un único thread
 Si el comportamiento se bloquea, se bloquea el
agente.
 JADE permite que un comportamiento se
ejecute en un thread dedicado.
 jade.core.behaviours.
ThreadedBehaviourFactory
 wrap() permite wrapear un comportamiento
normal en un ThreadedBehaviour
24
Consideraciones thread
dedicado
 removeBehaviour() no funciona con
comportamientos en thread dedicado.
 ThreadedBehaviourFactory.getThread(b)
 interrupt()

 Cuando el agente muere, se mueve o


suspende, estos comportamientos deben ser
explícitamente finalizados.

 Atención con los problemas de sincronización.


25
Tipos de comportamiento

 One-shot – para una única ocación


 OneShotBehaviour
 Cíclico
 CyclicBehaviour
 Genéricos

26
Comportamiento "One-shot"
 Se ejecuta una única vez
 La clase OneShotBehaviour ya
implementa el método done()
public class MyOneShotBehaviour
extends OneShotBehaviour {
public void action() {
// Ejecuta la operación X
}
}
27
Comportamiento cíclico
 Se mantiene activo tanto tiempo como esté
activo el agente.
 La clase CyclicBehaviour ya implementa
el método done()
public class MyCyclicBehaviour extends
CyclicBehaviour {
public void action() {
// Ejecuta la operación Y
}
}

28
Comportamientos genéricos
 Mantienen un estado del agente y en base a
él ejecutan diferentes operaciones.
 Finalizan cuando cierta condición es
cumplida.

29
Comportamientos genéricos
public class MyThreeStepBehaviour extends Behaviour {
private int step = 0;
public void action() {
switch (step) {
case 0: // perform operation X
step++;
break;
case 1: // perform operation Y
step++;
break;
case 2: // perform operation Z
step++;
break;
}
}
public boolean done() {
return step == 3;
}
}
30
Comportamientos para
programar operaciones
 WakerBehaviour
 action() y done() ya implementados
 Ejecuta handleElapsedTimeout() luego de
alcanzado un timeout especificado en el
constructor.
public class MyAgent extends Agent {
protected void setup() {

addBehaviour(new WakerBehaviour(this, 10000) {


protected void handleElapsedTimeout() {
System.out.println(“X”);
}
} );
}
}
31
Comportamientos para
programar operaciones
 TickerBehaviour
 action() y done() ya implementados
 Implementa un comportamiento cíclico que ejecuta
periódicamente código definido en onTick()
public class MyAgent extends Agent {
protected void setup() {
addBehaviour(new TickerBehaviour(this, 1000) {
protected void onTick() {
System.out.println("Y");
}
} );
}
}

32
Comportamientos compuestos
 CompositeBehaviour
 Modela comportamientos que están compuestos
por otros comportamientos (hijos).
 La política de selección de hijos está
implementada en las subclases:
 SequencialBehaviour
 ParallelBehaviour
 FSMBehaviour – Finite State Machine

33
SequencialBehaviour
 Ejecuta los hijos en forma secuencial.

 Finaliza cuando el último hijo finaliza

 Agregar hijos
 addSubBehaviour(Behaviour b)
ParallelBehaviour
 Ejecuta sub-comportamientos
concurrentemente.
 Se ejecuta hasta que cierta condición es
alcanzada
 Todos/uno/algunos de sus hijos finalizan

35
FSMBehaviour
 Permite especificar estados y transiciones

 registerFirstState(Behaviour b, String n)
 Registra un único comportamiento como estado inicial.
 registerLastState(Behaviour b, String n)
 Registra uno o más comportamientos como estados finales.
 registerState(Behaviour b, String n)
 Registra uno o más comportamientos como estados
intermedios.
FSMBehaviour
 registerTransition(String s1, String s2,
int event)
 Registra una transición entre el estado s1 y s2. Event
es el evento retornado por el método onEnd() del
comportamiento s1.
 registerDefaultTransition(String s1,
String s2)
 Registra una transición entre el estado s1 y s2. La
transición es ejecutada cuando s1 termina con un
evento que no está explicitado para ninguna otra
transición.
Behaviour - DataStore
 Útil para el intercambio de datos entre
comportamientos
 setDataStore(DataStore ds)
 DataStore getDataStore()
 Extiende la clase HashMap
 put(Object key, Object value)

 Los datos se pierden cuando el


comportamiento es reseteado
38
Agenda
 Java Agent DEvelopment Framework

 Plataforma multiagente

 Agentes en JADE

 Comportamientos

 Agentes con interfaz gráfica


39
Agentes con interfaz gráfica
 Autonomía del agente vs. naturaleza reactiva de
la interfaz.
 Clase GuiAgent
 Maneja una cola de objetos jade.gui.GuiEvent
 GuiEvent(eventSource, eventType)
 addParameter(Object)
 Object getParameter(int)
 Iterator getAllParameter()
 Método onGuiEvent(GuiEvent)
 Toma un evento y lo procesa.
 Método postGuiEvent(GuiEvent)
 Envía el evento al GuiAgent

40
Agentes con interfaz gráfica
 Agente  Interfaz gráfica
public class MiAgenteGui extends public class GuiAgentFrame extends
GuiAgent { JFrame {

private GuiAgentFrame gui; private MiAgenteGui myAgent;

public void setup() {
gui = new GuiAgentFrame(this);
gui.setVisible(true); // Listener de la interfaz
public void actionPerformed(ActionEvent
} evt){
GuiEvent ev = new GuiEvent(this,0);
protected void onGuiEvent(GuiEvent ev.addParameter(//datos del evento);
ev) { myAgent.postGuiEvent(ev);
// procesa los eventos }
}
}

41
Agentes con interfaz gráfica

Probando interfaz…

OnGuiEvent()

Behaviour.action()

Implementar MiAgente, pero ingresando


el mensaje desde la interfaz gráfica

42
Agentes con interfaz gráfica
 Para modificar la interfaz
desde el agente // Método en la interfaz
public void contestar(final String s){
 Encapsular el acceso a la
Runnable addIt = new Runnable() {
interfaz con un objeto public void run() {
Runnable // cambio en la interfaz
 Utilizar }
SwingUtilities.invoke };
SwingUtilities.invokeLater(addIt);
Later() para enviar el
}
runnable al thread Event
Dispatcher.

Mostrar en el cuadro de texto de la interfaz


anterior, un mensaje del agente.

44
JADE – Java Agent
DEvelopment
Framework
Taller de sistemas multiagentes
Prof. Dr. Ariel Monteserin
amontese@exa.unicen.edu.ar
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina

45
Agentes inteligentes y
sistemas multiagentes
Taller de Sistemas Multiagentes
Prof. Dr. Ariel Monteserin
amontese@exa.unicen.edu.ar
ISISTAN – Fac. de Ciencias Exactas- UNICEN
CONICET
2021
Agenda
 La materia

 Agentes
 Definición
 Agentes inteligentes
 Arquitecturas abstractas y concretas
 Agentes personales – móviles

 Sistemas multiagentes
 Conceptos
 Comunicación
Taller de sistemas multiagentes

 Objetivo de la materia

Agentes

 Cursada intensiva
 Trabajo final
Agenda
 La materia

 Agentes
 Definición
 Agentes inteligentes
 Arquitecturas abstractas y concretas
 Agentes personales – móviles

 Sistemas multiagentes
 Conceptos
 Comunicación
Agentes

 Agentes en la vida real

?
Agentes: definiciones

 Rusell & Norving


“Un agente es cualquier cosa que pueda ver en su
entorno a través de sensores y actuar en su
entorno a través de efectores”.

 Nwana
“Agente: componente de software y/o hardware el
cual es capaz de actuar de manera precisa con el
fin de realizar tareas en representación de su
usuario”.
Agentes: definiciones…
 Shoham
“Un agente es una entidad cuyo estado es visto como
compuesto de componentes mentales tales como
creencias, elecciones, aptitudes y compromisos”.
 Maes
“Un agente autónomo es un sistema computacional
que habita en un entorno dinámico-complejo,
percibiendo y actuando autónomamente en este
entorno, y haciendo esto para realizar un conjunto
de objetivos o tareas para los cuales fueron
diseñados”.
Agentes: más definiciones…

 Wooldridge & Jennings


“Un agente es un sistema computacional
que está situado en algún ambiente, y que
es capaz de actuar autónomamente en
dicho ambiente con el fin de cumplir sus
objetivos”.
Agentes: más definiciones…

 FIPA (Foundation for Intelligent Physical Agents)


“Un agente es una entidad de software
encapsulado con su propio estado,
conducta, hilo de control y la habilidad
para interactuar y comunicarse con otras
entidades (gente, otros agentes o
sistemas)”.
Vista abstracta de un agente
Autonomía

Agente

Datos Acciones
Efectos
Comunicación Tareas
Comunicación
Ambiente

Recursos, Personas, Agentes, Sistemas


Ejemplos de agentes

 Sistemas de control
 Termostato

 Alarma

 Software daemons
Agentes inteligentes
 Wooldridge & Jennings
“Un agente inteligente es un agente capaz de ejecutar
flexiblemente acciones autónomas con el fin de
cumplir sus objetivos”, donde flexibilidad significa:

 Reactividad: capacidad de percibir su ambiente, y


responder sin demoras a cambios que ocurren en él.

 Pro-actividad: capacidad de exhibir un comportamiento


dirigido a objetivos, tomando la iniciativa.

 Habilidad social: capacidad de interactuar con otros


agentes (y posiblemente humanos) a través de un
lenguaje de comunicación.
Agentes inteligentes

 Características  Termostato
 Autonomía Si
 Reactividad Si
 Pro-actividad No
 Habilidad social No
Otras cuestiones…

 Adaptación
 Implica percibir el entorno y reconfigurar el
estado mental en respuesta a este entorno.

 Aprendizaje
 Mediante distintas técnicas de aprendizaje
de máquina.
Agentes y objetos
 Objetos:
Entidades computacionales que encapsulan algún
estado, son capaces de realizar acciones, o
métodos en este estado, y se comunican mediante
el envío de mensajes.

 Agentes vs. Objetos


 Autonomía
 POO: decisión en el objeto que invoca el método
 MAS: decisión en el agente que recibe el pedido
 Conducta flexible
 Control
Agentes y sistemas expertos

 Sistema experto
Sistema capaz de resolver problemas o dar
consejos en algún dominio rico en
conocimiento.

 Agentes vs. SE
 SE no interactúan directamente con el ambiente.
Programación Orientada a Agentes

 Paradigma de programación centrado en


el concepto de agentes de software.
Agenda
 La materia

 Agentes
 Definición
 Agentes inteligentes
 Arquitecturas abstractas y concretas
 Agentes personales – móviles

 Sistemas multiagentes
 Conceptos
 Comunicación
Vista abstracta de un agente

Agente

Datos Acciones

Ambiente
Arquitectura abstracta de un agente
inteligente

 Ambiente  Agente estándar


S = {s1, s2,…} action: S* → A

 Acciones  Ambiente no determinista


A = {a1, a2,…} env: S  A → (S)

 Historia

h : s0 
a0
s1 
a1
s2 
a2
s3 
a3
... a
u1
su 
au
...
Agentes puramente reactivos

 Toma de decisiones enteramente


basada en el presente.
action: S → A

 Termostato
 S= {s  temperatura, s  temperatura}
 A = {calefacción_ on, calefacción _ off }
calefacción off si s  temperatura
action(s)  
 calefacción on cualquierotra
Percepción y acción

see action
Agente

Datos Acciones

Ambiente

see : S  P action : P*  A
Percepción y acción

 Ventajas de la división
 Sea
 X: “La temperatura de la habitación es Ok”.
 Y: “Ventana cerrada”.

S  x, y
, x, y
, x, y
, x, y
 p1 si s  s1  cerrar vent p1
p si s  s2 
see( s )   2 action( p )   calefacción on p2
 p3 si s  s3 o s4 calefacción off p3
Agentes con estado

see action

next state (I)

Datos Agente Acciones

Ambiente

see : S  P action : I  A next : I  P  I


Arquitecturas concretas

 Agentes basados en lógica


 Agentes reactivos
 Agentes BDI
Agentes basados en lógica

 Jess D

 Prolog
Motor de Base de
inferencia Conocimiento

 : reglas de deducción  |_ p 

see : S  P next : D  P  D action : D  A


Agentes basados en lógica
1. function action(:D):A
2. begin
3. for each a  A do ∆={ventana(abierta); temperatura(baja)}
4. if  Ⱶ Do ( a ) then
ρ ={ventana(abierta), temperatura(baja) ->
5. return a
do(cerrarVentana);
6. endif
7. endfor ventana(cerrada), temperatura(baja) ->
8. for each a  A do do(encenderCalefacción);
9. if  Ⱶ/ Do ( a ) then
10. return a temperatura(alta) ->
do(apagarCalefacción)}
11. endif
10. endfor
12. return null
13. end function action
Arquitectura reactiva

 Toma de decisiones
 Conjunto de comportamientos para llevar a
cabo tareas.
 Comportamiento
 Situación  Acción

 Comportamientos simultáneos
 Jerarquía de comportamientos
 Prioridad
Arquitectura reactiva

 Definición formal de un comportamiento


Beh  (c, a) c  P  a  A

 Un comportamiento (c, a) será disparado cuando


el ambiente esté en el estado s perteneciente a
S sii see(s) pertenece a c
 Relación de inhibición
R  Beh  R R
Arquitectura reactiva
1. function action(p:P):A
2. var fired :(R)
3.
4. begin
5. fired:  (c,a) (c, a)  R  p  c
6. for each (c,a)  fired do
7. if ((c',a')  fired tal que (c',a')  (c,a)) then
8. return a p = temperatura_baja
9. endif
10. endfor R ={r1: (temperatura_baja, cerrar_ventana);
r2: (temperatura_baja,
11. return null encender_calefacción)}
12. end function action
r1≺r2
Arquitectura BDI

 Belief-Desire-Intention

 Razonamiento práctico
 Deliberación
 ¿Qué objetivos cumplir?
 Razonamiento orientado a objetivos
 ¿Cómo se cumplirán los objetivos?
Ejemplo de razonamiento práctico

Aplicar a una beca.

Trabajo particular
Ejemplo de razonamiento práctico
Intenciones

 Rol de las intenciones en el


razonamiento práctico
 Dirigen el razonamiento basado en medios
y fines (orientado a objetivos)
 Restringen la deliberación futura

 Persisten

 Influencian las creencias bajo las cuales se


basa el razonamiento práctico futuro
Intenciones
 Reconsideración de intenciones
 Un agente que no se detiene a reconsiderar sus
intenciones (reactivo – orientado a eventos).
 Un agente que constantemente reconsidera sus
intenciones (proactivo – orientado a objetivos).

 Taza de cambio en el mundo 


 Si  es baja, los agentes que nunca se detienen a
reconsiderar funcionan mejor.
 Si  es alta, los agentes que se detienen
constantemente funcionan mejor.
Proceso de razonamiento práctico
en agentes BDI
sensor input

Generate options

execute
filter
brf

beliefs desires intentions

action output
 Estado agente BDI
 (B, D, I), donde B  Bel, D  Des, I  Int
Proceso de razonamiento práctico
en agentes BDI
sensor input

Generate options

execute
filter
brf

beliefs desires intentions

action output
brf :( Bel )  P  ( Bel )
Proceso de razonamiento práctico
en agentes BDI
sensor input

Generate options

execute
filter
brf

beliefs desires intentions

options:Bel Int  ( Des)


action output
Proceso de razonamiento práctico
en agentes BDI
sensor input

Generate options

execute
filter
brf

beliefs desires intentions

filter :Bel ( Des) Int  ( Int )


B Bel , D ( Des), I Int , filter( B, D, I )  I  D
Proceso de razonamiento práctico
en agentes BDI
sensor input

Generate options

execute
filter
brf

beliefs desires intentions

execute:Int   A action output

action : P  A
Función BDI action

1. function action(p:P):A
2. begin
3. B : brf B, p 
4. D : optionsB, I 
5. I : filterB, D, I 
6. return executeI 
7. end function action
Agenda
 La materia

 Agentes
 Definición
 Agentes inteligentes
 Arquitecturas abstractas y concretas
 Agentes personales – móviles

 Sistemas multiagentes
 Conceptos
 Comunicación
Agentes personales

Interactúa con

Observa e imita

Aplicación Usuario

Agente
Agentes personales: aprendizaje

Interactúa con

Imitar

Aplicación Usuario

Feedback
Programación
por ejemplo

Perfil de usuario Consultar

Agente
Agentes móviles

 Son agentes capaces de transmitirse a


si mismos (código y estado) a través de
una red de computadoras y volver a
empezar su ejecución en un sitio remoto.
Agentes móviles

 Movilidad de código:
 capacidad de cambiar dinámicamente las
ligaduras entre fragmentos de código y la
ubicación donde son ejecutados.
 Movilidad Fuerte:
 los threads en ejecución migran de una
plataforma a otra y continúan su ejecución en
forma transparente.
 Movilidad Débil
 El código migra pero no su estado de ejecución.
RPC vs. Agentes móviles
Cliente Servidor
Proceso cliente Proceso servidor

Cliente Servidor
Proceso cliente Proceso servidor

Agente móvil
Agenda
 La materia

 Agentes
 Definición
 Agentes inteligentes
 Arquitecturas abstractas y concretas
 Agentes personales – móviles

 Sistemas multiagentes
 Conceptos
 Comunicación
Sistemas multiagentes

 Un sistema multiagente es un sistema


compuesto de múltiples agentes
inteligentes, capaces de cumplir
objetivos que son difíciles de alcanzar
por un sistema individual.
Ejemplo

 No controladores
 No organizadores
 Auto-organización
 Reglas simples
 Mantener distancia
 Ser sociables
 Comportamiento
complejo
Ejemplo
Quiero vender Quiero comprar el
el producto A Vendo A! producto A como
como mínimo máximo a $10!
a $8!
Vendido en
Arreglamos
Te ofrezco
$12!
en$4!
$6!

No, mínimo
No,ofrezco
quiero
Te
$11!
$12!
$12!!!

URGENTE!!
NECESITO el
producto A!!
Ejemplo
Ejemplo

 Información privada  Competitividad


 Confianza  Reputación
Ejemplo cooperativo

Negociar precios Decidir


receta
DesignBots
Táctica 1a Táctica 2a
Táctica 1b Táctica 2b
Táctica 1c Táctica 2c

A B
Dbot - Modificabilidad
Dbot - Performance
Escenario 2
Escenario 1 C

Arquitectura Táctica 3a
Táctica 3b
Actual Táctica 3c
E1 15ms
E2 25hs
Dbot - Performance
E3 25ms
Escenario 3
DesignBots
E1 E2
Táctica 1a 13ms Táctica 2a 30hs
Táctica 1b 12ms Táctica 2b 25hs
Táctica 1c 20ms Táctica 2c 20hs

A B
Dbot - Modificabilidad
Dbot - Performance
Escenario 2
Escenario 1 C
E3
Arquitectura Táctica 3a 20ms
Táctica 3b 25ms
Actual Táctica 3c 22ms
E1 15ms
E2 25hs
Dbot - Performance
E3 25ms
Escenario 3
DesignBots
E1 E2
Táctica 1a 13ms Táctica 2a 30hs
Táctica 1b 12ms Táctica 2b 25hs
Táctica 1c 20ms Táctica 2c 20hs

A B
Dbot - Modificabilidad
Dbot - Performance
Escenario 2
Escenario 1 C
E3
Arquitectura Táctica 3a 20ms
Táctica 3b 25ms
Actual Táctica 3c 22ms
E1 15ms
E2 25hs
Dbot - Performance
E3 25ms
Escenario 3
DesignBots
E1 E2
Táctica 1a 13ms Táctica 2a 30hs
Táctica 1b 12ms Táctica 2b 25hs
Táctica 1c 20ms Táctica 2c 20hs

A B
Dbot - Modificabilidad
Dbot - Performance
Escenario 2
Escenario 1 C
E3
Arquitectura Táctica 3a 20ms
Táctica 3b 25ms
Actual T1b T2c T3a Táctica 3c 22ms
E1 15ms 12ms 20ms 14ms
E2 25hs 30hs 20hs 35hs
Dbot - Performance
E3 25ms 25ms 40ms 20ms
Escenario 3
DesignBots
E1 E2
Táctica 1a 13ms Táctica 2a 30hs
Táctica 1b 12ms Táctica 2b 25hs
Táctica 1c 20ms Táctica 2c 20hs

A B
Dbot - Modificabilidad
Dbot - Performance
Escenario 2
Escenario 1 C
E3
Arquitectura Táctica 3a 20ms
Táctica 3b 25ms
Actual T1b T2c T3a T1a Táctica 3c 22ms
E1 15ms 12ms 20ms 14ms 13ms
E2 25hs 30hs 20hs 35hs 24hs
Dbot - Performance
E3 25ms 25ms 40ms 20ms 24ms
Escenario 3
DesignBots

Protocolo de Negociación
Dbot - Modificabilidad
Dbot - Performance
Escenario 2
Escenario 1

Dbot - Performance
Escenario 3
PUMAS-GR

Mejor una de
superheroes!
Si, la
última de ¿Miramos
Brad Pitt! Una de una peli?
dibus o
nada!
PUMAS-GR

Mascotas
Civil War
Frente al Mar
Forest Gump
Megamente
PUMAS-GR

Mascotas 5 Forest Gump 5


Megamente 4,5 Frente al Mar 4
Civil War 4 Megamente 4
Forest Gump 2 Mascotas 2
Frente al Mar 1 Civil War 1

Frente al Mar 5 Civil War 5


Forest Gump 4 Megamente 4,5
Megamente 4 Mascotas 3
Mascotas 3 Frente al Mar 2
Civil War 1 Forest Gump 2
PUMAS-GR
Forest Gump 5
Mascotas 5 Frente al Mar 4
Megamente 4,5 Megamente 4
Civil War 4 Mascotas Mascotas 2
Forest Gump 2 Civil War 1
Frente al Mar 1 Forest Gump

Frente al
Mar
Frente al Mar 5 Civil War
Forest Gump 4 Civil War 5
Megamente 4 Megamente 4,5
Mascotas 3 Mascotas 3
Civil War 1 Frente al Mar 2
¿Quién empieza? Forest Gump 2
PUMAS-GR
Acepto si: u(mi_p) ≤ u(otra_p) Forest Gump 5
Mascotas 5 Frente al Mar 4
Megamente 4,5 Megamente 4
Civil War 4
u(mascotas) ≤ u(forestgump)? Mascotas 2
Forest Gump 2
Frente al Mar 1 5 ≤ 2? Civil War 1
u(mascotas) ≤ u(frentemar)?
5 ≤ 1?
u(mascotas) ≤ u(civilwar)?
5 ≤ 4?

Frente al Mar 5
Forest Gump 4 Civil War 5
Megamente 4 Megamente 4,5
Mascotas 3 Mascotas 3
Civil War 1 Frente al Mar 2
¿Cómo evalúo? Forest Gump 2
PUMAS-GR
Forest Gump 5
Mascotas 5 Frente al Mar 4
Megamente 4,5 Megamente 4
Civil War 4 NO! Mascotas 2
Forest Gump 2 Civil War 1
Frente al Mar 1 NO!

NO!

Frente al Mar 5 NO!


Forest Gump 4 Civil War 5
Megamente 4 Megamente 4,5
Mascotas 3 Mascotas 3
Civil War 1 Frente al Mar 2
Forest Gump 2
PUMAS-GR
Forest Gump 5
Mascotas 5 ¡Alguien debe conceder! Frente al Mar 4
Megamente 4,5 Megamente 4
¿Quién?
Civil War 4 Mascotas 2
Forest Gump 2 Civil War 1
Frente al Mar 1 Z=(5-1)/5=0,8 Z=(5-1)/5=0,8

1 si ui ( xi )  0

Zi   ui ( xi )  min{ui ( xk ) k  A}

 ui ( xi )

Frente al Mar 5
Forest Gump 4 Z=(5-1)/5=0,8 Z=(5-2)/5=0,6 Civil War 5
Megamente 4 Megamente 4,5
Mascotas 3 Mascotas 3
Civil War 1 El agente con menor valor Zeuthen concede.
Frente al Mar 2
Forest Gump 2
PUMAS-GR
Forest Gump 5
Mascotas 5 ¿Cómo conceder? Frente al Mar 4
Megamente 4,5 Megamente 4
Civil War 4
u(megamente) ≤ u(megamente)? Mascotas 2
Forest Gump 2
Frente al Mar 1 4.5 ≤ 4.5? Civil War 1

u(frentemar) ≤ u(megamente)?
4 ≤ 4?

Frente al Mar 5 Megamente?


Forest Gump 4 Civil War 5
Megamente 4 u(forestgump) ≤ u(megamente)? Megamente 4,5
Mascotas 3 4 ≤ 4? Mascotas 3
Civil War 1 Frente al Mar 2
Forest Gump 2
Evaluación alternativa:
Acepto si: u(prox_p) ≤ u(otra_p)
Características de ambientes
multiagentes
 Proveen una infraestructura específica de
comunicación y protocolos de interacción.

 Son típicamente abiertos y no tienen un


diseño centralizado.

 Contienen agentes que son autónomos y


distribuidos, y pueden ser interesados en si
mismos o cooperativos.
Agenda
 La materia

 Agentes
 Definición
 Agentes inteligentes
 Arquitecturas abstractas y concretas
 Agentes personales – móviles

 Sistemas multiagentes
 Conceptos
 Comunicación
Comunicación entre agentes
 Percepción
 Recibir mensajes
 Acción
 Enviar mensajes

Coordinación

Cooperación Competición

Planning Negociación
Agent Communication Languages
(ACL)
 KIF
 KQML
 FIPA ACL
 Ontologías
KSE: Knowledge Sharing Effort
 Iniciado por DARPA hacia 1990, y apoyado
por organismos norteamericanos de
investigación (ASOFR, NSF, NRI)

 Propósito:
 Desarrollo de técnicas, metodologías y herramientas
software para compartir y utilizar el conocimiento
entre sistemas a lo largo de las etapas del ciclo de
vida del software.
 KIF y KQML
KIF

 Originalmente desarrollado con la intención


de ser un lenguaje común para expresar
propiedades de un dominio en particular.

 No mensajes – Si contenido
 Ejemplo
 (= (temperature ml) (scalar 83 Celsius))
 (defrelation bachelor (?x) :=
(and (man ?x)
(not (married ?x))))
KQML
 KQML es un lenguaje y protocolo basado en
mansajes para comunicación entre agentes.

 Cada mensaje posee


 Performativa: tipo de acción que involucra el uso de LN
 Parámetros

(ask-one
:content (PRICE IBM ?price)
:receiver -stock-server
:language LPROLOG
:ontology NYSE-TICKS)
Mensajes KQML
 :content
 Contenido del mensaje
 :force
 Si el agente quiere denegar el contenido de un mensaje
 :reply-with
 Identificador de la respuesta esperada por el agente
 :in-reply-to
 Referencia a :reply-with
 :sender
 Emisor del mensaje
 :receiver
 Receptor del mensaje
FIPA ACL
 Lenguaje para intercambio de mensajes entre
agentes.
 20 performativas
 accept-proposal, agree, cancel, cfp, confirm,
inform, refuse, request, etc.

(inform
:sender agent1
:receiver agent2
:content (price good2 100)
:language sl
:ontology hpl-auction)
Ontologías para la comunicación
entre agentes
 Necesidad de acordar terminología.
 “El agente cometió un error.”
Ontologías para la comunicación
entre agentes
 Necesidad de acordar terminología.
 “El agente cometió un error.”
Ontologías para la comunicación
entre agentes
 Necesidad de acordar terminología.
 “El agente cometió un error.”
Web Semántica vs. Web Actual
 Web actual representa la información utilizando
documentos en lenguaje natural con poca estructura
 Fácil comprensión por humanos (html sólo define
presentación).
 Difícil soportar el procesamiento automático.

 Alternativas
 Máquinas más inteligentes  comprender el significado de la
información que hay en la web
 Procesamiento de lenguaje natural, reconocimiento de imágenes,
etc.
 Información más inteligente  representar la información de
modo que sea sencilla de comprender a las máquinas
 Expresar contenidos en un formato procesable automáticamente.
 Uso de metainformación (metadatos = datos sobre los datos)
Definición
« Una especificación de una conceptualización… una descripción de los
conceptos y relaciones que pueden existir para un agente o una comunidad de
agentes. »
T.R. Gruber

« Una ontología es un catalogo de los tipos de cosas que, se asume, existen en un


dominio de interés D desde la perspectiva de una persona, la cual usa un
lenguaje L para hablar sobre D. »
John F. Sowa

« Un ontología trata sobre la exacta descripción de las cosas y sus relaciones. »


World Wide Web Consortium (W3C)
Ejemplo de ontología

 “El agente cometió un error.”

Software comete Error

esUn esUn

esUn
Agente Aplicación

esUn esUn
Error
Agente Agente Agente
Inteligente Personal
Resumen

 Agentes inteligentes
 Autonomía – Reactividad – Proactividad –
Habilidad social.
 Ambientes multiagentes
 Comunicación
 Agentes heterogéneos

 Cooperación – Competición
JADE – Comunicación
entre agentes
Taller de sistemas multiagentes
Prof. Dr. Ariel Monteserin
amontese@exa.unicen.edu.ar
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina

46
Comunicación entre agentes
 Paradigma de intercambio de mensajes asincrónico.

 Estándar FIPA

 Utiliza FIPA ACL (Agent Communication Language)

51
Comunicación entre agentes
Prepara el Toma el mensaje de la
mensaje para A2 cola de mensajes y lo
procesa

A1 A2

Envío del Post del mensaje en la


mensaje cola de mensajes de A2

Destributed JADE runtime

52
ACL (Agent Communication
Language)
 Definido por FIPA
 El mensaje ACL posee los campos:
 sender: agente que envía el mensaje.
 receivers: lista de receptores.
 performative: tipo de mensaje. Indica la intención que el emisor
intenta lograr enviando el mensaje.
 content: contenido principal del mensaje.
 language: lenguaje usado en el contenido. P.e. la sintaxis
utilizada para expresar el contenido.
 ontology: ontología usada en el contenido. P.e. el vocabulario
de símbolos usados en el contenido y su significado.
 conversation-id, reply-with, in-replay-to, reply-by: para el
control de conversaciones concurrentes.

53
Performativas
 Cada mensaje representa un “acto de habla”
 Precondiciones de factibilidad
 Efecto racional

 Haber ejecutado el acto no garantiza el


cumplimiento de efecto racional
 Autonomía

54
ACL (Communicative Acts) I
 Tipo de mensajes (performative)
 ACCEPT_PROPOSAL: acepta una propuesta sobre la
ejecución de una acción.
 AGREE: expresa el acuerdo sobre la ejecución futura de
una acción.
 CANCEL: expresa desacuerdo del emisor sobre la
ejecución de una acción por parte del receptor.
 CFP: (call for proposal) solicita una propuesta.
 CONFIRM: el emisor confirma al receptor la validez de una
proposición.
 DESCONFIRM: el emisor confirma al receptor que una
proposición es falsa.
 FAILURE: comunica que una acción que intentaba ejecutar
falló.
55
ACL (Communicative Acts) II
 INFORM: informa que una proposición es verdadera.
 NOT UNDERSTOOD: el emisor E informa al receptor R que
percibió que R ejecutó alguna acción, pero que E no la
comprende.
 PROPOSE: envía una propuesta para ejecutar cierta acción,
dada cierta precondición.
 QUERY IF: consulta a otro agente si una proposición es
verdadera o no.
 REFUSE: rechaza ejecutar una acción, y explica los
motivos del rechazo.
 REJECT PROPOSAL: rechaza una propuesta durante una
negociación.
 REQUEST: solicita la ejecución de una acción.

56
Envío de mensaje

ACLMessage msg = new ACLMessage(ACLMessage.INFORM);


msg.addReceiver(new AID("Peter", AID.ISLOCALNAME));
msg.setLanguage("English");
msg.setOntology("Weather-forecast-ontology");
msg.setContent("Today it’s raining");
send(msg);

 Dentro de un comportamiento:
myAgent.send(msg);

 myAgent es una referencia al agente que posee el comportamiento

57
Recepción de mensajes
 Usando blockingReceive()

 ACLMessage msg = myAgent.blockingReceive();

 Suspende todas las actividades del agente

Implementar un comportamiento que reciba


mensajes desde la plataforma,
utilizando blockingReceive() y los responda,
y otro cíclico que muestre un contador.
58
Recepción de mensajes
 Usando receive()
public void action() {
ACLMessage msg = myAgent.receive();
if (msg != null) {
// Procesa el mensaje recibido
...
} Implementar el ejercicio
else { anterior utilizando
block(); receive().
}
}
 Pattern sugerido para recibir mensajes dentro de un
comportamiento

59
Conversaciones concurrentes
 conversation-id: identifica la conversación
unívocamente.
 reply-with: identificador de la respuesta
próxima.
 in-replay-to: reply-with del mensaje anterior.

60
Seleccionar mensajes
específicos
 Se pueden especificar template para procesar los
mensajes
 clase MessageTemplate
 AND, OR, NOT, MatchContent(string), MatchSender(AID),
MatchConversationID(string), MatchPerformative(int)
 Se pasa como argumento de receive(MessageTemplate)
mt =
MessageTemplate.and(MessageTemplate.MatchConversationId(“123
"),MessageTemplate.MatchInReplyTo(req.getReplyWith()));
ACLMessage posee constantes por cada Performativa

En el ejercicio anterior responder sólo


a los mensajes de tipo
REQUEST
61
Seleccionar mensajes
específicos
 Definir nuevos template

class myMatchExpression implements MessageTemplate.MatchExpression


{
List senders;
myMatchExpression(List l){
senders = l;
}
public boolean match(ACLMessage msg){
AID sender = msg.getSender();
String name = sender.getName();
Iterator it_temp = senders.iterator();
boolean out = false;
while(it_temp.hasNext() && !out){
String tmp = ((AID)it_temp.next()).getName();
if(tmp.equalsIgnoreCase(name))
out = true;
}
return out;
}
} 62
Crear una respuesta
 ACLMessage.createReply()
 crea un nuevo mensaje ACL en respuesta a este
mensaje. Determina: receiver, language,
ontology, protocol, conversation-id,
in-reply-to, reply-with. El programador
debe setear communicative-act y content.

63
Ejemplo
Agente A Agente B
Initiator Responder

REQUEST
A1 B1

AGREE
A2 B2

ACC

INFORM
A3 B3

CONFIRM
A4 B4
64
Ejemplo
Agente A Agente B
Initiator Responder

REQUEST
A1 B1

AGREE
A2 B2

ACC

INFORM
A3 B3

CONFIRM
A4 B4
65
Ejemplo
Agente A Agente B
ACLMessage REQUEST Initiator Responder

sender: A receiver: B MessageTemplate


reply-with: A-001 REQUEST
A1 B1 performative: REQUEST
conversation-id: AB-1

ACLMessage
MessageTemplate
sender: B sender: B receiver: A
AGREE
in-reply-to: A-001 A2 B2 reply-with: B-001
conversation-id: AB-1 in-reply-to: A-001
conversation-id: AB-1
ACLMessage MessageTemplate
sender: A receiver: B sender: A
INFORM
reply-with: A-002 A3 B3 in-reply-to: B-001
in-reply-to: B-001 conversation-id: AB-1
conversation-id: AB-1
ACLMessage
MessageTemplate
sender: B sender: B receiver: A
CONFIRM reply-with: B-002
in-reply-to: A-002 A4 B4
conversation-id: AB-1 in-reply-to: A-002 66
conversation-id: AB-1
Ejemplo
Agente A Agente B Agente C
Initiator Responder Initiator

REQUEST REQUEST
A1 B1 C1

AGREE
A2 B2

MessageTemplate
sender: A
A3 B3 in-reply-to: B-001
conversation-id: AB-1
Ejemplo
Agente A Agente B Agente C
Initiator Responder Initiator
CÍCLICO e INDEPENDIENTE

REQUEST REQUEST
A1 B1 C1

AGREE AGREE
A2 Xa1 Xb1 C2

public void action() {


ACLMessage msg = myAgent.receive
(MessageTemplate.MatchPerformative(ACLMessage
A3 Xa2 .REQUEST));

if (msg != null) {
myAgent.addBehaviour(new
XBehaviour(msg));
}
else
block();
}
Ejemplo
Agente A Agente B Agente C
Initiator Responder Initiator

REQUEST REQUEST
A1 B1 C1

AGREE AGREE
A2 Xa1 Xb1 C2

INFORM INFORM
A3 Xa2 Xb2 C3

MessageTemplate Xa MessageTemplate Xb
sender: A sender: C
in-reply-to: B-001 in-reply-to: B-201
conversation-id: AB-1 conversation-id: CB-1
Ejemplo
Agente A
Initiator
ACLMessage req = new ACLMessage(ACLMessage.REQUEST);
// Setear datos del mensaje
A1 ...
// Configura MessageTemaplate
mt =
MessageTemplate.and(MessageTemplate.MatchConversationId(req.g
etConversationId()),
A2 MessageTemplate.MatchInReplyTo(req.getReplyWith()));

myAgent.send(req);

A3

A4
Ejemplo
Agente A
Initiator

A1

ACLMessage msg = myAgent.receive(mt);


if (msg != null) {
// Pasa el control al siguiente comportamiento
A2 }
else {
block();
}

A3

A4
Ejemplo
Agente A
Initiator

A1

A2 // Procesa el mensaje recibido


...
// Prepara la respuesta
reply = msg.createReply();
mt =
MessageTemplate.and(MessageTemplate.MatchConversationId(reply
A3
.getConversationId()),
MessageTemplate.MatchInReplyTo(reply.getReplyWith()));

myAgent.send(reply);

A4
Ejemplo
Agente A
Initiator

A1

A2

A3

ACLMessage conf = myAgent.receive(mt);


if (conf != null) {
// Procesa la confirmación y finaliza
A4 }
else
block();
Ejemplo
Agente A
Initiator

A1 public MyFSMBehaviour() {
DataStore ds = new DataStore();

A1Behaviour a1 = new A1Behaviour();


a1.setDataStore(ds);
MyFSMBehaviour

A2 this.registerFirstState(a1,“a1”);
...

this.registerDefaultTransition(“a1”,“a2”);
...
A3
}

A4
Ejemplo
Agente A
Initiator
public InitiatorBehaviour(){
step = 0;
A1 }

public void action() { case 2:


switch (step) { A3
case 0: step = 3;
InitiatorBehaviour

A1 break;
A2
step = 1; case 3:
break; A4
case 1: step = 4;
A2 break;
step2 default:
A3 break; break;
}
}
public boolean done() {
return step == 4;
A4 }
Implementando
conversaciones
Comidas

Propone comida (PROPOSE)

Ok (ACCEPT_PROPOSAL) No
Respuesta
random No (REJECT_PROPOSAL)
Ok
LastState

Agente RESPONDER Agente INITIATOR


(procesar los pedidos concurrentemente) (Uno o varios)

Implementar ambos agentes (Trabajo de CURSADA)


JADE – Directory
Facilitator
Taller de sistemas
multiagentes
Dr. Ariel Monteserin
amontese@exa.unicen.edu.ar
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina

1
Limitaciones observadas
 ¿Qué limitaciones encuentran al intentar
comunicarse con otro agente?
Debemos especificar el nombre del agente con el
cual nos queremos comunicar dentro del
comportamiento del agente
msg.addReceiver(new AID(“X1",
AID.ISLOCALNAME));

2
Agente DF
 Provee el servicio de Paginas Amarillas
 Permite a los agentes publicar y buscar servicios.
 Existe un único DF por plataforma JADE.
 Interacción mediante mensajes ACL.
 Lenguaje: SL0
 Ontología: FIPA-agent-management

3
Servicio de páginas amarillas

A1 A1: - servicioX A4
- servicioY
Buscar un
Publicar servicio
servicio A2: - servicioZ requerido

A2 A3: - servicioW A5
- servicioK
-servicioH

Servicio de páginas
amarillas
A3 A6
Explotar servicio requerido

4
Publicar un servicio
 Para publicar un servicio el agente debe
proveer al DF:
 AID
 Lenguaje y ontología para interactuar con el
agente
 Para cada servicio:
 Nombre
 Lenguaje y ontología para explotarlo
 Propiedades del servicio

5
Clases relacionadas al DF
 DFAgentDescription

 ServiceDescription

 DFService

6
DFAgentDescription
 Representa la descripción de un agente en el
catálogo DF
 setName(AID a)
 addServices(ServiceDescription s)
 addLenguages(String s)
 addOntologies(String s)
 addProtocols(String s)
A1: - servicioX
- servicioY

7
ServiceDescription
 Modela un servicio de un agente
 addLenguages(String s)
 addOntologies(String s)
 addProtocols(String s)
 addProperties(Property p)
 match(Property p)
 setName(String s), setValue(Object o)
 setName(String s)
 setType(String s)

8
DFService
 Provee un set de métodos estáticos para
comunicarse con los servicios del DF
 register(Agent a, DFAgentDescription d)
 Registra una nueva descripción en el DF.
 FIPAException
 deregister(Agent a)
 search(Agent a, DFAgentDescription d)
 Devuelve un array de DFAgentDescription.
 d es utilizado con un template para la búsqueda.
 Además
 SearchContraints restringe el número de resultados.
 Puede setearse un timeout de espera.
9
Publicar un servicio
protected void setup() {
...
// Registra el servicio en las paginas amarillas
DFAgentDescription dfd = new DFAgentDescription();
dfd.setName(getAID());
ServiceDescription sd = new ServiceDescription();
sd.setType(“negociacion”);
sd.setName(“comidas”);
dfd.addServices(sd);
try {
DFService.register(this, dfd);
}
catch (FIPAException fe) {
fe.printStackTrace();
}
...
}
10
Quitar un servicio
 Deben ser eliminados cuando el agente es dado de baja:

protected void takeDown() {


// Quita el servicio del DF
try {
DFService.deregister(this);
}
catch (FIPAException fe) {
fe.printStackTrace();
}
}

11
Publicación de servicios

Incorporar al agente RESPONDER


la publicación del servicio
en el DF (para el FINAL)

 Descripción del servicio:


 Nombre: “comidas”
 Tipo: “negociacion”

12
Buscar servicios
 Un agente debe utilizar una descripción template
 Resultado: lista de todas las descripciones que
concuerdan con el template.

DFAgentDescription template = new DFAgentDescription();


ServiceDescription sd = new ServiceDescription();
sd.setType(“negociacion”);
Sd.setName(“comidas”);
template.addServices(sd);
try {
DFAgentDescription[] result = DFService.search(myAgent,
template);
...
}
catch (FIPAException fe) { fe.printStackTrace(); }
13
Búsqueda de servicios

Incorporar al agente INITIATOR


la búsqueda del servicio
en el DF (para el FINAL)

 Descripción del servicio:


 Nombre: “comidas”
 Tipo: “negociacion”

14
DF Subscription Services
 Un agente puede solicitar al DF un aviso
cuando un determinado servicio sea
registrado:
DFAgentDescription dfd = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
sd.setType(....);
dfd.addServices(sd);
SearchConstraints sc = new SearchConstraints();
sc.setMaxResults(new Long(1));
send(DFService.createSubscriptionMessage(this,
getDefaultDF(), dfd, sc));

15
DF Subscription Services
DFAgentDescription template = // template de busqueda
addBehaviour( new SubscriptionInitiator( this,
DFService.createSubscriptionMessage( this, getDefaultDF(),
template, null))
{
protected void handleInform(ACLMessage inform) {
try {
DFAgentDescription[] dfds =
DFService.decodeNotification(inform.getContent());

// procesar dfds...
}
catch (FIPAException fe) {fe.printStackTrace(); }
}
});

Permitir que el agente INITIATOR se suscriba


para recibir alertas cuando un nuevo RESPONDER
se registre.
17
Cancelar suscripción
 DFService.
createCancelMessage(Agent a,
AID dfName,
ACLMessage subscribe)

 dfName – AID del DF - getDefaultDF()


 subscribe – El mensaje de suscripción previamente
enviado al DF.

18
JADE - Ontologías
Taller de sistemas multiagentes
Dr. Ariel Monteserin
amontese@exa.unicen.edu.ar
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina

19
Contenido de los mensajes
ACL - Ejemplo
 Utilizar Strings
 ACLMessage.setContent(“Juan Pérez, 25, Tandil, 1919”)

Parser
Cliente “González, Emilio” Cliente
Parser

Información de clientes

Juan Pérez
Edad: 25 Cliente: Juan
Núm.: 1919 Pérez, 25
Ciudad: Tandil, 1919
Micosoft Inc. Pingui srl.
Tandil 20
Contenido de los mensajes
ACL - Ejemplo
 Utilizar Objetos
 ACLMessage.setContentObject(cliente)
 class Cliente: getNombre(), getEdad(), getCiudad(). Persona

Cliente Cliente
Cliente Cliente

Información de clientes

Juan Pérez
Edad: 25 Cliente: Juan
Núm.: 1919 Pérez, 25
Ciudad: Tandil, 1919
Micosoft Inc. Pingui srl.
Tandil 21
Contenido de los mensajes
ACL - Ejemplo
 Utilizar Ontologías
 getContentManager().fillContent(msg, cliente));

Cliente Cliente
Cliente Cliente

Información de clientes

Juan Pérez
Edad: 25 Cliente: Juan
Núm.: 1919 Pérez, 25
Ciudad: Tandil, 1919
Micosoft Inc. Pingui srl.
Tandil
Contenido de los mensajes
ACL - Ejemplo
nombre vive en
Persona Ciudad
edad
es
nombre

Cliente numCliente

Cliente Cliente
Cliente Cliente

Información de clientes

Juan Pérez
Edad: 25 Cliente: Juan
Núm.: 1919 Pérez, 25
Ciudad: Tandil, 1919
Micosoft Inc. Pingui srl.
Tandil
Contenido de los mensajes
ACL

Contenido de un Dentro del agente


mensaje ACL
Información
Información
representada como un Jade – Soporte
representada como
String o una secuencia para contenido y
objetos
de Bytes ontologías
(fácil de manipular)
(fácil de transferir)

24
Componentes principales
 Content manager
 Transforma objetos en Strings (o secuencia de bytes), los
inserta en el contenido de un ACLMessage y viceversa.
 jade.content.ContentManager
 agent.getContentManager()
 fillContent(ACLMessage, ContentElement)
 ContentElement extractContent(ACLMessage)
 Ontología
 Valida la información a convertir desde un punto de vista
semántico.
 jade.content.onto.Ontology
 Content language codec
 Ejecuta la translación a Strings (o secuencias de bytes) de
acuerdo a las reglas sintácticas de un lenguaje.
 jade.content.lang.Codec (Interface)
25
Componentes principales

Contenido del Representación


mensaje ContentManager interna
ACL del agente
Validación

Parser Parser

String/byte[] Content AbsContentElement ContentElement


Language Ontología (inteface)
Codec

Encoder Encoder

26
Modelo de referencia de
contenido
 Clasificación de los elementos en el dominio
del discurso
 Predicados o hechos (Predicate)
 Expresiones que dicen algo sobre el estado del
mundo – Pueden ser verdaderas o falsas.
 (Works-for (Person :name John) (Company
:name TILAB))
 Términos o entidades (Term)
 Expresiones que identifican entidades (abstractas o
concretas) que existen en el mundo y sobre las cuales
los agentes hablan y razonan.

27
Modelo de referencia de
contenido - Términos
 Conceptos (Concept)
 Expresiones que indican entidades con una
estructura compleja
 (Person :name John :age 33)
 Acciones de agente (Action)
 Conceptos especiales que indican acciones que
pueden ser ejecutadas por cualquier agente.
 (Sell (Book :title “The Lord of the
rings”) (Person :name John))

28
Modelo de referencia de
contenido - Términos
 Primitivas (Primitive)
 Expresiones que indican entidades atómicas tales como
Strings o Enteros.
 Conjunto (Aggregate)
 Expresiones indicando entidades que son grupos de otras
entidades.
 (sequence (Person :name John) (Person :name Bill))
 IRE (Identifying Referencial Expressions)
 Expresiones que identifican las entidades para las que
un cierto predicado es verdadero.
 (all ?x (Work-for ?x (Company :name TILAB))
 Variables (Variable)
 Expresiones que indican un elemento genérico apriori no
conocido.
29
Modelo de referencia de
contenido
 Content language
 Debería ser capaz de representar y distinguir
entre todos los tipos de elementos.

 Ontología
 Conjunto de esquemas que definen la estructura
de los predicados, acciones y conceptos
(básicamente sus nombres y campos) que son
pertinentes para un dominio.

30
Modelo de referencia de
contenido

31
Usando ontologías
1. Definir la ontología incluyendo predicados,
acciones y conceptos.
2. Desarrollar las clases Java para todos los tipos
de predicados, acciones y conceptos de la
ontología.
3. Seleccionar el content language.
4. Registrar la ontología definida y el lenguaje
seleccionado.
5. Crear y manejar los contenidos de los
mensajes ACL.
32
Ejemplo
nombre vive en
Persona Ciudad
edad
es
nombre

Cliente numCliente

Cliente Cliente
Cliente Cliente

Información de clientes

Juan Pérez
Edad: 25 Cliente: Juan
Núm.: 1919 Pérez, 25
Ciudad: Tandil, 1919
Micosoft Inc. Pingui srl.
Tandil
Usando ontologías
1. Definir la ontología incluyendo predicados,
acciones y conceptos.
2. Desarrollar las clases Java para todos los tipos
de predicados, acciones y conceptos de la
ontología.
3. Seleccionar el content language.
4. Registrar la ontología definida y el lenguaje
seleccionado.
5. Crear y manejar los contenidos de los
mensajes ACL.
34
Definiendo la ontología
 Instancia de jade.content.onto.Ontology

 Esquemas definen la estructura de los tipos de


predicado, acciones y conceptos
 jade.content.schema
 PredicateSchema
 AgentActionSchema
 ConceptSchema

 Singleton (buenas prácticas)

35
Definiendo la ontología
Ejemplo
public class OntologiaCliente extends Ontology {

public static final String ONTOLOGY_NAME = "Ontologia-cliente";

public static final String PERSONA = "Persona";


public static final String PERSONA_NOMBRE = "nombre";
public static final String CIUDAD = "Ciudad";
public static final String CIUDAD_NOMBRE = "nombre";
public static final String PERSONA_EDAD = "edad";

public static final String CLIENTE = "Cliente";


public static final String CLIENTE_NUMERO = "numCliente";

private static Ontology instance = new OntologiaCliente();

public static Ontology getInstance() { return instance; }

36
Definiendo la ontología
Ejemplo
private OntologiaCliente() {
super(ONTOLOGY_NAME, BasicOntology.getInstance());

try {
add(new ConceptSchema(PERSONA), Persona.class);
add(new ConceptSchema(CLIENTE), Cliente.class);
add(new ConceptSchema(CIUDAD), Ciudad.class);
add(new PredicateSchema(ES_CLIENTE), EsCliente.class);

ConceptSchema cs = (ConceptSchema) getSchema(PERSONA);


cs.add(PERSONA_NOMBRE,
(PrimitiveSchema)getSchema(BasicOntology.STRING),
ObjectSchema.MANDATORY);
cs.add(PERSONA_EDAD,
(PrimitiveSchema)getSchema(BasicOntology.INTEGER),
ObjectSchema.OPTIONAL);
cs.add(CIUDAD,
(ConceptSchema) getSchema(CIUDAD),
ObjectSchema.MANDATORY); 37

...
Definiendo la ontología
Ejemplo
cs = (ConceptSchema) getSchema(CLIENTE);

cs.addSuperSchema((ConceptSchema)getSchema(PERSONA));
cs.add(CLIENTE_NUMERO,
(PrimitiveSchema)getSchema(BasicOntology.INTEGER),
ObjectSchema.MANDATORY);

cs = (ConceptSchema) getSchema(CIUDAD);
cs.add(CIUDAD_NOMBRE,
(PrimitiveSchema)getSchema(BasicOntology.STRING),
ObjectSchema.MANDATORY);

PredicateSchema ps = (PredicateSchema)getSchema(ES_CLIENTE);
ps.add(PCLIENTE, (ConceptSchema) getSchema(CLIENTE),
ObjectSchema.MANDATORY);
}
catch (OntologyException oe) { oe.printStackTrace();}

} 38
Usando ontologías
1. Definir la ontología incluyendo predicados,
acciones y conceptos.
2. Desarrollar las clases Java para todos los tipos
de predicados, acciones y conceptos de la
ontología.
3. Seleccionar el content language.
4. Registrar la ontología definida y el lenguaje
seleccionado.
5. Crear y manejar los contenidos de los
mensajes ACL.
39
Desarrollar clases Java
 Estructura clases debe ser coherente con los
esquemas asociados
1. Implementar la interface correcta
(jade.content)
 Si el esquema es un ConceptSchema la clase debe
implementar la interface Concept.
 Si el esquema es un PredicateSchema la clase
debe implementar la interface Predicate .
 Si el esquema es un AgentActionSchema la clase
debe implementar la interface AgentAction .

40
Desarrollar clases Java

2. Mantener las relaciones de herencia.


 Si S1 es un super-esquema de S2 entonces la clase
C2 asociada al esquema S2 debe extender la clase
C1 asociada con S1.

41
Desarrollar clases Java
3. Respetar los campos y los métodos de acceso
 Por cada slot en S1 con el nombre nnn y tipo S2 , la
clase C1 debe tener dos métodos:
 public void setNnn(C2 c);
 public C2 getNnn();
 Correspondencia entre S2 y C2 según BasicOntology
 STRING  java.lang.String
 INTEGER  int, long, java.lang.Integer o java.lang.Long
 BYTE_SEQUENCE  byte[]
 DATE  java.util.Date
 AID  jade.core.AID
 Cardinalidad > 1
 public void setNnn(jade.util.leap.List l);
 public jade.util.leap.List getNnn();

42
Desarrollar clases Java
Ejemplo
public class Cliente extends Persona {
private int numCliente;
public class Persona implements Concept {
public int getNumCliente()
private {String nombre;
return numCliente;
private Ciudad ciudad;
} private int edad;

public void setNumCliente(int numCliente) {
this.numCliente = numCliente;
}

public String toString() {


return "Cliente: " + getNombre() + ", " +
getEdad() + ", "
+ getCiudad().getNombre() + ", " + numCliente;
}
}
43
Usando ontologías
1. Definir la ontología incluyendo predicados,
acciones y conceptos.
2. Desarrollar las clases Java para todos los tipos
de predicados, acciones y conceptos de la
ontología.
3. Seleccionar el content language.
4. Registrar la ontología definida y el lenguaje
seleccionado.
5. Crear y manejar los contenidos de los
mensajes ACL.
44
Seleccionar el content
language
 Codec para un lenguaje L
 Objeto Java capaz de manejar expresiones
escritas en el lenguaje L .

 jade.content incluye codecs para dos


lenguajes.
 SL Language
 Legible por humanos - Strings
 LEAP Language
 No legible por humanos - Bytes
45
Usando ontologías
1. Definir la ontología incluyendo predicados,
acciones y conceptos.
2. Desarrollar las clases Java para todos los tipos
de predicados, acciones y conceptos de la
ontología.
3. Seleccionar el content language.
4. Registrar la ontología definida y el lenguaje
seleccionado.
5. Crear y manejar los contenidos de los
mensajes ACL.
46
Registro de la ontología y el
lenguaje

private Codec codec = new SLCodec();


private Ontology ontology = OntologiaCliente.getInstance();

protected void setup() {


getContentManager().registerLanguage(codec);
getContentManager().registerOntology(ontology);
...
}

47
Usando ontologías
1. Definir la ontología incluyendo predicados,
acciones y conceptos.
2. Desarrollar las clases Java para todos los tipos
de predicados, acciones y conceptos de la
ontología.
3. Seleccionar el content language.
4. Registrar la ontología definida y el lenguaje
seleccionado.
5. Crear y manejar los contenidos de los
mensajes ACL.
48
Definir contenido del mensaje
ACL
Cliente cliente = new Cliente();
...

try {
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);

msg.addReceiver(new AID("Receptor",AID.ISLOCALNAME));
msg.setLanguage(codec.getName());
msg.setOntology(ontology.getName());

getContentManager().fillContent(msg,
new EsCliente(cliente));
myAgent.send(msg);
}
catch (CodecException ce) { ce.printStackTrace();}
catch (OntologyException oe) {oe.printStackTrace();}
49
Extraer contenido del mensaje
ACL
ACLMessage msg = blockingReceive(mt);
try {
ContentElement ce;
if (msg.getPerformative() == ACLMessage.INFORM) {
ce = getContentManager().extractContent(msg);
EsCliente p = (EsCliente)ce;
Cliente c = p.getCliente();
System.out.println(c);
}
}
catch (CodecException ce) {ce.printStackTrace();}
catch (OntologyException oe) {oe.printStackTrace();}

50
Ejemplo
nombre vive en
Persona Ciudad
edad
es
nombre

Cliente numCliente

Cliente Cliente
Cliente Cliente

Información de clientes

Juan Pérez
Edad: 25 Cliente: Juan
Núm.: 1919 Pérez, 25
Ciudad: Tandil, 1919
Micosoft Inc. Pingui srl.
Tandil
Trabajo final

Propone comida (PROPOSE)

Ok (ACCEPT_PROPOSAL)

No (REJECT_PROPOSAL)

Agente RESPONDER Agente INITIATOR


(procesar los pedidos (Uno o varios)
concurrentemente)

(Trabajo de CURSADA)
Monotonic Concession
Protocol Propuesta X
(Inicio al azar)
j

Eval. Ui (Xi)  Ui (Xj)?


Prop
Si No

Acepto Rechazo

Ui ( X i )  Ui ( X j )
Zi  Calc
Acuerdo Ui ( X i ) .Z
Propuesta

Ambos informan Z

Con
Menor Z
ced Conflicto
Concesión egocéntrica Cancelo
er 53
Trabajo final

Propone comida (PROPOSE)

Ok (ACCEPT_PROPOSAL)

No (REJECT_PROPOSAL)
Valor Zeuthen (INFORM)
Valor Zeuthen (INFORM)

Propone comida (PROPOSE)

Ok (ACCEPT_PROPOSAL)

No (REJECT_PROPOSAL)

Trabajo Final: Agente negociador (con DF y


Ontologías)
Trabajo final
Enviar Propuesta
cancel
conflicto
Esperar Respuesta accept
Z menor
reject acuerdo

Calcular y enviar
Zeuthen
cancel
Recibir Zeuthen
oponente
Z mayor reject

Esperar propuesta

Esperar propuesta Evaluar propuesta y


responder
accept
JADE - Ontologías
Taller de sistemas multiagentes
Dr. Ariel Monteserin
amontese@exa.unicen.edu.ar
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina

60
JADE - Movilidad
Taller de sistemas multiagentes
Prof. Dr. Ariel Monteserin
amontese@exa.unicen.edu.ar
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina
Anuncios Sociales
 Becas Doctorales CONICET
 Becas en el marco de proyecto UE SmartCities
 Becas CIN (Estímulo a la Vocaciones
Científicas)
 Tesis de grado
 https://www.exa.unicen.edu.ar/es/piexa/banco-tesis
 Concursos auxiliares interinos
Movilidad desde RMA
Movilidad en JADE
 Movilidad intra-plataforma

 Estados del ciclo de vida del agente


 En transito

 Ontología
 jade-mobility-ontology
 Conceptos y acciones necesarias para la movilidad.
 move-agent, clone-agent, Mobile-agent-description…

 Agent.doMove(Location l)
 Agent.doClone(Location l, String name)

 beforeMove(), afterMove(), beforeClone(),


afterClone()
Movilidad en JADE
 Agent.doMove(Location l)
 Location es una interface abstracta.

 El agente debe consultar por posibles


Location al AMS.
 Mediante REQUEST ACL
 WhereIsAgentAction
 setAgentIdentifier(AID)
 QueryPlatformLocationsAction
 MobilityOntology: jade-mobility-ontology
 SLCoded
Envío de mensaje al AMS
ACLMessage req = new ACLMessage(ACLMessage.REQUEST);
req.addReceiver(getAMS());
req.setLanguage(codec.getName()); // SLCodec
req.setOntology(onto.getName()); // MobilityOntology

myAgent.getContentManager().fillContent(
req,
new Action(getAMS(),
new QueryPlatformLocationsAction()));

myAgent.send(req);
Recepción de mensaje del
AMS

ACLMessage resp = blockingReceive();

ContentElement ce = getContentManager().extractContent(resp);

Result result = (Result) ce;

jade.util.leap.Iterator it = result.getItems().iterator();

while (it.hasNext()) {
loc = (Location)it.next();
}
...
myAgent.doMove(loc);
Agentes e inteligencia
Taller de sistemas multiagentes
Prof. Dr. Ariel Monteserin
amontese@exa.unicen.edu.ar
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina
Hasta ahora…
?
Beh1
Beh2
Beh3

Ambiente
Aprendizaje y razonamiento

KDD
Planning
Reinforcement learning

Programación
evolutiva

Mucho más..
Razonamiento
Razonamiento Motores de basado en reglas
argumentativo inferencia
Jess - Java Expert
System Shell
Taller de sistemas multiagentes
Prof. Dr. Ariel Monteserin
amontese@exa.unicen.edu.ar
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina
Jess - Java Expert System Shell
 Razonador basado en reglas para la
plataforma Java.
 Basado en el lenguaje de programación CLIPS.

 Provee programación basada en reglas.


 Sistemas Expertos

 Permite embeber la funcionalidad Jess dentro


código Java.
Elementos básicos
 Hechos
 Representan conocimiento

 Reglas
 Indican que acción debe realizarse cuando se cumple
cierta condición.

 Preguntas
 Realizan consultas sobre la base de conocimiento.
Elementos básicos
 Literales
 agente
 Variables
 ?a
 (bind ?x “hola”)
 (bind $?estuche (create$ lapiz boli goma))
 (defglobal ?*var* = primero)
 Funciones
 (nombreFuncion parámetro1 parámetro2 …)
 (deffunction nombre_funcion (parámetros)
expresiones
)
 (deffunction fact (?n)
(if (= ?n 0) then 1
else (* ?n (fact (- ?n 1)))
))
 (fact 5)
Elementos básicos

 Funciones predefinidas
 (++ <variable>) (-- <variable>)
 (assert <fact>+)
 (assert-string <string-expression>)
 (batch <filename>)
 (bind <variable> <expression>*)
 (eval <lexeme-expression>)
 (facts [<module name>])

 Estructuras:
 if, while, for, try/catch

http://herzberg.ca.sandia.gov/jess/docs/70/functions.html
Motor de inferencia

pure facts
facts
shadow facts
Motor de Memoria
inferencia de trabajo
(facts)
(assert <fact>+)
(retract <expression>+) Clase Java

 Ciclo de inferencia
1. Se buscan todas las posibles reglas aplicables, es decir, que son
compatibles con la memoria de trabajo. Algoritmo RETE (Algoritmo
de Redundancia Temporal)
2. Se selecciona una de las reglas según un orden de preferencia.
3. Se aplica la regla seleccionada y se actualiza la memoria.
Hechos
 Hechos ordenados
 Jess> (assert (vivienda ocupada))
<Fact-0>
Jess> (assert (puerta abierta)) <Fact-1>
Jess> (facts)
f-0 (MAIN:: ((vivienda ocupada))
f-1 (MAIN:: ((puerta abierta))
For a total of 2 facts in module MAIN.
 Hechos no ordenados
 Template que declara la estructura (slots) de los hechos
 (deftemplate automobile "A specific car." (slot make)
(slot model) (slot year (type INTEGER)) (slot color
(default white)))
 Shadow facts
 public class Account implements Serializable {
// Atributos y métodos interesantes
}
 (deftemplate Account (declare (from-class Account)))
 (bind ?a (new Account))
Reglas
 Estructura IF-THEN
 (defrule nombreRegla (condición) => (acción))

 (defrule apagarLuces
(and
(vivienda vacia)
(luz encendida))
=>
(printout t "La vivienda esta vacia. Las luces deben
estar apagadas." crlf)
(retract-string "(luz encendida)")
(assert (luz apagada))
)

 Jess> (assert (vivienda vacia))


<Fact-0>
Jess> (assert (luz encendida))
<Fact-1>
Jess> (run)
La vivienda esta vacia. Las luces deben estar
apagadas.
 Usar test si se quiere disparar una regla basandose en una función
Integración Jess - JADE
 Motor de inferencia
 Clase jess.Rete

 batch(String): equivalente a (batch archivo), carga un archivo .clp.


 run(), run(int): equivalentes a (run [integer]), ejecuta el motor de
inferencias.
 reset(): equivale a (reset).
 clear(): equivale a (clear), borra reglas, deffacts, defglobals, templates,
facts… menos funciones.
 assertFact(Fact): equivale a (assert (hecho)), añade un hecho que debe
estar definido de tipo Fact.
 assertString(“hecho”): a (assert (hecho)), añade un hecho que se pasa
como String.
 retract(Fact), retract(int): equivalen a (retract hecho), eliminan un
hecho.
 halt(): equivale a (halt), detiene la ejecución de las reglas.
 eval(String): cuyo parámetro es el código JESS que se quiere ejecutar
 listFacts(): devuelve todos los hechos de la memoria de trabajo en un
Iterator
 executeCommand(String): ejecuta el comando pasado como parámetro.
De Jess a acciones
 Jess.Userfunction
 Permite definir funciones que serán invocadas desde
el código Jess.
 Rete.addUserfunction(Userfunction)
public class JessAddBehaviour implements Userfunction {

public Value call(ValueVector arg0, Context arg1) throws


JessException {
myAgent.addBehaviour(new JessBehaviour());
return Funcall.TRUE;
} (defrule add-behaviour
(and(c1)(c2))=>
public String getName() { (addBehaviour)
return "addBehaviour";
(retract-string "(c1)")
}
(retract-string "(c2)"))
Ejemplo CENA
(deftemplate important-date (slot dd) (slot mm) (slot description)
(slot name))
(deftemplate today (slot dd) (slot mm))

(assert (important-date (dd 18) (mm 07) (description cumple) (name


Juana)))
(assert (important-date (dd 19) (mm 09) (description aniversario) (name
Carola)))
(assert (important-date (dd 15) (mm 10) (description dia-de-la-madre)
(name Susana)))

(defrule important-day
(and (today (dd ?dd) (mm ?mm))
(important-date {dd == ?dd} {mm == ?mm} (description ?d) (name ?n)))
=>
(ActivateImportantDayBeh ?n)
)
Ejemplo CENA

ControlBehaviour
Responder
defrule important-day
Jess

UserFunction

JessActivateImportantD
ayBeh

InitiatorNegotiationBe
haviour
Ejemplo CENA
public class ControlBehaviour extends TickerBehaviour {

private Rete jess;


private List<Date> list;
private int i = 0;

public ControlBehaviour(Agent a, long tick, List<String> items) {


super(a, tick);
jess = new Rete();
list = new ArrayList<Date>();

try {
String jessFile = "rules-anniversary.clp";
FileReader fr = new FileReader(jessFile);
Jesp j = new Jesp(fr, jess);
jess.addUserfunction(new JessActivateImportantDayBeh(items));
// Ejecuta el parser (sin mostrar datos por consola)
j.parse(false);
}
catch (JessException je) {je.printStackTrace();}
catch (FileNotFoundException je) {je.printStackTrace();}

}
Ejemplo CENA
@Override
protected void onTick() {
try {
if (i < list.size()) {
// Actualiza la fecha
Calendar cal = Calendar.getInstance();
cal.setTime(list.get(i));
int mm = cal.get(Calendar.MONTH);
int dd = cal.get(Calendar.DAY_OF_MONTH);

jess.eval("(retract-string \"(today (dd ?d) (mm ?m))\")");


jess.eval("(assert (today (dd " + dd + ") (mm " + mm + ")))");
i++;
jess.run();
}
else
System.out.println("No hay mas fechas para cargar");
}
catch (JessException je) {je.printStackTrace();}

}
Ejemplo CENA
public class JessActivateImportantDayBeh implements Userfunction {
private List<String> items;
public JessActivateImportantDayBeh(List<String> items) {
this.items = items;
}

public Value call(ValueVector jessArgs, Context context)


throws JessException {
String name = ((Value)jessArgs.get(1)).
resolveValue(context).stringValue(context);
myAgent.addBehaviour(new InitiatorNegotiationBehaviour(
new AID(name, AID.ISLOCALNAME), items));
return Funcall.TRUE;
}

public String getName() {


return "ActivateImportantDayBeh";
}
}
Jess - Java Expert
System Shell
Taller de sistemas multiagentes
Prof. Dr. Ariel Monteserin
amontese@exa.unicen.edu.ar
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina
JADEX
Taller de sistemas
multiagentes
Prof. Dr. Ariel Monteserin
amontese@exa.unicen.edu.ar
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina
Introducción
 Framework para la creación de agentes BDI.
 Basado en Java y XML.
 Puede ser integrado a JADE.
 Motivación
 Plataforma multiagente: requisitos
 Apertura (Openness)
 Middleware
Dos tipos plataforma
 Razonamiento
El modelo BDI
 Inspirada en la teoría del razonamiento práctico.
 Rao y Georgeff
 Definen a las creencias, deseos e intenciones como
actitudes mentales.
 Proponen ciertas simplificaciones
 Solamente las creencias son representadas explícitamente.
 Los deseos son reducidos a eventos que son manejados
por planes template predefinidos.
 Las intenciones son representadas implícitamente por la
pila de ejecución de planes.
Arquitectura abstracta de
JADEX
Capability
Reaction Select Messages
Plans Plans
Deliberation

Application Events
Handle Read/Write Dispatch
Events Facts (Sub-) Goals
Messages
Events

Condition Goal
Events Events

Goal
Beliefs Conditions Goals

Agent
Creencias
 Representación orientada a objetos.
 Dos tipos
 Facts (Beliefs)
 Sets of facts (Belief sets)
 OQL – lenguaje para realizar operaciones
sobre la base de creencias
 Parte activa – cambios en la creencia,
dispara eventos, crea/elimina objetivos.
Objetivos
 Dirigen a acciones
 Objetivo actual
 Implícitamente disponible como causa de los
planes en ejecución.
 No se requiere consistencia entre objetivos
 Contexto de validez
 Ciclo de vida
 Option – Active - Suspended
Tipos de objetivos
 Perform goal: especifica una acción que
debe ser realizada.
 Achieve goal: especifica un estado del
mundo al cual se debe llegar.
 Query goal: especifica un estado interno al
cual se desea llegar.
 Maintain goal: especifica un estado deseado
que debe restablecerse cada vez que sea
modificado.
Planes
 Representan el comportamiento del agente.
 Service plan – Passive plan
 Cabecera (head)
 Especifica las circunstancias bajo las cuales el
plan puede ser seleccionado.
 Cuerpo (body)
 Provee un curso de acción predefinido que es
ejecutado cuando el plan es seleccionado.
Capabilities
 Agrupan elementos de un agente BDI.
 Permiten encapsular funcionalidad
Modelo de ejecución
Lenguaje
 Enfoque híbrido
 Agent Definition File (ADF)
 Especifica creencias, objetivos, planes.
 Especificación estática del agente.
 XML
 Plan (Body)
 Parte procedural del agente
 Java.
 Accede a las características BDI del agente mediante
un API.
ADF
<agent
xmlns="http://jadex.sourceforge.net/jadex"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"
xsi:schemaLocation="http://jadex.sourceforge
.net/jadex
http://jadex.sourceforge.net/jadex-
0.96.xsd"
name="TranslationE1"
package="jadex.tutorial">
<imports>
<import>java.util.*</import>
<import>jadex.bridge.fipa.*</import>
<import>jadex.commons.Tuple</import>
</imports>

</agents>
Beliefs
<beliefs>
<belief name="egwords" class="Map">
<fact>EnglishGermanTranslationPlanC1.getDictionary()</fact>
</belief>
….
<beliefset name="egwords" class="Tuple">
<fact>new Tuple("milk", "Milch")</fact>
<fact>new Tuple("cow", "Kuh")</fact>
<fact>new Tuple("cat", "Katze")</fact>
<fact>new Tuple("dog", "Hund")</fact>
</beliefset>
<beliefset name="efwords" class="Tuple">
<fact>new Tuple("milk", "lait")</fact>
<fact>new Tuple("cow", "vache")</fact>
<fact>new Tuple("cat", "chat")</fact>
<fact>new Tuple("dog", "chien")</fact>
</beliefset>
</beliefs>
Goals
<goals>
<achievegoal name="translate">
<parameter name="direction" class="String" />
<parameter name="word" class="String" />
<parameter name="result" class="String" direction="out" />
</achievegoal>
</goals>
Plans
Plans
<plans>
<plan name="process">
<body class="ProcessTranslationRequestPlanE1" />
<waitqueue> Service plan
<messageevent ref="request_translation" />
</waitqueue>
</plan>
<plan name="egtrans">
<parameter name="word" class="String">
<goalmapping ref="translate.word" /> Passive plan
</parameter>
<parameter name="result" class="String" direction="out">
<goalmapping ref="translate.result" />
</parameter>
<body class="EnglishGermanTranslationPlanE1" />
<trigger>
<goal ref="translate">
<match>"english_german".equals($goal.getParameter("direction").getValue())
</match>
</goal>
</trigger>
</plan>
Plan triggers
Cuerpo del plan
 Clase Java
 Heredan de jadex.bdi.runtime.Plan
 Método body()
public class ProcessTranslationRequestPlanE1 extends Plan {

public ProcessTranslationRequestPlanE1() {
System.out.println(“Plan creado “ + this);
}

public void body() {


while(true) {
IMessageEvent me =
(IMessageEvent)waitForMessageEvent("request_translation");

String request = (String)me.getParameter(SFipa.CONTENT).getValue();


StringTokenizer stok = new StringTokenizer(request, " ");
int cnttokens = stok.countTokens();
Cuerpo del plan
if(cnttokens == 3) {
String action = stok.nextToken();
String dir= stok.nextToken();
String word = stok.nextToken();

IGoal goal = createGoal("translate");


goal.getParameter("direction").setValue(dir);
goal.getParameter("word").setValue(word);
try {
dispatchSubgoalAndWait(goal);
} catch(GoalFailureException e) {
};
}
else {
System.out.println("Request format not correct, needs:
#" + "action direction word1 [word2]");
}
Events

 Internal-events
<events>
<internalevent name="gui_update">
<parameter name="content" class="String"/>
</internalevent>
</events>

public void body()


{
String update_info;
...
IInternalEvent event = createInternalEvent("gui_update");

event.getParameter("content").setValue(update_info);
dispatchInternalEvent(event);
...
}
Events

 Message-event
<events>
<messageevent name="request_translation" direction="receive"
type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.REQUEST</value>
</parameter>
</messageevent>
</events>
Expressions
 Permiten definir elementos propios del
agente.
 Hechos y creencias por defecto.
 Consultas OQL.
<expressions>
<expression name="query_egword">
select one $wordpair.get(1)
from Tuple
$wordpair in $beliefbase.getBeliefSet("egwords").getFacts()
where
$wordpair.get(0).equals($eword)
</expression>

</expressions>
Configurations
 Representa el estado inicial y final de un
agente
<configuration name="one">
<plans>
<initialplan ref="print_hello">
<parameter name="text">"Hello World!"</parameter>
</initialplan>
<endplan ref="print_goodbye">
<paramter name="text">"Goodbye World!"</parameter>
</endplan>
</plans>
</configuration>
Configurations
<configurations>
<configuration name="default">
<plans>
<initialplan ref="process" />
</plans>
</configuration>
</configurations>
<plans>
<plan name="process">
<body class="ProcessTranslationRequestPlanE1" />
<waitqueue>
<messageevent ref="request_translation" />
</waitqueue>
</plan>
Pasive plan
public class EnglishGermanTranslationPlanE1 extends Plan {
protected Iexpression queryword;
public EnglishGermanTranslationPlanE1() {
this.queryword= getExpression("query_egword");
}
public void body() {
String eword = (String)getParameter("word").getValue();
String gword = (String)queryword.execute("$eword", eword);
if(gword!=null) {
System.out.println("Translating from english to
german: "+eword+" - "+gword);
getParameter("result").setValue(gword);
}
else {
System.out.println("Sorry word is not in database:
"+eword);
}
}
}
JCC (Jadex Control Center)
 jadex.base.Starter
JADEX
Taller de sistemas
multiagentes
Dr. Ariel Monteserin
amontese@exa.unicen.edu.ar
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina
Planificando cómo
argumentar en un
proceso de negociación
Taller de sistemas multiagentes
Dr. Ariel Monteserin
amontese@exa.unicen.edu.ar
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina
Habilidad Social
 Relaciones entre los agentes
 Necesidad de interacción.
 Tipos de interacción
 Intercambio de información.
 Coordinación.
 Colaboración.
 Negociación.
Negociación – Definición
 Forma de interacción en la cual un grupo de
agentes, con intereses conflictivos y un deseo
de cooperar, intentan alcanzar un acuerdo
mutuamente aceptable en la división de
recursos escasos (Rahwan et al., 2003a).
Negociación
 Esencia de la negociación → Intercambio de
propuestas
 Dificultad para comparar cuantitativamente dos
propuestas.
 Las propuestas no pueden influenciar la postura
de negociación del oponente.

 Modelos de negociación basada en


argumentación.
Negociación basada en
argumentación
 Argumentos
 Información adicional a las propuestas.

 Permiten (Jennings et al., 1998):


 (a) justificar su postura de negociación.
 (b) influenciar la postura de negociación de otros
agentes.
Negociación basada en
argumentación - Tendencias
 Existen dos grandes tendencias en la literatura
existente sobre negociación basada en
argumentación (Rahwan et al., 2005).

 Enfoques para adaptar lógicas dialécticas para


argumentación rebatible embebiendo conceptos de
negociación dentro de ellas (Amgoud et al., 2000; Parsons et
al.,1998; Rueda et al., 2002).

 Enfoques para extender frameworks de negociación para


que permitan a los agentes intercambiar argumentos
retóricos, como recompensas y amenazas (Kraus et
al.,1998; Ramchurn et al., 2003a).
Enfoque tradicional
Planificación Ejecución Planificación
Plan inicial Nueva solución
Inicial Inicial

Ejecuta la
Acción 1 Acción 1 Acción A Acción B

Comienza la
negociación
Acción 2 Acción 3 Acción 5 Acción 3
de la Acción 2

Falla la
Acción 4 negociación Acción 6
de la Acción 2
Final Final

Acciones bajo el control del agente (intend-to-do) Acciones que NO puede ejecutar (intend-that)
Solución propuesta
 Un algoritmo de planning puede ser utilizado
para construir planes de argumentación que
determinen los argumentos que un agente
puede expresar durante una negociación.
 Plan de argumentación.
 Para la negociación autónoma (agente autónomo).
 Para asistir a un usuario negociador (agente
personal).
 Modelo argumentativo del usuario.
Enfoque planificando la
argumentación
Planificación

Plan inicial

Inicial Inicial

Acción 1 Acción A Acción B

Plan de Plan de
argumen argumen
tación 2 Acción 3 tación 5

Acción 2
5 Acción 5 Acción 3

Plan de
argumen
tación 6

Acción 6

Final
Acciones bajo el control del agente (intend-to-do) Acciones que NO puede ejecutar (intend-that)
Plan de argumentación

 Secuencia de argumentos de orden parcial


que permite a un agente alcanzar un acuerdo
esperado cuando éste es expresado en una
determinada situación conflictiva.
Escenario de la negociación
basada en argumentación

Proceso de negociación
Conflicto Acuerdo
basado en argumentación
Generación Selección
de Argumentos de Argumentos

Información sobre el conflicto: Información sobre el acuerdo:


 Propia  Objetivos
 De los oponentes  Intenciones
 Contexto
Generación de argumentos (1)
 Construcción de argumentos candidatos.

 Tipos de argumentos

 Apelaciones (contraejemplo, práctica prevaleciente,


interés propio).

 Recompensas.

 Amenazas.
Generación de argumentos (2)
 Reglas para la generación de argumentos
 (Kraus et al., 1998; Ramchurn et al., 2003)

 Si se cumplen las condiciones entonces el argumento puede


ser generado.

IF
 solicita la ejecución de una acción  a  &
 rechaza la propuesta porque  niega su objetivo  &
 conoce que  ha ejecutado una acción  &
haciendo  se negaba el mismo objetivo 
THEN
 solicita la ejecución de  a  con la siguiente justificación:
Realizá  porque ya has ejecutado  y  negaba 

(a) Regla informal para la generación de argumentos basada en el


framework de Kraus et al., 1998.
Selección de argumentos
 Dado el conjunto de argumentos candidatos,
seleccionar el más adecuado.

 Distintos criterios de selección:


 Según la fuerza de los argumentos.

 Según la confianza en el oponente.

 Según la utilidad de la propuesta respaldada.


Planning

Estado
Estado a1 a2 an Final
Inicial

Selección de
Acciones

 Problema de planning definido por la tripla <i, f, A>.


 Estado Inicial i: descripción del mundo.
 Estado Final f: objetivo que se quiere alcanzar.
 Acciones disponibles para la construcción del plan (A) las cuales
poseen precondiciones y efectos.
 Mecanismo de selección de acciones.
El proceso de argumentación
como un problema de planning
Estado
Proceso de negociación Estado a1 a2 an Final
Conflicto Acuerdo Inicial
basado en argumentación
Generación Selección Selección de
de Argumentos de Argumentos Acciones

arg1 arg2 argn Acuerdo


Conflicto

Generación Selección
de Acciones - Argumentos de Acciones-Argumentos
Escenario de la negociación
 Escenario de la
Recursos: negociación (Parsons y
• Pintura (p1) Jennings, 1996):
• Destornillador (sd1)  Agentes deben ejecutar
• Tornillo (s1) tareas.
• Martillo (h1)  Recursos limitados.
Creencias:
• Martillo + Clavo + Silla + Pintura => Pintura colgada
Picty • Destornillador + Tornillo + Espejo => Espejo colgado
Objetivos:
• Colgar pintura Recursos:
• Silla rota (bc1)
Recursos:
Creencias:
• Espejo (m1)
• Adhesivo + Silla rota => Silla reparada
• Clavo (n1)
• Adhesivo (g1)
Objetivos:
Creencias: Chairy
• Reparar silla
• Martillo + Clavo + Espejo => Espejo colgado
Objetivos:
Mirry • Colgar espejo
• Guardar el adhesivo
Conflictos
 Conflicto entre Picty y Mirry: es el conflicto original
detallado en Parsons y Jennings (1996), Picty necesita el
clavo que posee Mirry, y Mirry necesita el martillo que
posee Picty.

 Conflicto entre Picty y Chairy: el primero necesita una silla


para cumplir su objetivo, y el segundo debe repararla.

 Conflicto entre Chairy y Mirry: Chairy necesita el adhesivo


para reparar la silla, y a su vez Mirry tiene como objetivo
conservarlo.
Picty
 Hechos propios:
 iam(picty).
 Objetivos:
 • isgoal(picty, pictureHanging(p1)).
 Creencias:
 believe(picty, imply([has(picty, hammer(h1)), has(picty, nail(n1)), has(picty, chair(bc1)), has(picty,
picture(p1))], do(picty, hangAPicture(picty, p1, h1, n1, bc1)))).
“Para poder realizar la acción ‘colgar pintura’ (hangAPicture(picty, p1, h1, n1, bc1)) es necesario contar con
h1 (martillo), n1 (clavo), bc1 (silla) y p1 (pintura).”

 believe(picty, imply(do(picty, hangAPicture(picty, p1, h1, n1, bc1)), pictureHanging(p1))).


“Al ejecutar la acción hangAPicture(picty, p1, h1, n1, bc1) la pintura p1 quedará
colgada”.

 believe(picty, imply([has(mirry, mirror(m1)), has(mirry, screwdriver(sd1)), has(mirry, screw(s1))], do(mirry,


hangAMirror(mirry, m1, sd1, s1)))).
“Para poder realizar la acción ‘colgar espejo’ (hangAMirror(mirry, m1, sd1, s1)) es necesario contar con m1
(espejo), sd1 (destornillador) y s1 (tornillo)”.

 believe(picty, imply(do(mirry, hangAMirror(mirry, m1, sd1, s1)), mirrorHanging(m1))).


“Al ejecutar la acción hangAMirror(mirry, m1, sd1, s1) el espejo m1 quedará colgado.”
Picty - Acciones
 action(hangAPicture(Agent, Picture, Hammer, Nail, Chair),
 [iam(Agent)],
 [cando(Agent, hangAPicture), has(Agent, picture(Picture)),
has(Agent, hammer(Hammer)), has(Agent, nail(Nail)), has(Agent,
chair(Chair))],
 [pictureHanging(Picture), not(has(Agent, nail(Nail)))]).

 action(giveResourceTo(AgentS, AgentD, Resource),


 [isagent(AgentD), isagent(AgentS), notEqual(AgentS, AgentD)],
 [has(AgentS, Resource), do(AgentS, giveResourceTo(AgentS,
AgentD, Resource))],
 [has(AgentD, Resource), not(has(AgentS, Resource))]).
Picty - Acciones
 action(fixAChair(Agent, BrokenChair, Glue),
 [isagent(Agent)],
 [cando(Agent, fixAChair), has(Agent,
brokenChair(BrokenChair)), has(Agent, glue(Glue)),
do(Agent, fixAChair(Agent, BrokenChair, Glue))],
 [has(Agent, chair(BrokenChair)), not(has(Agent, glue(Glue)))]).

 Acciones incondicionales.

 Acciones para la generación de argumentos.


Escenario de la negociación
Inicial
pArg1 , pArg2 , pHang, Has5 , Has6 , pFix

pArg1

Plan de argumentación 1
[pArg1 ]
createNIAppeal
[Arg1 ]
pArg2
Arg1
[Arg1 ]
pFix Has
acceptNIAppeal 6
[Do1 , B1 ]
B1

Plan de argumentación 2
Do1 Has5 [B1 , pArg2 ]
createReward
[Do1 , Has5 ] [Arg2 ]
giveResourceTo(mirry, picty, nail(n1)) Arg2
[Has1 ]
[Arg2 ]
acceptReward
pHang [Do2 ]

Do2
[Has6 , Do2 ]
giveResourceTo(mirry, chairy, glue(g1))
Has1 [Has2 ]

Has2
[pFix, Has2 ]
fixChairUnconditional(chairy, bc1, g1)

Planner
Acciones bajo el control
[Has3 ]
del agente (intend-to-do)
Acciones que NO puede
Has3
ejecutar (intend-that) [Has3 ]
giveResourceTo(chairy, picty, chair(bc1))
Planes de argumentación [Has4 ]

Has4
[Has1 , pHang, Has4 ]
hangAPicture(picty,p1,h1,n1,bc1)
[pictureHanging(p1)]

[pictureHanging(p1)]
final

Plan

Acciones
y
Hechos

FSMBehaviour
Escenario de la negociación

Re
Planning

Build Check
Ini Planning
Plan
Ejecutar
Goal
Final

FSMBehaviour
Plan general de Picty
Inicial
pArg1 , pArg2 , pHang, Has5 , Has6 , pFix

pArg1
Plan de argumentación 1

[pArg1 ]
createNIAppeal
[Arg1 ]
pArg2
Arg1
[Arg1 ]
pFix Has
acceptNIAppeal 6
[Do1 , B1 ]
B1

Plan de argumentación 2
Do1 Has5 [B1 , pArg2 ]
createReward
[Do1 , Has5 ] [Arg2 ]
giveResourceTo(mirry, picty, nail(n1)) Arg2
[Has1 ]
[Arg2 ]
acceptReward
pHang [Do2 ]

Do2
[Has6 , Do2 ]
giveResourceTo(mirry, chairy, glue(g1))
Has1 [Has2 ]

Has2
[pFix, Has2 ]

Acciones bajo el control fixChairUnconditional(chairy, bc1, g1)


[Has3 ]
del agente (intend-to-do)
Acciones que NO puede
Has3
ejecutar (intend-that) [Has3 ]
giveResourceTo(chairy, picty, chair(bc1))
Planes de argumentación Unconditional [Has4 ]

Has4
[Has1 , pHang, Has4 ]
hangAPicture(picty,p1,h1,n1,bc1)
[pictureHanging(p1)]

[pictureHanging(p1)]
final
Plan general de Picty
Inicial
pArg1 , pArg2 , pHang, Has5 , Has6 , pFix

pArg1
pArg1
Plan de argumentación 1

[pArg1 ]

Plan de argumentación 1
createNIAppeal
[Arg1 ]
pArg2
Arg1
[Arg1 ]
pFix Has [pArg1]
acceptNIAppeal 6
[Do1 , B1 ]
B1
createNIAppeal
[Arg1]

Plan de argumentación 2
Do1 Has5 [B1 , pArg2 ]

[Do1 , Has5 ]
giveResourceTo(mirry, picty, nail(n1))
createReward
[Arg2 ] Arg1
[Has1 ]
Arg2
[Arg2 ] [Arg1]
acceptReward
pHang [Do2 ] acceptNIAppeal
Do2 [Do1, B1]
[Has6 , Do2 ]
giveResourceTo(mirry, chairy, glue(g1))
Has1 [Has2 ]

Has2
Acciones bajo el control
[pFix, Has2 ]
fixChairUnconditional(chairy, bc1, g1) Do1
[Has3 ]
del agente (intend-to-do)
Acciones que NO puede
Has3 [Do1, Has5]
ejecutar (intend-that) [Has3 ]

Planes de argumentación
giveResourceTo(chairy, picty, chair(bc1))
Unconditional [Has4 ]
giveResourceTo(mirry, picty, nail(n1))
[Has1]
Has4
[Has1 , pHang, Has4 ]
hangAPicture(picty,p1,h1,n1,bc1)
[pictureHanging(p1)]

[pictureHanging(p1)]
final
Plan general de Picty
Inicial
pArg1 , pArg2 , pHang, Has5 , Has6 , pFix

pArg1
pArg2
Plan de argumentación 1

[pArg1 ]
createNIAppeal
pArg2

Plan de argumentación 2
[Arg1 ]

Arg1
[Arg1 ]
pFix Has [B1, pArg2]
acceptNIAppeal 6
[Do1 , B1 ]
B1
createReward
[Arg2]

Plan de argumentación 2
Do1 Has5 [B1 , pArg2 ]

[Do1 , Has5 ]
giveResourceTo(mirry, picty, nail(n1))
createReward
[Arg2 ] Arg2
[Has1 ]
Arg2
[Arg2 ] [Arg2]
acceptReward
pHang [Do2 ] acceptReward
Do2 [Do2]
[Has6 , Do2 ]

Has1
giveResourceTo(mirry, chairy, glue(g1))
[Has2 ]
Do2
Has2
[pFix, Has2 ]

Acciones bajo el control fixChairUnconditional(chairy, bc1, g1) [Has6, Do2]


[Has3 ]
del agente (intend-to-do)
Acciones que NO puede
Has3 giveResourceTo(mirry, chairy, glue(g1))
ejecutar (intend-that) [Has3 ] [Has2]
giveResourceTo(chairy, picty, chair(bc1))
Planes de argumentación Unconditional [Has4 ]

Has4
[Has1 , pHang, Has4 ]
hangAPicture(picty,p1,h1,n1,bc1)
[pictureHanging(p1)]

[pictureHanging(p1)]
final
Plan general de Picty
Inicial
pArg1 , pArg2 , pHang, Has5 , Has6 , pFix

pArg1
Plan de argumentación 1

[pArg1 ]
createNIAppeal
[Arg1 ]
pArg2
Arg1
[Arg1 ]
pFix Has
acceptNIAppeal 6
[Do1 , B1 ]
B1 [pFix, Has2]
fixChairUnconditional(chairy, bc1, g1)

Plan de argumentación 2
Do1 Has5 [B1 , pArg2 ]
createReward [Has3]
[Do1 , Has5 ] [Arg2 ]
giveResourceTo(mirry, picty, nail(n1))
[Has1 ]
Arg2
[Arg2 ]
has(chairy, chair(bc1))
acceptReward [Has3]
pHang [Do2 ]

Do2 giveResourceTo(chairy, picty, chair(bc1))


[Has6 , Do2 ]
Unconditional [Has4]
giveResourceTo(mirry, chairy, glue(g1))
Has1 [Has2 ]

Has2
[pFix, Has2 ]

Acciones bajo el control fixChairUnconditional(chairy, bc1, g1)


[Has3 ]
del agente (intend-to-do)
Acciones que NO puede
Has3
ejecutar (intend-that) [Has3 ]
giveResourceTo(chairy, picty, chair(bc1))
Planes de argumentación Unconditional [Has4 ]

Has4
[Has1 , pHang, Has4 ]
hangAPicture(picty,p1,h1,n1,bc1)
[pictureHanging(p1)]

[pictureHanging(p1)]
final
Escenario de la negociación
appeal(Ue, Ur, do(Ur,Action),
appeal(Ue, Ur, do(Ur,
Action), [pastpromise(Ur,
Ue, do(Ur, Action))])):-
iam(Ue), isagent(Ur),
Javalog pastpromise(Ur, Ue,
do(Ur, Action)).

REQUEST
REFUSE
PROPOSE (Argumento)
ACCEPT-PROPOSAL

FSMBehaviour
Taller de Sistemas
Multiagentes
Taller de sistemas multiagentes
Dr. Ariel Monteserin
amontese@exa.unicen.edu.ar
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina

También podría gustarte