Jade appliqué cours 3 : protocoles et diffusion
par
popularité : 4%
Objectif
Le but de ce cours appliqué est de gérer les échanges entre des voyageurs et des services d’informations sur des voyages.
Trois classes d’agents sont utilisés :
- TravellerAgent qui représente un agent souhaitant se diriger d’un point A vers un point B
- AgenceAgent, qui dispose de catalogue des trajets possibles et les transmets à l’agent Traveller.
- AlertAgent, qui émet des alertes sur l’indisponibilité de routes (suite à un accident, un événement météorologique, des travaux, ...)
Vous utiliserez les protocole (AchieveRE, ...) pour faciliter le dialogue entre Traveller et Agences...
Sous cet article, vous trouverez un lien github vers les sources codant les classes d’agents, les comportements, la gestion des données, ...
Dans ces sources, un voyageur peut demander les catalogues de voyages aux agences, et calculer l’ensemble des combinaisons de trajets permettant de réaliser son voyage (aller de la ville B à la ville E en utilisant bus et train par exemple).
AEIOU : agentification du problème
La modélisation a été effectuée en reprenant le paradigme AEIOU, qui permet de décrire :
- les Agents : ici TravellerAgent, AgenceAgent et AlertAgent. Ces agents possèdent un catalogue de voyages et un lien vers un interface graphique.
- l’Environnement : ici les données sur les voyages (journeys) utilisés. Dans un second temps viendront les alertes.
- les Interactions : un agent TravellerAgent demandent aux pages jaunes la liste des agences, et demandent à chacune son catalogue qu’il ajoute à son propre catalogue.
- l’Organisation : organisation de type marché ; un client lance des demandes à des services..
- les Utilisateur : l’utilisateur de l’agent TravellerAgent peut indiquer quel voyage il souhaite effectuer en donnant : le départ, l’arrivée, la data de départ au plus tôt, et le principe de choix entre différents voyage (selon le coût, la durée, ....)
Création des Agents
Lancer 1 Traveller et 3 agences liées chacune aux fichiers car, bus et train.
Ces agences proposent donc respectivement des voyages en voiture, bus et train.
Pour cela, lancer le main
dans la classe Launch
.
Modifier le code pour que les agences décrémentent le nb de voyages lors d’achats.
Le nb de places initiales dans une voiture est de 3, dans un bus de 50, dans un train de 200.
Modifier ensuite la classe launch pour lancer 3 Travellers et 6 agences (basées sur les fichiers cars, bus, trains, casrs2, bus2 et trains2).
Agents d’Alerte
Utilisez la classe d’agent AlertAgent (et sa fenêtre AlertAgentGui) qui diffuse des message relatifs à des événements (tels qu’un retard important sur une ligne de train, sur une route, ou une alerte météo, ...).
Lors de la reception d’une alerte sur un tronçon, coder les adaptations suivantes :
- version 1
- côté agence : une agence ôte de la vente ce tronçon
- côté voyageur :
- un voyageur devant prendre le tronçon relance un appel d’offre juste pour le reste du chemin le menant à l’arrivée
- le voyageur retourne aux agences les tickets non utilisés (qui re-incrémente les compteurs
Remarque sur le message radio pré-codé :
Un agent d’alerte diffuse ces messages à l’aide de Topic
.
- // Définition du topic
- TopicManagementHelper topicHelper = null;
- try {
- topicHelper = (TopicManagementHelper) getHelper(TopicManagementHelper.SERVICE_NAME);
- topic = topicHelper.createTopic("TRAFFIC NEWS");
- topicHelper.register(topic);
- } catch (ServiceException e) {e.printStackTrace(); }
Pour diffuser un message, l’agent d’alerte spécifie simplement le topic comme destinataire :
- ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
- msg.addReceiver(topic);
- msg.setContent("blocage train pointA pointB");
- myAgent.send(msg) ;
Chaque agent voulant rester à l’écoute des infos crée lui aussi de son côté un objet topic « branché » sur le même canal et filtre les message venant de ce topic :
- ACLMessage msg = myAgent.receive(MessageTemplate.MatchTopic(topic));
- if (msg != null) {
- System.out.println("Message recu sur le topic " + topic.getLocalName() + ". Contenu " + msg.getContent() + " émis par " + msg.getSender().getLocalName());
- }
Offre spéciale
Les agences peuvent émettre sur un canal radio « SOLDES » le lancement d’une offre soldée de voyage.
Des acheteurs ont quelques secondes pour se déclarer intéressés à l’agence.
La vente a lieu sur le principe de l’enchère hollandaise :
- le prix proposé initialement est prix de base / 2 puis le prix est progressivement baissé :
- jusqu’à un achat
- jusqu’au prix minimum toléré (prix de base / 3)
- Les « AgenceAgent » changent donc de fenêtre pour reprendre le shcéma de fenêtre de l’« AlertAgent », où le bouton « Alert » est remplacé par « Sell Off ».
- Les « TravellerAgent » sont pour certains à l’écoute des soldes et ont un nouveau bouton dans leurs fenêtres pour acquérir un objet soldé