TP Agent : Négociations

jeudi 5 février 2015
par  Emmanuel A.
popularité : 4%

 Négociations : principes de base

Dans le cadre d’une négociation 1-1, Le principe de la négociation est de trouver la transaction, le deal $\delta$ qui satisfasse les deux parties.

Une solution utilitaire est la solution qui maximise la somme des utilités des agents :

$\delta = argmax_{\delta’}\sum_i u_i(\delta’)$

La solution au marchandage de Nash (Nash bargaining solution) est elle définie par le deal qui maximise le produit des utilités :

$\delta = argmax_{\delta’}\prod_i u_i(\delta’)$

On vérifiera si les solutions obtenues par les agents font parties de ces solutions.

En reprenant le code sur le TP Acheteur-Vendeur et AcheteurVendeur, et en se basant sur le cours sur Jade,
définir une classe acheteur et une classe vendeur qui permettent de créer des agents qui tentent de négocier entre eux.

Un algo très simple (inspiré de monotonic concession) que vous implémenterez est le suivant :
Pour un agent i
1. $\delta_i = {argmax}_{\delta’}\left( u_i(\delta’) \right)$
2. i propose $\delta_i $ à j
3. i attend la proposition $\delta_j $ de j
4. si $u_i(\delta_j) \geq u_i(\delta_i) $ , alors i accepte la proposition de j
5. si $u_i(\delta_j) < 0 $ l’offre est refusée et la négociation s’arrête
6. sinon choix d’un nouveau $\delta_i’$ tel que
$u_j(\delta_i’) \geq u_j(\delta_i) + \epsilon$
et
$u_i(\delta_i’) \geq u_i(\delta^{-})$
7. si $u_i(\delta_i’) < u_i(\delta_j) $ Alors i accepte la proposition de j

 Exemple de problème

Un acheteur possède un prix maximum d’achat (max) un prix de base (base) auquel il souhaite acheter un objet, avec u(base) = 1 et u(max) = 0

Si le prix proposé est supérieur à max, l’utilité pour l’acheteur est négative.
Plus le prix est petit, plus l’utilité est grande pour l’acheteur.

Un vendeur possède un prix minimum de vente (min) et un prix de base auquel il souhaite vendre l’objet, avec u(min) = 0 et u(base) = 0.5.

Un prix de vente inférieur au minimum a une utilité négative pour l’acheteur.
Plus le prix est grand, plus l’utilité est grande pour le vendeur.

On supposera que l’acheteur débute les négociations.

Par exemple A1 souhaite acheter un livre, il ne veut dépasser 50 euros (max), et tente de l’acheter initialement à 30 euros (base).

V1 propose ce livre à la vente, il ne veut le vendre en dessous de 30 euros, et le propose initialement à 50 euros.

Il y a une infinité de fonction d’utilité possible pour A1, le principe étant que la fonction d’utilité soit nulle si l’offre est supérieure à 50, et qu’elle décroisse lorsque l’offre (le prix) augmente.
On posera comme utilité $u_{a1}$ pour l’acheteur A1 :
$u_{a1}(\delta) = 50 - \delta $
$u_{a1}(\delta) = 0$ si $\delta \geq 50 $
(plus le prix de l’offre (d) est élevé, moins l’offre est intéressante )

Il y a une infinité de fonction d’utilité possible pour V1, le principe étant que la fonction d’utilité soit nulle si l’offre est inférieure à 30, et qu’elle croisse lorsque l’offre (le prix) augmente.
On posera comme utilité $u_{v1}$ pour le vendeur V1 :
$u_{v1}(\delta) = d - 30 $
$u_{v1}(\delta) = 0$ si $\delta \leq 30 $
(plus le prix de l’offre (d) est élevé, plus l’offre est intéressante )

Remarque l’équilibre de Nash est atteint à
$\delta = 40$ : on a alors $u_{a1}(\delta) = 10$ et $u_{v1}(\delta) = 10 $
En effet,

On a $\prod_i u_i(\delta) = (50 - \delta) \times (\delta - 30) = -1500 + 80.\delta - \delta^2$

La dérivé étant $d(-1500 + 80.\delta - \delta^2) = 80 - 2.\delta$,

Le maximum est atteint lorsque $d\left(\prod_i u_i(\delta)\right) = 0$ donc lorsque $\delta = 40$.

On a alors $\prod_i u_i(\delta) = 100$

Par contre, toute solution entre 30 et 50 est une solution utilitaire.
En effet,

$\sum_i u_i(\delta) = (50 - \delta) +(\delta - 30) = 20$

Donc toute solution acceptable par les deux parties (donc entre 30 et 50) majore $\sum_i u_i(\delta)$

 Exemple de déroulement d’une négociation

L’acheteur a1 fait une demande d’achat du livre à 30 euros,

