Page 79 - 《软件学报》2021年第12期
P. 79

王博  等:SSRules:让智能家居自动化规则更易于编写和检查                                                 3743


         算法 2 求出到达X 2 的所有执行前提-动作序列对(图 4 左下方的 4 种动作序列).另一方面,该模块也要输出 \                         X S  2  不
         兼容的条件Ψ     X 2  用于稍后的事件筛选,Ψ     X 2  = 模式.状态==回家模式 AND  温湿度传感器.温度 >28°C AND (电
         扇.开关!=开 OR 电扇.风速!=低).


















                                Fig.4    Generating sequences of commands information
                                           图 4   动作序列信息生成
             •   事件筛选模块
             该模块先使用算法 3 生成候选事件,接着进一步使用算法 4,根据系统可能的状态变迁对事件进行筛选.算
         法 3 主要根据一个执行前要满足的条件 C 生成候选事件集,旨在以较低运算成本快速得到较小的待筛选事件
         集.其中:第 2 行分别获取 C 中出现的实体能力集合 ECs 以及原子条件集合 C atom ,原子条件有当前状态判断(e,c,
         O,v)和历史状态判断(e,c,O h ,t,v)这两种形式(如表 7);第 4 行的 SplitRangeByCond 则是根据 C atom 对实体E的能力
         c 的状态值域 V c 进行划分,将对所有原子条件的判断影响一致的状态取值划分到同一个子集,从而将实数类型
                                                                                  H
                                                                   l
         的事件转移转化为了有限情形;第 5 行~第 7 行分别产生状态变化事件 E 和状态保持事件 E ,能够涵盖 C 中出
         现的原子条件取值变化的情形.对于历史状态原子条件(e,c,O h ,t,v),由于只支持二值类型的能力 c,在固定 e,c,t 下,
         O h 和 v 最多有 8 种组合,我们为之按 v 的两种取值产生 2 种状态保持事件,忽略 O h ;而被忽略的 O h 仍在 C 中,传
                                       E
                                                                  H
         递到后续由算法 5 产生的 EE 规则 R =(E,C,A)中.这种状态保持事件 E 能在状态迁移中快速知道实体能力保
         持状态的时长,再结合 C 中的 O h 进行状态保持的可满足性检查.
             算法 3.  候选事件生成算法(CandidateEvents).
             输入:条件表达式 C,系统实体-能力抽象 W;
             输出:包含所有可能使 C 的值变化的事件集合E.
             1.   E=∅
             2.   ECs=C| (e,c) ; C atom =AtomFormulas(C)
             3.   for each (e,c) in ECs,由 W 得 c 的值域 V c  do
             4.      Sets=SplitRangByCond(e,c,V c ,C atom )       //划分值域 V c
             5.      E=E∪{(e,c,V 1 ,V 2 )|∀V 1 ,V 2 ∈Sets,V 1 ≠V 2 }
             6.      T={t|(e,c,O h ,t,v)∈C atom }                      //C 中原子条件涉及对 c 的时长 t 的要求
             7.      E=E∪{(e,c,v,t)|∀v∈V c ,∀t∈T}
             8.   end for
             算法 4.  事件排除判定算法(ShouldRejectEvent).
             输入:事件 E,事件发生后应为真的条件Ψ,
   74   75   76   77   78   79   80   81   82   83   84