固定状态检测
该算法开发的关键是要认识到布尔网络的离散性允许我们将搜索限制在固定状态(如果存在)所在的状态空间的选定子空间。结果表明,这些子空间比实际状态空间小几个数量级,从而可能实现精确枚举。这是通过两步过程实现的(图2)。
假设一个由n个节点组成的布尔网络。对于其中的k个(通常是k大约10个),生成2k个×k矩阵表示它们的所有2k个可能的状态。然后,对于剩余的n-k个节点中的每一个,都要经历以下迭代过程:
通过首先复制矩阵,然后添加一个额外的列来扩展矩阵,该列具有适当选择的(k + 1)标准节点(对于每对相同的行为0和1)。结果是2k+1(千分之一)×(k) + 1) 矩阵。新节点的选择至关重要:它的所有传入节点必须存在于初始的k成员组中(参见下面的备注)。然后,对于每一行,我们检查添加的节点的值是否满足其节点方程。如果违反了它,那么我们将删除该行,因为它不会导致固定状态。这样做,所有的2n-(k+1)下游继任者被彻底清除。如果k个最初选定的节点中的所有传入节点都在矩阵中,则对其执行相同的步骤。
然后a(k + 2)第添加节点,进一步扩展矩阵,对所有行测试其方程,重复该过程,直到考虑到所有节点。在每个迭代步骤中,如果没有发现剩余节点的所有传入节点都已存在于矩阵中,则选择具有最大离差的节点。该算法只是试图增加每个步骤中至少有一个节点具有所有传入节点的可用概率。前k个节点的选择也基于此推理:选择具有最大偏离值的节点。
连续删除等式冲突状态(即包含至少一个不满节点的状态)会导致所检查状态的数量急剧减少。它可以将问题简化许多数量级,具体取决于网络大小和复杂性。在一个典型的网络中,在矩阵中包含一半节点的时间前后,被检查状态的数量达到最大值。然后,随着评估过程中考虑到许多节点方程,状态数量迅速减少。处理完整个节点集后,最终矩阵中只保留固定状态。
我们注意到,这里描述的方法同时处理状态和参数复杂性。当测试节点的实际值是否与节点方程兼容时,我们接受此条件适用于至少一个逻辑参数选择的任何状态。因此,该算法不仅为逻辑参数的具体组合生成固定状态,而且还为所有可能的参数生成固定状态。然后可以从最终矩阵中读取实现固定点所需的逻辑参数条件(图2B) ●●●●。这一方面对于逆向工程问题至关重要。
对多值情况的推广很简单:在每个迭代步骤中,当添加一个具有m个级别的节点时,该算法将前一个矩阵的m-1副本与相应的级别(从1到m-1个)已附加。然后如前所述进行,即删除所有方程暴力状态。
循环检测
前期工作
系统方程指示每个状态流向相邻状态,并且(在异步模式下)相邻状态最多相差一个节点的值。将更改节点设置为满足系统方程的值,这会将内容节点的数量增加一个;然而,此更改通常会对其他节点产生影响,并可能导致其他不满意的节点。如果状态空间包含吸引盆地,那么系统最终将流向它们。吸引力的基础表明固定状态或第个,共个稳定循环也就是说,一旦系统到达状态集,系统就无法摆脱这些状态集。一旦一个系统进入一个吸引池,方程就会驱使它更深地进入其中,逐渐增加内容节点的数量。然而,对于任何一个吸引盆地来说,要想知道它是否可以从任何给定的当前状态达到,都不是一件小事。
我们认为一个州不稳定/无序其不满节点的数量越高,我们将状态称为1-,2-到n-不满。直觉上,系统方程往往会将系统推向更多稳定/有序状态空间的区域。我们注意到,大多数有趣的稳定循环驻留在足够有序的空间状态区域中,其中其成员的节点值的很大一部分满足方程。包含大量不满意节点的状态的稳定循环不太相关,这从以下考虑中显而易见(比较图三)。
如果一个具有n个节点的系统的状态是k-不满意的,那么它有k个后继状态,因为k个不满意的节点中的每一个都可以更新,并且方程不会改变内容节点的值。
当循环的所有成员国都在循环中流动时,循环是稳定的。如果单个循环成员的后续成员不是循环的一部分,则会使循环亚稳定(图三A) ●●●●。
一个稳定的循环包含一个即使节点数量适中的状态,也必然是一个长循环(图中的状态“c”三B表示3-不满意);该状态有多个继承者,所有继承者都必须是循环的成员以及所有继承者等。另一方面,其成员很少有不满节点的循环通常很短。我们引用一个k循环来表示其最不满意的成员国是k不满意的国家。一个1周期,其中每个国家成员都有一个继任者,也被称为简单的循环(图三A、 在缺少A的情况下→ g过渡)。否则,它是一个混合的循环和在这种循环中出现“分支”(图三B) ●●●●。简单的循环必然是稳定的。一个典型的例子是:一个1循环,由4个状态组成,可通过两个节点的值的4个组合(0-0、0-1、1-0和1-1)区分。网络中剩余的k-2个节点都是内容,并且由所有4个循环状态共享。
我们注意到,原则上,尽管所有州都很少有不满节点,但周期可能很长。
稳定循环查找
上述定点搜索是在满足所有系统方程的状态下执行的。它不能用于检测循环,因为循环的每个成员状态必须至少为1-不满。很自然,放松上述限制可以用于循环查找。也就是说,在扩大的子空间中搜索,包括所有状态,直到并包括k-不满状态,将导致检测到所有j-cycles,其中j ≤ k) ●●●●。不可避免的是,枚举更多的状态会导致可解析网络的规模减小。
k的值可以从k变化 = 1(1个循环搜索)到n(搜索所有循环)。选定状态的数量随着k的增加而快速增长。只有当所选状态的数量因内存限制而可管理时,循环查找才可行。此外,由于该算法符合“标准”图形理论方法,首先查找所有父子状态关系,然后搜索稳定循环,因此执行运行时间会快速增加。如果找到一个,它会通过自下而上的方式“创造”吸引力的盆地。
该算法经历了两个主要阶段:
-
(i)
确定状态空间的适当子集。
-
a。
与固定状态的情况一样,每次迭代添加一个节点,并在每个步骤中保持所有状态直到并包括k不满状态。每个状态都由其不满节点的数量标记(在{0,1,…,k}中)。最终结果是所有这些状态的集合。当前的实现可以轻松处理多达数千万个州的设置。请注意,所有网络固定状态都包含在内,并用零标记。
-
b。
每个选定状态的前身和后继都记录在适当的数据结构中。在选定的一组州中没有任何继承者的所有州(即,它们在“外部”流动)都无法进行评估,从现在起将被排除在外。
-
(ii)
搜索所选状态集内的循环:
-
a。
首先,确定每个固定状态的吸引域。这是通过“向上走”收集到的有关继承人/前任人关系的信息,沿着属于当前流域的所有州进行标记和计数来实现的。任何剩余的非标记态都只属于循环吸引子的盆地。在随后的步骤中,搜索仅限于这些状态(流域大小计算除外)。缺少非标记状态显然意味着所选状态集中没有循环;此时搜索有效终止。
-
b。
从k值最低的状态开始,通过在所选状态的图形中创建所有定向行走,再次使用后继/前置数据结构查找定向循环。如果发现任何此类循环,则检查其任何成员国是否属于任何当前检测到的盆地。如果是这种情况,则循环将被视为不稳定而丢弃。否则,检查循环是否“关闭”,即其所有成员的子代是否也是循环的成员。如果不是这样,则该旋回的成员(或后继成员)属于尚未发现的盆地,或者它是更大混合旋回的一部分。在当前步骤中,简单地登记这样一个循环;这将在稍后阶段处理。如果发现循环是闭合的,那么它是稳定的,并构成一个吸引子。它的所有流域状态都会被统计,任何未被标记的状态现在都会被标记。(请注意,一个状态可以属于多个吸引子。)重复此步骤,直到考虑所有注册状态。
-
c。
检测到的旋回(其成员未流向已识别的盆地)仍然可以保留。它们中的每一个都可能是更大混合循环的一部分。一个迭代过程被称为迭代过程,它从一个适当选择的“种子”循环开始,通过添加循环中的任何新状态来不断扩大循环。迭代一直持续到这个扩大的循环“关闭”。如前所述,确定了相应的流域,并继续对任何剩余的未标记状态进行处理。
准确确定所有继承人/前任人关系以及盆地成员计数所需的时间随选定州的数量线性增长。这一事实有助于快速呈现算法。另一个关键因素是,每次确定吸引子盆地时,搜索空间的大小都会减小。
标杆管理
为了进行基准测试,我们通过编程生成了大量足够复杂的布尔网络,这些网络具有与已知的生物相关示例相似的特性。如上所述,排除了具有单个传入边缘和单个传出边缘的节点。对于大多数网络来说,边与节点的比率大约为2.5(当不是这样的时候,它是这样规定的),每个节点不允许超过6条传入边。我们选择比较互联网到GenYsis公司和金西姆因为这两个包支持真正的异步更新,并保证检测所有周期(对于特定大小的网络).lnet网络和GenYsis公司共享通用输入格式;对于金西姆已为所有相关运行生成兼容版本。
只有互联网涉及数百个网络的测试运行是自动化的GenYsis公司如下图所示,运行仅限于小型网络,而金西姆它们很难实现自动化。因此,我们只运行了其中几个仍能产生足够代表性结果的程序。
测试是在一台Linux计算机上进行的,该计算机具有Xeon 2.4 GHz处理器和96 GB物理内存。GINsim的版本是2.4,它在Java 1.5上运行。
GenYsis基因发现在检测约30个节点的网络的所有固定点和所有周期方面具有优势。较大的程序的执行时间可达1小时,内存需求最小。对于更大的网络,执行时间比我们的测试时间(1小时)还要长,内存利用率变得越来越重要。这些结果与Ferhat等人的结果基本一致[17]. 应该强调的是GenYsis公司通过设计检测所有现有的周期,也包括数千个成员国的周期。
金西姆如Hinkelman之前报告的那样,以节省内存的方式快速检测多达120个节点的网络的固定状态[18]. 多线程,金西姆还利用了我们的多核测试环境。然而,大型网络的执行时间高于我们的测试时间,有时似乎根本不会终止。它在寻找稳定循环时的性能相当差。分析20个节点的网络已经需要几分钟的时间,即使是中等规模的网络也会失败。原因是它试图详尽列举所有网络状态。这里应该注意到金西姆也可以处理多值网络。
互联网检测最多150个节点的网络的固定状态,检测最多20个节点的所有周期,并检测最多70个节点的网的周期子集。限制因素是可用的计算机内存,因为互联网不可避免地会增长得太大。
对于循环检测,多达20个节点的网络,互联网的性能相当于GenYsis公司。从20到30个节点仍然是相同的,但是互联网搜索被限制在具有低k的k不满足状态(k的实际值取决于网络大小)。否则,速度可能会明显变慢,原因与GINsim公司在没有k(k)很低的吸引子的情况下,减速可能很重要 = 0或1),因为这些总是首先被检测到,并且它们的流域状态立即从任何下游考虑中删除。为了进一步说明这两种算法的不同性能,一个30节点的网络分析可能需要几个小时GenYsis公司无论固定状态或周期的数量(无论多大)。另一方面,虽然互联网可能无法检测到非常大的周期,它将在亚秒的时间内找到固定状态和小周期。
30个左右节点互联网在检测周期中是唯一的。由于计算机内存有限,为了增加节点数量,我们必须减少任何枚举状态下不满意节点的允许数量。这导致检测周期更少。然而,回想一下,在代表生物系统的布尔网络中,具有低k值的k循环可能是最相关的。
三种算法的比较示意图如图所示4其余数字仅集中于互联网结果。
第一系列测试针对节点范围从30到150的网络的固定状态。对于分析的每个节点数,根据前面提到的规则,生成一组100个网络。然后对这些网络中的每一个进行分析互联网要么只搜索固定状态,要么也搜索稳定循环。记录计算机执行时间,并使用结果生成图中所示的曲线图5,6,7,89和10。
在图中5显示了节点数与计算机执行时间(以秒为单位)的半对数图。130、140和150例患者的数据未显示,因为内存不足分别导致其中20%、68%和68%的患者终止治疗。(对于那些成功分析的网络,持续时间趋势与图中显示的趋势一致。)
接下来,如前所述互联网算法依赖于大幅减少枚举状态的数量。这在图中很明显6,其中绘制枚举状态与系统空间状态的总数(仅适用于固定状态搜索)。
在图中7,重点是循环搜索。这3个图分别显示了30、40和50个节点的网络中循环搜索的计算时间。来自更多节点(最多70个)的数据未显示,但遵循类似的趋势。
图8同样关于循环搜索,显示了不满节点数相等或更少的系统状态计数,以增加不满节点数。对于一个30节点的网络,最多有10个不满节点的州仍然不到整个状态空间的6%。枚举此分数足以检测多达数千个成员国的现有循环。
图9总结了所有互联网关于固定状态和循环的结果。
最后,图10显示了增加具有固定节点数的网络的边数的效果(选择了50个节点)。