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

Download history 362/week @ 2024-06-18 483/week @ 2024-06-25 290/week @ 2024-07-02 299/week @ 2024-07-09 296/week @ 2024-07-16 1102/week @ 2024-07-23 1398/week @ 2024-07-30 1215/week @ 2024-08-06 782/week @ 2024-08-13 1682/week @ 2024-08-20 1377/week @ 2024-08-27 1301/week @ 2024-09-03 1066/week @ 2024-09-10 1433/week @ 2024-09-17 1627/week @ 2024-09-24 1463/week @ 2024-10-01

5,832 downloads per month

BSD-3-Clause

725KB
383 lines

sobol

Crates.io documentation minimum rustc 1.33 Rust Coverage Status License

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.

Sobol Uniform

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, &params);
    
    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

License

Everything in this repo is BSD License unless otherwise specified

sobol-rs (c) 2020 Weston Siegenthaler

Dependencies