【问题标题】:Generating random integers within range with a probability distribution使用概率分布生成范围内的随机整数
【发布时间】:2013-05-02 09:16:07
【问题描述】:

我有一个问题,我想使用概率分布生成一组介于 1 和 5 之间的随机整数值。

Poisson 和 Inverse Gamma 是两个分布,它们显示了我发现的我所追求的特征(平均多数,较少的数字)。

我正在考虑使用 Apache Commons Math,但我不确定如何使用可用的分布生成我想要的数字。

【问题讨论】:

标签: java random probability poisson apache-commons-math


【解决方案1】:

我只会产生均匀分布的随机数,然后将它们传递给你想要的分布函数,所以如果分布函数是 x^2

import java.util.ArrayList;

import java.util.Random;



    public class Test{

        public static void main(String args[]){
            Test t=new Test();
        }

        public Test(){

            Random rnd=new Random();

            ArrayList<Double> data=new ArrayList<Double>();

            for(int i=0;i<1000;i++){
                data.add(useFunction(rnd.nextDouble()));
            }

        }

        public double useFunction(double in){
            return in*in;
        }
    }

【讨论】:

  • 也就是说,如果 Apache 中有一个内置函数会更容易
【解决方案2】:

根据您的问题描述,听起来您实际上想要一个从离散概率分布生成的样本,您可以为此目的使用EnumeratedIntegerDistribution。为您的每个整数选择适当的概率,也许像以下这样可以满足您的需求:

int[] numsToGenerate           = new int[]    { 1,   2,    3,   4,    5   };
double[] discreteProbabilities = new double[] { 0.1, 0.25, 0.3, 0.25, 0.1 };

EnumeratedIntegerDistribution distribution = 
    new EnumeratedIntegerDistribution(numsToGenerate, discreteProbabilities);

int numSamples = 100;
int[] samples = distribution.sample(numSamples);

只需将 discreteProbabilities 值调整为您需要的任何值。

【讨论】:

  • 对象也有 EnumeratedDistribution 吗?
猜你喜欢
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 2017-12-20
相关资源
最近更新 更多