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] Tirage au sort avec probabilité


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 49
    Points : 41
    Points
    41
    Par défaut [VBA-E] Tirage au sort avec probabilité
    Tout d'abord, bonjour à tous, je suis nouvelle sur ce forum.

    Je travaille actuellement sur un algorithme génétique, et j'ai le problème suivant :

    j'ai les deux colonnes suivantes :
    - dans la première, une liste de nombre
    - dans la deuxième, des probabilités associés à chaque nombre.

    J'aimerai générer dans VBA un tirage au sort de nombre de la première colonne, en fonction de leur probabilité associé.

    Ou pour ceux qui connaissent les algorithmes génétiques, j'ai envisagé cela pour la selection des individus, peut-être avez vous une meilleure idée...

    Merci.

  2. #2
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Questions :

    * la taille de ta population initiale est fixe? Car si tu te bases sur des probabilités pour la générer, sa taille ne sera pas forcément fixe.

    * A quoi correspondent les nombres de la première colonne?

    Ou pour ceux qui connaissent les algorithmes génétiques, j'ai envisagé cela pour la selection des individus, peut-être avez vous une meilleure idée...
    Pour trouver une autre solution, tu devrais nous préciser à quoi correspondent tes individus.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 49
    Points : 41
    Points
    41
    Par défaut
    la première colonne correspond a la référence des individus.
    En fait, après avoir calculé la "fitness" de chaque individus, je leur ai associer des probabilités pour se ramener à une "fitness" comprise entre 0 et 1.

    (Sinon, la taille de la population initiale est fixe, les probabilités ne sont pas utilisés pour cela. L'utilisateur pourra fixer cette taille lui meme...)

    Ensuite, vient l'étape de la sélection pour la reproduction, je voudrai donc que les individus aient d'autant plus de chances d'être sélectionnés que leur fitness (donc, leur probabilité) est importante.

    c'est pour cela que je voudrai générer le tirage aléatoire des individus à sélectionner pour la reproduction, mais ce tirage doit tenir compte de la probabilité...

    Mon algorithme à pour but de réaliser des plans de découpe de pièces rectangulaires dans des panneaux, sastisfaisant un carnet de commande.
    Un individu est donc constitué de n plans de débit "optimaux", réalisés dans des quantités à spécifier (j'ai utiliser le solveur pour ce calcul..) pour répondre au carnet de commande.

  4. #4
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Un petit exemple à adapter à ton problème:

    i: indice de l'élément du tableau
    v(i): valeur de l'élément d'indice i
    p(i): probabilité de tirer v(i)

    Il faut que la somme des p(i) = 1

    i v(i) p(i) cumul des proba
    1 2 0,3 0,3
    2 4 0,4 0,7
    3 7 0,1 0,8
    4 1 0,2 1

    Puis tu tires un nombre n avec 0 <= n < 1
    si 0 <= n < 0,3 -> i = 1
    si 0,3 <= n < 0,7 -> i = 2
    si 0,7 <= n < 0,8 -> i = 3
    si 0,8 <= n < 1 -> i = 4

    Je pense que c'est un solution qui fonctionne...
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

  5. #5
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Ok, je comprends mieux, je pensais que tu étais dans une logique d'initialisation de population et non de croisement.

    Tu souhaites donc croiser plus fréquement les meilleurs individus?

    Le nombre de croisement (ou reproduction?) est-il fixe à chaque génération?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 49
    Points : 41
    Points
    41
    Par défaut
    Oui effectivement je n'y avais pas pensé, ça me parait utilisable dans mon cas.
    En plus, c'est simple à mettre en oeuvre
    La somme des mes proba est deja égale à 1, c'est pour cela que j'étais passée par les probas...

    et merci à tous les deux !
    bonne journée.

  7. #7
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 72
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par HPJ
    Un petit exemple à adapter à ton problème:

    i: indice de l'élément du tableau
    v(i): valeur de l'élément d'indice i
    p(i): probabilité de tirer v(i)

    Il faut que la somme des p(i) = 1

    i v(i) p(i) cumul des proba
    1 2 0,3 0,3
    2 4 0,4 0,7
    3 7 0,1 0,8
    4 1 0,2 1

    Puis tu tires un nombre n avec 0 <= n < 1
    si 0 <= n < 0,3 -> i = 1
    si 0,3 <= n < 0,7 -> i = 2
    si 0,7 <= n < 0,8 -> i = 3
    si 0,8 <= n < 1 -> i = 4

    Je pense que c'est un solution qui fonctionne...
    c est vraiment bien pense

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 49
    Points : 41
    Points
    41
    Par défaut
    pour répondre à Catbull, je pensais que l'utilisateur pourrai fixer lui même le taux de croisement avant l'exécution de l'algorithme, il serai donc fixe à chaque génération.

    Il me semble que je n'ai pas vu d'algo génétiques ou les taux de croisements sont variables, mais tu as peut etre raison je devrais me documenter la dessus.
    Si tu as des infos...

  9. #9
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Citation Envoyé par chmod777
    c est vraiment bien pense
    Merci, c'est vrai que j'ai été fier quand je l'ai trouvé
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 49
    Points : 41
    Points
    41
    Par défaut
    oui c'est vrai que je m'en veux de ne pas y avoir pensé ... c'est simple, rapide.. bref la méthode sioux par excellence

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] Tirage au sort avec Symfony
    Par devach dans le forum Symfony
    Réponses: 4
    Dernier message: 08/06/2015, 02h37
  2. [XL-2007] Tirage au sort avec conditions
    Par Pierre77 dans le forum Excel
    Réponses: 3
    Dernier message: 05/09/2014, 12h08
  3. retrouver un tirage au sort avec un numero seed
    Par tiyolx dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/03/2014, 22h33
  4. [XL-2007] Tirages au sort avec une contrainte
    Par islande dans le forum Excel
    Réponses: 2
    Dernier message: 29/01/2014, 10h54
  5. [AC-2010] Base de données avec tirage au sort
    Par Martintin dans le forum Modélisation
    Réponses: 9
    Dernier message: 11/03/2011, 18h59

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