Protocole de negotiation ift6802 ================================ J. Vaucher ( v1.3 - 4 avril ) Voici ma lecture du protocole que vous avez etabli. - Chaque appel d'offre vous coutera $0.50 - N-rondes de negotiations avec informations sur les offres retournees aux participants - Emploi de PERFORMATIFS un peu differents - En cas de problemes de validations, on informe TOUS les agents et il peut y avoir plus qu'une erreur MAJ: 5 avril - Emploi du "/" comme delimiteur de la partie signature des messages PRECISIONS ----------- Pour distinguer ces messages des autres, certains champs doivent avoir des valeurs precises: protocole: NEGO_6802_H04 language: String conversation_ID (CID): un identificateur unique a chaque negotiation, Le TIMEOUT pour chaque phase sera de 2 sec. Phase 1: Appel d'offres ----------------------- A tout moment, un agent peut mettre en vente un contrat qu'il a achete et qu'il n'a pas encore ramasse m1: Vendeur -> Tous les agents CFP: Vendeur.ID,Contrat.ID,Contrat.XY,PrixMin ou Contrat.XY = ,,, Vendeur.ID = LocalAgentName.... Qui est utilise par le Controleur pour identifier les equipes PrixMin est le prix minimum auquel le vendeur veut vendre (il peut toujours mettre 0 s'il ne veut rien dire) = Note 1: la seule facon de se debarasser d'un colis ramasse est de le livrer = Note 2: pour decourager le SPAM, chaque appel d'offre vous coutera $0.50 Phase 2: offres des interesses ------------------------------- m2: Vendeur <<-- Agents PROPOSE: Acheteur.ID, Vendeur.ID, Contrat.ID, Contrat.XY, PrixOffre, DateExp/ SigAcheteur ou Vendeur.ID & Acheteur.ID: LocalAgentName DateExp: est une date d'expiration (abolue et non relative, dans le repere temporel de la simulation) apres laquelle le controleur refusera de valider la transaction, SigAcheteur=Sign("Acheteur.ID,Vendeur.ID,Contrat.ID, Contrat.XY,PrixOffre,DateExp", Acheteur.PrvKey) OU m2': AUCUN MESSAGE: l'acheteur potentiel se desiste. Phase 3: Prochaine ronde [ et retour a Phase 2 ] ------------------------------------------------- Pour declencher une autre ronde de negotiation et informer les participants de l'etat du marche. m3: Vendeur -> Tous les agents qui ont fait une offre INFORM: OFFRES=, en ordre decroissant d'offres Phase 4: Terminaison de l'enchere ---------------------------------- m4: Vendeur -> Tous les agents qui ont fait une offre moindre REJECT_PROPOSAL: m5: Vendeur -> gagnant et au controleur ACCEPT_PROPOSAL: Acheteur.ID, Vendeur.ID, Contrat.ID, Contrat.XY, PrixOffre, DateExp/ SigAcheteur, SigVendeur" ou les valeurs sont les memes qu'en n2 plus : SigVendeur=Sign("Acheteur.ID,Vendeur.ID,Contrat.ID,Contrat.XY, PrixOffre,DateExp", Vendeur.PrvKey) Phase 5: Confirmation ----------------------- a) Si tout va bien: m6: Controleur -> acheteur : CONFIRM: "Contrat.ID,ValeurContrat,NouveauSolde" ou NouveauSolde est le solde de l'acheteur selon le controleur (l'acheteur peut ainsi verifier qu'il ne s'est pas decale dans le solde). m7: Controleur -> vendeur : CONFIRM: "Contrat.ID,NouveauSolde" ou NouveauSolde est le solde du vendeur selon le controleur (mem remarque que pour l'acheteur). b) Si probleme : m8: Controleur -> TOUS LES AGENTS FAILURE: "Acheteur.ID,Vendeur.ID,CodeErr1,CodeErr2,..." ou CodeErrX est un chiffre parmi : 0 - Mauvais champ entier 1 - Solde insuffisant de l'acheteur 2 - Le vendeur ne possede pas le contrat 3 - L'offre de l'acheteur est expiree 4 - Les coordonnees du contrat sont fausses 5 - La signature de l'acheteur est invalide 6 - La signature du vendeur est invalide 7 - Le vendeur est inconnu 8 - L'acheteur est inconnu 9 - Le contrat est inconnu