le vendeur v1 reçoit la demande avec l’offre $\delta_{a1} = 30$.
De son côté, le vendeur avait calculé son offre initiale $\delta_{v1} = 50$ ;
il réalise que
$u_{v1}(\delta_{a1 = 30}) = 0 < u_{v1}(\delta_{v1}) = 20$
Il refuse alors l’offre $\delta_{a1}$ et propose un prix légèrement modifié
$\delta_{v1}’ = \delta_{v1}’ \pm \epsilon$
ici, on suppose ici que le vendeur réduit de 10% son offre, il proposera
$\delta_{v1}’ = 45$ euros à l’acheteur

L’acheteur reçoit l’offre $\delta_{v1} = 45$ , il calcule les utilités
$u_{a1}(\delta_{a1 = 30}) = 20$
$u_{a1}(\delta_{v1 = 45}) = 5$
Comme $u_{a1}(\delta_{v1}) < u_{a1}(\delta_{a1})$, l’acheteur refuse l’offre et propose un nouveau prix.
On suppose que l’acheteur augmente sa proposition également de 10%,
a1 propose donc une nouvelle offre $\delta_{a1}’ = 33$ euros

v1 reçoit l’offre $\delta_{a1} = 33$ euros, il calcule les utilités
il réalise que $u_{v1}(33) = 3 < u_{v1}(45) = 15$
Il refuse alors l’offre $\delta_{a1}$ et propose un prix rabaissé : $\delta_{v1}’ = 40.5$

a1 reçoit l’offre $\delta_{v1} = 40.5$ euros, il calcule les utilités
il réalise que $u_{a1}(40.5) = 9.5 < u_{a1}(33) = 17$
Il refuse alors l’offre $\delta_{v1}$ et propose un prix majoré : $\delta_{a1}’ = 36.5$

v1 reçoit l’offre $\delta_{a1} = 36.5$ euros, il calcule les utilités
il réalise que
$u_{v1}(36.5) = 6.5 < u_{v1}(40.5) = 10.5$
Il refuse alors l’offre $\delta_{a1}$ et calcule un prix rabaissé : $\delta_{v1}’ = 36$
On a alors
$u_{v1}(\delta_{a1}) = 6.5 > u_{v1}(\delta_{v1}’) = 6$
L’agent s’aperçoit que l’offre qui lui a été faite est plus utile que celle qu’il s’apprêtait à faire.
Pour le vendeur, l’offre de l’acheteur est plus utile que sa propre offre, elle est donc acceptée !!

 Travail à faire

En JADE (vous pouvez reprendre une partie du code dans l’article sur les agents acheteurs-vendeurs :

  • Programmer une négociation 1-1 entre 1 acheteur et 1 vendeur
  • Programmer maintenant une négociation 1-n entre 1 acheteur et des vendeurs
  • Tester avec les agents suivants
    • cas 1
      • acheteur a1 souhaite acheter un livre l1 au maximum à 50 euros, et propose un prix à 30 euros
      • vendeur v1 souhaite vendre le livre l1 au minimum à 30 euros et propose un prix initial à 50 euros
      • développer les agents, vous devrez fournir dans des fichiers textes, voir des fichiers logs les messages échangés entre les agents.
      • Ce cas sera effectué avec différentes variantes, vous indiquerez le prix sur lequel il y a eu accord :
        • acheteur et vendeur modifient leurs prix de 10%
        • acheteur et vendeur modifient leurs prix de 2%
        • l’acheteur modifie son prix de 10% et le vendeur modifie le sien 2%
        • l’acheteur modifie son prix de 2% et le vendeur modifie le sien 10%
    • cas 2
      • acheteur a1 souhaite acheter un livre l1 au maximum à 50 euros, et propose un prix à 10 euros
      • vendeur v1 souhaite vendre le livre l1 au minimum à 30 euros et propose un prix initial à 50 euros
      • que se passe-t-il ?
      • proposez une solution (sans l’implémenter) pour que la négociation puisse (re)démarrer dans de bonnes bases

Concurrence
Si l’on considère différents acheteurs possible, il faut modifier le comportement associé au vendeur qui stoppera toutes négociations sur un objet dès qu’il aura été vendu.

  • cas 3
    • deux acheteurs a1 et a2 souhaitent acheter le même livre. Il n’y a qu’un vendeur v1 qui le possède et le propose un prix initial à 50 euros pour une vente au minimum à 30 euros. En cas de contre-proposition, a1 augmente son prix de 10%, a2 augmente son prix de 5%. Quel est l’agent qui achètera le livre ?

Si l’on considère différents vendeurs possible, il faut modifier le comportement associé à l’acheteur qui attendra les réponses de tous les vendeurs avant de calculer les utilités et qui stoppera toutes négociations sur un objet dès qu’il aura été vendu.

  • cas 4
    • un acheteurs a1 souhaitent acheter un livre. Deux vendeurs v1 et v2 le possèdent et le propose un prix initial à 50 euros pour une vente au minimum à 30 euros. En cas de contre-proposition, v1 diminue son prix de 10%, v2 diminue son prix de 5%. Quel est l’agent qui vendra le livre ?