JavaScript Aléatoire avec distribution gaussienne


Exemple

La fonction Math.random() devrait donner des nombres aléatoires ayant un écart type proche de 0. Lorsque vous choisissez un jeu de cartes ou que vous simulez un jet de dés, c'est ce que nous voulons.

Mais dans la plupart des cas, c'est irréaliste. Dans le monde réel, le hasard a tendance à se rassembler autour d'une valeur normale commune. Si vous tracez un graphique, vous obtenez la courbe en cloche classique ou la distribution gaussienne.

Pour ce faire, la fonction Math.random() est relativement simple.

var randNum = (Math.random() + Math.random()) / 2; 
var randNum = (Math.random() + Math.random() + Math.random()) / 3; 
var randNum = (Math.random() + Math.random() + Math.random() + Math.random()) / 4; 

L'ajout d'une valeur aléatoire au dernier augmente la variance des nombres aléatoires. La division par le nombre de fois que vous ajoutez normalise le résultat dans une plage de 0 à 1

Comme ajouter plus de quelques brouillons est compliqué, une simple fonction vous permettra de sélectionner la variance souhaitée.

// v is the number of times random is summed and should be over >= 1
// return a random number between 0-1 exclusive
function randomG(v){ 
    var r = 0;
    for(var i = v; i > 0; i --){
        r += Math.random();
    }
    return r / v;
}

Progression de la précision de la distribution en courbe en cloche avec des valeurs croissantes de v.

L'image montre la distribution des valeurs aléatoires pour différentes valeurs de v. En haut à gauche, on Math.random() appel en bas à droite est Math.random() . Ceci est de 5.000.000 échantillons utilisant Chrome

Cette méthode est la plus efficace à v<5