有限自动机运行的逻辑
页面进行中。 |
有限状态机 它是一种基于输入数据或事件在不同状态之间顺序转换的抽象计算模型。 有限状态机包括两种模型构建方法-状态机和转换图。
状态机的逻辑
具有状态机的有限状态机示例:
执行算法包括以下步骤:
状态机的一般逻辑
-
状态机的操作在任何状态被激活之前开始。:
-
1. 如果状态机有一个默认转换(或几个这样的转换),那么首先执行与这些转换相关的操作,同时考虑到它们的优先级和条件。;
-
2. 如果默认情况下有多个转换,则按照设置的优先级顺序分析转换,直到检测到具有不完整或缺失条件的转换,之后激活相应的状态。;
-
3. 如果没有默认转换并且存在单个状态,则会自动激活它。
转到第2点。
-
-
在机器的下一步,在激活状态之后,检查从激活状态的可能转换。 可以有零个、一个或几个这样的转换。
-
1. 如果没有从当前活动状态转换,则机器保持在相同的当前状态,并且执行此状态的`during`和`on’部分(如果指定)。 此状态的"退出"部分永远不会执行。
-
2. 如果从当前状态只有一个转换,则检查其条件。 如果不满足条件,则机器保持在相同的当前状态,并且执行该状态的`during`和`on’部分(如果指定)。 如果条件具有值"true",则首先执行转换操作(如果指定)。 其次:
-
2.1. 如果转换导致另一个状态,则执行当前状态的`退出`部分和另一个状态的`进入`部分(如果指定)。 另一个状态变为活动状态而不是当前状态(此处不考虑分层状态)。
-
2. 2. 如果转换导致相同的状态(这里我们只考虑外部转换),则执行当前状态的"退出"和"进入"部分,并且它保持活动状态。
-
2.3. 如果转换导致死端节点,则当前状态保持活动状态,并且执行其’during`和’on’部分(如果指定)。
-
-
3. 如果几个转换退出当前状态,自动机将尝试按照设定的优先级顺序依次通过它们,直到发生转换,其条件满足或不存在(这里不考虑复合转换—请参阅下一段)。 如果没有找到这种转换,则机器保持在当前状态,并且执行该状态的`during`和`on’部分(如果指定)。 如果找到过渡,请参阅第2.2.1、2.2.2和2.2.3段。
-
-
如果任何转换(条款2.2和2.3)是复合的(由两个或多个段组成)并且具有分叉,则可以实现backtrackingfootnote机制:[*Backtracking*是一种解决问题的方法,其基础是尝试依次迭代所有可 当程序到达一个决策节点(例如,在过渡图中,它可能是一个退出节点),并且所有可能的进一步操作选项都是不正确的(例如,来自该节点的所有转换都有假条件)时,它返回(回溯)到前一个决策节点,并尝试另一个(替代)选项。]:根据它们的优先级和条件通过转换,自动机记住传递的分叉,如果下一个转换的条件没有满足,自动机返回到最近的传递的分叉,在那里替代分支没有被测试,并作出新的尝试,但沿着替代路径。 如果没有具有替代路径的分叉,则当前状态保持活动状态,并且执行其’during`和’on’部分(如果指定)。
操作员组
在状态机 运算符组`entry'、'during’和’exit’在状态发生变化时和处于状态时启动操作。 执行这些运算符的逻辑与转换、状态和激活顺序密切相关。 让我们仔细看看每组操作员是如何工作的,以及它们是如何相互交互的。:
-
检查转换条件-在每个步骤中,状态机检查是否存在从当前状态的活动转换。 过渡可能受到条件的制约 更改指标’hasChanged`等。)或时间逻辑('之后’等。),这表明何时可以进行过渡;
-
在满足条件的情况下进行转换:
-
如果满足转换条件,则状态机停用当前状态。;
-
'exit'—如果指定了’exit’语句组,则在当前状态结束之前执行。 它完成与此状态相关的所有操作。;
-
然后有一个转换到一个新的状态,其中执行一组用于该状态的`entry`语句。
-
-
如果没有发生转换:
-
如果不满足过渡条件,则状态机保持当前状态。;
-
'during'—如果状态为active并且为`during`指定了操作,则执行。 只要自动机保持在该状态并且不满足过渡条件,这在每个步骤都继续。;
-
'on'—当某个条件发生时执行,如果当前状态为活动状态并且`on`语句组与此条件相关联。
-
执行运算符组的优先级
-
过渡条件-首先检查以确定是否将完成过渡;
-
转换操作—在检查条件后执行,如果转换被确认;
-
'exit'-在转换之前完成当前状态的执行;
-
'on'—如果状态处于活动状态并且发生了指定的事件,则执行;
-
'entry'-在激活新状态时执行,为执行操作做好准备;
-
"期间"-在机器的每个步骤执行,而当前状态保持活动状态。
那么具有转换和运算符组的有限状态机的逻辑如下:
-
在每一步,状态机检查转换条件。 如果可以转换,则对当前状态执行"退出"操作,然后对新状态执行"进入"操作。;
-
如果没有发生转换,则对当前状态执行"期间"操作。;
-
"on"增加了仅当这些事件发生在活动状态时才激活操作来响应事件的能力。
过渡图的逻辑
过渡图的逻辑包括节点和过渡的顺序分析,从默认过渡开始。 运算的算法可以分为以下几点:
-
与状态机不同,转换图在每个步骤都被完全检查。 如果条件为真,则执行转换,或者,如果没有条件,则默认执行转换。 如果转换是可能的(条件是否为真),则图形执行与转换相关的操作。 转到第2点。
-
执行转换时,如果条件为真或缺失,则执行在此转换上定义的操作。 之后,将执行到图形中指定的下一个节点的转换。 完成这些操作将完成第二步并导致步骤3。
-
如果计算机已到达节点,则执行以下操作,具体取决于三种可能的结果:
-
1. 节点是死胡同。 如果回溯是可能的,那么它被执行。 否则,自动机步骤完成。
-
2. 一个转换源自节点。 机器正试图进行这种转变。 如果满足条件,则自动机执行过渡动作并前进到此过渡所导致的节点。 如果不满足条件,计算机将尝试执行回溯。 如果回溯是可能的,则执行回溯。 否则,自动机步骤完成。
-
3. 有几个转换来自节点。 如果自动机第一次在这个节点(在当前步骤内),那么它尝试用第一个序列号执行转换。 与此同时,机器试图执行的转换的数量被记住。 如果从这个过渡开始的路径导致回溯,并且机器返回到当前分叉,它将尝试按顺序执行下一个过渡(编号为"2",然后是"3"等。),直到它耗尽了所有可用的转换或成功完成其中一个转换。
-
-
如果从节点的过渡完成,则自动机移动到下一个节点并从点1继续执行。 如果从节点的过渡未完成,并且回溯是可能的,则执行回溯。 如果回溯不可能,则完成自动机步骤。 整个执行逻辑完全基于节点之间的转换,以及记忆和顺序检查叉节点中转换的序列号。
节点
结 它们是过渡图的关键元素,作为过渡的交汇点。 它们定义了过渡通过的点,组织了模型中有序的步骤序列。
过渡时期
过渡期 它们表示节点之间的连接,这些连接定义了从一个节点到另一个节点的过渡逻辑。 每个转换都可以有一个条件,该条件被检查以确定是否进行转换。 转换可以是有条件的(仅在某个条件为真时执行)或无条件的(如果它们处于活动状态,则始终执行)。 如果多个转换源自一个状态或节点,则程序会将显式转换分配给它们。 优先级以数字显示(1,2,3等)). 在仿真过程中,按此顺序检查转换,并执行具有真实条件的第一个可用转换。
过渡逻辑的典型案例:
-
在满足与变量、参数或计算结果相关的条件时发生的节点之间的简单转换。;
-
依赖于变化指标(
hasChanged
,hasChangedFrom
,hasChangedTo
),时间逻辑运算符等的转换。,当某些参数的值发生变化时执行。; -
回溯的逻辑,其中转换可以返回执行到前一个节点,以检查替代路径,如果当前转换的条件不满足。
过境点的情况
*转换条件``[]'指定确定何时应该发生转换的逻辑表达式。 这些条件可以包括比较值、检查逻辑表达式或使用诸如`hasChanged’的逻辑运算符。 如果条件为真,则执行转换,并在下一节点继续执行。
在交通路口使用条件的例子:
-条件可以检查值的范围,例如,只有在达到某个参数级别时才进行转换。; -逻辑表达式可以包括几个检查,例如,一组条件('A>5//B<10`); -变化指标用于确定系统的状态是否在某一时刻发生了变化。
时间逻辑运算符
时间逻辑运算符 过渡允许您考虑与事件频率相关的时间方面或条件。 逻辑运算符`after`,`at`和`every'(以及其他)根据事件的时间,重复或频率指定转换的条件。 它们可以在状态机中使用,状态机中有一组"on"运算符和转换。
时间逻辑的应用示例:
-使用’after’运算符指定在激活与此运算符关联的状态之后在指定时间段或状态机的步数之后执行的转换; -使用"at"运算符设置转换,该运算符仅在激活与此运算符相关的状态的那一刻起的给定步骤执行; -使用"每个"运算符设定执行频率,执行重复动作。
内存节点
内存节点 允许状态机记住最后一个活动的子状态,并在父状态重新激活时恢复它。 内存节点用于需要保存自动机的上下文并从同一个地方继续执行的情况,即使在退出并重新进入状态之后也是如此。 存储器节点的逻辑基于存储当前子状态并在满足某些条件时激活它,例如,在执行父状态的`during`和`on`组之后。
使用内存节点的示例:
-
在重新激活父状态时恢复最后一个活动子状态;
-
实现需要暂时退出状态并在保持上下文的同时返回状态的复杂场景;
-
根据存储的状态管理子状态之间的转换。