Bonjour à tous,
Je suis un petit peu bloqué dans la recherche d'une formule qui me tracasse depuis un petit temps :)
Je viens donc demander un peu d'aide aux maitres :P
Je vous explique donc mon problème :
J'essaie de mettre au point un algorithme de régulation des prix.
Je vous explique plus en détail.
Dans l'environnement en question, il existe 3 ressources différentes.
Appelons les bois, fer et or.
Chaque agents possèdent une certaine quantité de chacune des ressources.
Dans le système en question, il existe une banque centrale, qui permet à un agent d'échanger une certaine quantité de ressources contre une certaine quantité d'une autre ressource.
Le taux de change que propose la banque devrait se réguler automatiquement en fonction de l'offre et la demande !
Exemple.
Un agent a besoin de fer et a beaucoup de bois, il contacte alors la banque qui lui propose une certaine somme de fer en échange de son bois.
Mais, si beaucoup d'agents se mettent a avoir le même comportement, c'est a dire vendre du bois contre du fer, la banque va adapter ses taux de change en demandant plus de bois pour une même quantité de fer.
Et de même, la banque offrira plus de bois a quiconque lui fournira du fer.
Donc dans notre exemple, si au départ la banque fourni 1 unité de fer contre 3 unités de bois, si la demande de fer augmente, elle pourrait demander 5 unité de bois contre une unité de fer.
Ce que j'essaie de mettre au point est un algorithme qui calcule les différents taux de change en fonction du comportement des agents et ce en temps réelle.
Idée de départ.
Dans mon idée de départ, la banque centrale contiens une certaine
quantité de chaque ressource, au même titre que les agents.
Nommons ces quantités :
B = Quantité de bois que possède la banque centrale.
F = Quantité de fer que possède la banque centrale.
Or = Quantité d'or que possède la banque centrale.
Mon algorithme fonctionne comme ceci :
Dans notre exemple, un agents désire vendre 100 tonnes de bois et veux
acquérir du fer en échange.
La banque centrale dispose des ressources suivantes :
B=2000, F=1000 et Or=300
Elle calcule son taux
De change de la manière suivante: F/B.
Donc en échange des 100 unités de bois, elle va fournir F/B * 100
unités de fer, c'est a dire, 1000/2000 * 100 = 50 unité de fer.
Après la transaction, la banque centrale dispose des ressources
suivantes: B=2100, F=950 et Or=300.
Si un autre agent ou le même désire faire la même transaction, le taux
de change sera maintenant de 950/2100 et la banque ne proposera plus
que 45 de fer en échange de 100 unités de bois.
Le problème c'est qu'il ne faut surtout pas que la banque centrale
vende a perte ! Au contraire, elle devrait même prendre une petite
commission sur chaque transaction.
Mon algorithme me plait bien mais il a un problème...
Ce problème se pose lorsque les réserves de la banque sont proches de la quantité que veut échanger un agent.
Petit exemple, la banque possède 100 unités de bois et 50 de fer.
Un agent vient vendre 80 unités de bois, la banque lui fourni donc en échange 40 unités de fer (50/100 * 80). Si notre agent revend instantanément le fer qu'il vient de recevoir, la banque va lui donner 720 unités de bois !!! (180/10 * 40)
Donc de un la banque a vendu a perte, son stock de bois étant de -540
et de deux n'importe quel agent peut devenir immensément riche en
répétant la manipulation.
J'essaie de faite en sorte que ce ne soit pas possible mais je ne parviens pas à trouver la bonne modification à mes équations...
Pour bien faire, il faudrait que quand un agent refasse juste l'inverse d'une transaction qu'il vient de faire, il se retrouve avec ses quantités de départ voir un peu moins mais surtout pas plus !
Un second problème est que avec mon implémentation actuelle, si la banque prend une commission a chaque fois, les stocks de la banque vont tendre vers l'infini !
Et comme c'est assez délicats de stoquer de très très grand nombres dans une base de données il faudrait trouver une solution.
Un tout grand merci d'avance pour votre aide
