Donner une algorithme permettant de simuler une bourse


  • R

    Bonjour à tous,

    Tout d'abord je tiens à préciser que je suis complètement nul en Math donc j'ai fait ce que j'ai pu ;).

    Je me permet de vous demander votre aide concernant un sujet sur lequel je bute depuis plusieurs jours : Comment recréer, grâce à un petit algorithme, un semblant de bourse ?

    Je m'explique, je base mon système sur le fait suivant :
    Prix = Demande / Offre

    Le système que j'aimerais mettre en place est l'auto-régulation du prix selon la demande à un temps T.

    Selon mon système l'offre est toujours égale à 1 (car chaque offre est différente) donc :

    Prix = Demande / 1

    J'ai trouvé un semblant de calcul pour faire monter le prix de manière cohérente quand la demande augmente mais je ne sais pas comment faire lorsque la demande diminue.

    Par exemple si mon prix minimum / de base est de 0,30 € et que j'ai 17 demandes pour le jour J.
    Jour J:
    0,3 x 1 = 0,3 € pour le demandeur N° 1
    0,3 x 2 = 0,6 € pour le demandeur N° 2
    0,3 x 3 = 0,9 € pour le demandeur N° 3
    ...

    0,3 x 17 = 5,1 € pour le demandeur N° 17

    à la fin du jour J nous avons atteint un pic à 5,1 € pour cette offre.

    Mais comment faire pour le jour J+1 ?
    Je pensais repartir de la base du Jour J (0,3€), mais comment avoir un calcul cohérent lorsque la demande explose ?
    En effet si la demande est toujours croissante au jour J+2, il va falloir incrémenter d'autant plus afin que la demande se réduise favorisant la rareté de l'offre et donc limiter par la suite le nombre de demande (je ne sais pas si je suis super clair).

    J'avais pensé au principe suivant pour le jour J+2:
    5,1 + (5,1 x (3/17)) = 6 € Jour 2

    5,1 = taux au jour J
    17 = NB de demande de la veille
    3 = NB de demande du jour

    Avec ce calcul j'ai une augmentation minime qui parait cohérente mais je ne pense que cela soit viable pour les autres jour J+3, +4, +5 etc...

    De plus l'autre problématique (et pas des moindres !) est la suivante :

    Comment gérer la baisse de la demande ?

    Dans mon exemple ci-dessus, il y a une baisse de la demande du jour J+2 (3) par rapport au jour J (17) mais globalement la demande reste croissante donc le prix aussi. Mais que se passe t-il si il n'y a aucune demande au jour J+3 ?

    Le but étant le suivant :

    1. Lorsque il y a beaucoup de demande, le prix reste croissant et croît de plus en plus (tout en restant cohérent. Exponentiel ?) ce qui a pour conséquence de mettre en valeur l'offre et de limiter les futurs demandes (car il n'y en aura plus assez pour tout le monde - Auto-régulation Offre / Demande)

    2. Lorsque il n'y a plus de demande pendant 1 jour, 2 jours et plus, réduire le coût de l'offre afin de relancer la demande (la réduire progressivement ?)

    Je pense avoir été exhaustif. J'aimerais avoir votre avis par rapport à ma réflexion peut être me trouverez vous incohérent ou incomplet sur certains points et je ne demande qu'à améliorer ma stratégie.

    D'un autre côté, si vous êtes doués en Math et que vous pouvez m'aider concernant ce petit algorithme / calcul mathématique, je vous en serais reconnaissant !

    Merci par avance d'avoir pris le temps de me lire,

    Alexandre


  • kanial
    Modérateurs

    Salut rigolman,
    ce que tu peux peut-être faire c'est stocker dans une variable le nombre moyen de demandes par jour (en stockant le nombre total de demandes et le nombre de jours écoulés depuis le début, tu obtiendrais cette moyenne en divisant l'un par l'autre) puis augmenter le prix de façon proportionelle au (nombre de demandes enregistrées la veille) moins (la valeur de la moyenne).
    La moyenne étant remise à jour chaque jour tu aurais quelquechose qui suivrait assez bien les évolutions du nombre de demandes.
    Ce principe ne fonctionne par contre que si tu initialises la valeur moyenne avec quelque chose de cohérent ou si tu trouves un autre truc pour le premier jour...
    N'hésite pas à critiquer ou à me dire ce que tu préfèrerais ou à me demander des explications sur des trucs que tu ne comprendrais pas...


  • kanial
    Modérateurs

    En fait ce serait sans doute mieux de ne pas prendre le nombre moyen de demandes par jour depuis le début mais peut-être le nombre moyen sur les 5 jours précédents par exemple (ou les 10), cela permettrrait un meilleur suivi des évolutions.


  • R

    Salut Raycage,

    Un grand merci pour avoir pris le temps de me répondre, c'est déjà très sympa de ta part !

    Ton idée à l'air sympa mais pourrais-tu l'alimenter avec un exemple concret (calcul comme dans mon exemple) afin que je me rende compte de ce que ca pourrait donner ? Parceque la c'est un petit peu abstrait pour moi...

    Merci par avance !

    Alex.


  • kanial
    Modérateurs

    Prenons quelques valeurs :
    jour 1 : 15, jour 2 : 21, jour 3 : 9, jour 4 : 12, jour 5 : 42, jour 6 : 57, jour 7 : 12, jour 8 : 6, jour 9 : 3
    (ce sont les nombres de demandes par jour)

    mettons qu'on fixe un prix de départ de 5 (euros) et qu'on fasse la moyenne des trois dernières journées. Comme on n'a pas de données pour les trois premières journées on va dire qu'on laisse un prix constant durant les quatre premières journées.

    Pour le cinqième jour, on calcule la moyenne des trois premiers : M5M_5M5=(9+15+21)/3=15 et on a le nombre de demande pour le quatrième jour qui vaut D4D_4D4=12, on augmente alors le prix en lui ajoutant quelquechose de proportionnel à 12-15=-3, prenons pour coefficient de proportionnalité 0.1, on a alors un nouveau prix : P5P_5P5=5+0.1(-3)=4.7 (au cinquième jour, on fera payer l'action 4.7 euros)

    Puis on recommence la même chose pour les autres, on a :
    M6M_6M6=14, D5D_5D5=42 d'où P6P_6P6=4.7+0.1*(28)=7.6
    M7M_7M7=21, D6D_6D6=57 d'où P7P_7P7=7.6+0.1*(36)=11.2
    M8M_8M8=37, D7D_7D7=12 d'où P8P_8P8=11.2+0.1*(-25)=8.7
    M9M_9M9=37, D8D_8D8=6 d'où P9P_9P9=8.7+0.1*(-31)=5.6
    M10M_{10}M10=18, D9D_9D9=3 d'où P10P_{10}P10=4.7+0.1*(-15)=3.2
    Si tu veux des variations plus brutales des prix tu peux augmenter le coefficient de proportionnalité.


  • R

    Salut !

    Merci pour tes precisions et désolé pour mon temps de réponse, j'ai eu peu de temps a moi hier !

    Bref, ton concept et ta formule m'ont l'air vraiment bien mais lorsque je fais le caclul moi même j'obtien un resultat différent...

    P6=4.7+0.1*(28)=7.6

    Prix = 4,7+0,1x(28) = 134,4

    Peux-tu me dire ou j'ai faux ?

    Encore merci pour ton aide et ta compréhension!
    Alex.


  • kanial
    Modérateurs

    oui il y a une légère erreur c'est 7,5 normalement mais je ne vois pas du tout comment tu obtiens 134,4 :
    0,1*28=2,8 et 2,8+4,7=7,5 ...


  • R

    Oui tu as tout à fait raison, grosse erreur de ma part ! désolé !

    Ton calcul est à la fois simple et efficace, je voudrais juste ajouter une autre variable, le coefficient de proportionnalité.

    Actuellement on le met par défaut à 0,1 ce qui est très bien pour des faibles coûts mais je pense qu'il serait plus logique qu'il augment proportionnellement à la demande, qu'en penses-tu ?

    Par exemple de 0 à 10 demande par jour on laisse 0,1, puis de 11 à 20 il monte à 0,2 etc... est-ce assez réaliste à ton avis ?

    Sinon autre option il augmente aussi vite que la demande ex:
    1 demande 0,1, 2 demande 0,2, 3 demande 0,3 etc...

    Puis on recommence la même chose pour les autres, on a :
    M6=14, D5=42 d'où P6=4.7+0.3*(28)=13.1
    M7=21, D6=57 d'où P7=7.5+0.4*(36)=21.9

    que faire lorsque la moyenne est négative ?
    M8=37, D7=12 d'où P8=11.2+0.3*(-25)=3.7
    M9=37, D8=6 d'où P9=3.7+0.4*(-31)= - 8.7 (on bloquerait les nb négatif)

    Alex.


  • kanial
    Modérateurs

    En fait ce que tu es en train de vouloir faire c'est passer d'une loi linéaire à une loi quadratique* ce qui peut être une bonne idée mais il faut le faire plus franchement, c'est-à-dire éviter les paliers : tu peux carrément prendre k=|D-M|/100 +0.1 (le +0.1 étant là pour éviter toute annulation), le problème est qu'avec quelque chose de ce type tu vas avoir des variations très importantes, il vaudrait mieux prendre quelquechose comme k=|D-M|/200+0.1 .

    *Cette technique a pour effet d'amplifier les variations du prix lorsque les demandes varient beaucoup et de réduire fortement ces variations lorsque les demandes varient peu. (Si tu vois quelle tête a une parabole, en fait ce qui se passe c'est que la variation du nombre de demande est en abscisse et la variation du prix en ordonnée).


  • R

    "Cette technique a pour effet d'amplifier les variations du prix lorsque les demandes varient beaucoup et de réduire fortement ces variations lorsque les demandes varient peu."

    C'est exactement ça que je souhaite faire !!
    k=|D-M|/200+0.1

    Donc si je traduis ta formule ça donnerais quelque chose comme
    M6=14, D5=42 donc
    K=28/200+0,1=0,24

    Mais ou est-ce que j'intégre cette formule "K" dans l'autre formule ? je suppose qu'elle ne se suffit pas à elle même en voyant son seul resultat ?


  • kanial
    Modérateurs

    Cette formule c'est le calcul de ce qui était avant le coeffcient de proportionalité, tu n'as donc qu'à remplacer le k précédent (0.1) par cette valeur que tu pourras recalculer à chaque journée.


  • R

    Ok c'est très clair, donc si je remplace ça nous donne ce qui suit :

    M6=14, D5=42 d'où K=28/200+0,1=0,24 (k=|D-M|/200+0.1)

    Et donc :
    P6=P5+K*(D-M) >> P6=4.7+0.24*(28)=11.42

    En gardant les chiffres de tout à l'heure:
    M7=21, D6=57 d'où P7=11.42+0.18*(36)=17.9
    M8=37, D7=12 d'où P8=17.9+(-0.025)(-25)=18.525
    M9=37, D8=6 d'où P9=18.525+(-0.055)
    (-31)=20.23
    M10=18, D9=3 d'où P10=20.23+0.025*(-15)=19.855
    ...

    Je trouve ça très cohérent, et je pense que ça pourrait bien fonctionner... qu'en penses-tu ? As-tu une dernière suggestion/remarque en voyant ces formule et en ayant une vision globale sur ces chiffres (amélioration encore possible ?)?

    Un grand merci en tout cas, j'ai quelque chose de cohérent et qui marche !

    Alex.


  • kanial
    Modérateurs

    M8=37, D7=12 d'où P8=17.9+(**-0.025)*(-25)=18.525
    M9=37, D8=6 d'où P9=18.525+(
    -**0.055)*(-31)=20.23

    Attention j'avais mis des valeurs absolues pour k, il faut que k reste positif, sinon on va augmenter le prix alors qu'il faudrait le baisser. (La valeur absolue d'un nombre c'est ce nombre sans le signe - qui peut être devant). Il faut donc enlever ici les deux signes - en gras.
    Sinon ça me semble assez cohérent effectivement.


  • R

    Ok donc je reprend, si en calculant K je trouve un nombre négatif comme "-0.025" je le transforme en "0.025".

    Je crois que tu t'es trompé sur la derniere moyenne, M10=25 et non 18

    Voila ce que ça me donne :
    M7=21, D6=57 d'où P7=11.42+0.18*(36)=17.9
    M8=37, D7=12 d'où P8=17.9+0.025*(-25)=17.275
    M9=37, D8=6 d'où P9=17.275+0.055*(-31)=15.57
    M10=25, D9=3 d'où P10=15.57+0.025*(-22)=15.02

    C'est vrai que la c'est beaucoup plus cohérent vu que le prix se stabilise de lui même selon la moyenne précédemment calculée ! Par contre je trouve ça bizarre que sur la 3eme ligne le prix soit 15.02 : en effet on est passé de 12 à 6 demandes par jour et le prix a diminué que de 50 centimes... j'ai l'impression que c'est un peu leger ?

    Donc j'imagine que si il y a 0 demandes durant plusieurs jours le prix chute ce qui donnerait :
    M11=7, D9=0 d'où P11=15.02+0.065*(-7)=14.565
    M12=3, D9=0 d'où P12=14.565+0.085*(-3)=14.31
    M13=1, D9=0 d'où P13=14.31+0.095*(-1)=14.215

    Le problème que je vois ici, c'est que le prix ne chute pas assez vite alors qu'il n'y a aucune demande depuis 3 jours...

    Qu'en penses-tu ?


  • kanial
    Modérateurs

    Tu t'es trompé dans tes calculs :
    on trouve normalement :
    M7=21, D6=57 d'où P7=11.42+0.28*(36)=21.5
    M8=37, D7=12 d'où P8=21.5+0.225*(-25)=15.875
    M9=37, D8=6 d'où P9=15.875+0.255*(-31)=7.97
    M10=25, D9=3 d'où P10=7.97+0.210*(-22)=3.35
    Pour calculer k, tu fais calcules D-M tu divises par 200, tu enlèves le ssigne - s'il y en a un et tu ajoutes 0.1, si je me suis pas trompé ça donne ce que j'ai écrit e donc après trois jours à 0 ça donne :
    M11=7, D9=0 d'où P11=3.35+0.135*(-7)=2.405
    M12=3, D9=0 d'où P12=2.405+0.115*(-3)=2.06
    M13=1, D9=0 d'où P13=2.06+*(-1)=1.95
    Ce qui paraît déjà plus logique.


  • R

    Arrrrrrgh !! oui merci la calculette pourri de window et en plus je gardais le signe "-" avant d'ajouter 0.1... mea culpa !

    Merci pour cette précision, effectivement c'est beaucoup plus logique car j'ai testé avec une chute plus brutale comme ce qui suit et le prix chute aussi, c'est parfait !

    M8=37, D7=12 d'où P8=21.5+0.225*(-25)=15.875
    M9=37, D8=0 d'où P9=15.875+0.285*(-37)=5.33

    Ce qui nous donne une chute de 15 à 5 pour une chute de demande de 12 à 0 d'un jour à l'autre, ce qui me parait bien !

    Je crois que ce calcul final est bien...

    Merci beaucoup pour tes lumières en Math à un ignard tel que moi lol

    Je vais mettre en pratique ce caclul dès maintenant !

    Alex.


  • R

    Re-salut,

    j'ai encore un probleme ou le calcul passe mal.

    Prenons par exemple une base de prix en dessous duquel il sera impossible de descendre: 0.30

    si je fait les calculs que nous avons fait précédement voila ce que j'obtiens :
    M5=15 D4=-3 d'où P5 = 0.30+0.115*(-3) = -0.045€ problème donc je garde 0.30
    M6=14, D5=42 d'où P6=0.30+0.24*(28)=7.02
    M7=21, D6=57 d'où P7=7.02+0.28*(36)=17.1
    M8=37, D7=12 d'où P8=17.1+0.225*(-25)=11.47
    M9=37, D8=6 d'où P9=11.47+0.255*(-31)=3.56
    M10=25, D9=3 d'où P10=3.56+0.21*(-22)= -1.06

    Tu peux voir sur la dernière ligne que malgré le fait qu'il y ait encore 3 demandes ce jour la, le prix devient négatif !

    En fait il faudrait qu'il diminue pour se rapprocher au plus près du prix de base en dessous duquel il ne peut pas descendre à savoir 0.30
    Donc si il n'y a que 3 demandes, le prix devrait être un peu plus haut que 0.30

    Ce prix pourra être une variable qui sera différente selon les produits proposés. Ainsi grâce à ce prix de base (variable) les prix ne pourront descendre en dessous.

    Vois-tu où peut-etre le problème ?

    Merci par avance,
    Alex.


  • kanial
    Modérateurs

    Le truc c'est qu'il faut plutot que tu partes d'un prix moyen et noon d'un prix minimal, parce que là tu pars d'un prix minimal alors que la valeur de la moyenne est à 15 c'est-à-dire qu'il y a normalement eu une quinzaine de demandes sur les trois dernières journées, si tu pars de 0.3 avec une moyenne à 0 tu n'auras normalement pas de problèmes.
    Autre remarque : tu mets un nombre de demandes négatif ce qui est normalement impossible...


  • R

    Ok alors je garde la moyenne des prix je pense effectivement que mieux par contre ça ne change pas mon premier problème qui est le fait que le prix devienne négatif.

    J'ai pas compris quand tu m'as dit "tu mets un nombre de demandes négatif ce qui est normalement impossible...", car j'ai repris tes données et les dernieres demandes sont aux nombre de 3.

    Ai-je fait une erreur dans mes calculs a nouveau ?


  • kanial
    Modérateurs

    Citation
    M5=15 D4=-3 d'où P5 = 0.30+0.115*(-3) = -0.045€ problème donc je garde 0.30
    tu as écrit D4=-3, donc un nombre de demandes négatif, ce qui explique ton problème de nombre négatif à l'arrivée, puisqu'un nombre de demandes ne peut normalement être négatif...


  • R

    M5=15 D4=-3 d'où P5 = 0.30+0.115*(-3) = -0.045€

    Ah oui mais c'est juste une erreur d'innatention ça ne change pas le resultat final, regarde :

    M5=15 D4=12 d'où P5 = 0.30+0.115*(-3) = -0.045€
    K=(12-15)/200+0,1 = 0.115

    Le resultat final reste donc le même et c'est la même problematique pour la derniere ligne:
    M10=25, D9=3 d'où P10=3.56+0.21*(-22)= -1.06
    K=(3-25)/200+0.1 = 0.21

    Tu vois ?


  • kanial
    Modérateurs

    oui mais ça ça vient comme je l'ai dit précédemment du fait que tu aies choisi un prix très bas alors que la moyenne de demandes est correcte au départ. Il faut prendre un prix de départ cohérent avec la moyenne...


  • R

    ça veut dire qu'avec cette formule je ne peut pas avoir un prix de départ compris entre 0,1 et 0,9€ et une demande qui exploserait en passant d'un jour à l'autre de 0 à 50 ??

    Y a-t-il un moyen de prendre en compte ce tarif compris entre 0 et 1 sans que ca foute en l'air la formule ?

    J'avais cru comprendre aussi que le fait d'etre en dessous de 1 et d'utiliser 0 virgule quelque chose foutait le désordre !

    Peut-etre peut-on convertir le premier prix compris entre 0,1 et 0,99 en une autre valeur afin que le tout redevienne cohérent ?


  • kanial
    Modérateurs

    si tu peux très bien avoir un prix de départ à 0.3 (même à 0.1) si tu commences avec une valeur de la moyenne à 0 il n'y aura normalement pas de problème.


  • R

    oui effectivement tu as raison...

    Du coup je fais comme ci les trois premiers jours sont par défaut à 0 demande et donc la moyenne à 0 aussi...

    Ca fonctionne très bien maintenant...

    Encore merci pour ta patience et tes explications !!

    Alex.


  • S

    Salut,

    Excuse moi, j'ai pas bien compris si la baguette a Carrefour etait a 0.30 euros, elle passerais a 17.1 euros avec ton systeme de simulation des prix.

    A confirmer.
    sofiane


Se connecter pour répondre