8个稳定版本
3.0.3 | 2023年9月4日 |
---|---|
3.0.2 | 2023年9月1日 |
3.0.1 | 2023年7月20日 |
2.0.1 | 2023年7月20日 |
1.0.1 | 2023年4月7日 |
在 算法 中排名第 673
每月下载量 246
20KB
366 代码行
使用蒙特卡洛生成方法的随机模拟算法(SSA)。
示例
sosa
允许使用具有随时间演变的个体属性的代理进行SSA。
例如,考虑人类细胞,它们通过无性繁殖繁殖,并在细胞分裂时在其基因组中获取新的点突变。我们可能会对跟踪细胞繁殖过程中突变数量的演变感兴趣。此外,细胞在平均繁殖率上可能不同,例如,携带特殊突变的细胞与普通细胞相比可能繁殖得更快。在这种情况下,我们可以使用 sosa
来执行SSA,同时跟踪这些突变随时间的变化,考虑到不同的增殖率。
请注意,如果我们只是对跟踪随时间变化的个体数量感兴趣,而不考虑代理的个体属性,那么应使用 rebop
而不是 sosa
。根据 蒙特卡洛生成方法 找到系统中的下一个反应。
返回
None
如果达到最大迭代次数或总人口中没有剩余个体,请参阅 SimState
。
恐慌
如果没有剩余个体或所有计算时间都不正常。计算所有反应的Gillepsie时间。Gillepsie时间定义为
-ln(1 -r) / (population[i] *rates[i]) fori0..N
其中 r
是一个随机数,rates 是 self.0
。
返回
- 当所有计算时间都是无穷大或0时出错
- 否则生成一个使用泊松随机过程参数
lambda
的指数等待时间。
返回
- 如果
lambda
是无穷大,则等待时间为0
。 - 如果
lambda
f32::is_normal
,则为随机指数等待时间; - 否则为无穷大。
use rand_chacha::{ChaCha8Rng, rand_core::SeedableRng};
let mut rng = ChaCha8Rng::seed_from_u64(1u64);
let lambda_gr_than_zero = 0.1_f32;
assert!(exprand(lambda_gr_than_zero, &mut rng).is_sign_positive());
let lambda_zero = 0_f32;
assert!(exprand(lambda_zero, &mut rng).is_infinite());
let lambda_inf = f32::INFINITY;
assert!((exprand(lambda_inf, &mut rng) - 0.).abs() < f32::EPSILON);
恐慌
当 lambda
为负数时。
use rand_chacha::{ChaCha8Rng, rand_core::SeedableRng};
let mut rng = ChaCha8Rng::seed_from_u64(1u64);
let lambda_neg = -0.1_f32;
exprand(lambda_neg, &mut rng);
以四位小数的精度将浮点向量写入新文件。如果要写入文件的切片为空,则写入 NAN。
依赖项
约 1.7–2.7MB
约 56K SLoC