• Aucun résultat trouvé

demande d’information, void envoyerDemandeInformationSit(@AgentSituation), void envoyer- InformationSit(@Agent), void envoyerCriticiteSit(@AgentSituation)), et peut passer de nouveau dans l’état Non Satisfait si la trajectoire a été modifiée par l’Agent Trajectoire, par exemple pour s’adapter lors de la simulation.

7.6

Présentation de l’Agent Trajectoire

Dans le but d’avoir les Agents EM requis par ses différentes caractéristiques, chaque Agent Situation (figure 7.4) crée autant d’Agents Trajectoires que nécessaire. Il délègue par la suite à chacun de ses Agents Trajectoires la partie de ses caractéristiques le concernant no- tamment celles définissant le rôle de l’Agent EM. Dans notre exemple précédent (section 7.5), l’Agent Situation délègue à un premier Agent Trajectoire ses caractéristiques de position, temps, collision, et une partie de la caractéristique de géométrie, par exemple celle de venir du Nord-Ouest.

Le but de chaque Agent Trajectoire est alors de construire une trajectoire réaliste du point de vue comportemental et physique (section 3.2.3), noté τ, qui sera ensuite suivie par une entité mobile, dans le but de satisfaire les caractéristiques déléguées par l’Agent Situation. Ainsi, l’Agent Trajectoire est dans un rôle service du pattern AMAS4Opt vis-à-vis de son Agent Situation.

La figure 7.4 décrit la structure de l’Agent Trajectoire que nous utilisons pour décrire son comportement dans ce qui suit, qui dépend en majorité de son état (EtatTraj etatCour- rant). Quelque soit son état, l’Agent Trajectoire envoie régulièrement sa trajectoire (void en- voyerTrajectoire(@AgentSituation)) et sa criticité (Crittraj criticiteTrajectoire, void envoyerCritici-

teTraj(@AgentSituation)) à son Agent Situation (AgentSituation agentSituation), et aux Agents Trajectoires de la même situation (AgentTrajectoire[] agentsTrajectoire, void envoyerCriticite- Traj(@AgentTrajectoire), void envoyerTrajectoire(@AgentTrajectoire))

Dans l’état Initialisation, l’Agent Trajectoire va chercher dans la base de données de tra- jectoires une première partie de trajectoire (PartieTrajectoireBDT getDonneesBDT()) pour sa- tisfaire au mieux (PartieTrajectoireBDT choisirPartieTrajectoire()) les caractéristiques (Caracte- ristique[] caracteristiquesSituation) déléguées par son Agent Situation. Il crée ensuite un Agent Partie (Agent Partie creerAgentPartie(PartieTrajectoireBDT)) associé à cette partie de trajectoire (algorithme 7.4, et étape 1 de la figure 7.5).

Ce premier Agent Partie crée un Agent Partie à chacune de ses extrémités (étape 2 de la figure 7.5), ces deux nouveaux créent à leur tour un Agent Partie à leur extrémité qui n’est pas relié, et ainsi de suite jusqu’à ce qu’une trajectoire complète soit créée (étape 3). En parallèle et à la suite de cette première initialisation, la trajectoire peut évoluer en fonction des décisions des Agents Parties. La trajectoire de l’Agent Trajectoire est donc le résultat de la coopération de l’ensemble de ses Agents Parties (voir la figure 7.5).

Le but de l’Agent Trajectoire est de construire une trajectoire réaliste, nous divisons cet objectif en trois sous-objectifs :

1. La capacité de définir une trajectoire complète du départ jusqu’à la destination. La criticité Crittraj,comp est associée à ce sous-objectif. Elle est composée de l’ensemble

Figure 7.4 – Structure de l’Agent Trajectoire

Algorithme 7.4 :Comportement d’une Agent Trajectoire dans l’état Initialisation 1: PartieTrajectoireBDT[] ps // Variable temporaire pour contenir des parties de

trajectoires venant de la base de données

2: Critsit[] cs // Variable temporaire pour contenir des criticités anticipées

3: etatCourant←Initialisation // L’Agent Trajectoire est dans l’état d’Initialisation 4: caracteristiqueTraj() // L’Agent Trajectoire recupère de son Agent Situation les

caractéristiques qui lui sont déléguées

5: ps←getDonnesBDT() // Il cherche dans la base de données de trajectoires des parties de trajectoires qui pourraient satisfaire les caractéristiques de sa situation

6: pourk←1 à ps.taille() faire

