Bonjour,
voici un article sur Les communications des agents JADE
http://djug.developpez.com/java/jade/communication/
vos remarques sont les bienvenues.
Version imprimable
Bonjour,
voici un article sur Les communications des agents JADE
http://djug.developpez.com/java/jade/communication/
vos remarques sont les bienvenues.
Bonjour,
j'ai essayer de faire marcher AgentA et AgentB, mais ça ne marche pas.. apparemment, AgentA se block et n'envoie jamais rien à AgentB...
Une idée ? :calim2:
je viens de retester l'exemple il fonctionne très bien.
comment tu lances tes agents ? quelle est la commande utilisé
dans mon cas j'ai utilisé les deux commandes suivantes (pour lancer chaque agent dans un nouveau Container):
Code:
1
2
3 java jade.Boot -container AgentA:AgentA java jade.Boot -container AgentB:AgentB
voici le résultat:
dans la fenêtre de l'agent AgentA
et dans la fenêtre de l'agent AgentB:Citation:
9 sept. 2009 20:19:54 jade.core.Runtime beginContainer
INFO: ----------------------------------
This is JADE 3.5 - revision 5988 of 2007/06/21 11:02:30
downloaded in Open Source, under LGPL restrictions,
at http://jade.tilab.com/
----------------------------------------
9 sept. 2009 20:19:54 jade.core.BaseService init
INFO: Service jade.core.management.AgentManagement initialized
9 sept. 2009 20:19:54 jade.core.BaseService init
INFO: Service jade.core.messaging.Messaging initialized
9 sept. 2009 20:19:54 jade.core.BaseService init
INFO: Service jade.core.mobility.AgentMobility initialized
9 sept. 2009 20:19:54 jade.core.BaseService init
INFO: Service jade.core.event.Notification initialized
9 sept. 2009 20:19:54 jade.core.messaging.MessagingService clearCachedSlice
INFO: Clearing cache
9 sept. 2009 20:19:54 jade.core.AgentContainerImpl joinPlatform
INFO: --------------------------------------
Agent container Container-3@workstation is ready.
--------------------------------------------
---------------------------------------
----------------agent A----------------
---------------------------------------
en attente de l agent B
envoi de la valeur 9
en attente de l agent B
envoi de la valeur 9
en attente de l agent B
envoi de la valeur 8
en attente de l agent B
envoi de la valeur 1
en attente de l agent B
envoi de la valeur 7
en attente de l agent B
envoi de la valeur 7
en attente de l agent B
envoi de la valeur 9
en attente de l agent B
envoi de la valeur 4
en attente de l agent B
envoi de la valeur 3
arret de l'agent
Citation:
9 sept. 2009 20:19:54 jade.core.Runtime beginContainer
INFO: ----------------------------------
This is JADE 3.5 - revision 5988 of 2007/06/21 11:02:30
downloaded in Open Source, under LGPL restrictions,
at http://jade.tilab.com/
----------------------------------------
9 sept. 2009 20:19:54 jade.core.BaseService init
INFO: Service jade.core.management.AgentManagement initialized
9 sept. 2009 20:19:54 jade.core.BaseService init
INFO: Service jade.core.messaging.Messaging initialized
9 sept. 2009 20:19:54 jade.core.BaseService init
INFO: Service jade.core.mobility.AgentMobility initialized
9 sept. 2009 20:19:54 jade.core.BaseService init
INFO: Service jade.core.event.Notification initialized
9 sept. 2009 20:19:54 jade.core.messaging.MessagingService clearCachedSlice
INFO: Clearing cache
9 sept. 2009 20:19:54 jade.core.AgentContainerImpl joinPlatform
INFO: --------------------------------------
Agent container Container-3@workstation is ready.
--------------------------------------------
---------------------------------------
----------------agent A----------------
---------------------------------------
en attente de l agent B
envoi de la valeur 9
en attente de l agent B
envoi de la valeur 9
en attente de l agent B
envoi de la valeur 8
en attente de l agent B
envoi de la valeur 1
en attente de l agent B
envoi de la valeur 7
en attente de l agent B
envoi de la valeur 7
en attente de l agent B
envoi de la valeur 9
en attente de l agent B
envoi de la valeur 4
en attente de l agent B
envoi de la valeur 3
arret de l'agent
lances les agents avec ces deux commandes et dis moi ce que tu trouve comme résultats
Bonjour,
j'utilise ce que tu donne dans le première article :
Ducoup je lance chaque agent a la suite, en remplacent les paramètres dans les configurations..Citation:
Et dans l'onglet arguments : tapez le code suivant :
-gui jade.Boot NomDuL'agent:LeNomDuPackage.LeNomDeLaClasse
Dans notre exemple on tape le code suivant :
-gui jade.boot smith:firstAgent.HelloWorldAgent
puis cliquez sur apply pour ne pas refaire cette configuration plusieurs fois dans le même projet
-gui jade.boot AgentA:firstAgent.AgentA
puis
-gui jade.boot AgentB:firstAgent.AgentB
pour le deuxième.
Mais ça ne marche pas..
quand on lance un agent à partir de Eclipse de la manière mentionnée dans le 1er tuto , alors la plateforme JADE sera lancer avant le lancement de l'agent,
dans notre cas (lancement de l'agent AgentA) on va voir comme résultat:
puis l'agent s'arrête et attend l'agent AgentBCitation:
---------------------------------------
----------------agent A----------------
---------------------------------------
en attente de l agent B
alors si on refait la même procédure pour lancer le 2em agent alors un message d'erreur apparait:
parce que on ne peut pas lancer deux plateforme JADE sur la même machine.Citation:
GRAVE: Some problem occurred while joining agent platform.
jade.core.ProfileException: Can't get a proxy to the Platform Manager [nested jade.core.IMTPException: The Service Manager was already bound in the RMI Registry [nested java.rmi.AlreadyBoundException: ServiceManager]]
at jade.core.ProfileImpl.createPlatformManager(Unknown Source)
at jade.core.ProfileImpl.getPlatformManager(Unknown Source)
at jade.core.ProfileImpl.getServiceManager(Unknown Source)
at jade.core.AgentContainerImpl.init(Unknown Source)
at jade.core.AgentContainerImpl.joinPlatform(Unknown Source)
at jade.core.Runtime.createMainContainer(Unknown Source)
at jade.Boot.<init>(Unknown Source)
at jade.Boot.main(Unknown Source)
Nested Exception:
jade.core.IMTPException: The Service Manager was already bound in the RMI Registry [nested java.rmi.AlreadyBoundException: ServiceManager]
at jade.imtp.rmi.RMIIMTPManager.exportPlatformManager(Unknown Source)
at jade.core.ProfileImpl.createPlatformManager(Unknown Source)
at jade.core.ProfileImpl.getPlatformManager(Unknown Source)
at jade.core.ProfileImpl.getServiceManager(Unknown Source)
at jade.core.AgentContainerImpl.init(Unknown Source)
at jade.core.AgentContainerImpl.joinPlatform(Unknown Source)
at jade.core.Runtime.createMainContainer(Unknown Source)
at jade.Boot.<init>(Unknown Source)
at jade.Boot.main(Unknown Source)
Nested Exception:
java.rmi.AlreadyBoundException: ServiceManager
at sun.rmi.registry.RegistryImpl.bind(Unknown Source)
at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
at java.rmi.Naming.bind(Unknown Source)
at jade.imtp.rmi.RMIIMTPManager.exportPlatformManager(Unknown Source)
at jade.core.ProfileImpl.createPlatformManager(Unknown Source)
at jade.core.ProfileImpl.getPlatformManager(Unknown Source)
at jade.core.ProfileImpl.getServiceManager(Unknown Source)
at jade.core.AgentContainerImpl.init(Unknown Source)
at jade.core.AgentContainerImpl.joinPlatform(Unknown Source)
at jade.core.Runtime.createMainContainer(Unknown Source)
at jade.Boot.<init>(Unknown Source)
at jade.Boot.main(Unknown Source)
9 sept. 2009 23:10:50 jade.core.Runtime$1 run
INFO: JADE is closing down now.
alors pour lancer le 2e agent nous avons les deux choix suivants:
1. lancer l'agent AgentB à partir de l'interface graphique de la plateforme:
clique droit sur Main-Container >Start new agent > introduire "AgentB" (sans les " )dans la zone du nom de l'agent et de sa classe.
dans ce cas la, il faut que la classe de l'agent soit dans un dossier dont le chemin fait partie de la variable d'environnement classpath
2. lancer l'agent AgentB par la ligne de commande de la manière suivante:
Code:java jade.Boot -container AgentB:AgentB
Ok, merci beaucoup ! :ccool:
Les articles sont très bien, j'espère qu'il y en aura d'autre.
Sinon pour le dernière article, avec les deux agent, pour les lancer proprement dans éclipse on peut faire un agent "Monde" ou AgentZ par exemple et lancer les deux agent AgentA et AgentB par cette agent :
Qu'en pense tu ?Code:
1
2
3
4
5 AgentA = container.createNewAgent("AgentA", "MyfirstAgent.AgentA", null); AgentA.start(); AgentB = container.createNewAgent("AgentB", "MyfirstAgent.AgentB", null); AgentB.start();
voici le code d'un agent Lanceur.java" qui va lancer les deux premiers agents l'un après l'autre:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 import jade.core.Agent; import jade.core.Runtime; import jade.core.Profile; import jade.core.ProfileImpl; import jade.wrapper.*; public class AgLAg extends Agent { protected void setup(){ System.out.println("je m appel "+ getLocalName()); Runtime rt = Runtime.instance(); Profile p = new ProfileImpl(); ContainerController cc = rt.createAgentContainer(p); AgentController AgentFils; AgentController AgentFils2; System.out.println("l'agent "+ getLocalName()+ " va lancer les deux agents AgentA et AgentB "); try { AgentFils = cc.createNewAgent("AgentA","AgentA",null); AgentFils.start(); AgentFils2 = cc.createNewAgent("AgnetB","AgentB",null); AgentFils2.start(); } catch (StaleProxyException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Parfait :ccool:
Merci !
bonjour;
alors , j"essaye de faire integré une inerface graphique avec un agent,
mé je ne sé pa comment attacher:cry: mon interface avec cette agent; j'attend votre aide les amis , pliiiiiiiiiiiiiz
tu trouvera un exemple sur l'utilisation d'un GUI avec JADE dans la section exemple du JADE
Citation:
JADE-examples-3.x\jade\src\examples\bookTrading
Bonjour,
je suis nouveau avec la plateforme Jade j'essaie d'exécuter les 2 agents (A et B) en utilisant ton lanceur mais je n'arrive pas à le faire ça m'affiche des erreurs. Svp pouvez-vous m'expliquer comment on l'exécute?
voici ce qui affiché:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 5 févr. 2010 20:48:32 jade.core.Runtime beginContainer INFO: ---------------------------------- This is JADE 3.7 - revision 6154 of 2009/07/01 17:34:15 downloaded in Open Source, under LGPL restrictions, at http://jade.tilab.com/ ---------------------------------------- 5 févr. 2010 20:48:34 jade.core.AgentContainerImpl joinPlatform GRAVE: Some problem occurred while joining agent platform. jade.core.ProfileException: Can't get a proxy to the Platform Manager [nested jade.core.IMTPException: The Service Manager was already bound in the RMI Registry [nested java.rmi.AlreadyBoundException: ServiceManager]] at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:574) at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487) at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501) at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:342) at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:478) at jade.core.Runtime.createMainContainer(Runtime.java:148) at jade.Boot.<init>(Boot.java:130) at jade.Boot.main(Boot.java:70) Nested Exception: jade.core.IMTPException: The Service Manager was already bound in the RMI Registry [nested java.rmi.AlreadyBoundException: ServiceManager] at jade.imtp.rmi.RMIIMTPManager.exportPlatformManager(RMIIMTPManager.java:276) at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:563) at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487) at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501) at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:342) at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:478) at jade.core.Runtime.createMainContainer(Runtime.java:148) at jade.Boot.<init>(Boot.java:130) at jade.Boot.main(Boot.java:70) Nested Exception: java.rmi.AlreadyBoundException: ServiceManager at sun.rmi.registry.RegistryImpl.bind(Unknown Source) at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source) at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source) at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source) at sun.rmi.transport.Transport$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Unknown Source) at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source) at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source) at sun.rmi.server.UnicastRef.invoke(Unknown Source) at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source) at java.rmi.Naming.bind(Unknown Source) at jade.imtp.rmi.RMIIMTPManager.exportPlatformManager(RMIIMTPManager.java:224) at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:563) at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487) at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501) at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:342) at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:478) at jade.core.Runtime.createMainContainer(Runtime.java:148) at jade.Boot.<init>(Boot.java:130) at jade.Boot.main(Boot.java:70) 5 févr. 2010 20:48:34 jade.core.Runtime$1 run INFO: JADE is closing down now.
peux-tu indiquer comment tu lances chaque agents (l'ordre d'exécution, les commandes utilisées)?
Bonsoir tous le monde,
je suis un débutant avec les agents mobile, j'ai essayer ce tutoriel (http://djug.developpez.com/java/jade/creation-agent/) qui explique comment crée votre premier agent mobile.
j'ai fais tous ce qu'il dit mais il m'affiche pas le bon résultat, voilà ce qu'il m'affiche :
au lieu deCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 10 févr. 2010 19:38:46 jade.core.Runtime beginContainer INFO: ---------------------------------- This is JADE 3.7 - revision 6154 of 2009/07/01 17:34:15 downloaded in Open Source, under LGPL restrictions, at http://jade.tilab.com/ ---------------------------------------- 10 févr. 2010 19:38:47 jade.core.AgentContainerImpl joinPlatform GRAVE: Some problem occurred while joining agent platform. jade.core.ProfileException: Can't get a proxy to the Platform Manager [nested jade.core.IMTPException: Communication failure while starting JADE Runtime System. Check if the RMIRegistry CLASSPATH includes the RMI Stub classes of JADE. [nested java.rmi.server.ExportException: Port already in use: 1099; nested exception is: java.net.BindException: Address already in use: JVM_Bind]] at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:574) at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487) at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501) at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:342) at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:478) at jade.core.Runtime.createMainContainer(Runtime.java:148) at jade.Boot.<init>(Boot.java:130) at jade.Boot.main(Boot.java:70) Nested Exception: jade.core.IMTPException: Communication failure while starting JADE Runtime System. Check if the RMIRegistry CLASSPATH includes the RMI Stub classes of JADE. [nested java.rmi.server.ExportException: Port already in use: 1099; nested exception is: java.net.BindException: Address already in use: JVM_Bind] at jade.imtp.rmi.RMIIMTPManager.exportPlatformManager(RMIIMTPManager.java:273) at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:563) at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487) at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501) at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:342) at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:478) at jade.core.Runtime.createMainContainer(Runtime.java:148) at jade.Boot.<init>(Boot.java:130) at jade.Boot.main(Boot.java:70) Nested Exception: java.rmi.server.ExportException: Port already in use: 1099; nested exception is: java.net.BindException: Address already in use: JVM_Bind at sun.rmi.transport.tcp.TCPTransport.listen(Unknown Source) at sun.rmi.transport.tcp.TCPTransport.exportObject(Unknown Source) at sun.rmi.transport.tcp.TCPEndpoint.exportObject(Unknown Source) at sun.rmi.transport.LiveRef.exportObject(Unknown Source) at sun.rmi.server.UnicastServerRef.exportObject(Unknown Source) at sun.rmi.registry.RegistryImpl.setup(Unknown Source) at sun.rmi.registry.RegistryImpl.<init>(Unknown Source) at java.rmi.registry.LocateRegistry.createRegistry(Unknown Source) at jade.imtp.rmi.RMIIMTPManager.getRmiRegistry(RMIIMTPManager.java:209) at jade.imtp.rmi.RMIIMTPManager.exportPlatformManager(RMIIMTPManager.java:223) at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:563) at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487) at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501) at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:342) at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:478) at jade.core.Runtime.createMainContainer(Runtime.java:148) at jade.Boot.<init>(Boot.java:130) at jade.Boot.main(Boot.java:70) Caused by: java.net.BindException: Address already in use: JVM_Bind at java.net.PlainSocketImpl.socketBind(Native Method) at java.net.PlainSocketImpl.bind(Unknown Source) at java.net.ServerSocket.bind(Unknown Source) at java.net.ServerSocket.<init>(Unknown Source) at java.net.ServerSocket.<init>(Unknown Source) at sun.rmi.transport.proxy.RMIDirectSocketFactory.createServerSocket(Unknown Source) at sun.rmi.transport.proxy.RMIMasterSocketFactory.createServerSocket(Unknown Source) at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(Unknown Source) ... 18 more 10 févr. 2010 19:38:47 jade.core.Runtime$1 run INFO: JADE is closing down now.
et voila mon code :Code:
1
2
3
4
5
6
7
8
9
10
11
12 -----blablaba ----blablaba -----blablaba sun.rmi.transport.proxy.RMIMasterSocketFactory.createServerSocket(Unknown Source) at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(Unknown Source) ... 18 more 10 févr. 2010 19:38:47 jade.core.Runtime$1 run INFO:----------------------------- Agent container Main-container@djug is realy ----------------------------------- Hello word my name is smith
http://img684.imageshack.us/img684/416/sanstitreyqh.pngCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package firstAgent; import jade.core.Agent; /** This example shows a minimal agent that just prints "Hello World!" and then terminates. @author Giovanni Caire - TILAB */ public class HelloWorldAgent extends Agent { protected void setup() { System.out.println("Hello World! My name is "+getLocalName()); // Make this agent terminate doDelete(); } }
Je peux savoir Pourquoi ?
Merci d'avance
c'est Bon sa marché pour le premier tuto, le problème étais dans éclipse !
maintenant j'ai essayé le programme avec 2 agents(AgentA et AgentB) et il ne marche pas :(
j'ai ajouté la class AgLAg.java qui ce charge de lancer les deux class: AgentA et AgentB
il m'affiche dans la console:
PS:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 11 févr. 2010 13:14:14 jade.core.Runtime beginContainer INFO: ---------------------------------- This is JADE 3.7 - revision 6154 of 2009/07/01 17:34:15 downloaded in Open Source, under LGPL restrictions, at http://jade.tilab.com/ ---------------------------------------- 11 févr. 2010 13:14:16 jade.core.BaseService init INFO: Service jade.core.management.AgentManagement initialized 11 févr. 2010 13:14:16 jade.core.BaseService init INFO: Service jade.core.messaging.Messaging initialized 11 févr. 2010 13:14:16 jade.core.BaseService init INFO: Service jade.core.mobility.AgentMobility initialized 11 févr. 2010 13:14:16 jade.core.BaseService init INFO: Service jade.core.event.Notification initialized 11 févr. 2010 13:14:16 jade.core.messaging.MessagingService clearCachedSlice INFO: Clearing cache11 févr. 2010 13:14:16 jade.mtp.http.HTTPServer <init> INFO: HTTP-MTP Using XML parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser 11 févr. 2010 13:14:16 jade.core.messaging.MessagingService boot INFO: MTP addresses: <a href="http://windows-89387e3:7778/acc" target="_blank">http://windows-89387e3:7778/acc</a> 11 févr. 2010 13:14:16 jade.core.AgentContainerImpl joinPlatform INFO: -------------------------------------- Agent container Main-Container@windows-89387e3 is ready. --------------------------------------------
quand je lance l'agentA seulement , il m'affiche:
alors que normalement il m'affiche :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 11 févr. 2010 13:21:36 jade.core.Runtime beginContainer INFO: ---------------------------------- This is JADE 3.7 - revision 6154 of 2009/07/01 17:34:15 downloaded in Open Source, under LGPL restrictions, at http://jade.tilab.com/ ---------------------------------------- 11 févr. 2010 13:21:37 jade.core.BaseService init INFO: Service jade.core.management.AgentManagement initialized 11 févr. 2010 13:21:37 jade.core.BaseService init INFO: Service jade.core.messaging.Messaging initialized 11 févr. 2010 13:21:37 jade.core.BaseService init INFO: Service jade.core.mobility.AgentMobility initialized 11 févr. 2010 13:21:37 jade.core.BaseService init INFO: Service jade.core.event.Notification initialized 11 févr. 2010 13:21:37 jade.core.messaging.MessagingService clearCachedSlice INFO: Clearing cache 11 févr. 2010 13:21:38 jade.mtp.http.HTTPServer <init> INFO: HTTP-MTP Using XML parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser 11 févr. 2010 13:21:38 jade.core.messaging.MessagingService boot INFO: MTP addresses: http://windows-89387e3:7778/acc 11 févr. 2010 13:21:38 jade.core.AgentContainerImpl joinPlatform INFO: -------------------------------------- Agent container Main-Container@windows-89387e3 is ready. --------------------------------------------
merciCode:
1
2
3
4 --------------------------------------- ----------------agent A---------------- --------------------------------------- en attente de l agent B
comment tu lances les agents? (quelles sont les commandes utilisées)?
c'est Bon Djug j'ai trouvé mon erreur , il faut juste préciser pour les membres que quand vous ajoutez la class AgLAgqui permet de lancer AgentA et AgentB il faut lui attribuer un nom comme dans le premier tuto, contrairement a AgentA et AgentB.
merci Djug ;)
Bonjour,
Dans le tuto concernant les Behaviours, j'ai vu une manière bizarre de créer et initialiser un behaviour pour le passer en argument à addBehaviour(...) :
Pouvez vous m'expliquer celà ? Peut on faire autrement ?Code:
1
2
3
4
5
6 addBehaviour(new TickerBehaviour(this, 2000) { protected void onTick() { System.out.println("Il reste "+(nombreDeSecondes-getTickCount())+" seconds "); } });
Pour un autre bout de code qui est le suivant :
J'ai pue le remplacer par ce qui suit, pour bien le comprendre (mais pour le code concernant les behaviours planifiés, je ne vois pas vraiment) :Code:
1
2
3
4
5
6 addBehaviour(new OneShotBehaviour(this){ public void action(){ System.out.println("Hola blabla"); } });
MerciCode:
1
2
3
4
5
6
7
8
9
10
11 <...> protected void setup() { addBehaviour(new MaClass()); } private class MaClass extends OneShotBehaviour { public void action(){ System.out.println("Hola blabla"); } } <...>
c'est la manière la plus efficace pour ajouter un behaviour.Citation:
Bonjour,
Dans le tuto concernant les Behaviours, j'ai vu une manière bizarre de créer et initialiser un behaviour pour le passer en argument à addBehaviour(...) :
tu peux aussi faire:
création d'une variable en plusCode:
1
2
3
4
5
6
7 behaviour monBeh =new TickerBehaviour(this, 2000) { protected void onTick() { System.out.println("Il reste "+(nombreDeSecondes-getTickCount())+" seconds "); } } addBehaviour(monBeh );
et j'ai pas bien compris la 2em question (si tu peux la poser d'une autre manière)
Ma deuxième question étais:
comment écrire les Behaviours planifiés de façon a déclarer le Behaviour dans la méthode Setup() mais ses méthodes ( onTick ou bien onWake ) en dehors de Setup() ?
comme les Behaviours simple j'ai pue faire :
mais puisque tu dit que l'autre maniére c'est la plus efficace alors on fait avec .Code:
1
2
3
4
5
6
7
8
9
10 <...> protected void setup() { addBehaviour(new MaClass()); } private class MaClass extends OneShotBehaviour { public void action(){ System.out.println("Hola blabla"); } } <...>
maintenant est ce que je peu savoir quel est l'ordre d'exécution des Behaviours ? quand je lance un programme qui contient un OneShotBehaviour , CyclicBehaviour puis Genéric Behaviour selon cet ordre , il commence par l'éxécution de OneShotBehaviour ensuite CyclicBehaviour ensuite Genéric Behaviour ensuite CyclicBehaviour ensuite Genéric Behaviour.... alors que je m'attendais a l'éxécution de OneShotBehaviour puis CyclicBehaviour( comme une boucle infini puique done() return false ) et l'éxécution de Genéric Behaviour n'aura jamais lieu !!!
pour déclarer un behaviour en dehors de la méthode setup() on peux envisager la méthode suivante (utiliser quand le corps du behaviour est de grande taille et c'est un behaviour quand utilise plusieurs fois):
créer une Inner class (une classe écrite dans le meme fichier que la classe de l'agent en question). on l'appel monBehaviour:
ajouter le behaviour de la manière suivante:
pour définir l'ordre d'exécution, il faut utiliser les FSMBehaviour (une sorte de machine d'états finis)Code:addBehaviour(new monBehaviour());
PS: il est préférable de poser les questions sur les Behaviour ici
Bonjour tous le monde,
je veux savoir s'il faut définir un ordre d'exécution entre 2 containers pour qu'un agentA de conteneur 1 peut envoyé des messages à l'agentB du conteneur2 ?
un exemple pour bien comprendre:
AgentA:
AgentB:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <........> public class Agent1 extends Agent { protected void setup() { System.out.println("Mon nom est: "+getLocalName()); addBehaviour(new OneShotBehaviour(this){ public void action() { ACLMessage msg=new ACLMessage(ACLMessage.INFORM); msg.addReceiver(new AID("Agent2",AID.ISLOCALNAME)); msg.setContent("salut"); send(msg); } }); <........> //doDelete(); } }
<........>
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public class Agent2 extends Agent { protected void setup() { System.out.println("Mon nom 2 est:"+getLocalName()); addBehaviour(new behaviour1()); <........> //doDelete(); } public class behaviour1 extends OneShotBehaviour{ public void action() { //ACLMessage msg = new ACLMessage(ACLMessage.INFORM); ACLMessage messageRecu = receive(); if(!(messageRecu.getContent().equalsIgnoreCase("salut"))) block(); System.out.println(messageRecu.getContent()); } }
ou bien je dois définir un ordre d'exécution ( FSMBEhaviours ) entre les deux conteneurs ? (Comme l'exemple de Djug dans le tuto des ACLMessage)Code:
1
2 java jade.Boot -container Agent1:Agent1 java jade.Boot -container Agent2:Agent2
oui bien sure , pour définir un ordre il faut bien utiliser un FSM behaviour.
il faut se mettre dans la tète que la programmation des agents est différentes à la programmation classique, les agents sont en générale réactifs, c-a-d il agissent selon leurs environnements extérieurs. on d'autre terme, chaque agent ne va pas exécuter son code de la ligne 0 à la ligne N-1 d'une manière séquentiel, mais il "exécute le bout de cout qui correspond à une réaction dans son environnement extérieure
Bonjour tous le monde,
j'ai essayé de faire un programme qui permet de ce déplacer(doMove) d'un conteneur a un autre( dans la même platform ), il m'affiche une erreur :
GRAVE: Destination Agent1 does not exist or does not support mobility
voici le code source:
Ps: j'ai deux conteneur , agent1 et agent2Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 import jade.core.AID; import jade.core.Agent; import jade.core.behaviours.*; import jade.core.ContainerID; public class Agent2 extends Agent{ public void setup(){ addBehaviour(new B()); } private class B extends SimpleBehaviour{ private boolean _done; private int step=0; String name1="Agent1"; public void action(){ switch(step){ case 0: System.out.println("Hello"); System.out.println("\n\nMoving to Agent1"); // ContainerID dest1=new ContainerID("Agent1",null); ContainerID dest1=new ContainerID(); dest1.setName(name1); myAgent.doMove(dest1); step++; break; case 1: _done=true; System.out.println("The agent has terminated its itinirary"); }//end switch }//end action public boolean done() { return _done; } } // end setup } // end MobileAgent
ou est le probléme ?
voila comment on fait migrer un agent d'un Container à un autre:
Code:
1
2
3
4
5
6
7 // on déclare la variable qui va contenir le nom du Container String containerName = "Container-1"; ContainerID destination = new ContainerID(); // on déclare la variable qui represente la destination destination.setName(containerName); // et on fait la migration myAgent.doMove(destination);
mais est ce que tu as déja créer le container avec de faire la migration,
ce code suppose que le container existe
on peux créer un Container via la commande:
Code:java jade.Boot -container
j'aimerai savoir comment je peu être sure que l'agentA a été déplacer avec sucée ? est ce que je peu faire un teste dans le conteneur ou l'agentA a été déplacer?
un test sur le nom du container tu permettra de savoir si ton agent est sur le bon Container ou nom
Voici mon code:
et voici la commande pour que l'agent ce déplace au Conteneur-1:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 import jade.core.AID; import jade.core.Agent; import jade.core.behaviours.*; import jade.core.ContainerID; public class Agent1 extends Agent{ public void setup(){ addBehaviour(new B()); } private class B extends SimpleBehaviour{ private boolean _done; private int step=0; public void action(){ switch(step){ case 0: System.out.println("Hello"); System.out.println("\n\nMoving ..."); // on déclare la variable qui va contenir le nom du Container String containerName = "Container-1"; ContainerID destination = new ContainerID(); // on déclare la variable qui represente la destination destination.setName(containerName); // et on fait la migration myAgent.doMove(destination); step++; break; case 1: _done=true; System.out.println("The agent has terminated its itinirary"); }//end switch }//end action public boolean done() { return _done; } } // end setup } // end MobileAgent
-j'aimerai bien que tu m'expliques pourquoi sa ne marche pas ? peu tu m'expliquer qu'est ce que je dois faire ?Code:
1
2
3-gui jade.Boot Agent1:Agent1 java jade.Boot -container Container-1:Agent2
-qu'est ce que tu veux dire par :
Merci Djug
je viens de testé ton code, il fonctionne bien:
je crois que tu n'a pas encore compris la notion des Container et comment les agents s'exécutent
voici comment exécuter ton exemple:
compiler le code de l'agent, tu va récupérer le résultat de la compilation (les fichiers Agent1.class et Agent1$B.class)
copier ces fichier vers un dossier dont le chemin apartien à la varible classpath du systeme : par exemple tu va créer un dossier ayant comme nom C:\AgentLand et tu va ajouter ce chemin à la variable classpath du systeme (clique droit sur le poste de travaille >propriétés >avancé> variable d'environnement > double clique sur classpath puis tu rajoutes à la fin du contenu de la variable ;C:\AgentLand (remarque bien le point virgule avant le chemin du dossier)
lancer la plateforme jade via la commande:
lancer un nouveau container via la commande (il sera nommé automatiquement container-1 le prochain container sera nommé Container-2 ...)Code:java jade.Boot -gui
lancer l'agent agent1 comme suit:Code:java jade.Boot -container
clique droit sur Main-container > Start new Agent
taper agent1 dans les champ agent name et agent class
l'agent se lancera puis se se placera vers le container container-1 puis se terminera (tous va se passer rapidement)
tu trouvera la trace de son déplacement sur le fenêtre console (fenêtre dos)
Merci Djug c'est bon il marche.
j'ai essayer un autre programme qui permet a un agent de ce déplacer et de revenir au conteneur principal et voici le code:
pourquoi il marche pas ?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 import jade.core.AID; import jade.core.Agent; import jade.core.behaviours.*; import jade.core.ContainerID; public class Agent1 extends Agent{ public void setup(){ addBehaviour(new B()); } private class B extends SimpleBehaviour{ private boolean _done; private int step=0; public void action(){ switch(step){ case 0: String containerName = "Container-1"; ContainerID destination = new ContainerID(); destination.setName(containerName); myAgent.doMove(destination); doWait(5000); System.out.println("je me suis déplacer !!!"); step++; break; case 1: String containerName2 = "Main-Container"; ContainerID destination2 = new ContainerID(); destination2.setName(containerName2); myAgent.doMove(destination2); doWait(5000); System.out.println("je suis revenu !!!"); step++; break; case 2: _done=true; System.out.println("The agent has terminated its itinirary"); }//end switch }//end action public boolean done() { return _done; } } // end setup } // end MobileAgent
dans ce genre de situation (la mobilité) il ne faut jamais utiliser le "case of", mais il faut utiliser les FSMBehaviour (je crois que je t'ai déjà parler de ça quelque part ? n'est ce pas )
un subBehaviour pour l'aller, et un autre pour le retour (et probablement tu aura besoin d'autre état/subBehaviour entre ces deux la)
en plus, on ne place jamais des instructions juste après la méthode doMove() (il faut créer un nouveau SubBehaviour qui s'exécutera juste le subBehaviour en cours et qui va contenir ces instructions )
bon courage
dans le cas ou j'ai un automate :
http://img130.imageshack.us/img130/1...nstitreerv.png
est ce qu'il n'y a pas de risque pour le chemin a prendre dans l'etat A ?
sinon qu'est ce que je dois faire dans tel cas ?
de quelle risque tu parles?
peux tu l'expliquer un peu plus ?
je voulais dire quand je lance l'exécution , sachant que l'état initial c'est A , est ce que par défaut il vas directement a l'état B (par la transition par défaut) ou bien il vas confondre entre la transition vert B et D ?
la transaction par défaut est prise dans le cas ou on ne spécifié pas une valeur.
on tous cas tu peux lancer l'exécution de l'agent pour voir comment il va se comporter
oui je sais tu l'as préciser dans ton Tuto :), sauf que la j'ai fait un code et je ne trouve pas l'erreur alors je me suis poser la question !
pour l'automate que je t'es montré , j'ai fait un Agent et il commence toujours ( d'aprés mes remarques ) par la transition par défaut ;)
juste une petite remarque,
comme c'est le cas avec ton automate, quand en utilise des automates ayant des boucles (passer par le meme état plusieurs fois, alors il faut les réinitialisé)
Citation:
String[] toBeReset : l'ensemble d'état pour lesquels on doit faire un reset() avant de les ré-exécuter parcequ'on peut pas re-éxecuter un Behaviour une autre fois avant de lui faire un reset().
malgré sa j'ai pas trouvé pourquoi sa ne marche pas , pourtant avec seulement un déplacement sa marche mais avec 2 déplacements sa ne marche pas.
Voici le code :
et voici son automate :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92 import jade.core.Agent; import jade.core.behaviours.OneShotBehaviour; import jade.core.behaviours.FSMBehaviour; import jade.core.AID; import jade.core.ContainerID; import jade.core. PlatformID; public class Mimish extends Agent { protected void setup(){ FSMBehaviour fsm = new FSMBehaviour(this) { public int onEnd() { System.out.println("FSM behaviour terminé"); myAgent.doDelete(); return super.onEnd(); } }; fsm.registerFirstState (new local(),"A"); fsm.registerState(new deplacer1(),"B"); fsm.registerState(new deplacer2(),"C"); fsm.registerLastState(new retour(),"D"); fsm.registerDefaultTransition("A","B",tab); fsm.registerTransition("B","B",1); fsm.registerTransition("B","C",0); fsm.registerTransition("C","C",1); fsm.registerTransition("C","A",0); fsm.registerTransition("A","D",0); //fsm.registerTransition("A","A",1); addBehaviour(fsm); } //Inner Class private class local extends OneShotBehaviour { public void action() { System.out.println("je suis dans le Conteneur principal ..."); String containerName = "Container-1"; ContainerID destination = new ContainerID(); // on déclare la variable qui represente la destination destination.setName(containerName); System.out.println("je vais aller au conteneur1 ..."); // et on fait la migration myAgent.doMove(destination); } } private class deplacer1 extends OneShotBehaviour { public void action() { System.out.println("je suis dans le conteneur1 ..."); String containerName2 = "Container-2"; ContainerID destination2 = new ContainerID(); // on déclare la variable qui represente la destination destination2.setName(containerName2); System.out.println("je vais aller au conteneur2 ..."); // et on fait la migration myAgent.doMove(destination2); } } private class deplacer2 extends OneShotBehaviour { public void action() { System.out.println("je suis dans le conteneur2 ..."); String containerName3 = "Main-Container"; ContainerID destination3 = new ContainerID(); // on déclare la variable qui represente la destination destination3.setName(containerName3); System.out.println("je vais retourner ..."); // et on fait la migration myAgent.doMove(destination3); } } private class retour extends OneShotBehaviour { public void action() { System.out.println("The agent has terminated its itinirary"); } } //private ContainerID[] dest={}; private String tab[]={"A"}; }
http://img189.imageshack.us/img189/147/sanstitre1bu.png