【问题标题】:Stepping through a sequence of grouped logic gates逐步通过一系列分组逻辑门
【发布时间】:2016-04-08 07:27:06
【问题描述】:

我正在模拟蛋白质-蛋白质相互作用。我正在使用 Python 将逻辑门编码为模拟蛋白质相互作用的函数。 我的模型基本上是一系列包含逻辑门的组(g0g4)(见图)。最初,我设置了一个包含我的组的list,然后为每个组设置一个dict,其中包含蛋白质(节点)及其起始值(它们所谓的seedValues,它们是网络的起始参数) t=0)。

我的问题是:是否有某种方法可以遍历我的组(及其逻辑门功能),从t 的第 0 组(图像中的g0)开始,然后在t=t+1 执行组g0g1,然后在t=t+2 处执行三个组g0g1g2,依此类推直到t=m,其中m 是需要的迭代次数?

澄清:也许我不清楚。我的问题是这样的:假设我编写了一个逐步遍历我的组的函数,一次一个。它 从g0 到时间t=0 开始,并执行、存储和输出所有 该组中的门,加上自身“前面”的所有门(g1g4)。完成后,该函数将时间向前移动一步 (t=t+1) 并转到g1 并再次执行,包括输出 将g2 分组到g4。现在是错误出现的地方:为了准确 模型,我也需要在t=t+1 时执行g0之前 程序步骤到g2。我怎样才能让我的程序输出这样 顺序执行的“波”?我想我可能需要使用 递归,但我不知道怎么做。

查看我对“组”here 的意思的示例图片。 图片注释:AB 是开关(程序应该改变它们,作为研究扰动的一种方式),C是一个常数(从不改变)。 J 是输出(主要用于展示)。 DF 以这种方式构建,以便在 A = 0 时振荡。

我在 Stack Exchange 和 Stack Overflow 上搜索过这个;虽然我看到许多与我感兴趣的领域相关的问题(12),但我没有看到任何我确定专门解决我的问题的问题。感谢您的宝贵时间。

【问题讨论】:

  • 可能我在这里遗漏了一些东西。创建多线程/多进程程序的唯一好理由是性能。如果你还没有编写程序,你怎么知道它不够快?仅仅因为电路组件并行运行并不意味着程序的内部结构必须并行进行计算。重要的是该程序生成了电路(蛋白质)功能的准确模型。为什么要编写多线程程序来使您的任务复杂化?
  • 我更新了我的问题,以更好地反映我想要做什么。请参阅我在原始问题中的说明。

标签: python logic simulation boolean-logic


【解决方案1】:

在我看来,您的问题减少到了几个嵌套循环。如果将所有组放入一个名为 gx 的列表中,然后将时间 t 从 0 递增到某个值 tmax,则在 Python 中看起来像这样...

for t in range(tmax):
    for i in range(t):
        nodeExecute(gx[i])

每次增加t 时,除了之前的所有组之外,还会执行一组。如果我还是不明白,请见谅。

【讨论】:

  • 这会很完美,非常感谢。我对自己的问题与解决方案的看法非常短视。
【解决方案2】:

对于事件驱动的数字模拟或discrete event simulation,通常使用“时间轮”或“时间轮”作为基本数据结构。轮子基本上是一个数组,其中每个元素都指向一个列表或模拟事件的动态向量,它们对于“时间调制轮子大小”具有相同的值。

here 描述的时间轮:

timewheel 比priority queue 更高效,priority queue 还可用于按时间戳升序处理模拟事件。

事件驱动逻辑仿真伪代码:

t = tStart
While (t < tEnd) {
    process all events scheduled for t and schedule follow-up events
    schedule events from signal sources
    t = t + 1
}

要处理门的分组,您可以将每个组视为具有多个输出的超级门。可能有必要在给定的一组门中模拟不同的延迟延迟。

您可以在Hardware Description Language 中描述您的电路,如Verilog 并使用ready-made simulator,而不是编写自己的模拟器。

【讨论】:

  • 这似乎是解决我的问题的好方法。就像您出色的答案所暗示的那样,我选择将我的门建模为一系列组,其中每个时间步执行一组。我以图形方式描述它!like this,它与您建议的事件驱动数据结构非常吻合。感谢您的意见!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多