12
votes

Générateur de nombres aléatoires avec des probabilités plus élevées de donner des valeurs bases?

Comment puis-je générer un nombre pseudo-aléatoire (de préférence en Lua), où le générateur a une probabilité plus élevée de donner de petits nombres?

Dans mon cas, je veux donner un score aléatoire dans un jeu, où il est courant d'obtenir les scores inférieurs, mais les plus hauts apparaissent rarement. J'ai vu des générateurs de nombres aléatoires pondérés qui utilisent une table, mais cela ne correspond pas à mon plan. Je veux juste spécifier le minimum (0) le maximum (variable) et vous assurer que la plupart des numéros restent bas.

Je suis sûr que cela est possible avec une simple opération mathématique, mais je ne me souviens pas lequel c'était. Aime filtrer la sortie régulière de Math.Random, pas besoin d'un générateur vraiment aléatoire.


0 commentaires

5 Réponses :


3
votes

Ce n'est peut-être pas ce que vous recherchez, car ce n'est pas une courbe de cloche polyvalente, mais pourquoi ne pas créer deux étapes? Définissez une probabilité d'obtenir un score inférieur à portée et si vous le faites correspondre, votre gamme est la gamme inférieure. Sinon, votre gamme est du haut de la plage basse à la fin de la plage élevée.

L'effet net est que vous obtiendriez habituellement un score faible, mais vous obtiendrez parfois des scores élevés. Je parie que cela aurait l'air plutôt bien et est très simple.

Que pensez-vous?


0 commentaires

4
votes

Je voudrais simplement transformer les valeurs d'une fonction aléatoire standard, comme ceci:

r1=math.random(0,255)
r2=math.exp(math.random(0,255))


0 commentaires

15
votes

Essayez math.floor (minscore + (maxcore-minscore) * math.random () ^ 2) . Ajustez la puissance en fonction de votre distribution souhaitée.


0 commentaires


0
votes
local elements = {"a", "b", "c", "d"} -- elements
local weights = {40, 24, 22, 14} -- weights of elements
local n = weighted_random (weights) -- returns 1, 2, 3 or 4
local element = elements[n] -- returns "a", "b", "c" or "d" 
-- with chances: 40/100, 24/100, 22/100, 14/100, as in weights

0 commentaires