#monte-carlo #simulation #time #stochastic #numbers #generate #individual

sosa

带有蒙特卡洛生成方法的随机模拟算法(SSA)

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

Download history 21/week @ 2024-03-10 11/week @ 2024-03-17 110/week @ 2024-03-24 150/week @ 2024-03-31 10/week @ 2024-04-28

每月下载量 246

Apache-2.0 OR MIT

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