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

Python Discussion :

Influencer un nombre aléatoire


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de memento80
    Homme Profil pro
    Boulot : ne rentre pas dans une case
    Inscrit en
    Novembre 2004
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Boulot : ne rentre pas dans une case
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2004
    Messages : 163
    Par défaut Influencer un nombre aléatoire
    Bonjour à tous,

    Je débute en Python... Jusqu'ici j'ai réussi à me débrouiller mais là, je bute sur un petit problème.
    Mon soucis serait peut-être plus proche d'un problème de math que du Python mais bon... peut-être que Python a une solution miracle.

    Voilà, j'essaye juste de générer des nombres aléatoires entre 0 et 100... mais je voudrais qu'il y ait plus de probabilité qu'il soit proche de 100 que de 0.

    Si quelqu'un peut calmer ma migraine, je lui en serais reconnaissant.

    A+
    Memento

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 140
    Par défaut Proba pondérée
    Bonjour, bienvenue dans python.

    Peut être qu'une solution toute faite existe, mais moi je vais te proposer un truc hancrafted.

    tu peux tenter de dire que la proba de tirer un nombre entre 0.5 et 1 est supérieure sur une probabilité définie disons à 70% de chances d'avoir un nombre de cette categorie. ce qui nous donne un truc tel que:


    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
     
    import random
     
    #on définit une valeur aléatoire
    r = random.random()
     
    #on a 70%de chances que ce soit un nombre entre 0.5 et 1
    if random.random() > 0.3:
      while r < 0.5:
        r = random.random()
    else:
      while r > 0.5:
        r = random.random()
     
    #le reste du temps on cherche à générer un nombre compris entre 0 et 0.5.
    Voila, Bisou

  3. #3
    Membre expérimenté Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Par défaut par r^2
    Bonjour,

    Moi je ferais une fonction sur r qui transforme la répartition entre 0 et 1 exemple r^2.
    (car il faut, sur la fonction, que pour x=0=>y=0, x=1=>y=1 et y toujours <1 sur la fonction)
    Tu peux même calculer la probabilité par zone en intégrant la surface d'une zone.

    Alex

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    salut,

    un petit lien vaut mieux qu'un long discours. je vais dans le sens d'alexdevl:

    http://fr.wikipedia.org/wiki/Fonctio...C3%A9partition

    regarde plus particulièrement le chapitre 4 c'est ce dont tu as besoin.

    en résumé:

    - tu définis ta fonction de répartition
    - tu définis la fonction réciproque
    - tu génères un nombre entre 0 et 1 que tu donnes à manger à ta fonction réciproque et tu obtiendra un "tirage" qui correspond à ta fonction de répartition.

  5. #5
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonjour.

    Citation Envoyé par memento80 Voir le message
    Voilà, j'essaye juste de générer des nombres aléatoires entre 0 et 100... mais je voudrais qu'il y ait plus de probabilité qu'il soit proche de 100 que de 0.
    Mathématiquement parlant, cela n'a pas de sens. D'un point de vue pratique peut-être... Il faudrait nous dire dans quel cadre tu as besoin de nombres aléatoires plus "proches" de 100 que de 0.

  6. #6
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut
    Soit tu as en tete une fonction de repartition précise, dans ce cas suis la réponse de Kango. Sois n'importe quelle distribution pas trop dégénérée te convient, dans ce cas la piste de alexdevl semble la bonne. Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    n= int(100*random.rand()**2)
    correspond à la distribution image par x|-> x^2 de l'uniforme

  7. #7
    Membre confirmé Avatar de memento80
    Homme Profil pro
    Boulot : ne rentre pas dans une case
    Inscrit en
    Novembre 2004
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Boulot : ne rentre pas dans une case
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2004
    Messages : 163
    Par défaut
    Merci déjà pour vos premières réponses ou remarques.

    Je suis au boulot donc je ne peux approfondir ou tester cela pour le moment, j'essaierai dès ce soir et vous tiendrai au courant.

    Par contre juste pour répondre à rambc, plutôt que d'expliquer mon besoin précis (ça serait un petit peu long à expliquer), je vais prendre un autre exemple un peu plus simple que j'ai trouvé par hasard dans le magazine Ordinateur Individuel de ce mois (oui, une coïncidence).
    Leur réponse, sous la forme d'un calcul Excel, pourrait correspondre à mon besoin mais dans un contexte différent. Mais la précision du résultat, après quelques premiers tests, était encore un peu éloigné de la précision que je cherchais (en plus, c'est sous Excel... même si on pourrait transposer le principe).

    Bref, l'exemple du besoin en question était celui-ci :
    On veut simuler une liste de valeur sensée représenter les notes d'une classe de "bons élèves". Du coup, les notes sur 20 devaient être plus proches de 20 que de 0.
    On pourrait imaginer l'inverse avec une classe de "mauvais élèves".

    Voilà pour un exemple d'utilisation de l'influence sur un nombre aléatoire.
    Donc, pour moi, le besoin est le même... mais sur 100.

  8. #8
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut
    influence sur un nombre aléatoire
    Simple remarque de vocabulaire: le nom usuel est plutôt Loi/Distribution/Repartition non uniforme, la notion d'influence etant liée à l'impact d'une variable aléatoire sur une autre

  9. #9
    Membre expérimenté Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Par défaut
    Bonjour,

    J'ai fait un peu de code pour voir, il faut plutôt 1-r^2 en fait :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    import random
     
    print "r"
    plages={}
    for i in range(10):
        plages[i]=(0,0)
    nValeurs=0
    for i in range (10000):
        r=random.random()
     
        plage = int(r*10)
        nValeurs+=1
        nPlage=plages[plage][0]+1
        pourcent=int(10000.0*nPlage/nValeurs)/100.0
        plages[plage]=(nPlage,pourcent)
    for i in plages:
        print "plage 0."+str(i),plages[i][0],"valeurs   ",plages[i][1],"%"
    print"-----"
     
    print "1-r^2"
    plages={}
    for i in range(10):
        plages[i]=(0,0)
    nValeurs=0
    for i in range (10000):
        r=random.random()
        r=(1-r*r)
        plage = int(r*10)
        nValeurs+=1
        nPlage=plages[plage][0]+1
        pourcent=int(10000.0*nPlage/nValeurs)/100.0
        plages[plage]=(nPlage,pourcent)
    for i in plages:
        print "plage 0."+str(i),plages[i][0],"valeurs   ",plages[i][1],"%"
    Et cela fait la sortie suivante :
    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
    r
    plage 0.0 996 valeurs    9.96 %
    plage 0.1 991 valeurs    9.92 %
    plage 0.2 1015 valeurs    10.17 %
    plage 0.3 960 valeurs    9.6 %
    plage 0.4 980 valeurs    9.8 %
    plage 0.5 1010 valeurs    10.11 %
    plage 0.6 993 valeurs    9.94 %
    plage 0.7 1003 valeurs    10.04 %
    plage 0.8 1028 valeurs    10.28 %
    plage 0.9 1024 valeurs    10.24 %
    -----
    1-r^2
    plage 0.0 527 valeurs    5.28 %
    plage 0.1 507 valeurs    5.07 %
    plage 0.2 569 valeurs    5.7 %
    plage 0.3 648 valeurs    6.48 %
    plage 0.4 638 valeurs    6.38 %
    plage 0.5 737 valeurs    7.37 %
    plage 0.6 821 valeurs    8.21 %
    plage 0.7 1043 valeurs    10.43 %
    plage 0.8 1293 valeurs    12.93 %
    plage 0.9 3217 valeurs    32.17 %

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

Discussions similaires

  1. Influencer un nombre aléatoire (le retour)
    Par memento80 dans le forum Langage
    Réponses: 10
    Dernier message: 26/12/2011, 19h49
  2. Nombres aléatoires
    Par Mat 74 dans le forum Assembleur
    Réponses: 20
    Dernier message: 29/08/2004, 13h31
  3. recherche algo de génération de nombre aléatoire
    Par Pascale38 dans le forum MFC
    Réponses: 2
    Dernier message: 26/01/2004, 14h20
  4. Nombre aléatoire en SQL
    Par sqlnet dans le forum Langage SQL
    Réponses: 8
    Dernier message: 19/08/2003, 12h38
  5. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/08/2002, 16h30

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