5 个版本 (3 个稳定版)
1.0.2 | 2020 年 12 月 27 日 |
---|---|
1.0.1 | 2020 年 2 月 29 日 |
1.0.0 | 2020 年 2 月 18 日 |
0.1.1 | 2020 年 2 月 16 日 |
0.1.0 | 2020 年 2 月 16 日 |
#885 in 算法
每月 1,183 次下载
725KB
383 行
sobol
A Sobol 序列生成器用于 Rust
此软件包提供了 Sobol 低差异准随机序列,这些序列对于积分和其他任务非常有用。该序列可以用最少的几个点均匀地覆盖一个区域,并随着点的增加而逐渐填充空间。
为了提高效率,sobol 采用了 Antonov-Saleev 提出的灰码优化的递归变体。
以下是分别从 Sobol 和均匀生成器生成的二维点的示例。请在此处查看动画可视化here。
用法
cargo install sobol
打印 3 维序列的前 100 个点
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);
}
}
在此示例中,序列的每个组件都是 32 位浮点数,但 sobol 也支持 Rust 的其他数值原语。浮点数序列跨越单位超立方体(即 [0,1)
),而整数值序列跨越所选类型的自然域。例如,u16
类型的序列将在 0 到 65,536 之间。
初始化值
提供支持高达 21,201 维的初始化值(即“参数”),由 Stephen Joe 和 Frances Kuo 提供(source),可通过 sobol::params::JoeKuoD6
访问。可以通过实现 sobol::SobolParams
特性使用自定义初始化值。
如果将其导入到项目中,提供的 JoeKuoD6
参数将自动嵌入到项目的二进制文件中。为了减少添加到项目中的数据量,JoeKuoD6
提供了三个在其他方面相同的参数集,可以根据所需的序列维度进行选择
来源 | 支持的维度 | 近似大小 |
---|---|---|
JoeKuoD6::最小() |
100 | 1kb |
JoeKuoD6::标准() |
1,000 | 20kb |
JoeKuoD6::扩展() |
21,201 | 690kb |
另请参阅
- lobos - 用于 Scala 和 JavaScript 的 Sobol 序列生成器
参考文献
-
乔,斯蒂芬,以及郭弗朗斯。"《生成 Sobol 序列的笔记》。(未注明出版日期):n. 页。2008 年 8 月。网络。
-
"Sobol 序列。" 维基百科。维基媒体基金会,未注明出版日期。网络。2015 年 2 月 25 日。
许可证
除非另有说明,本仓库中的一切内容均遵循 BSD 许可协议。
sobol-rs(c)2020 威斯顿·西格恩特勒