Vous êtes sur la page 1sur 13

La Plateforme MAGIQUE

E.ADAM

E. ADAM - LAMIH - UVHC


La Plateforme MAGIQUE
MAGIQUE (SMAC LIFL LILLE 1)
MultiAGent hirarchIQUE
Pour la conception de SMA hirarchiques
Propose une librairie de classes Java pour la ralisation dagents
Les agents sont des coquilles vides auquels il faut ajouter des
comptences
Les communications entre agents sont gres par MAGIQUE
(RMI)
Possibilit de communications entre plateformes MAGIQUE

E. ADAM - LAMIH - UVHC


La Plateforme MAGIQUE : Exemple simple 1/4

Soit 3 agents chef, ping et pong


Ping et pong sont relis au chef
Ping possde la comptence PingSkill
Pong possde la comptence PongSkill
chef

PingSkill Ping Pong PongSkill

E. ADAM - LAMIH - UVHC


La Plateforme MAGIQUE : Exemple simple 2/4

Une comptence regroupe un ensemble de mthodes et


de fonctions
import fr.lifl.magique.*;
import fr.lifl.magique.skill.*;

public class PingSkill extends MagiqueDefaultSkill


{
public PingSkill(Agent a){ super(a); }

public void ping()


{
System.out.println("ping");
// demande lexcution de la mthode pong
perform("pong");
}
} // PingSkill

E. ADAM - LAMIH - UVHC


La Plateforme MAGIQUE : Exemple simple 3/4
Cration des agents
import fr.lifl.magique.*;
import fr.lifl.magique.platform.*;

public class TestPingPong2 extends AbstractMagiqueMain


{
public void theRealMain(String args[])
{
// cration des agents par la plate-forme
Agent sup = createAgent("chef"); Agent ping = createAgent("agent Ping");
Agent pong = createAgent("agent Pong");
// raccordement la plateforme
ping.addSkill(new PingSkill(ping));
pong.addSkill(new PongSkill(pong));
// connexion des agents sup en tant que superviseur
ping.connectToBoss("chef"); pong.connectToBoss("chef");
// lancement du jeu
sup.perform("ping");
}
} // TestPingPong2 E. ADAM - LAMIH - UVHC
La Plateforme MAGIQUE : Exemple simple 4/4

Excution :
java fr.lifl.magique.Start TestPingPong2

.....................................
Magique : PlatformAgent created
..null
................ping
pong
ping
pong
ping
pong
ping
pong
ping
pong
ping
pong
ping
pong
ping

E. ADAM - LAMIH - UVHC


La Plateforme MAGIQUE : communications (1/3)

Si un agent ne connat une mthode demande, il transmet cette demande


au superviseur qui la transmet lagent sachant rpondre

sil ne connat aucun agent capable de rpondre, il transmet cette demande


son suprieur,

Si aucun agent n'est capable de rpondre la demande, la demande est


stocke par le superviseur (attention aux erreurs de syntaxes)

Possibilit d'appel nomms


ping.perform("agent Pong", "pong");

Possibilit de transmettre des paramtres :


Object [] o = {new Integer(1), new Integer(2)};
agentSomme.perform("calcule", o);

E. ADAM - LAMIH - UVHC


La Plateforme MAGIQUE : communications (2/3)

Autres types de communication :

Attente de rponse, cas bloquant (synchrone) :


askNow(String) : appel non nomm dune mthode sans paramtres
askNow(String,Object[]) : appel non nomm dune mthode avec
paramtres
askNow(String,String) : appel nomme dune mthode sans paramtres
askNow(String,String,Object[]) : appel nomm dune mthode avec
paramtres

Attente de rponse, cas non bloquant (asynchrone) :


ask

envoi dun message toute mon quipe (moi compris) :


broadcastToAll

envoi dun message toutes les feuilles de mon quipe :


broadcastToBasis E. ADAM - LAMIH - UVHC
La Plateforme MAGIQUE : communications (3/3)

Exemple de communication :

Attente de rponse en mode synchrone :

int cumul = 0;
cumul+= ((Integer) askNow("f","calcul", new Integer(15), new Integer(15000)) ).intValue();
cumul+= ((Integer) askNow("g","calcul", new Integer(20), new Integer(10000)) ).intValue();

Attente de rponse, cas non bloquant (asynchrone) :


Ncessit de crer des Questions (Request)

int cumul = 0;
Request rf = createQuestion ("calcul", new Integer(10), new Integer(10000));
Request rg = createQuestion ("calcul", new Integer(15),new Integer(15000));
ask ("f",rf);
ask ("g",rg);
While (!isAnswerReceived(rf) || !isAnswerReceived(rg))
{
Thread.yield();
}
cumul += ((Integer) returnValue (rf)).intValue();
cumul += ((Integer) returnValueE. (rg)).intValue();
ADAM - LAMIH - UVHC
La Plateforme MAGIQUE : quipe
// renvoie True si N est premier, False sinon, pour cela // tant que je nai pas trouve de diviseur
// il divise le calcul entre tous les agents de son quipe while (!answered && questions.size()!=0)
public Boolean prem(Integer n) {
{ // parcourir toutes les questions
int nb = n.intValue(); for (int i=0; i<questions.size() && !answered ;i++)
// pour mmoriser les requtes {
Vector questions = new Vector(); Request q = (Request) questions.elementAt(i);
int nbAg = ((Team) askNow("getMyTeam")).size(); // si q existe et quune rep vient darriver
int taille = (int) (Math.sqrt(nb)/nbAg)+1 ; if (q!=null && isAnswerReceived(q))
// boucle denvoi chaque agent de l'quipe {
int tranche = 3; Integer answer = ((Integer) returnValue(q));
Enumeration e=((Team) askNow("getMyTeam")).getMembers(); answered = !answer.equals(
while (e.hasMoreElements()) new Integer(-1));
{ questions.removeElementAt(i);
String agent = (String) e.nextElement(); }
Request r = createQuestion("cherche", }
new Integer(tranche), }
new Integer(tranche+taille-1),n); return (new Boolean (!answered));
ask(agent,r); }
tranche = tranche + taille;
// stocke les questions pour pouvoir les rcuprer
questions.addElement(r);
}
// boucle de lecture des rponses qui reviennent
boolean answered = false;

E. ADAM - LAMIH - UVHC


La Plateforme MAGIQUE : comptences
L'ajout de comptences est dynamique :
addSkill(String NomDeClasse) peut tre appele tout moment

De mme, et le retrait peut galement tre appel tout moment :

a.removeSkill("calcule(java.lang.Integer, java.lang.Integer )");

Supprime la comptence (et donc toutes les mthodes) contenant la mthode


calcule(Integer a, Integer b)

Un agent peut acqurir une comptence d'un autre agents physiquement


loign !!!
a.perform("ping@crabe", "learnSkill","PingSkill", a.getName(),
Boolean.TRUE);
a.perform("ping");
E. ADAM - LAMIH - UVHC
a.perform("learnSkill",new Object[]{"PongSkill","super@"+args[1], Boolean.TRUE});
La Plateforme MAGIQUE : dconnection
Les mthodes suivantes permettent un agent de se
dconnecter :

askForDisconnectionFrom : se dconnecter dun agent donn

askForDisconnectionFromMyBoss : se dconnecter de son superviseur

disconnectFromAll : se dconnecte de tous les agents

disconnectAndDie : se dconnecter de tous et mourir

E. ADAM - LAMIH - UVHC


La Plateforme MAGIQUE : distance
Possibilit
d'changes de messages distance
d'change de comptences
De cration distance d'agents !!!

E. ADAM - LAMIH - UVHC