2012-01-05 20 views
1

私はJavaの初心者です。 JavaにはGaussian Distributionの乱数生成関数があります。私が他の質問から知っているように、Javaの組み込みランダムジェネレータは、私が最も必要とするガウス分布の入力平均と標準偏差を取らないので、それほど良くありません。私は遺伝的アルゴリズムに取り組んでいます。私は、突然変異の目的のために、ガウス分布、コーシー分布、賦形分布から乱数を生成しなければなりません。ジェネレーター関数はその分布の入力Scale ParameterLocation Parameterを取る必要があります。これどうやってするの?Cauchyから乱数生成

答えて

0

Javaには組み込まれていません。独自の機能を作ったり、そうしたサードパーティのライブラリを見つけなければなりません。

0

質問は、私は同じことを探していたし、それが次の人を助けることができるように答えるためにしようとするでしょう、ちょっと古いです本家:

あなたは次のことを知っている必要があり、任意の配布のためのRNGを実装するには[0,1)の範囲内の均一に分布番号を生成

  1. は問題
  2. しないdistributionfunctionの導出はdistributionfunctio分布密度(例えば、ガウスベル曲線)
  3. ありますnは、-Infinityで(多かれ少なかれ)0、Infinityで1です。それらの極端の間では、単調に増加する。 (密度を統合)分布関数を計算し

    1. xについて、この方程式を解く:今、あなたはこれらの事(少なくとも1および3)、次のようにを使用する必要が

  4. 結果の関数では、適切に分布した結果を得るためのパラメータとして一様に分布した数値を渡します。

例:

コーシー分布:

F(X)= 1 /(X 2 + 1)/ PI

  1. 分布関数:

Y = F(x)= arctan(x)/ Pi + 0.5(R - > [0,1]関数を得るには0.5を加える必要があります)

  1. 0は、y 0(

X = G(y)が黄褐色= xについて解きます。5)* PI(GはFとは逆である - 通常F ^( - 1)

  1. 今だけの関数でyと生成された二重を置く:

    リターンMath.tan(rand.nextDoubleを()-0.5)*にMath.PI;スケールのために

と場所のパラメータだけ次の操作を実行する必要があります。分散):

Xは、(N(0,1を意味する)あなたのガウス分布であります確率変数。

平均(*はX + B)= *平均(X)+ B ヴァー(*はX + B)= A 2・ヴァー(X)

Aが自分のスケールパラメータであり、bは現在地でありますパラメータ。 したがって、標準ガウス分散変数を生成し、sqrt(scale)で乗算し、locationパラメータを追加します。