#monte-carlo #sampling #low-discrepancy #quasirandom #sobol

no-std sobol_burley

可播种的 Owen 混洗 Sobol 序列

6 个版本 (重大变更)

0.5.0 2023 年 7 月 5 日
0.4.0 2022 年 7 月 17 日
0.3.1 2021 年 5 月 16 日
0.2.0 2021 年 5 月 12 日
0.1.0 2021 年 5 月 11 日

#320算法

Download history 35/week @ 2024-03-11 26/week @ 2024-03-18 6/week @ 2024-03-25 35/week @ 2024-04-01 3/week @ 2024-04-08 6/week @ 2024-04-15 7/week @ 2024-04-22 26/week @ 2024-05-06 10/week @ 2024-05-13 8/week @ 2024-05-20 26/week @ 2024-05-27 26/week @ 2024-06-03 13/week @ 2024-06-10 8/week @ 2024-06-17 9/week @ 2024-06-24

每月 59 次下载
3 crates 中使用

MIT/Apache

43KB
708

Sobol-Burley

Latest Release Documentation

基于 Brent Burley 的论文 实用哈希基础 Owen 混洗 的可播种 Owen 混洗 Sobol 序列,但使用了改进的哈希(来自 构建更好的 LK 哈希)和更多维度(由于 Kuo 等)。

此 crate 针对实用图形应用程序,因此存在一些限制

  • 最大序列长度为 2^16。
  • 最大维度数为 256(尽管可以通过播种来解决这个问题)。
  • 仅支持 f32 输出。

这些都是为了更好的性能和更小的内存占用所做的权衡。

将此 crate 扩展为更适合更广泛的范围的应用是未来的一个尝试性目标。然而,图形应用程序的效率执行始终是首要任务。

基本用法

基本用法相当简单

use sobol_burley::sample;

// Print 1024 3-dimensional points.
for i in 0..1024 {
    let x = sample(i, 0, 0);
    let y = sample(i, 1, 0);
    let z = sample(i, 2, 0);
    println!("({}, {}, {})", x, y, z);
}

sample() 的第一个参数是你想要的样本索引,第二个参数是你想要的维度索引。参数是零索引的,输出在区间 [0, 1) 内。

如果你只需要一个 Owen 混洗 Sobol 序列,那么这就足够了。对于更高级的使用,请参阅 crate 文档。

为什么是 Owen 混洗 Sobol?

其他资源可以更合适、更深入地解释这一点,包括上述链接的 Brent Burley 的论文。但这里只给出简短版本,以便给出一些直观感受

如果你使用随机点,你会得到这个

1024 random points

如果你使用普通的 Sobol,你会得到这个

1024 random points

但是如果你使用 Owen 混洗 Sobol,你会得到这个

1024 random points

随机点具有不均匀的分布,而普通的 Sobol 显示出强大的结构,可能导致偏差和伪影。但 Owen 混洗 Sobol 在某种程度上得到了两者的最佳:Sobol 的均匀分布,但随机化以最小化结构。

不安全代码

此 crate 使用不安全代码进行 SIMD 加速。对于 100% 安全的代码,您可以通过启用 simd 特性标志(默认启用)来禁用 SIMD 支持。

许可

此项目中的主要代码根据以下任一许可授权:

由您自行选择。

位于 direction_numbers/ 下的Sobol方向数以及 build.rs 中的一些代码(通过注释进行标识)是改编自Stephen Joe和Frances Y. Kuo的工作,并受3条款BSD许可证的保护。有关详细信息,请参阅 licenses/JOE_KUO.txt

贡献

贡献绝对受欢迎!请注意,这个crate旨在成为

  • 无std和无分配。使用分配等功能的PR很可能被拒绝。
  • 尽可能小,包括传递性依赖项。除非它们真的举足轻重,否则引入依赖项的PR(尤其是深度依赖树)很可能会被拒绝。

除非您明确表示,否则您提交给本项目包含的任何有意贡献都将根据上述许可证(MIT/Apache双重许可证)授权,不附加任何其他条款或条件。

无运行时依赖项