2012-01-05 3 views
1

Je suis un débutant en Java. Je sais que Java a une fonction de générateur de nombres aléatoires de Gaussian Distribution. Comme je l'ai appris d'une autre question, le générateur aléatoire intégré de Java n'est pas très bon car il ne prend pas la moyenne d'entrée et l'écart-type de la distribution gaussienne dont j'ai le plus besoin. Je travaille sur l'algorithme génétique. Pour les besoins de la mutation, je dois générer un nombre aléatoire à partir de la distribution gaussienne, de la distribution de Cauchy et de la distribution de Levy. La fonction de générateur doit prendre l'entrée Scale Parameter et Location Parameter de cette distribution. Comment puis-je faire ceci?Génération de nombre aléatoire de Cauchy

Répondre

0

Java ne possède pas ces intégrés. Vous devrez créer vos propres fonctions ou trouver une bibliothèque tierce.

0

Eventhough la question est un peu vieux, je vais essayer de répondre que je cherchais la même chose et il pourrait aider à la personne suivante:

Pour mettre en œuvre un RNG pour une distribution arbitraire que vous devez savoir ce qui suit :

  1. Générer des nombres uniformément réparties dans le [0,1) plage a pas de problème
  2. la dérivation d'un distributionfunction est la densité de distribution (par exemple, la courbe de Gauss Bell)
  3. le distributionfunctio n est (plus ou moins) 0 à -Infinity et 1 à Infinity. Entre ces extrêmes, il augmente de façon monotone.

Maintenant, vous devez utiliser ces choses (au moins 1. et 3.) de la manière suivante:

  1. Calculer la fonction de distribution (intégrant la densité)
  2. résoudre cette équation pour x
  3. Dans la fonction résultante, passez un nombre uniformément distribué en tant que paramètre pour obtenir des résultats distribués de façon appropriée.

Exemple:

distribution de Cauchy:

f (x) = 1/(x² + 1)/Pi

  1. fonction de distribution:

y = F (x) = arctan (x)/Pi + 0.5 (il faut ajouter 0.5 pour obtenir une fonction R -> [0,1]

  1. résoudre pour x

x = g (y) = tan (y-0.5) * Pi (G est l'inverse de F - habituellement F^(- 1)

  1. Maintenant, il suffit de mettre un double généré en tant que Y dans la fonction:

    retour Math.tan (rand.nextDouble() -0,5) * Math.PI.;

pour l'échelle et l'emplacement des paramètres que vous suffit de procéder comme suit:

X est votre gaussienne (ce qui signifie: N (0,1)) distribués variable stochastique

Mean (a * X + b) = a * moyenne (X) + b Var (a * X + b) = a² * Var (X)

un est votre paramètre d'échelle, b est votre position paramètre. Générez donc une variable distribuée gaussienne standard et multipliez par sqrt (échelle) et ajoutez le paramètre d'emplacement.

Questions connexes