Class Distributions

java.lang.Object
sim.util.distribution.Distributions
All Implemented Interfaces:
Serializable

public class Distributions extends Object implements Serializable
Contains methods for conveniently generating pseudo-random numbers from special distributions such as the Burr, Cauchy, Erlang, Geometric, Lambda, Laplace, Logistic, Weibull, etc.

About this class:

All distributions are obtained by using a uniform pseudo-random number generator. followed by a transformation to the desired distribution.

Example usage:

 cern.jet.random.engine.MersenneTwisterFast generator;
 generator = new cern.jet.random.engine.MersenneTwister(new java.util.Date());
 //generator = new edu.cornell.lassp.houle.RngPack.Ranecu(new java.util.Date());
 //generator = new edu.cornell.lassp.houle.RngPack.Ranmar(new java.util.Date());
 //generator = new edu.cornell.lassp.houle.RngPack.Ranlux(new java.util.Date());
 //generator = AbstractDistribution.makeDefaultGenerator();
 for (int i=1000000; --i >=0; ) {
    int cauchy = Distributions.nextCauchy(generator);
    ...
 }
 
See Also:
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    Makes this class non instantiable, but still let's others inherit from it.
  • Method Summary

    Modifier and Type
    Method
    Description
    static double
    geometricPdf(int k, double p)
    Returns a random number under the discrete geometric distribution.
    static double
    nextBurr1(double r, int nr, MersenneTwisterFast randomGenerator)
    Returns a random number from the Burr II, VII, VIII, X Distributions.
    static double
    nextBurr2(double r, double k, int nr, MersenneTwisterFast randomGenerator)
    Returns a random number from the Burr III, IV, V, VI, IX, XII distributions.
    static double
    Returns a cauchy distributed random number from the standard Cauchy distribution C(0,1).
    static double
    nextErlang(double variance, double mean, MersenneTwisterFast randomGenerator)
    Returns an erlang distributed random number with the given variance and mean.
    static int
    nextGeometric(double p, MersenneTwisterFast randomGenerator)
    Returns a discrete geometric distributed random number; Definition.
    static double
    nextLambda(double l3, double l4, MersenneTwisterFast randomGenerator)
    Returns a lambda distributed random number with parameters l3 and l4.
    static double
    Returns a Laplace (Double Exponential) distributed random number from the standard Laplace distribution L(0,1).
    static double
    Returns a random number from the standard Logistic distribution Log(0,1).
    static double
    nextPowLaw(double alpha, double cut, MersenneTwisterFast randomGenerator)
    Returns a power-law distributed random number with the given exponent and lower cutoff.
    static double
    nextTriangular(double min, double mode, double max, MersenneTwisterFast random)
    Returns a random number from the Triangular distribution with a given min, max, and mode (peak).
    static double
    Returns a random number from the standard Triangular distribution in (-1,1).
    static double
    nextWeibull(double alpha, double beta, MersenneTwisterFast randomGenerator)
    Returns a weibull distributed random number.
    static int
    nextZipfInt(double z, MersenneTwisterFast randomGenerator)
    Returns a zipfian distributed random number with the given skew.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • Distributions

      protected Distributions()
      Makes this class non instantiable, but still let's others inherit from it.
  • Method Details

    • geometricPdf

      public static double geometricPdf(int k, double p)
      Returns a random number under the discrete geometric distribution.

      p(k) = p * (1-p)^k for k >= 0.

      Parameters:
      k - the argument to the probability distribution function.
      p - the parameter of the probability distribution function.
    • nextBurr1

      public static double nextBurr1(double r, int nr, MersenneTwisterFast randomGenerator)
      Returns a random number from the Burr II, VII, VIII, X Distributions.

      Implementation: Inversion method. This is a port of burr1.c from the C-RAND / WIN-RAND library. C-RAND's implementation, in turn, is based upon

      L. Devroye (1986): Non-Uniform Random Variate Generation, Springer Verlag, New York.

      Parameters:
      r - must be > 0.
      nr - the number of the burr distribution (e.g. 2,7,8,10).
    • nextBurr2

      public static double nextBurr2(double r, double k, int nr, MersenneTwisterFast randomGenerator)
      Returns a random number from the Burr III, IV, V, VI, IX, XII distributions.

      Implementation: Inversion method. This is a port of burr2.c from the C-RAND / WIN-RAND library. C-RAND's implementation, in turn, is based upon

      L. Devroye (1986): Non-Uniform Random Variate Generation, Springer Verlag, New York.

      Parameters:
      r - must be > 0.
      k - must be > 0.
      nr - the number of the burr distribution (e.g. 3,4,5,6,9,12).
    • nextCauchy

      public static double nextCauchy(MersenneTwisterFast randomGenerator)
      Returns a cauchy distributed random number from the standard Cauchy distribution C(0,1). math definition and animated definition.

      p(x) = 1/ (mean*pi * (1+(x/mean)^2)).

      Implementation: This is a port of cin.c from the C-RAND / WIN-RAND library.

    • nextErlang

      public static double nextErlang(double variance, double mean, MersenneTwisterFast randomGenerator)
      Returns an erlang distributed random number with the given variance and mean.
    • nextGeometric

      public static int nextGeometric(double p, MersenneTwisterFast randomGenerator)
      Returns a discrete geometric distributed random number; Definition.

      p(k) = p * (1-p)^k for k >= 0.

      Implementation: Inversion method. This is a port of geo.c from the C-RAND / WIN-RAND library.

      Parameters:
      p - must satisfy 0 < p < 1.

    • nextLambda

      public static double nextLambda(double l3, double l4, MersenneTwisterFast randomGenerator)
      Returns a lambda distributed random number with parameters l3 and l4.

      Implementation: Inversion method. This is a port of lamin.c from the C-RAND / WIN-RAND library. C-RAND's implementation, in turn, is based upon

      J.S. Ramberg, B:W. Schmeiser (1974): An approximate method for generating asymmetric variables, Communications ACM 17, 78-82.

    • nextLaplace

      public static double nextLaplace(MersenneTwisterFast randomGenerator)
      Returns a Laplace (Double Exponential) distributed random number from the standard Laplace distribution L(0,1).

      Implementation: Inversion method. This is a port of lapin.c from the C-RAND / WIN-RAND library.

    • nextLogistic

      public static double nextLogistic(MersenneTwisterFast randomGenerator)
      Returns a random number from the standard Logistic distribution Log(0,1).

      Implementation: Inversion method. This is a port of login.c from the C-RAND / WIN-RAND library.

    • nextPowLaw

      public static double nextPowLaw(double alpha, double cut, MersenneTwisterFast randomGenerator)
      Returns a power-law distributed random number with the given exponent and lower cutoff.
      Parameters:
      alpha - the exponent
      cut - the lower cutoff
    • nextTriangular

      public static double nextTriangular(MersenneTwisterFast randomGenerator)
      Returns a random number from the standard Triangular distribution in (-1,1).

      Implementation: Inversion method. This is a port of tra.c from the C-RAND / WIN-RAND library.

    • nextTriangular

      public static double nextTriangular(double min, double mode, double max, MersenneTwisterFast random)
      Returns a random number from the Triangular distribution with a given min, max, and mode (peak). It is required that the min <= mode <= max, or a RuntimeException will likely occur.
    • nextWeibull

      public static double nextWeibull(double alpha, double beta, MersenneTwisterFast randomGenerator)
      Returns a weibull distributed random number. Polar method. See Simulation, Modelling invalid input: '&' Analysis by Law invalid input: '&' Kelton, pp259
    • nextZipfInt

      public static int nextZipfInt(double z, MersenneTwisterFast randomGenerator)
      Returns a zipfian distributed random number with the given skew.

      Algorithm from page 551 of: Devroye, Luc (1986) `Non-uniform random variate generation', Springer-Verlag: Berlin. ISBN 3-540-96305-7 (also 0-387-96305-7)

      Parameters:
      z - the skew of the distribution (must be >1.0).