JADE - Movilidad
Taller de sistemas multiagentes
Prof. Dr. Ariel Monteserin
[email protected]
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina
Movilidad desde RMA
19/09/2016
1
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
19/09/2016
2
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(
myAgent.send(req);
req,
new Action(getAMS(),
new QueryPlatformLocationsAction()));
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);
19/09/2016
3
Agentes e inteligencia
Taller de sistemas multiagentes
Prof. Dr. Ariel Monteserin
[email protected]
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina
Hasta ahora…
?
Beh1
Beh2
Beh3
Ambiente
19/09/2016
4
Aprendizaje y razonamiento
Reinforcement learning
KDD
Planning
Programación
evolutiva
Mucho más..
Razonamiento
argumentativo
Motores de
inferencia
Razonamiento
basado en reglas
Jess - Java Expert
System Shell
Taller de sistemas multiagentes
Prof. Dr. Ariel Monteserin
[email protected]
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina
19/09/2016
5
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.
19/09/2016
6
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
19/09/2016
7
Motor de inferencia
Motor de
inferencia
facts
Memoria
de trabajo
pure facts
shadow facts
(facts)
(assert <fact>+)
(retract <expression>+)
Clase Java
Ciclo de inferencia
Se buscan todas las posibles reglas aplicables, es decir, que son
compatibles con la memoria de trabajo. Algoritmo RETE (Algoritmo
de Redundancia Temporal)
Se selecciona una de las reglas según un orden de preferencia.
Se aplica la regla seleccionada y se actualiza la memoria.
1.
2.
3.
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))
19/09/2016
8
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))
Jess> (run)
<Fact-1>
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.
19/09/2016
9
De Jess a acciones
Jess.Userfunction
Permite definir funciones que serán invocadas desde
el código Jess.
Rete.addUserfunction(Userfunction)
(retract-string "(c1)")
(retract-string "(c2)"))
public class JessAddBehaviour implements Userfunction {
public Value call(ValueVector arg0, Context arg1) throws
myAgent.addBehaviour(new JessBehaviour());
return Funcall.TRUE;
}
public String getName() {
return "addBehaviour";
}
(defrule add-behaviour
(and(c1)(c2))=>
(addBehaviour)
JessException {
Ejemplo PELICULA
(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)
)
19/09/2016
10
Ejemplo PELICULA
ControlBehaviour
Responder
Jess
defrule important-day
UserFunction
JessActivateImportantD
ayBeh
InitiatorNegotiationBe
haviour
Ejemplo PELICULA
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 {
}
catch (JessException je) {je.printStackTrace();}
catch (FileNotFoundException je) {je.printStackTrace();}
}
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);
19/09/2016
11
Ejemplo PELICULA
@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 PELICULA
public class JessActivateImportantDayBeh implements Userfunction {
private List<String> items;
public JessActivateImportantDayBeh(List<String> items) {
this.items = items;
}
public Value call(ValueVector jessArgs, Context context)
String name = ((Value)jessArgs.get(1)).
myAgent.addBehaviour(new InitiatorNegotiationBehaviour(
return Funcall.TRUE;
}
public String getName() {
return "ActivateImportantDayBeh";
}
}
resolveValue(context).stringValue(context);
throws JessException {
new AID(name, AID.ISLOCALNAME), items));
19/09/2016
12
Jess - Java Expert
System Shell
Taller de sistemas multiagentes
Dr. Ariel Monteserin
[email protected]
ISISTAN –Fac. Cs. Exactas – UNICEN
Tandil, Argentina
19/09/2016
13
Comentarios de: JADE - Movilidad (0)
No hay comentarios