Il s'agit de developper des agents qui doivent assurer la livraison de colis avec le maximum de profit dans un monde virtuel. Cet environnement sera peuple par d'autres agents qui sont en competition avec les votres et avec lesquels vous devez negocier.
La competition se jouera sur 7 journees simulees chacune de 600 coups. Le monde est represente par une grille de 20x20 cases et vos agents se deplacent d'une case a la fois. Il est prevu que le simulateur fera un coup a toutes les demi-secondes.
Au debut de chaque journee, le simulateur met $20 (simule) dans votre compte bancaire. De temps en temps, le simulateur met en vente des contrats de livraison de colis avec le protocole FIPA-Contract-Net. Le contrat est vendu au plus offrant. Un contrat specifie:
Afin d'encourager le commerce, les colis on tendance a etre places pres de leur destination et la valeur d'un contrat comporte un montant fixe de $10 en plus d'un montant aleatoire qui augmente avec la distance.
Une environnement de pratique se trouve dans le repertoire du cours. Il comprend:
Plus deux robots livreurs simples sont disponibles:
Pour tester vos agents au DIRO, organiser votre $CLASSPATH pour inclure les JARs de JADE qui sont dans le repertoire dift6802/jade/lib et celui du cours, ift6802.jar, dans le repertoire ~vaucher/HTML/ift6802/Competition.
Le travail se fait en equipes de 2 personnes qui n'ont pas encore travaille ensemble. Le code devra etre remis avec "remise"
% remise ift6802 tp4 .....les fichiers
et le rapport en main propre le jour de la competition.
La competition aura lien dans une salle de machines au 3ieme etage du pavillon AA Probablement vendredi apres-midi le 23 avril. Nous organiserons une pre-competition une semaine avant.
Le repertoire associe au TP contient plusieurs programmes et documents utiles. En particulier la classe "JVAgent.java" qui comprend plusieurs utilitaires pour la creation de messages, l'enregistrement et la recherche dans le DF et les traces de mise au point.
Vous pouvez aussi demarrez des "Afficheurs" pour suivre l'evolution des robots. Les agents s'enregistreront dans le DF avec les attributs suivants puis attendront le DEPART.
Livreur: sd.setType("Livreur") Controleur: sd.setType("Controleur")Dans chaque cas, vous devez indiquer le nom de l'equipe avec:
sd.setOwnership( "..." )Chaque agent doit aussi engistrer une Cle cryptographique publique afin de pouvoir signer des messages. La methode "register" de JVAgent fait ceci automatiquement.
Une fois tous les agents demarres, le depart de la competition sera donne. Les etapes qui suivent represente le deroulement d'une journee de 600 coups. Ces etapes seront repetees 7 fois.
INFORM: ID=<id>,<X>,<Y>,<NJOURS>,<NHEURES>L'agent devrait noter l'identite de l'expediteur (le controleur) afin de pouvoir creer des template plus tard pour identifier les messages venant du Controleur.
INFORM: STATE=<jour>,<heure>,<X>,<Y>,....contenu des 8 cases environnantes ... ou le contenu est: A-<id> pour un agent C-<owner> pour un colis X pour un mur 'blanc' si la case est videExemple: premiere journee, t=34, l'agent 3 est a la case <1,5> avec l'agent 6 juste en haut et un colis libre a droite et un colis appartenant a l'agent 6 en dessous:
STATE=1,34,1,5,X,A-6, ,C-0, ,C-6,X,XLe premier message recu sera pour Jour=1 et Heure=1. Le dernier message recu sera pour heure=600, puis l'agent recevra un message de fin de journee:
INFORM: STOP=<nom1>/<argent1>,<nom2>/<argent2>,....Ce message donne en ordre decroissant les montants gagnes durant la journee par tous les participants.
Une minute plus tard, la prochaine journee debutera. La position et l'identificateur de l'agent ne changera pas mais tous les colis auront disparu.
INFORM: FIN=<nom1>/<argent_cumul1>/<points1>,<nom2>/<argent_cumul2>/<points2>,....Ce message donne en ordre decroissant les montants cumulatifs et les points accordes.
CFP: CONTRACT=<conID>ou conID est un numero de contrat. Pour reagir, vous devez utiliser une sous-classe de ContractNetResponder. Pour soumissioner, il suffit de retourner un PROPOSE avec comme contenu un entier qui denote le prix propose (en dollar).
PROPOSE: <prix>Si vous avez gagne l'enchere (et que votre credit est bon), vous recevrez un ACCEPT_PROPOSAL dont le contenu sera un OBJET de classe CONTRAT.
A tout moment il y aura un nombre limite de contrats en jeu. Ce nombre varie d'une journee a l'autre entre 2 fois et 7 fois le nombre d'agents.
Un agent peut detenir un nombre quelconque de contrats. De part la suite, il peut les revendre a d'autres agents ou remplir le contrat en allant chercher le colis et en l'amenant a destination. Une fois qu'un colis a ete ramasse, il ne peut plus etre revendu.
Une autre facon d'acquerir un contrat est de se deplacer sur la case ou se trouve un colis sans proprietaire. Dans ce cas, s'il y a encore de la place a bord du robot, le colis sera automatiquement charge et , en plus, l'agent recevra un ACCEPT_PROPOSAL [comme plus haut] lui disant les details du colis. NOTE IMPORTANTE: Ce message aura le champ protocole mis a "Pickup". Ceci est necessaire afin de distinguer ce message du ACCEPT_PROPOSAL de CONTRACT NET et ceux du protocole "NEGO_6802_H04"
REQUEST: MOVE=<dir>
Notez que vous ne pouvez pas avancer dans une case
La charge maximum est de 3 colis.
Pour livrer un colis, il faut aller sur la case de destination puis expedier un message au Controleur:
REQUEST: LIVRERSi vous etes au bon endroit, tous les colis pour cette destination seront decharges et votre compte bancaire sera credit de la valeur du contrat.
Si votre agent occupe un des 4 coins trop longtemps, il recevra une amende de $10 et sera relocalise a un endroit aleatoire.
Jean Vaucher 15 mars 2004