7: cs[k]←calculerCriticiteAnticipeSit(ps[k]) // L’Agent Trajectoire calcule la criticité anticipée de son Agent Situation s’il choisit ps comme première partie de trajectoire 8: fin pour

9: Déterminer l’indice lminde la criticité minimale de cs // L’Agent Trajectoire choisit la

partie de trajectoire qui diminue le plus la criticité de son Agent Situation 10: agentPartie[1]←creerAgentPartie(p[lmin]) // Il crée l’Agent Partie associé

11: etatCourant←RechercheTraj // L’Agent Trajectoire passe dans l’état RechercheTraj

7.6. Présentation de l’Agent Trajectoire

Figure 7.5 – Création de la trajectoire de l’Agent Trajectoire par ses Agents Parties. L’Agent Partie6(AP6) crée les Agents Parties AP5et AP7, et enfin AP5crée AP4.

Crittraj,comp =Critpart,comp .

2. La définition d’une trajectoire réaliste du point de vue du trafic, c’est-à-dire qui montre des comportements contextuels. Ces comportements peuvent aller du respect de cer- taines règles du trafic, à des schémas plus avancés du trafic réel (par exemple, ne pas passer par un waypoint de la trajectoire, ou encore qu’une compagnie irlandaise, préfère passer le plus possible par l’espace aérien irlandais pour payer moins de taxes). La cri- ticité Crittraj,tra f f est associée à ce sous-objectif. Elle s’exprime également par la criticité

Critpart,tra f f des Agents Parties Crittraj,tra f f =Critpart,tra f f .

3. La faisabilité de la trajectoire, associée à Crittraj, f eas. Cette criticité est le retour reçu par

son Agent EM qui la calcule pour chaque partie de trajectoire, noté Critpart, f eas.

Le calcul des criticités locales Critpart,comp et Critpart,tra f f est expliqué dans la section 7.7

présentant les Agents Parties. Ces trois criticités font partie de la criticité de l’Agent Trajectoire, Crittraj=Crittraj,comp, Crittraj,tra f f, Crittraj, f eas .

Afin d’atteindre son but, dans la phase de construction, l’Agent Trajectoire demande à ses Agents Parties (AgentPartie[] agentsPartie) de s’auto-organiser (en modifiant les caracté- ristiques de leur partie de trajectoire, substituant leur partie de trajectorie par une autre, ajoutant une autre partie de trajectoire ou en se supprimant, voir section 7.7) dans le but de diminuer les criticités Crittraj,comp et Crittraj,tra f f (void envoyerDemandeChangementPartie

(@AgentPartie)), c’est-à-dire améliorer la complétude de la trajectoire et le réalisme de la tra- jectoire du point de vue du trafic. Ses Agents Parties lui répondent après auto-organisation leur état (void etatPartie()), qu’il garde en mémoire (PartieTrajectoireBDT[] agentsPartie). Si sa trajectoire est suffisamment complète, l’Agent Trajectoire demande aux Agents Extrémités la

création de l’Agent EM qui va parcourir sa trajectoire pendant la phase de simulation (void envoyerDemandeCreationAgentEM (@AgentExtremite)).

Dans la phase de simulation, l’Agent Trajectoire donne sa trajectoire à son Agent EM (AgentEM agentEM) et lui demande de suivre celle-ci (void envoyerTrajectoire(@AgentEM)). Il reçoit ainsi les criticités Critpart, f eas de son Agent EM qui sont relatives aux difficultés que

celui-ci rencontre pour suivre cette trajectoire (void criticiteFeasPartie()), et demande aussi à ses Agents Parties de s’auto-organiser en conséquence (algorithme 7.5). Par conséquent, l’Agent Trajectoire et l’Agent EM, collaborent sous le rôle service du pattern AMAS4Opt dans le but de générer la trajectoire.

Enfin, dans l’état Satisfait, l’Agent Trajectoire reste à l’écoute des messages des autres agents. Si sa trajectoire ne correspond pas ou plus, il demande à ses Agents Parties de s’auto- organiser pour proposer une nouvelle trajectoire et retourne dans l’état RechercheTraj. Durant la phase de simulation, dans le cas où cette auto-organisation engendre une dégradation trop forte du réalisme par exemple, l’Agent Trajectoire est aussi en contact avec les Agents EM du voisinage de sa trajectoire (qu’il connaît grâce à son Agent EM qui lui envoie des messages voisinMj(@AgentTrajectoire)), et est capable de demander à l’une de ces entités mobiles de jouer le rôle de son Agent EM, c’est-à-dire de remplacer son Agent EM par un Agent EM plus proche.