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

Algorithmes et structures de données Discussion :

algorithme de tirage par roue biaisé


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 41
    Points
    41
    Par défaut algorithme de tirage par roue biaisé
    Bonjour,

    Dans le cadre d'une implémentation d'un AG , je souhaite un tirage par roue biaisé. C'est à dire c'est 3 éléments A,B et C. Je veux que A et C ont une chance sur 4 d'être tirée et B deux chances sur quatre. Comment peut-t-on implémenter cet algorithme ?

    La solution qui consiste a allouer un tableau de taille 4 et de tirée un indice de ce tableau qui pointe vers un élément ne me semble pas optimale.

    merci de votre aide

  2. #2
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Tirer un flottant aléatoire x dans l'intervalle [0,1]
    Si x<=0.25 tirage A
    Si 0.25<x<=0.5 tirage C
    si x>0.5 tirage B
    Code python : 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
    import random
     
    def tirage():
        x=random.random()
        if x<=0.25:
            return 'A'
        if x<=0.5:
            return 'C'
        return 'B'
     
    if __name__ == "__main__":
        S=[tirage() for i in xrange(0,1000)]
        print S.count('A'),S.count('B'),S.count('C')
     
    """ Résultat: 
    256 490 254"""

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Ta solution est intéressante. Cependant pour mon problème j'ai un nombre variable d'élément avec un fitness variant de 0 à 1 et plusieurs éléments peuvent avoir le même fitness. par exemple [a=.1,b=.1,c=.1,d=.2,e=.2,f=.3,g=.4] où l'élément g à le plus mauvais fitness. Je pars pour l'instant sur une idée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    p=1/(somme de tous les fitness de tous les éléments)
    ce qui donne un pas.
    on a alors
    r=random();
    0<=r<F0*p
    F0*p<=r<F1*p
    F1*p<=r<F2*p
    ...
    D'où
    sum(Fn)*p<=r<sum(Fn+1)*p
    Cela me semble correcte dans l'idée. Mais cette approche nécessite de calculer la Somme des Fn qui si il y en a beaucoup n'est pas optimale.

    Que pensez-vous de mon idée. N'hésitez pas à en proposer d'autres .

    Merci

  4. #4
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    j'ai un nombre variable d'élément avec un fitness
    Excuse moi, mais je parle français et anglais couramment mais pas franglais (sans rire...)
    Je ne comprends pas ce que tu veux dire, ce que c'est que ton 'fitness' dans ce cas de figure.

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/05/2006, 15h41
  2. [Excel] Injecter du code VBA par le biais d'un fichier *.cvs
    Par llsn dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/05/2006, 20h42
  3. Réponses: 4
    Dernier message: 10/04/2006, 16h50
  4. Réponses: 2
    Dernier message: 19/02/2006, 15h08
  5. Réponses: 2
    Dernier message: 07/12/2005, 11h13

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