代码之家  ›  专栏  ›  技术社区  ›  mcsilvio

设计复杂FSM的方法是什么?

  •  1
  • mcsilvio  · 技术社区  · 10 年前

    在工作中,我们使用FSM。最近,我不得不为一个我认为“对于简单的FSM来说有点太复杂”的问题设计一个FSM。为什么?因为这个问题有大约6个不同的数据维度,并且这些数据的许多排列会显著影响解决方案的行为。我的大脑认为“6个数据属性意味着这个数据的2^6+1排列”,如果它都是布尔数据的话。此外,在任何给定时间都可能发生大约8个输入。

    这个问题让我意识到,我的FSM创作技能仅限于我爱好项目中使用的简单问题。在工作中,我们只能使用FSM。这意味着,我不能只说“这个问题超出了FSM的范围。我会使用其他方法。”事实上,我们现有的FSM平台确实为我们的解决方案提供了强大的力量。

    问题:当问题足够复杂时,设计FSM的方法是什么?我对此做了一些研究,发现了一些论文,老实说,对我没有多大帮助。我希望有一些最佳实践,我所要求的只是一个。请,谢谢。

    1 回复  |  直到 10 年前
        1
  •  0
  •   Miro Samek    10 年前

    我想您可能正在经历通常的“状态转换爆炸”,这是传统“扁平”FSM的已知问题。传统的FSM“爆炸”了,因为它们在许多州造成了相同反应的重复。FSM缺乏捕捉各州行为共性的机制。众所周知的解决方案是使用 Hierarchical State Machines (亦称Harel状态图或 UML state machines ). HSM支持 状态嵌套 ,其中子状态继承周围超级大国的行为。如果使用得当,状态嵌套可以消除重复并抵消“爆炸”问题。大多数非琐碎的问题在FSM中并不是很容易处理的,但在HSM中却很容易处理。