IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E]Pb Simulation de Monté Carlo avec stockage d'information


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut [VBA-E]Pb Simulation de Monté Carlo avec stockage d'information
    Bonjour tout le monde.

    Je veux faire un programme sous excel pour faire la simulation de Monte Carlo. Comme j'ai besoin aussi des informations sur chaque tirage, c'est pour calculer les quantiles, bref, ce que je fais maintenant c'est de stocker tous les tirages dans le tableau excel. Du coup, il met super longtemps pour calculer, genre 30 mins pour 10 000 simulations.

    Donc je voudrais savoir s'il existe un algorithme plus efficace pour réduite le temps de calcul. Je vous remercie en avance.

    PS:Je sais pas si je suis clair sur l'explication de problème. Si vous avez des questions, j'essayerai de mieux m'exprimer. lol

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Peux-tu nous dire ce que c'est la simulation Monte Carlo ?

    Et redétaillé ce que tu fais étape par étape.

    Merci

    Starec

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Starec
    Bonjour

    Peux-tu nous dire ce que c'est la simulation Monte Carlo ?

    Et redétaillé ce que tu fais étape par étape.

    Merci

    Starec
    Simulation de Monte Carlo:
    C'est dans une boucle for, je tire chaque fois un nombre aléatoire qui suit une loi de probabilité qu'on connait. Par ex, la loi la plus simple est loi uniforme dans l'intervalle [0,1]. Ensuite dans mon cas je stocke ce nombre dans une cell d'excel.

    En fait, j'ai testé les deux cas. Le 1er, sans stockage, le calcul se fait instantanément, 1 000 000 simulation en moins de 10 secs. Le 2eme est de stockage chaque fois le nombre simulé dans le tableau excel, donc pour 10 000, il met une demi heure pour calculer.

    Le but de cette méthode est de connaitre quand le nombre d'itération est grand, la moyenne de tous ces nombres tirés est équivalente à la moyenne théorique. Souvent on utilise cette méthode pour calculer la moyenne de loi que l'on peut pas trouver analytiquement.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    La première amélioration que j'ai fais est de créer dans excel une matrice de laquelle chaque cellule contient la formule mathématique qu'il faut pour la simulation, et ensuite calculer d'un coup. L'avantage est sa rapidité et l'inconvéniant est sa taille énorme(50 Mo).

    Aussi je pense faire, aulieu de stocker chaque fois dans excel directement, je le met dans un tableau de vba, ensuite quand l'itération est définitivement finie, je le copirai dans excel. Mais j'ai pas réalisé cette méthode en ne pas croyant trop à l'efficacité qu'elle peut porter.

    A part ca, j'ai aucune idée pour l'amélioration. Au fait, dans la suite j'aurai besoin de compliquer la simulation en ajoutant des calcul supplémentaires. Donc l'amélioration en terme de temps de calcul me parrait très important à ce stade la.

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Hello starec, regarde

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Hello geminium,
    Citation Envoyé par tu
    En fait, j'ai testé les deux cas. Le 1er, sans stockage, le calcul se fait instantanément, 1 000 000 simulation en moins de 10 secs. Le 2eme est de stockage chaque fois le nombre simulé dans le tableau excel, donc pour 10 000, il met une demi heure pour calculer.
    Peux-tu nous mettre le code que tu utilises pour stocker tes nombres simulés, on peut peut-être t'indiquer une méthode pour accélérer la procédure. 1/2 h pour 10000, c'est long...
    A+

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    bien sur
    Voici le code.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub ttt()
        ' Désactivation de la mise à jour de l'affichage afin d'accélérer l'exécution.
        Application.ScreenUpdating = False
        Dim NBSimul As Integer
        NBSimul = 10000
        ' Nettoyage des données dans la feuille Memorisation
        Sheets("Tx 1Y").range("B4:U15003").Clear
        Sheets("Tx 10Y").range("B4:U15003").Clear
        Dim destination As range
        Dim destination2 As range
        Set destination = Sheets("Tx 1Y").range("B4")
        Set destination2 = Sheets("Tx 10Y").range("B4")
        For i = 1 To NBSimul
            Application.CalculateFull
            Sheets("Feuil1").range("S6:S25").Copy
            destination.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, operation:=xlNone, skipblanks:=False, Transpose:=True
            Sheets("Feuil1").range("T6:T25").Copy
            destination2.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, operation:=xlNone, skipblanks:=False, Transpose:=True
            Set destination = destination.Offset(1, 0)
            Set destination2 = destination2.Offset(1, 0)
        Next i
        Application.ScreenUpdating = True
        MsgBox ("done!")
    End Sub


    Remarque : dans le range S6:S25 et T6:T25, les cellules contiennent les formules de simulation, donc c'est pour ca que j'appelle CalculateFull chaque fois.

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    puisque tu n'utilise pas ces nombres que tu calcule, mais que tu en tire seulement une moyenne, utilise une matrice en vba.
    en gros et comme on dit dans les pubs : code non contractuel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    dim montableau()
    do while i = 10000
    i = 1
    montableau(i) = maformulemagique
    i = i + 1
    loop
    for i = 1 to 1000
    monadition = montableau + montableau(i)
    mamoyenne = monadition/ubound(montableau)
    next i
    bien sur , je suis consient que c'est une mùoyenne bien facile a mettre en oeuvre comparé a ta moyenne de montécarlo, mais le principe reste valable, et tes nombres si ils sont bien déclarés, tiendront moins de place que si tu les inscrit quelque part, et rien ne t'interdit de les extraire de la matrice, si par exemple, tu as besoin du plus petit, ou du plus grand, ou que sais je?

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Hello Asimblad, tu as mis "do while i = 10000"
    Je pense que tu veux dire "do while i < 10001"
    Ce que tu peux aussi faire c'est provoquer le calcul des deux seules plages concernées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets(1).Range("S6:S25").Calculate
    Je ne sais pas si tu vas gagner grand chose mais tu peux le tester.
    Par ailleurs, à propos de CalculateFull...
    Citation Envoyé par L'aide
    Cette méthode provoque un calcul intégral des données dans tous les classeurs ouverts.
    A+

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    c'est ça ouskel
    Hello Asimblad, tu as mis "do while i = 10000"
    Je pense que tu veux dire "do while i < 10001"
    code non contractuel

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci les gars pour vos aides.

    je pense ce que je vais faire, c'est de stocker dans le tableau et ensuite le mettre dans excel.

    Ma nouvelle question est comment transformer le tableau de réels dans excel. C'est surement un peu bete, merci de votre patience.

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Aucune idée. Mais dans Excel, jète un oeil à "COMPLEXE.REEL", dans l'aide
    Au cas où... tu peux utiliser les fonctions Excel dans VBA
    Tu dis

  13. #13
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2006
    Messages : 103
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par geminium
    Bonjour tout le monde.

    Je veux faire un programme sous excel pour faire la simulation de Monte Carlo. Comme j'ai besoin aussi des informations sur chaque tirage, c'est pour calculer les quantiles, bref, ce que je fais maintenant c'est de stocker tous les tirages dans le tableau excel. Du coup, il met super longtemps pour calculer, genre 30 mins pour 10 000 simulations.

    Donc je voudrais savoir s'il existe un algorithme plus efficace pour réduite le temps de calcul. Je vous remercie en avance.

    PS:Je sais pas si je suis clair sur l'explication de problème. Si vous avez des questions, j'essayerai de mieux m'exprimer. lol
    tu fais IT quant?

Discussions similaires

  1. Simulation de Monte Carlo
    Par tabatta dans le forum Fortran
    Réponses: 3
    Dernier message: 15/03/2014, 11h28
  2. Parallélisation d'une simulation de Monte Carlo
    Par Kelen dans le forum Programmation parallèle, calcul scientifique et de haute performance (HPC)
    Réponses: 1
    Dernier message: 01/03/2013, 10h35
  3. [XL-2003] calcul seuil rentabilité avec algorithme (simulation de Monte Carlo)
    Par Les Bats dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/03/2011, 16h39
  4. Algorithme vba avec simulation de Monté Carlo
    Par Les Bats dans le forum Général VBA
    Réponses: 3
    Dernier message: 07/03/2011, 18h01
  5. Simulation de Monte Carlo par Cognos v7
    Par waelT dans le forum Cognos
    Réponses: 1
    Dernier message: 17/02/2008, 13h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo