随机元胞自动机的实现

计算科学 离散化 随机 随机数生成
2021-12-02 17:08:52

在我的问题中,我有一个带有随机元胞自动机的格子。为了简化一点,假设它是一维的。在我的系统中,每个节点都可以是 A、B 或 C 类型。表示系统并在其上快速运行的一种方法是使用一个整数 64 位变量,按位工作。

让我举一个具有 4 个节点的系统的实现示例。假设我有节点 0 和 3 处于状态 A,节点 1 处于 B 中,而节点 2 处于 C 中,那么:

A -> 1001 -> A = 9
B -> 0100 -> B = 4
C -> 0010 -> C = 2

您会看到 3 个整数可以代表系统的整个状态。我可以使用单个按位操作更新系统。这在元胞自动机中被大量使用。

但是,现在,假设我有这样的反应

A+Bμ2B
BνC

以同步方式模拟这种反应我可以在下一个时间步中获得 B 个人的数量:Δt

B = A && r

其中是一个随机数,使得位置的位为 1,概率,其中是个体的 B 个邻居的数量。也就是说,执行反应 1 的概率为 1。rjpj=1exp(μΔtbj)bjj

我的问题是:有没有一种有效的方法来获得r

1个回答

不确定我是否理解正确,但我认为如果您的参数µ在所有模拟期间和所有节点都是恒定的,您可以在模拟开始时生成可能的值列表。因为您的值的可能性有限(如果您查看第一邻域,那么您在 2D 网格中最多有 8 个邻居,因此您可以做一个包含 9 个可能的值的数组)。Δtpjbjpj

然后每次生成一个具有统一规律的随机数,并比较它是否小于列表中相应的值。pj