簡體   English   中英

在Java中生成一個帶有max,min和mean(average)的隨機數

[英]Generate a random number with max, min and mean(average) in Java

我需要生成具有以下屬性的隨機數。

最小應該是200

Max應該是20000

平均值(平均值)為500。

可選:第75百分位為5000

絕對不是均勻分布,也不是高斯分布。 我需要給出一些左偏斜。

Java Random可能無法正常工作,因為它只能為您提供正常(高斯)分布。

您可能正在尋找的是f分布(見下文)。 你可以在這里使用distlib庫並選擇f分布 您可以使用隨機方法獲取隨機數。

在此輸入圖像描述

假設X是你的目標變量,讓我們通過做Y=(X-200)/(20000-200)規范化范圍。 所以現在你想要一個Y隨機變量,它取[0,1]值,平均值(500-200)/(20000-200)=1/66

你有很多選擇,最自然的一個在我看來是Beta分布Y ~ Beta(a,b)a/(a+b) = 1/66 - 你有一個額外的自由度,你可以選擇符合最后的四分位數要求。

之后,您只需將X返回為Y*(20000-200)+200

要生成Beta隨機變量,您可以使用Apache Commons在此處查看

這可能不是您正在尋找的答案,但具有3個統一分布的特定情況:

統一分布 (忽略左邊的數字,但是要縮放!)

public int generate() {
  if(random(0, 65) == 0) {
    // 50-100 percentile

    if(random(1, 13) > 3) {
      // 50-75 percentile
      return random(500, 5000);
    } else {
      // 75-100 percentile
      return random(5000, 20000);
    }

  } else {
    // 0-50 percentile
    return random(200, 500);
  }
}

我怎么得到這些數字

首先,曲線下面積在200-500和500-20000之間。 這意味着高度關系為300 * leftHeight == 19500 * rightHeight使leftHeight == 65 * rightHeight

這給了我們1/66的機會選擇正確,並有65/66的機會選擇左。

然后我對第75百分位進行了相同的計算,除了比率是500-5000 chance == 5000-20000 chance * 10 / 3 同樣,這意味着我們有10/13的機會在50-75百分位數,並且有3/13的機會在75-100。

感謝@Stas - 我正在使用他的“包容性隨機”功能。

是的,我意識到我的數字是錯誤的,因為這種方法適用於離散數字,我的計算是連續的。 如果有人可以糾正我的邊境案件,那將是件好事。

您可以在[0; 1]上使用函數f,例如

Integral(f(x)dx) on [0;1] = 500
f(0) = 200
f(0.75) = 5000
f(1) = 20000

我想這個形式的功能

f(x) = a*exp(x) + b*x + c

可能是一個解決方案,你只需要解決相關的系統。

那么,你做f(uniform_random(0,1))就在那里!

PERT分布 (或beta-PERT分布 )旨在采用最小和最大估計模式。 它是三角形分布的“平滑”版本,從該分布生成隨機數可以如下實現:

startpt + (endpt - startpt) * 
     BetaDist(1.0 + (midpt - startpt) * shape / (endpt - startpt), 
          1.0 + (endpt - midpt) * shape / (endpt - startpt))

哪里-

  • startpt是最小的,
  • midpt是模式(不一定是平均值或平均值),
  • endpt是最大值,
  • shape是0或更大,但通常是4,和
  • BetaDist(X, Y)返回帶有參數XY的beta分布中的隨機數。

給定已知均值( mean ), midpt可以通過以下公式計算:

3 * mean / 2 - (startpt + endpt) / 4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM