Skip to content

Commit

Permalink
RNG-179: Add fast loaded dice roller discrete sampler
Browse files Browse the repository at this point in the history
  • Loading branch information
aherbert committed May 25, 2022
1 parent f97c0f8 commit 926da96
Show file tree
Hide file tree
Showing 5 changed files with 1,083 additions and 8 deletions.
Expand Up @@ -23,6 +23,7 @@
import org.apache.commons.rng.UniformRandomProvider;
import org.apache.commons.rng.sampling.distribution.AliasMethodDiscreteSampler;
import org.apache.commons.rng.sampling.distribution.DiscreteSampler;
import org.apache.commons.rng.sampling.distribution.FastLoadedDiceRollerSampler;
import org.apache.commons.rng.sampling.distribution.GuideTableDiscreteSampler;
import org.apache.commons.rng.sampling.distribution.MarsagliaTsangWangDiscreteSampler;
import org.apache.commons.rng.simple.RandomSource;
Expand All @@ -41,7 +42,6 @@
import org.openjdk.jmh.annotations.Warmup;

import java.util.Arrays;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;

Expand Down Expand Up @@ -115,6 +115,7 @@ public abstract static class SamplerSources extends LocalRandomSources {
"AliasMethodDiscreteSampler",
"GuideTableDiscreteSampler",
"MarsagliaTsangWangDiscreteSampler",
"FastLoadedDiceRollerSampler",

// Uncomment to test non-default parameters
//"AliasMethodDiscreteSamplerNoPad", // Not optimal for sampling
Expand Down Expand Up @@ -187,6 +188,8 @@ private void createSamplerFactory(final UniformRandomProvider rng,
factory = () -> GuideTableDiscreteSampler.of(rng, probabilities, 8);
} else if ("MarsagliaTsangWangDiscreteSampler".equals(samplerType)) {
factory = () -> MarsagliaTsangWangDiscreteSampler.Enumerated.of(rng, probabilities);
} else if ("FastLoadedDiceRollerSampler".equals(samplerType)) {
factory = () -> FastLoadedDiceRollerSampler.of(rng, probabilities);
} else {
throw new IllegalStateException();
}
Expand Down Expand Up @@ -335,12 +338,8 @@ public static class RandomDistributionSources extends SamplerSources {
/** {@inheritDoc} */
@Override
protected double[] createProbabilities() {
final double[] probabilities = new double[randomNonUniformSize];
final ThreadLocalRandom rng = ThreadLocalRandom.current();
for (int i = 0; i < probabilities.length; i++) {
probabilities[i] = rng.nextDouble();
}
return probabilities;
return RandomSource.XO_RO_SHI_RO_128_PP.create()
.doubles(randomNonUniformSize).toArray();
}
}

Expand Down

0 comments on commit 926da96

Please sign in to comment.