/** * @return A random number from the distribution; returns <tt>(int) Math.round(nextDouble())</tt>. * Override this method if necessary. */ @Override public int nextInt() { return (int) Math.round(nextDouble()); } }
static void checkCdf(double offset, double scale, AbstractContinousDistribution dist, double[] breaks, double[] quantiles) { int i = 0; for (double x : breaks) { Assert.assertEquals(String.format("m=%.3f sd=%.3f x=%.3f", offset, scale, x), quantiles[i], dist.cdf(x * scale + offset), 1.0e-6); i++; } } }
@Override public double value(double v) { return dist.pdf(v); } }, xs[i], xs[i + 1]);
y[i] = dist.nextDouble(); double lastP = 0; for (int i = 0; i < xs.length; i++) { double thisP = dist.cdf(xs[i]); p[i] = thisP - lastP; lastP = thisP;
/** Sets the uniform random generator internally used. */ @Override public final void setRandomGenerator(Random randomGenerator) { super.setRandomGenerator(randomGenerator); this.cacheFilled = false; }
public List<String> getQuery() { int n = queryLengthDistribution.nextInt() + 1; List<String> r = Lists.newArrayList(); for (int i = 0; i < n; i++) { r.add(terms.sample()); } return r; }
y[i] = dist.nextDouble(); double lastP = 0; for (int i = 0; i < xs.length; i++) { double thisP = dist.cdf(xs[i]); p[i] = thisP - lastP; lastP = thisP;
/** Sets the uniform random generator internally used. */ @Override public final void setRandomGenerator(Random randomGenerator) { super.setRandomGenerator(randomGenerator); this.cacheFilled = false; }
@Override public double nextDouble() { double x; if (gen.nextDouble() < 0.5) { x = uniform.nextDouble(); } else { x = normal.nextDouble(); } return x; } };
/** Sets the uniform random generator internally used. */ @Override public final void setRandomGenerator(Random randomGenerator) { super.setRandomGenerator(randomGenerator); this.cacheFilled = false; }
@Override public double value(double v) { return dist.pdf(v); } }, xs[i], xs[i + 1]);
static void checkCdf(double offset, double scale, AbstractContinousDistribution dist, double[] breaks, double[] quantiles) { int i = 0; for (double x : breaks) { Assert.assertEquals(String.format("m=%.3f sd=%.3f x=%.3f", offset, scale, x), quantiles[i], dist.cdf(x * scale + offset), 1.0e-6); i++; } } }
private static double[] gamma(int n, double shape) { double[] r = new double[n]; Random gen = RandomUtils.getRandom(); AbstractContinousDistribution gamma = new Gamma(shape, shape, gen); for (int i = 0; i < n; i++) { r[i] = gamma.nextDouble(); } return r; } }
List<Double> data = Lists.newArrayList(); for (int i1 = 0; i1 < 100000; i1++) { double x = mix.nextDouble(); data.add(x); dist.add(x);
private void compare(AbstractContinousDistribution gen, String tag, long scale, Random rand) { for (double compression : new double[]{2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000}) { QDigest qd = new QDigest(compression); TDigest dist = new TDigest(compression, rand); List<Double> data = Lists.newArrayList(); for (int i = 0; i < 100000; i++) { double x = gen.nextDouble(); dist.add(x); qd.offer((long) (x * scale)); data.add(x); } dist.compress(); Collections.sort(data); for (double q : new double[]{0.001, 0.01, 0.1, 0.2, 0.3, 0.5, 0.7, 0.8, 0.9, 0.99, 0.999}) { double x1 = dist.quantile(q); double x2 = (double) qd.getQuantile(q) / scale; double e1 = cdf(x1, data) - q; System.out.printf("%s\t%.0f\t%.8f\t%.10g\t%.10g\t%d\t%d\n", tag, compression, q, e1, cdf(x2, data) - q, dist.smallByteSize(), QDigest.serialize(qd).length); } } }
List<Double> data = Lists.newArrayList(); for (int i = 0; i < 100000; i++) { double x = gen.nextDouble(); data.add(x); dist.add(x);
@Override public double nextDouble() { return delegate.nextDouble(); }
/** * @return A random number from the distribution; returns <tt>(int) Math.round(nextDouble())</tt>. * Override this method if necessary. */ @Override public int nextInt() { return (int) Math.round(nextDouble()); } }
/** * @return A random number from the distribution; returns <tt>(int) Math.round(nextDouble())</tt>. * Override this method if necessary. */ @Override public int nextInt() { return (int) Math.round(nextDouble()); } }
public void session(PriorityQueue<LogLine> eventBuffer) { int sessionLength = (int) (sessionLengthDistribution.nextDouble() + 1); double t = nextSession; for (int i = 0; i < sessionLength; i++) { eventBuffer.add(new LogLine(t, this)); t += queryTimeDistribution.nextDouble(); } nextSession += sessionTimeDistribution.nextDouble(); }