blob: 2e4ef0eb0a63d4668c968b83f12e4c031c1cb83a [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
<title>HaltonSequenceGenerator (Apache Commons Math 3.3 API)</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<script type="text/javascript"><!--
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="HaltonSequenceGenerator (Apache Commons Math 3.3 API)";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!-- -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/HaltonSequenceGenerator.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage"><em><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script></em></div>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/commons/math3/random/GaussianRandomGenerator.html" title="class in org.apache.commons.math3.random"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../../../org/apache/commons/math3/random/ISAACRandom.html" title="class in org.apache.commons.math3.random"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/commons/math3/random/HaltonSequenceGenerator.html" target="_top">Frames</a></li>
<li><a href="HaltonSequenceGenerator.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.commons.math3.random</div>
<h2 title="Class HaltonSequenceGenerator" class="title">Class HaltonSequenceGenerator</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>org.apache.commons.math3.random.HaltonSequenceGenerator</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><a href="../../../../../org/apache/commons/math3/random/RandomVectorGenerator.html" title="interface in org.apache.commons.math3.random">RandomVectorGenerator</a></dd>
</dl>
<hr>
<br>
<pre>public class <span class="strong">HaltonSequenceGenerator</span>
extends <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="../../../../../org/apache/commons/math3/random/RandomVectorGenerator.html" title="interface in org.apache.commons.math3.random">RandomVectorGenerator</a></pre>
<div class="block">Implementation of a Halton sequence.
<p>
A Halton sequence is a low-discrepancy sequence generating points in the interval [0, 1] according to
<pre>
H(n) = d_0 / b + d_1 / b^2 .... d_j / b^j+1
with
n = d_j * b^j-1 + ... d_1 * b + d_0 * b^0
</pre>
For higher dimensions, subsequent prime numbers are used as base, e.g. { 2, 3, 5 } for a Halton sequence in R^3.
<p>
Halton sequences are known to suffer from linear correlation for larger prime numbers, thus the individual digits
are usually scrambled. This implementation already comes with support for up to 40 dimensions with optimal weight
numbers from <a href="http://etd.lib.fsu.edu/theses/available/etd-07062004-140409/unrestricted/dissertation1.pdf">
H. Chi: Scrambled quasirandom sequences and their applications</a>.
<p>
The generator supports two modes:
<ul>
<li>sequential generation of points: <a href="../../../../../org/apache/commons/math3/random/HaltonSequenceGenerator.html#nextVector()"><code>nextVector()</code></a></li>
<li>random access to the i-th point in the sequence: <a href="../../../../../org/apache/commons/math3/random/HaltonSequenceGenerator.html#skipTo(int)"><code>skipTo(int)</code></a></li>
</ul></div>
<dl><dt><span class="strong">Since:</span></dt>
<dd>3.3</dd>
<dt><span class="strong">Version:</span></dt>
<dd>$Id: HaltonSequenceGenerator.java 1512043 2013-08-08 21:27:57Z tn $</dd>
<dt><span class="strong">See Also:</span></dt><dd><a href="http://en.wikipedia.org/wiki/Halton_sequence">Halton sequence (Wikipedia)</a>,
<a href="https://lirias.kuleuven.be/bitstream/123456789/131168/1/mcm2005_bartv.pdf">
On the Halton sequence and its scramblings</a></dd></dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><strong><a href="../../../../../org/apache/commons/math3/random/HaltonSequenceGenerator.html#HaltonSequenceGenerator(int)">HaltonSequenceGenerator</a></strong>(int&nbsp;dimension)</code>
<div class="block">Construct a new Halton sequence generator for the given space dimension.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><strong><a href="../../../../../org/apache/commons/math3/random/HaltonSequenceGenerator.html#HaltonSequenceGenerator(int, int[], int[])">HaltonSequenceGenerator</a></strong>(int&nbsp;dimension,
int[]&nbsp;bases,
int[]&nbsp;weights)</code>
<div class="block">Construct a new Halton sequence generator with the given base numbers and weights for each dimension.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/commons/math3/random/HaltonSequenceGenerator.html#getNextIndex()">getNextIndex</a></strong>()</code>
<div class="block">Returns the index i of the next point in the Halton sequence that will be returned
by calling <a href="../../../../../org/apache/commons/math3/random/HaltonSequenceGenerator.html#nextVector()"><code>nextVector()</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>double[]</code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/commons/math3/random/HaltonSequenceGenerator.html#nextVector()">nextVector</a></strong>()</code>
<div class="block">Generate a random vector.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected int</code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/commons/math3/random/HaltonSequenceGenerator.html#scramble(int, int, int, int)">scramble</a></strong>(int&nbsp;i,
int&nbsp;j,
int&nbsp;b,
int&nbsp;digit)</code>
<div class="block">Performs scrambling of digit <code>d_j</code> according to the formula:</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>double[]</code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/commons/math3/random/HaltonSequenceGenerator.html#skipTo(int)">skipTo</a></strong>(int&nbsp;index)</code>
<div class="block">Skip to the i-th point in the Halton sequence.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="HaltonSequenceGenerator(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>HaltonSequenceGenerator</h4>
<pre>public&nbsp;HaltonSequenceGenerator(int&nbsp;dimension)
throws <a href="../../../../../org/apache/commons/math3/exception/OutOfRangeException.html" title="class in org.apache.commons.math3.exception">OutOfRangeException</a></pre>
<div class="block">Construct a new Halton sequence generator for the given space dimension.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>dimension</code> - the space dimension</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/commons/math3/exception/OutOfRangeException.html" title="class in org.apache.commons.math3.exception">OutOfRangeException</a></code> - if the space dimension is outside the allowed range of [1, 40]</dd></dl>
</li>
</ul>
<a name="HaltonSequenceGenerator(int, int[], int[])">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>HaltonSequenceGenerator</h4>
<pre>public&nbsp;HaltonSequenceGenerator(int&nbsp;dimension,
int[]&nbsp;bases,
int[]&nbsp;weights)
throws <a href="../../../../../org/apache/commons/math3/exception/NullArgumentException.html" title="class in org.apache.commons.math3.exception">NullArgumentException</a>,
<a href="../../../../../org/apache/commons/math3/exception/OutOfRangeException.html" title="class in org.apache.commons.math3.exception">OutOfRangeException</a>,
<a href="../../../../../org/apache/commons/math3/exception/DimensionMismatchException.html" title="class in org.apache.commons.math3.exception">DimensionMismatchException</a></pre>
<div class="block">Construct a new Halton sequence generator with the given base numbers and weights for each dimension.
The length of the bases array defines the space dimension and is required to be &gt; 0.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>dimension</code> - the space dimension</dd><dd><code>bases</code> - the base number for each dimension, entries should be (pairwise) prime, may not be null</dd><dd><code>weights</code> - the weights used during scrambling, may be null in which case no scrambling will be performed</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/commons/math3/exception/NullArgumentException.html" title="class in org.apache.commons.math3.exception">NullArgumentException</a></code> - if base is null</dd>
<dd><code><a href="../../../../../org/apache/commons/math3/exception/OutOfRangeException.html" title="class in org.apache.commons.math3.exception">OutOfRangeException</a></code> - if the space dimension is outside the range [1, len], where
len refers to the length of the bases array</dd>
<dd><code><a href="../../../../../org/apache/commons/math3/exception/DimensionMismatchException.html" title="class in org.apache.commons.math3.exception">DimensionMismatchException</a></code> - if weights is non-null and the length of the input arrays differ</dd></dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="nextVector()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>nextVector</h4>
<pre>public&nbsp;double[]&nbsp;nextVector()</pre>
<div class="block">Generate a random vector.</div>
<dl>
<dt><strong>Specified by:</strong></dt>
<dd><code><a href="../../../../../org/apache/commons/math3/random/RandomVectorGenerator.html#nextVector()">nextVector</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/commons/math3/random/RandomVectorGenerator.html" title="interface in org.apache.commons.math3.random">RandomVectorGenerator</a></code></dd>
<dt><span class="strong">Returns:</span></dt><dd>a random vector as an array of double.</dd></dl>
</li>
</ul>
<a name="scramble(int, int, int, int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>scramble</h4>
<pre>protected&nbsp;int&nbsp;scramble(int&nbsp;i,
int&nbsp;j,
int&nbsp;b,
int&nbsp;digit)</pre>
<div class="block">Performs scrambling of digit <code>d_j</code> according to the formula:
<pre>
( weight_i * d_j ) mod base
</pre>
Implementations can override this method to do a different scrambling.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>i</code> - the dimension index</dd><dd><code>j</code> - the digit index</dd><dd><code>b</code> - the base for this dimension</dd><dd><code>digit</code> - the j-th digit</dd>
<dt><span class="strong">Returns:</span></dt><dd>the scrambled digit</dd></dl>
</li>
</ul>
<a name="skipTo(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>skipTo</h4>
<pre>public&nbsp;double[]&nbsp;skipTo(int&nbsp;index)
throws <a href="../../../../../org/apache/commons/math3/exception/NotPositiveException.html" title="class in org.apache.commons.math3.exception">NotPositiveException</a></pre>
<div class="block">Skip to the i-th point in the Halton sequence.
<p>
This operation can be performed in O(1).</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>index</code> - the index in the sequence to skip to</dd>
<dt><span class="strong">Returns:</span></dt><dd>the i-th point in the Halton sequence</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/commons/math3/exception/NotPositiveException.html" title="class in org.apache.commons.math3.exception">NotPositiveException</a></code> - if index &lt; 0</dd></dl>
</li>
</ul>
<a name="getNextIndex()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getNextIndex</h4>
<pre>public&nbsp;int&nbsp;getNextIndex()</pre>
<div class="block">Returns the index i of the next point in the Halton sequence that will be returned
by calling <a href="../../../../../org/apache/commons/math3/random/HaltonSequenceGenerator.html#nextVector()"><code>nextVector()</code></a>.</div>
<dl><dt><span class="strong">Returns:</span></dt><dd>the index of the next point</dd></dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!-- -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/HaltonSequenceGenerator.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage"><em><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script></em></div>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/commons/math3/random/GaussianRandomGenerator.html" title="class in org.apache.commons.math3.random"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../../../org/apache/commons/math3/random/ISAACRandom.html" title="class in org.apache.commons.math3.random"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/commons/math3/random/HaltonSequenceGenerator.html" target="_top">Frames</a></li>
<li><a href="HaltonSequenceGenerator.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2003&#x2013;2014 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>