Forum Clubic

Time out pour système multi-agent [JAVA] - fixé un temps de vie à un agent

Bonjour,

Je travail sur un système multi agent sur la plateforme JADE et j’aimerais fixé un temps limite d’existance pour chacun de mes agents.
Y a-t-il un fonction java ou une variable d’initialisation permettant de fixé une période d’existance à un agent ou alors il faut créer soit même une fonction, dans ce cas y a-t-il un site explicatif pour une telle programmation ?

Merci.

Bonjour,
Je ne connaît pas l’outil JADE, si tu nous donne un lien sur la javadoc de cet outil, on pourra se pencher dessus. :slight_smile:

En tout cas, si jade gère les timer/time-out, il est préférable des les utiliser, sinon, tu peux le faire en Java classique, soit avec un wait(timeout) dans un thread, soit avec la classe Timer et TimerTask de java.
Dans un Thread ou une Task à part, tu va attendre le délai, et les “tuer” (proprement si possible) à la fin de l’écoulement du time-out.

java.util.Timer#schedule

javadoc
site jade

voici deux liens qui peuvent peut être vous donner une piste. De mon côté toujours pas trouvé :confused: . Mais je cherche !!!

Je n’ai pas vue de gestion de temps dans les classes, mon on ne peut pas voir le contenu du package core, et la description de la classe Runtime :??:

Voila mon avis: méthode kill de la classe Agent me semble appropriée pour terminer correctement son exécution.

Donc en utilisant les TimerTask java tu crée une classe TimerTask dont chaque instance contient une référence à l’agent, et dans sa méthode run, fait agent.kill(), et tu le declenche dans le Timer avec un timer.schedule(maTask, monTimeOut) avec monTimerOut un long qui contient le timeout en millisecondes. tu “schedule” le timertask au moment ou tu lance l’agent (ou directement dans le code de l’agent si tu as la main dessus)

:slight_smile:

Merci pour ton aide, tu confirmes ce que je pensais, le seul moyen est de faire soi même un timer. Au fait la methode doDelete() est conseillé plutôt que kill().

Encore merci. :hello:

je t’en prie
:super:

salut,

je travaille sur Jade depuis quelques temps,
il existe effectivement une fonction qui fait exactement cela :

il faut ajouter un behavior a ton agent, je rappelle qu’un behavior est un thread que tu attache a ton agent

tu ne doit surtout pas faire de timer toi meme, tu risque soit de faire une attente active (beeeurk) soit de bloquer ton behavior de facon impropre,

Donc le behavior en question devra etre un WakerBehaviour, c’est a dire un behavior déclanché apres un temps t, tu as juste a mettre ca dans la méthode setup de ton agent :
// déclanchement au bout de 10 secondes
addBehaviour(new WakerBehaviour(this, 10000) {
protected void handleElapsedTimeout() {

          myAgent.dodelete(); // ou un truc qui quitte
          
        }
      });

je rappelle aussi que la méthode setup n’est pas le bon endroit pour faire des opérations, il faut que cette méthode retourne pour que tout se passe proprement

en cas de souci n’hésites