我正在通过MIT OCW课程Introduction to Electrical Engineering and Computer Science I,在其中使用状态机。我注意到课程教师没有为他们讨论的大多数状态机绘制状态转换图。
一个问题是设计& Python编码状态机,其状态是过去两个时间间隔的输入。我认为这是一个无限状态机,状态转换图可能对于获得一般想法很有用,同时只显示几个状态。
我想知道是否可以为这种双延迟机器绘制状态转换图。到目前为止,所有的例子都有一个过渡线,它出现在一个标有输入和结果输出的状态泡沫中,然后指向下一个状态。对于双延迟机器,输入结果在前两个时间段输入。 problem instructions表示机器的所有状态内存都在一个参数中。没有提到输入内存,我认为这是必要的。
我的问题:
是否可以为此状态机绘制状态转换图?
输入内存是否属于此设计的一部分?
答案 0 :(得分:0)
绘制图表是不可能的,因为所有可能状态的集合包括任何数据类型的任何值,在读数中的(单个)延迟状态机的示例中给出。因此,无法定义可能状态的数量。请参阅Chapter 4: State Machines。
在问题描述中,它指出:
任何状态机中的 init 和getNextValues方法都必须不设置或读取除self.startState之外的任何实例变量(甚至不是self.state)。所有内存(state)必须位于getNextValues的state参数中。请查看课程笔记的第4.1节中的示例。
所以状态就是你需要的所有记忆。没有理由不使用数组作为状态来保留最后两个输入。
首先我们将两个值保存在内存(状态)
中class Delay2Machine(StateMachine):
def __init__(self, val0, val1):
self.startState = (val0, val1)
遵循读数中给出的超类SM步骤函数实现:
def step(self, inp):
(s, o) = self.getNextValues(self.state, inp)
self.state = s
return o
输出将是内存中保存的第一个值,状态将更新为包含新输入
def getNextValues(self, state, inp):
return ((state[1], inp), state[0])