/** * {@inheritDoc} * * <p> * <strong>Algorithm Description</strong>: Uses the Algorithm SA (Ahrens) * from p. 876 in: * [1]: Ahrens, J. H. and Dieter, U. (1972). Computer methods for * sampling from the exponential and normal distributions. * Communications of the ACM, 15, 873-882. * </p> */ public double nextExponential(double mean) throws NotStrictlyPositiveException { return new ExponentialDistribution(getRandomGenerator(), mean, ExponentialDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).sample(); }
public Builder exponential(double mean, long duration, TimeUnit units) { final ExponentialDistribution distribution = new ExponentialDistribution(mean); return add("exponential(" + mean + ")", () -> (long)distribution.sample(), duration, units); }
public Builder exponential(double mean, long duration, TimeUnit units) { final ExponentialDistribution distribution = new ExponentialDistribution(mean); return add("exponential(" + mean + ")", () -> (long)distribution.sample(), duration, units); }
@Override public double sample() { return numGen.sample(); }
/** * @param lambda The rate parameter. See Wikipedia. * @return Ibid. */ public double nextExponential(double lambda) { return new ExponentialDistribution(randomGenerator, lambda).sample(); }
@Override public ImmutableList<Double> generate(RandomGenerator rng) { final ExponentialDistribution ed = new ExponentialDistribution(rng, 1d / lambdaMax, ExponentialDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY); double sum = 0d; final ImmutableList.Builder<Double> builder = ImmutableList.builder(); while (sum < length) { sum += ed.sample(); if (sum < length && rng.nextDouble() <= (lambd.apply(sum) / lambdaMax)) { builder.add(sum); } } return builder.build(); }
/** * {@inheritDoc} * * <p> * <strong>Algorithm Description</strong>: Uses the Algorithm SA (Ahrens) * from p. 876 in: * [1]: Ahrens, J. H. and Dieter, U. (1972). Computer methods for * sampling from the exponential and normal distributions. * Communications of the ACM, 15, 873-882. * </p> */ public double nextExponential(double mean) throws NotStrictlyPositiveException { return new ExponentialDistribution(getRandomGenerator(), mean, ExponentialDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).sample(); }
/** * {@inheritDoc} * * <p> * <strong>Algorithm Description</strong>: Uses the Algorithm SA (Ahrens) * from p. 876 in: * [1]: Ahrens, J. H. and Dieter, U. (1972). Computer methods for * sampling from the exponential and normal distributions. * Communications of the ACM, 15, 873-882. * </p> */ public double nextExponential(double mean) throws NotStrictlyPositiveException { return new ExponentialDistribution(getRandomGenerator(), mean, ExponentialDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY).sample(); }
public double evaluate(Context context) { RandomGenerator randomGenerator = RandomUtil.getInstance().getRandomGenerator(); Expression exp1 = getExpressions().get(0); double e1 = exp1.evaluate(context); final ExponentialDistribution distribution = new ExponentialDistribution(randomGenerator, e1); return distribution.sample(); }
sum += ed.sample() * 60d; if (sum < length) { arrivalTimes.add(sum);
static Times generateTimes(RandomGenerator rng, double intensity) { final ExponentialDistribution ed = new ExponentialDistribution( 1000d / intensity); ed.reseedRandomGenerator(rng.nextLong()); final List<Long> times = newArrayList(); long sum = 0; while (sum < 1000) { sum += DoubleMath.roundToLong(ed.sample(), RoundingMode.HALF_DOWN); if (sum < 1000) { times.add(sum); } } return asTimes(1000, times); }