2016-05-02 43 views
1

在工作中,我們使用FSM。最近,我必須設計FSM來解決我認爲「對於簡單的FSM來說太複雜」的問題。爲什麼?由於該問題具有大約6個不同的數據維度,並且該數據的許多排列顯着影響解決方案的行爲。如果全部是布爾數據,我的大腦會認爲「6個數據屬性意味着這個數據的2^6 +1排列」。此外,在任何給定的時間內,大約有8個輸入可能發生。什麼是設計複雜FSM的方法?

這個問題讓我意識到,我的FSM創造技能停止在我的愛好項目中使用的簡單問題。在工作中,我們被限制使用FSM。這意味着,我不能說「這個問題不在FSM的範圍之內,我會用其他的東西。」事實上,我們現有的FSM平臺確實爲我們的解決方案提供了大量的功能。

問題:當問題足夠複雜時,什麼是設計FSM的方法?我在這方面進行了一些研究,並發現了一些論文,說實話,這些論文對我沒有多大幫助。我希望這有一些最佳實踐,我要求的只有一個。請和謝謝。

+0

我想你的意思是[有限狀態機](https://en.wikipedia.org/wiki/Finite-state_machine),而不是許多其他FSM中的一個,例如[Flying Spaghetti Monster](https:// en.wikipedia.org/wiki/Flying_Spaghetti_Monster)。或[糞便污泥管理](https://en.wikipedia.org/wiki/Septage).... –

+0

無論如何,這個問題對於SO來說太廣泛了。它可能更適合[程序員SE](http://programmers.stackexchange.com/),但如果你決定在那裏擺姿勢,那麼請在這裏刪除它。 –

+0

如果FSM意味着「有限狀態機」,那麼我的答案將是一般的:FSM就像其他任何編程語言一樣。你如何爲複雜任務設計FSM?你如何吃大象? – Patrick87

回答

0

我想你可能正在經歷通常的「狀態轉換爆炸」,這是傳統「扁平」FSM的已知問題。傳統的FSM「爆炸」,因爲它們在許多州造成了相同反應的重複。 FSM缺乏任何機制來捕捉國家間行爲的共同點。長期以來的解決方案是使用Hierarchical State Machines(又名Harel狀態圖或UML state machines)。 HSM支持狀態嵌套的概念,其中子狀態從周圍的超狀態(s)繼承行爲。如果使用正確,狀態嵌套將消除重複並消除「爆炸」問題。大多數非平凡的問題對於FSM來說都不是很容易理解,但對於HSM來說非常易於管理。