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 :

Choix aléatoire selon une loi de probabilité donnée


Sujet :

Algorithmes et structures de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Choix aléatoire selon une loi de probabilité donnée
    Bonjour,

    Je cherche à implémenter le modèle de Barabasi-Albert (en python, mais ce n'est pas très important ici). Voici de quoi il s'agit : https://fr.wikipedia.org/wiki/Mod%C3...ert#Algorithme.
    Mais le problème c'est que je ne comprend pas comment faire.

    Mon problème de compréhension peut se reformuler ainsi :

    Comment choisir dans une liste [1,...,n] un et un seul élément selon une loi de probabilité fixé non uniforme (sinon on tire un nombre aléatoire et le tour est joué) ?
    J'ai accès à une liste [p(1),...,p(n)] de probabilités associés.

    Ma première idée : parcourir la liste, choisir un nombre aléatoire N (entre 0 et 1), si N>p(i) alors on choisit i, sinon on réitère. Mais j'ai l'impression que cela va favoriser le début de liste au dépend de la fin, et donc baiser le résultat.
    Ou alors : je tire un nombre k uniformément entre 1 et n, je tire un second nombre N que je compare à p(k), si N >p(k) alors je continu le programme, sinon je retire un nombre k, puis un nombre N... ?

    (Il y a t-il déjà une fonction en python ?)

    je vous remercie par avance !

  2. #2
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Choix aléatoire selon une loi de probabilité donnée
    Bonjour,

    Citation Envoyé par Lupa99 Voir le message
    ... Mon problème de compréhension peut se reformuler ainsi :

    Comment choisir dans une liste [1,...,n] un et un seul élément selon une loi de probabilité fixée non uniforme (sinon on tire un nombre aléatoire et le tour est joué) ?
    J'ai accès à une liste [p(1),...,p(n)] de probabilités associés ...
    Puisque ton tirage pseudo-aléatoire porte sur un nombre fini (N) d'issues, tu peux l'obtenir comme suit, après constitution d'un tableau bidimensionnel dont
    a) la première ligne contient les probabilités (pk) arbitrairement choisies de chacun des termes d'indice (k), sans souci de normalisation;
    b) la deuxième, le quotient de leur somme cumulée jusqu'au rang considéré par le total de tous les termes (soit donc un réel compris entre zéro et l'unité):
    q = Si=1i=k(pi) / ST , avec ST = Si=1i=N(pi)

    Tu dois obtenir au niveau de la deuxième ligne: T[2, 0] = 0 et T[2, N] = 1

    Exemple: pour N = 10 termes associés à une loi de probabilité de la forme pk = k2*(N + 1 - k)2 , on obtient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Pk = T[1, k] =     100    324    576    784    900    900    784    576    324    100  %  
    Sk =               100    424   1000   1784   2684   3584   4368   4944   5268   5368  
    qk = T[2, k] =    1.86   7.90  18.63  33.23  50.00  66.77  81.37  92.12  98.14 100.00  %
    Un simple appel du générateur de nombres PA permet alors de tirer le rang du terme choisi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    r:= Random;                      i:= 1;
    REPEAT Inc(i) UNTIL (T[2, i]>r); k:= i - 1;

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour votre réponse !
    C'est très clair

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

Discussions similaires

  1. Tirage aléatoire selon une loi déterminée
    Par Rorchar dans le forum MATLAB
    Réponses: 0
    Dernier message: 10/04/2018, 13h06
  2. Génération de données selon une loi normale
    Par alamiii dans le forum Statistiques, Data Mining et Data Science
    Réponses: 0
    Dernier message: 18/05/2017, 23h34
  3. Réponses: 10
    Dernier message: 19/01/2012, 13h56
  4. Réponses: 4
    Dernier message: 18/01/2007, 14h48
  5. Réponses: 2
    Dernier message: 16/05/2006, 18h02

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