Python 细胞自动机算法不';好像不行

Python 细胞自动机算法不';好像不行,python,multithreading,algorithm,automata,Python,Multithreading,Algorithm,Automata,我目前正在使用Python和libTCOD开发一个电子仿真软件(非常基本的东西)(只是为了“渲染”电路板)。 因此,我有一个78x47 2D列表,其中存储了电路板信息(单元类型、id、状态、坐标等)和一个模拟导线的简单算法(wireworld)。 一切似乎都很顺利,除了一件事:“电子”只向电线的左侧移动。所以我认为这可能与它运行算法的方式有关 WireWorld导线有三种可能的状态:导体、尾部或头部 头部:状态为“2”,下一步变为尾部 尾部:状态“1”,在下一步更改为导体 导体:状态“0”是默

我目前正在使用Python和libTCOD开发一个电子仿真软件(非常基本的东西)(只是为了“渲染”电路板)。 因此,我有一个78x47 2D列表,其中存储了电路板信息(单元类型、id、状态、坐标等)和一个模拟导线的简单算法(wireworld)。 一切似乎都很顺利,除了一件事:“电子”只向电线的左侧移动。所以我认为这可能与它运行算法的方式有关

WireWorld导线有三种可能的状态:导体、尾部或头部

  • 头部:状态为“2”,下一步变为尾部
  • 尾部:状态“1”,在下一步更改为导体
  • 导体:状态“0”是默认状态,如果在1单元范围内有任何磁头,则更改为磁头
以下是模拟应该如何进行(H表示头部,t表示尾部,t表示导线):

  • 步骤1:----H----
  • 第二步:--HtH---
  • 步骤3:--Ht-tH--
  • 步骤4:-Ht---tH-
  • 第五步:Ht---tH
  • 步骤6:t------t
  • 步骤7:---------
但目前的情况是:

  • 步骤1:----H----
  • 第二步:--Ht----
  • 步骤3:--Ht-----
  • 步骤4:-Ht------
  • 步骤5:Ht-------
  • 步骤6:t--------
  • 步骤7:---------
看到了吗?电子头只向导线的左侧移动

这是我当前的算法代码:

def run(self):
    for DX, DY in ((-1,-1), (-1,+0), (-1,+1), (+0,-1), (+0,+1), (+1,-1), (+1,+0), (+1,+1)):
        if BOARD[self.Y+DY][self.X+DX].STATE == 2 and self.STATE == 0:
            self.STATE = 2
            return True

        if self.STATE == 2:
            self.STATE = 1
        elif self.STATE == 1:
            self.STATE = 0
这就是我运行模拟步骤的方式:

for y in range(BOARD_HEIGHT):
    for x in range(BOARD_WIDTH):
        BOARD[y][x].run()

我需要在一个独立的线程中模拟每个单元格吗?

不需要多线程,只需确保在每个模拟步骤中有多个'->H'-转换

我从您的代码开始编写了一个最小的示例(但类布局略有不同):

输出:

    -     
    -     
    -     
----H-----

    -     
    -     
    H     
---HtH----

1.这是用于逻辑/数字电路还是用于模拟电路?2.我对国家价值观感到困惑,为什么你对头和尾有不同的含义?对于数字电路,线端一次输入或输出,所以为什么不对其进行编码,并添加关于状态L/H/Z(低、高、高阻抗)的信息。然后你知道你必须只从输出方向传播到输入方向。每个组件的互连列表;s别针是更好的方法。使用模拟电路时,需要存储每侧的电位信息并计算电流。。。或者与电流模拟相结合……这更像是一个简单的图灵完整环境/沙箱。那么你是说序列组合逻辑(图灵自动机是基于磁带的计算机概念)在这种情况下,将其作为数字电路处理。。每个I/O引脚都有其状态和互连列表。所以,走每一扇门;s输入生成输出管脚状态,然后将输出管脚状态从互连列表传播到连接到它的每个输入。您
run
方法每次迭代最多可以将一条“线”设置为“头”。我建议您使用两个
BOARD
s(顺便说一句,这里没有self?全局变量?),并且在第一次更改后不要
返回
。没有“self”,因为有不同类型的“单元”,每个单元都有自己的状态、属性和“run”函数。每个“单元”类型都是一个类,而不是整个程序。
    -     
    -     
    -     
----H-----

    -     
    -     
    H     
---HtH----