更改

跳到导航 跳到搜索
第412行: 第412行:  
== 附录:由布尔网络动力学转换为马尔科夫链的TPM的代码 ==
 
== 附录:由布尔网络动力学转换为马尔科夫链的TPM的代码 ==
 
在Hoel的原始论文<ref name="hoel_2013"/>中,所有的微观动力学都是针对布尔网络中的每个变量(即节点)定义其微观动力学机制完成的。而为了计算布尔网络的有效信息和因果涌现度量,我们必须要将这种微观动力学机制转变为系统整体的概率转移矩阵(即TPM)。因此,这里的一个关键问题是,如何将一个定义在局部变量上的动力学机制,转变为一个全局的TPM。这里给出一种一般性的算法:
 
在Hoel的原始论文<ref name="hoel_2013"/>中,所有的微观动力学都是针对布尔网络中的每个变量(即节点)定义其微观动力学机制完成的。而为了计算布尔网络的有效信息和因果涌现度量,我们必须要将这种微观动力学机制转变为系统整体的概率转移矩阵(即TPM)。因此,这里的一个关键问题是,如何将一个定义在局部变量上的动力学机制,转变为一个全局的TPM。这里给出一种一般性的算法:
 +
 +
输入:有向图形式的布尔网络G(包括N个节点、连边),微观动力学机制(即,节点对父节点输入的响应机制)
 +
 +
输出:微观态全局的概率转移矩阵P
 +
 +
1. 生成布尔网络的状态空间,共有微观态<math>2^N</math>个,N为节点数
 +
 +
2. 初始化概率转移矩阵<math>P</math>,大小为<math>2^N * 2^N</math>,<math>P_{ij}</math>为第i个状态转移到第j个状态的转移概率
 +
 +
3. 遍历当前时刻每个微观态i,遍历下一时刻每个微观态j,计算i->j的转移概率
 +
 +
  1. 遍历每个节点n,获取它的父节点及其状态。
 +
 +
  2. 根据微观动力学机制,计算下一时刻节点n状态为1的概率p1,状态为0的概率即为1-p1
 +
 +
  3. 获取微观态j中节点n的状态next_state,节点n转移概率即为p(n) = p * next_state + (1-p) * (1-next_state)
 +
 +
  4. 各节点的转移概率相互独立,因此<math>P_{ij} = \prod_{n=1}^{N} p(n)</math>
 +
 +
4. 行归一化<math>P</math>并输出
      第435行: 第455行:     
if result < 1:
 
if result < 1:
−
result += noise_prob  # 带噪音的AND门
+
result += noise_prob  # 机制:带噪音的AND门
    
return result
 
return result
5,443

个编辑

导航菜单