2012-01-05 44 views
1

我是一個Java新手。我知道Java有一個來自高斯分佈的隨機數生成器函數。正如我從其他問題中知道的那樣,Java的內置隨機生成器並不好,因爲它沒有考慮我最需要的高斯分佈的輸入均值和標準差。我正在研究遺傳算法。出於突變的目的,我必須從高斯分佈,Cauchy分佈和Levy分佈生成隨機數。發電機功能必須輸入該分配的Scale ParameterLocation Parameter。我怎樣才能做到這一點?從Cauchy隨機數發電

回答

0

Java沒有那些內置的。你將不得不讓你自己的功能,或找到一個第三方庫。

0

Eventhough的問題是有點老,我會盡量回答,因爲我一直在尋找同樣的事情,它可以幫助旁邊的人:

要實現一個RNG你需要了解以下內容的任意分佈:

  1. 在[0,1)範圍生成均勻分佈的數字是沒有問題的
  2. 一個distributionfunction的推導的分佈密度(例如高斯鐘形曲線)
  3. 的distributionfunctio n在-Infinity上是(或多或少)0,在Infinity上是1。在這兩個極端之間,它會單調增加。

現在,你必須以下列方式使用這些東西(至少爲1和3):

  1. 計算分佈函數(集成密度)
  2. 解決這個方程X
  3. 在結果函數中傳遞一個均勻分佈的數字作爲參數以獲得適當分佈的結果。

實施例:

柯西分佈:

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

  1. 分佈函數:

Y = F(x)= arctan(x)/ Pi + 0.5(有必要加0.5得到R→[0,1]函數

  1. 解決對於x

X = G(Y)= TAN(的y 0。5)* PI(G是逆到F - 通常˚F^( - 1)

  1. 現在只是把所生成的雙如在函數y:

    返回Math.tan(rand.nextDouble ()-0.5)* Math.Pi;

對於規模和位置參數,你只需要做到以下幾點:

X是高斯(意爲:N(0,1))的分佈式隨機變量

平均數(A * X + B)= A *平均值(X)+ B VAR(A * X + B)=A²* VAR(X)

一個是你的尺度參數,b爲你的位置參數。 因此,生成標準高斯分佈式變量並與sqrt(比例)相乘並添加位置參數。