2017-03-09 67 views
0

我通過MIT開放課程工作我的方式,Introduction to Electrical Engineering and Computer Science I,在這種狀態機採用狀態轉移圖。我注意到課程教師並沒有爲他們討論的大多數狀態機繪製狀態轉換圖。狀態機 - 雙延遲離散時間機器

的一個問題是設計& Python代碼的狀態機,其狀態是從過去的兩個時間間隔的輸入。我認爲這是一個無限的狀態機,對於這個狀態機來說,狀態轉換圖可能有助於獲得總體思想,同時只顯示一些狀態。

我想知道如果一個狀態轉移圖可以得出這樣的雙延遲機。到目前爲止,所有的例子都有一條從狀態氣泡出現的轉換線,標記着輸入和輸出結果,然後指向下一個狀態。對於雙延時機器,輸入的結果是前兩個時間段輸入的。該problem instructions狀態,所有狀態內存爲機器在一個參數。沒有提到輸入內存,我認爲這是必要的。

我的問題:

  1. 能的狀態轉移圖可以得出這個狀態機?

  2. 是不是一定是輸入存儲器是這種設計的一部分,是這樣嗎?

回答

0

是不可能的繪製的圖,因爲該組所有可能的狀態包括在該示例給出了(單)的任何數據類型的任何值,延遲狀態機在讀數。所以可能的狀態數量不能被定義。見Chapter 4: State Machines

在問題描述中指出:

重要的是,該初始化和getNextValues方法在任何狀態下機除了self.startState(甚至沒有self.state未設置或讀取的任何實例變量)。所有內存(狀態)必須位於getNextValues的狀態參數中。看看課程筆記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])