5 releases (3 stable)
1.0.2 | Dec 27, 2020 |
---|---|
1.0.1 | Feb 29, 2020 |
1.0.0 | Feb 18, 2020 |
0.1.1 | Feb 16, 2020 |
0.1.0 | Feb 16, 2020 |
#617 in Algorithms
5,832 downloads per month
725KB
383 lines
sobol
A Sobol sequence generator for Rust
This crate provides Sobol low-discrepancy quasirandom sequences which are useful for integration and other tasks. The sequence can cover a domain evenly with as little as a few points and will continue to progressively fill the space as more points are added.
For efficiency, sobol employs the recursive variant of the gray code optimization proposed by Antonov-Saleev.
Below are examples of 2-dimensional points drawn from Sobol and Uniform generators respectively. See an animated visualization here.
Usage
cargo install sobol
Print the first 100 points from a 3-dimensional sequence:
extern crate sobol;
use sobol::Sobol;
use sobol::params::JoeKuoD6;
fn main() {
let params = JoeKuoD6::minimal();
let seq = Sobol::<f32>::new(3, ¶ms);
for point in seq.take(100) {
println!("{:?}", point);
}
}
In this example each component of the sequence is a 32-bit float but sobol also supports Rust's other numeric primitives. Floating point sequences span the unit hypercube (i.e. [0,1)
) while integer valued sequences span the natural domain of the selected type. For example, u16
typed sequences will have components between 0 and 65,536.
Initialization Values
Initialization values (aka "parameters") supporting up to 21,201 dimensions are provided courtesy of Stephen Joe and Frances Kuo (source) and are accessible via sobol::params::JoeKuoD6
. Custom initialization values can be used by implementing the sobol::SobolParams
trait.
If imported into your project, the provided JoeKuoD6
parameters are automatically embedded into your project binary. To reduce the amount of data added to your project, JoeKuoD6
provides three otherwise identical parameter sets which can be selected from according to the dimensionality required by your sequences:
Source | Supported Dims | Approx. Size |
---|---|---|
JoeKuoD6::minimal() |
100 | 1kb |
JoeKuoD6::standard() |
1,000 | 20kb |
JoeKuoD6::extended() |
21,201 | 690kb |
See also
- lobos - A Sobol sequence generator for Scala and Javascript
References
-
Joe, Stephen, and Frances Y. Kuo. "Notes on Generating Sobol Sequences." (n.d.): n. pag. Aug. 2008. Web.
-
"Sobol Sequence." Wikipedia. Wikimedia Foundation, n.d. Web. 25 Feb. 2015.
License
Everything in this repo is BSD License unless otherwise specified
sobol-rs (c) 2020 Weston Siegenthaler