7
votes

Choisir n chiffres avec une somme fixe

dans certains code je veux choisir n numéros aléatoires dans [0,1) quelle somme à 1 .

je fais Donc, en choisissant les numéros indépendamment dans [0,1) et en les normalisant en divisant chacun par la somme totale: xxx

mon "problème" est que la distribution que je sors est assez rare. Choisir un million de chiffres, pas une seule dépasse 1/2 . Par certains efforts, j'ai calculé le PDF, et ce n'est pas bien.

Voici le fichier PDF bizarre que je reçois 5 variables:

 Entrez la description de l'image ici

Avez-vous une idée d'un bel algorithme de choisir les numéros, qui entraînent une simple ou simple Distribution?


3 commentaires

Je ne suis pas sûr que je comprenne, si vous cassez le numéro 1 en un million de pièces aléatoires, ne devriez-vous pas une personne de plus de 0,5. S'il y en avait, cela signifierait que les 999 999 autres devraient correspondre à l'autre moitié.


Jetez un coup d'œil à vecteurs aléatoires avec somme fixe . Le lien de téléchargement mène à un fichier avec le code MATLAB et un document expliquant l'algorithme.


duplicaté possible de Générer plusieurs numéros aléatoires à égaler une valeur dans Python


3 Réponses :


6
votes

Vous serez peut-être intéressé par le Dirichlet Distribution utilisée pour générer des quantités qui somme à 1 Si vous recherchez des probabilités. Il y a aussi une section sur la façon de les générer à l'aide de gamma distributions ici .


2 commentaires

Vous avez généralement besoin d'une distribution autre que l'uniforme d'où attirer vos chiffres. La réponse de Job suggère, vous pouvez utiliser la distribution gamma avec Alpha <1 pour obtenir des résultats "Peakier". Cela vous donnera un tirage au sort de la Directrice Distribution qui est pratique puisque c'est le conjugué précédant le multimomial que vous recherchez.


L'article a une belle section "dessin", que j'ai ajouté des exemples de code à. Je ne suis pas vraiment sûr que cela compte ce que les paramètres sont, tant qu'ils sont égaux cependant?



19
votes

Vous cherchez à partitionner la distance entre 0 et 1.

Choisissez N - 1 numéros de 0 à 1, triez-les et déterminez les distances entre chacune d'elles.

Cela partitionnera l'espace 0 à 1, ce qui devrait donner le résultat important occasionnel que vous ne recevez pas.

Malgré tout, pour de grandes valeurs de N, vous pouvez généralement vous attendre à ce que votre valeur max diminue également, tout aussi rapidement que votre méthode.


4 commentaires

Un bel algorithme. Savez-vous quelle distribution cela peut entraîner?


Autre que l'appelant une "partition aléatoire", je ne sais pas un moyen de faire référence à cela. Je l'ai toujours vu du côté partitionnement des choses, pas de la distribution des longueurs de segment.


J'ai déduit le CDF 1- (1-x) ^ n et PMF n (1-x) ^ (n-1) . Les coutures de distribution doivent avoir une probabilité plus élevée de petits nombres (il n'a pas le sommet près de 1 / N) que le mien, il a probablement aussi plus de grands nombres. Je ne l'ai pas encore comparé avec la Dirichlet Distribution.


C'est la distribution bêta, dont le cas le plus simple est la répartition des probabilités de l'élément minimum des uniformes de N.



0
votes

Un autre moyen d'obtenir N Numéros aléatoires qui résonnent jusqu'à 1: xxx

Ceci fait plus de chances plus probables.


0 commentaires