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 811866dc0d0ef2fb04688e75c4524995e07496df
Author: Alex Herbert <aherb...@apache.org>
AuthorDate: Fri Jul 23 22:11:43 2021 +0100

    Add shape and composite samplers to the documentation
    
    Updated the userguide and the sampling module overview page.
---
 commons-rng-sampling/src/site/xdoc/index.xml | 44 +++++++++++++++++++++-
 src/site/apt/userguide/rng.apt               | 56 ++++++++++++++++++++++++++--
 2 files changed, 95 insertions(+), 5 deletions(-)

diff --git a/commons-rng-sampling/src/site/xdoc/index.xml 
b/commons-rng-sampling/src/site/xdoc/index.xml
index 1dc2ab3..fe9c3c3 100644
--- a/commons-rng-sampling/src/site/xdoc/index.xml
+++ b/commons-rng-sampling/src/site/xdoc/index.xml
@@ -41,13 +41,13 @@
 
 <source class="prettyprint">import 
org.apache.commons.rng.UniformRandomProvider;
 import org.apache.commons.rng.sampling.distribution.ContinuousSampler;
-import 
org.apache.commons.rng.sampling.distribution.MarsagliaNormalizedGaussianSampler;
+import org.apache.commons.rng.sampling.distribution.ZigguratSampler.Gaussian;
 
 public class NormalDeviates {
     private final ContinuousSampler normalizedGaussian;
 
     public NormalDeviates(UniformRandomProvider rng) {
-        normalizedGaussian = MarsagliaNormalizedGaussianSampler.of(rng);
+        normalizedGaussian = ZigguratSampler.Gaussian.of(rng);
     }
 
     public double sample(double mean,
@@ -59,6 +59,46 @@ public class NormalDeviates {
       </p>
 
       <p>
+        Utilities are provided to sample from generic collections.
+      </p>
+
+      <p>
+        Example:
+
+<source class="prettyprint">import 
org.apache.commons.rng.UniformRandomProvider;
+import java.util.HashSet;
+import org.apache.commons.rng.sampling.CollectionSampler;
+
+HashSet&lt;String&gt; list = new HashSet&lt;String&gt;();
+list.add("Apache");
+list.add("Commons");
+list.add("RNG");
+
+CollectionSampler&lt;String&gt; sampler = new 
CollectionSampler&lt;String&gt;(RandomSource.MWC_256.create(),
+                                                                  list);
+String word = sampler.sample();
+</source>
+      </p>
+
+      <p>
+        The module also contains classes to generate coordinate samples from 
geometric shapes
+        such as inside a ball, box or triangle or on the surface of a sphere.
+      </p>
+
+      <p>
+        Example:
+
+<source class="prettyprint">import 
org.apache.commons.rng.UniformRandomProvider;
+import org.apache.commons.rng.sampling.UnitSphereSampler;
+
+int dimension = 3;
+UnitSphereSampler sampler = new UnitSphereSampler(dimension , 
RandomSource.KISS.create());
+
+double[] vector = sampler.sample();
+</source>
+      </p>
+
+      <p>
         Browse the <a href="apidocs/index.html">Javadoc</a> for more 
information.
       </p>
     </section>
diff --git a/src/site/apt/userguide/rng.apt b/src/site/apt/userguide/rng.apt
index 47e8537..556f977 100644
--- a/src/site/apt/userguide/rng.apt
+++ b/src/site/apt/userguide/rng.apt
@@ -63,8 +63,9 @@
 
   * 
{{{../commons-rng-sampling/apidocs/org/apache/commons/rng/sampling/package-summary.html}Sampling}}
 (requires Java 6)
 
-  This module provides implementations that generate a sequence of numbers 
according to some
-  specified probability distribution, and utilities to sample from a generic 
collection of items.
+  This module provides implementations that: generate a sequence of numbers 
according to some
+  specified probability distribution; sample coordinates from geometric 
shapes; sample
+  from generic collections of items; and other sampling utilities.
   It is an example of usage of the API provided in the 
<<<commons-rng-client-api>>> module.
 
   * Examples
@@ -417,7 +418,7 @@ list.add("Commons");
 list.add("RNG");
 
 CollectionSampler<String> sampler = new 
CollectionSampler<String>(RandomSource.MWC_256.create(),
-                                                                  list, 1);
+                                                                  list);
 String word = sampler.sample();
 +--------------------------+
 
@@ -439,6 +440,55 @@ List<String> sample = ListSampler.sample(rng, list, k);
 ListSampler.shuffle(rng, list)
 +--------------------------+
 
+  * Sampling from geometric shapes:
+    
{{{../commons-rng-sampling/apidocs/org/apache/commons/rng/sampling/shape/BoxSampler.html}Box}},
+    
{{{../commons-rng-sampling/apidocs/org/apache/commons/rng/sampling/shape/UnitBallSampler.html}Ball}},
+    
{{{../commons-rng-sampling/apidocs/org/apache/commons/rng/sampling/shape/LineSampler.html}Line}},
+    
{{{../commons-rng-sampling/apidocs/org/apache/commons/rng/sampling/shape/TriangleSampler.html}Triangle}},
 and
+    
{{{../commons-rng-sampling/apidocs/org/apache/commons/rng/sampling/shape/TetrahedronSampler.html}Tetrahedron}}.
+
++--------------------------+
+import org.apache.commons.rng.sampling.shape.BoxSampler;
+
+double[] lower = {1, 2, 3};
+double[] upper = {15, 16, 17}
+BoxSampler sampler = BoxSampler.of(RandomSource.KISS.create(),
+                                   lower, upper);
+double[] coordinate = sampler.sample();
++--------------------------+
+
+  * The 
+    
{{{../commons-rng-sampling/apidocs/org/apache/commons/rng/sampling/CompositeSamplers.html}CompositeSamplers}}
+    utility class can create a composite sampler that is a weighted 
combination of samplers
+    that return the same type.
+
+    The following example will create a sampler to uniformly sample the border 
of a triangle
+    using the line segment lengths as weights:
+
++--------------------------+
+import org.apache.commons.rng.sampling.shape.LineSampler;
+
+UniformRandomProvider rng = RandomSource.JSF_64.create();
+
+// Triangle vertices
+double[] a = {1.23, 4.56};
+double[] b = {6.78, 9.01};
+double[] c = {3.45, 2.34};
+// Line lengths
+double ab = Math.hypot(a[0] - b[0], a[1] - b[1]);
+double bc = Math.hypot(b[0] - c[0], b[1] - c[1]);
+double ca = Math.hypot(c[0] - a[0], c[1] - a[1]);
+
+ObjectSampler<double[]> sampler =
+    CompositeSamplers.<double[]>newObjectSamplerBuilder()
+        .add(LineSampler.of(rng, a, b), ab)
+        .add(LineSampler.of(rng, b, c), bc)
+        .add(LineSampler.of(rng, c, a), ca)
+        .build(rng);
+
+double[] coordinate = sampler.sample();
++--------------------------+
+
   []
 
 

Reply via email to