You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ah...@apache.org on 2021/08/05 16:46:02 UTC

[commons-rng] 11/21: Add missing samplers to sampling application

This is an automated email from the ASF dual-hosted git repository.

aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-rng.git

commit d835b3b8de3c824226c3c982dec632bf18c4609c
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Thu Aug 5 15:05:23 2021 +0100

    Add missing samplers to sampling application
---
 .../ProbabilityDensityApproximationCommand.java    | 53 ++++++++++++++++++++--
 1 file changed, 50 insertions(+), 3 deletions(-)

diff --git a/commons-rng-examples/examples-sampling/src/main/java/org/apache/commons/rng/examples/sampling/ProbabilityDensityApproximationCommand.java b/commons-rng-examples/examples-sampling/src/main/java/org/apache/commons/rng/examples/sampling/ProbabilityDensityApproximationCommand.java
index d66b1f0..36a46a8 100644
--- a/commons-rng-examples/examples-sampling/src/main/java/org/apache/commons/rng/examples/sampling/ProbabilityDensityApproximationCommand.java
+++ b/commons-rng-examples/examples-sampling/src/main/java/org/apache/commons/rng/examples/sampling/ProbabilityDensityApproximationCommand.java
@@ -29,12 +29,15 @@ import picocli.CommandLine.Mixin;
 import picocli.CommandLine.Option;
 
 import org.apache.commons.rng.sampling.distribution.ZigguratNormalizedGaussianSampler;
+import org.apache.commons.rng.sampling.distribution.ZigguratSampler;
 import org.apache.commons.rng.sampling.distribution.MarsagliaNormalizedGaussianSampler;
+import org.apache.commons.rng.sampling.distribution.StableSampler;
 import org.apache.commons.rng.sampling.distribution.BoxMullerNormalizedGaussianSampler;
 import org.apache.commons.rng.sampling.distribution.ChengBetaSampler;
 import org.apache.commons.rng.sampling.distribution.AhrensDieterExponentialSampler;
 import org.apache.commons.rng.sampling.distribution.AhrensDieterMarsagliaTsangGammaSampler;
 import org.apache.commons.rng.sampling.distribution.InverseTransformParetoSampler;
+import org.apache.commons.rng.sampling.distribution.LevySampler;
 import org.apache.commons.rng.sampling.distribution.LogNormalSampler;
 import org.apache.commons.rng.sampling.distribution.ContinuousUniformSampler;
 import org.apache.commons.rng.sampling.distribution.GaussianSampler;
@@ -82,12 +85,16 @@ class ProbabilityDensityApproximationCommand  implements Callable<Void> {
         MarsagliaGaussianSampler,
         /** The Box muller gaussian sampler. */
         BoxMullerGaussianSampler,
+        /** The modified Ziggurat gaussian sampler. */
+        ModifiedZigguratGaussianSampler,
         /** The Cheng beta sampler case 1. */
         ChengBetaSamplerCase1,
         /** The Cheng beta sampler case 2. */
         ChengBetaSamplerCase2,
         /** The Ahrens dieter exponential sampler. */
         AhrensDieterExponentialSampler,
+        /** The modified Ziggurat exponential sampler. */
+        ModifiedZigguratExponentialSampler,
         /** The Ahrens dieter marsaglia tsang gamma sampler small gamma. */
         AhrensDieterMarsagliaTsangGammaSamplerCase1,
         /** The Ahrens dieter marsaglia tsang gamma sampler large gamma. */
@@ -102,6 +109,12 @@ class ProbabilityDensityApproximationCommand  implements Callable<Void> {
         LogNormalMarsagliaGaussianSampler,
         /** The Log normal box muller gaussian sampler. */
         LogNormalBoxMullerGaussianSampler,
+        /** The Log normal modified ziggurat gaussian sampler. */
+        LogNormalModifiedZigguratGaussianSampler,
+        /** The Levy sampler. */
+        LevySampler,
+        /** The stable sampler. */
+        StableSampler,
     }
 
     /**
@@ -200,6 +213,11 @@ class ProbabilityDensityApproximationCommand  implements Callable<Void> {
                                              gaussMean, gaussSigma),
                           gaussMin, gaussMax, "gauss.boxmuller.txt");
         }
+        if (samplers.contains(Sampler.ModifiedZigguratGaussianSampler)) {
+            createDensity(GaussianSampler.of(ZigguratSampler.NormalizedGaussian.of(rng),
+                                             gaussMean, gaussSigma),
+                          gaussMin, gaussMax, "gauss.modified.ziggurat.txt");
+        }
 
         final double betaMin = 0;
         final double betaMax = 1;
@@ -216,13 +234,17 @@ class ProbabilityDensityApproximationCommand  implements Callable<Void> {
                           betaMin, betaMax, "beta.case2.txt");
         }
 
+        final double meanExp = 3.45;
+        final double expMin = 0;
+        final double expMax = 60;
         if (samplers.contains(Sampler.AhrensDieterExponentialSampler)) {
-            final double meanExp = 3.45;
-            final double expMin = 0;
-            final double expMax = 60;
             createDensity(AhrensDieterExponentialSampler.of(rng, meanExp),
                           expMin, expMax, "exp.txt");
         }
+        if (samplers.contains(Sampler.ModifiedZigguratExponentialSampler)) {
+            createDensity(ZigguratSampler.Exponential.of(rng, meanExp),
+                          expMin, expMax, "exp.modified.ziggurat.txt");
+        }
 
         final double gammaMin = 0;
         final double gammaMax1 = 40;
@@ -274,6 +296,31 @@ class ProbabilityDensityApproximationCommand  implements Callable<Void> {
                                               scaleLogNormal, shapeLogNormal),
                           logNormalMin, logNormalMax, "lognormal.boxmuller.txt");
         }
+        if (samplers.contains(Sampler.LogNormalModifiedZigguratGaussianSampler)) {
+            createDensity(LogNormalSampler.of(ZigguratSampler.NormalizedGaussian.of(rng),
+                                              scaleLogNormal, shapeLogNormal),
+                          logNormalMin, logNormalMax, "lognormal.modified.ziggurat.txt");
+        }
+
+        if (samplers.contains(Sampler.LevySampler)) {
+            final double levyLocation = 1.23;
+            final double levyscale = 0.75;
+            final double levyMin = levyLocation;
+            // Quantile 0.99
+            final double levyMax = 4.7756e+03;
+            createDensity(LevySampler.of(rng, levyLocation, levyscale),
+                          levyMin, levyMax, "levy.txt");
+        }
+
+        if (samplers.contains(Sampler.StableSampler)) {
+            final double stableAlpha = 1.23;
+            final double stableBeta = 0.25;
+            // Quantiles 0.0005 to 0.9995   
+            final double stableMin = -131.9640;
+            final double stableMax = 200.9239;
+            createDensity(StableSampler.of(rng, stableAlpha, stableBeta),
+                          stableMin, stableMax, "stable.txt");
+        }
 
         return null;
     }