Page 77 - 《软件学报》2021年第12期
P. 77
王博 等:SSRules:让智能家居自动化规则更易于编写和检查 3741
I
I
H
变化事件 E 和状态保持事件 E 这两种类型,每当出现与 E 相符的状态变迁,或者每当τ now 的更新触发
S
H
E
了 E 中的某个状态保持事件后,检查与触发事件相符的各条规则.如果存在 R ,R .C 在ω下成立,则执行
E
\ .A.
E
S
E
S
定义 4(SS 与 EE 的一致性). 称G 与\ 一致是指:对于无时序缺陷的G ,\ ,在上述规则执行假设下(且不存
S
在超时、执行失败、规则重叠执行的情形),从与G 兼容的任意系统抽象状态ω开始,对于同样的、同时刻的、
S
E
一次发生一个事件的外部事件序列,G 所产生的状态变迁序列和R 所产生的状态变迁序列一致.
E
S
E
与G 一致的\ 不唯一,原因在于:① \ 中不会被执行的规则不影响一致性;② 一个条件较弱的 EE 规则(如
E
E
E
一条规则 R ,条件 R 1 E .C 为时钟.状态==白天)可等价于多个条件更强的 EE 规则(如等价于规则 R 和 R ,条件
1
3
2
R 2 E .C 和 R 3 E .C 分别为“时钟.状态==白天 AND 模式.状态==回家模式”和“时钟.状态==白天 AND 模式.状态==
E
E
离家模式”);③ 一条 EE 规则 R 还可以等价于 m 条 EE 规则 Ri = 1,..., )m ,满足 R E .E =∪ R i E .E ;④ 逻辑表达式
(
i
i
有多种等价表述.
3.6 SS规则到EE规则的转译
图 3 详细说明了 SS 规则到 EE 规则的转译算法实现,其中:图 3(a)中的算法 1 是总控算法;图 3(b)是相应的
S
流程图,转译器的输入分别是左上角的实体-能力抽象信息 W 和右上角的 SS 规则集合G ,输出是与输入 SS 规则
E
集对应的 EE 规则集\ (右下角).
(a) 转译算法 (b) 转译流程图
Fig.3 Algorithm and flowchart of translation from SS rules to EE rules
图 3 SS 规则到 EE 规则转译算法与流程图
转译的具体流程为:
S
• SS 规则集解析器首先会解析用户输入的G ,并将解析结果传给动作序列信息生成模块;
S
S
• 然后,动作序列信息生成模块会将同一动作实体 e 的 SS 规则序列 G =(e,\ )按照 EXPECT 子句作用的
S
期望状态组分类,期望状态组X相同的 SS 规则组 \ 中的多条规则会放在一起处理:一方面,调用
X
ConditionalActionsPairs(e,X,W)(见算法 2),计算实体 e 上所有可能的动作序列A j 和每种动作序列的执
行前提 C j ,得到二元组集合 Pairs = X {(C j ,A j ) | j ∈ {1, }}n ;另一方面,求出与规则组 \ 不兼容的条件
S
X
Ψ (见算法 1 第 5 行),这是事件发生后、动作执行前系统抽象状态所应满足的条件;
X
• 接下来,事件筛选模块首先调用 CandidateEvents(Ψ ,W)(见算法 3),根据Ψ 生成一组候选事件E(这些
X
X
事件可能对Ψ 的成立与否有影响);然后,对E中的每个事件 E 调用 ShouldRejectEvent(E,Ψ ,W)(见算法
X
X