模型检查中的局部搜索策略与实践
1. 状态空间分区概述
在系统中,组件进程存在一个或多个错误状态是很常见的,而我们希望在整个系统中这些状态永远不会被达到。因此,在进行搜索之前,很难有好的自动方法来决定使用哪种基于组件的分区。不过,我们可以提前创建一系列的分区选项。
当格式有 N 个组件时,每个状态对可看作一个 N + 1 元组状态,额外的一个是规格说明。分区既可以基于实现组件的状态,也可以基于规格说明状态,但不能期望规格说明状态分布会更均匀。
状态空间分区有两种不同的策略:预计算分区和动态分区。
2. 预计算分区
2.1 分区算法思路
预计算分区是基于代表状态对的 N + 1 个进程中的一个或多个进程的状态空间,提前确定一些分区选项。我们需要一个算法将状态机划分为两个或多个相对独立的状态机,使得这些部分之间的转换尽可能少。
这个算法分为两部分:
1. 为组件状态机的各个节点和转换分配权重,评估机器处于给定状态或进行给定转换的可能性。
2. 选择状态机的分区,使每个部分的节点权重大致相等,且它们之间的边权重最小,以提高搜索的局部性。
这两个算法都只能给出近似的最优结果。因为在第一种情况下,不进行搜索就无法预测给定搜索的权重;在第二种情况下,即使能确定两个标准之间的正确平衡,优化它们也几乎肯定是 NP 难问题。由于要分区的组件大小从 2 到数百万不等,我们需要选择非常高效的算法,对应用算法的组件大小设置上限,或者针对不同大小的组件使用不同的算法。
2.2 加权算法
在缺乏系统实际行为证据的情况下,我们可以对特定转换和节点的使用频率进行
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



