朱庆华 常莹

摘要:作者曾对规则模型和规则冲突问题进行了详细的研究分析,本文将实现智能家居本体,基于创建的本体在SWRLTab中创建智能家居系统规则库,并设计了规则冲突检测的方法,最后使用Java语言开发了图形界面的智能家居规则冲突检测系统,并通过实例验证了冲突检测系统的可行性。

关键词:智能家居;冲突检测;冲突验证

中图分类号:G642        文献标识码:A

文章编号:1009-3044(2021)03-0188-02

1智能家居本体构建

作为整个智能家居系统实现的基础,首先要对场景中的本体进行定义。本文在构建本体时主要使用了四种OWL实体,分别为:类(Classes)、个体(Individuals)、对象属性(Objectproperties)、数据属性(Dateproperties)。

类表示的是一组具有相似特征的个体或者实例的集合,个体表示的是领域对象,也可以理解为类中的实例。比如如果将国家(Country)作为一个类,那幺中国,加拿大,葡萄牙,叙利亚,越南等国家就可以作为国家这个类中的个体。SubclassOf,Equivalent,Disjoint是定义用来描述类之间的三大关系,即子类,相等类,非相交类,这些关系可用于本体的推理。

属性表示的是个体之间的二元关系,可以将两个个体连接起来并表明它们之间的联系,或者对个体进行参数传递。比如对象属性hasTeacher就可以将学生Tom与老师Harry的师生关系表示出来。数据属性hasAge可以连接Bob和23,表示Bob的年龄为23岁。

针对智能家居的实际场景,在owl:Thing下定义了control、devices、PM2.5、temperature、time五个大类。五大类包含了控制类,设备类,时间环境参数类等,基本覆盖了真实的智能家居环境。其中temperature类又包括三个子类hot,cold,medium,表示温度的热,冷和适中。PM2.5类包括三个子类high,low,middle,表示PM2.5浓度的高,低和适中。Time类包括两个子类day,night,表示白天和夜间。

本文创建了open,close,turnon,turnoff,hastime,hastemp,hasPM25七个对象属性,分别表示动作式的打开和关闭,以及电源开关式的打开和关闭,获取时间,获取温度,获取PM2.5等环境参数。

本文创建了greaterthan,lessthan,PM25,priority,temp,time六个数据属性,分别表示大于,小于,PM2.5浓度,优先级,温度值,时间值。

本文创建了control,alarm,airconditioner,aircleaner,curtain,door,light等个体,分别表示控制器和报警器,空调,空气净化器,窗帘,门,灯等各种家居设备。

在Protégé自带的插件OntoGraf中,提供了链型,树形,星型等多种样式来表示本体之间的关系图,我们可以直观准确的查看当前本体中的类和个体及其之间的关系。采用星型图表示当前智能家居系统本体搭建结果。

2基于SWRL的规则建立

2.1 SWRLTab简介

完成本体的搭建之后,便可以在SWRLTab中自行编写SWRL规则。SWRLTab是由斯坦福大学开发的一个基于SWRLAPI的插件,它提供了一个图形界面去管理Protégé本体编辑器中的SWRLrules和SQWRLqueries。SWRLTab和protégé紧密结合,它支持SWRL的所有特性,能够在编辑SWRLrule与本体文件之间方便地切换,并且建立规则时能直接使用OWL中已经创建的实体。它的主要组件包括:

lSWRLEditor,用于编辑SWRL规则和SQWRL查询。

l基于Drools的SWRL规则引擎和相关的SWRLDroolsTab,用于执行SWRL规则。

l用于执行SQWRL查询的SQWRLQueryTab。

l用于与基于SWRLAPI的OWL 2 RL推理机交互的OWL 2 RLTab。

SWRLTab建立一条规则主要包含Name(规则名),Body(规则体),Comment(规则描述)三个部分,其中描述部分为选填项,可以对规则的含义进行解释说明。规则编辑界面有三个操作按钮New,Edit,Delete,通过New可以新建一条规则,Edit对当前规则进行编辑,Delete则可以删除一条规则。

2.2 SWRL规则展示

在本文的智能家居场景中,我们假设存在A,B两个用户,然后A用户和B用户各自预设了三条SWRL规则,如表1、表2所示。

3规则冲突检测系统的实现

3.1 系统软件环境

该智能家居规则冲突检测系统是采用Java语言,使用Eclipse(JUNO版本)集成开发环境开发。其基于jdk1.8版本,实现了一个具有图形用户界面的规则冲突检测系统。之所以采用Java语言是因为我们所使用的本体编辑工具Protégé以及owlapi,swrlapi都是基于Java语言开发的,在系统实现过程中需要多次使用其提供的方法。而且Java语言本身有着可跨平台运行,面向对象,而且语法较为简单等许多优势。在该系统中主要使用了Swing工具包,OWLAPI,SWRLAPI等。

Swing是为Java设计的进行图形界面应用开发的工具包,是Java基础类库的一部分,Swing中包含了构建GUI的各种组件,如: 窗口、标签、按钮、文本框等。它是基于AWT(抽象窗口工具包)架构之上,但是Swing可以提供较AWT更好的图形显示元素[9]。Swing是用Java写成的,所以如同Java一样可以在各个平台上运行。

OWLAPI是一个用于创建,操作和序列化OWL本体的JavaAPI。可以进行RDF / XML,OWL / XML格式文件的解析和编写,包含OWL功能语法分析和写入,也可以进行Turtle解析和编写,包含了KRSS解析器,OBO格式解析器,以及用于和FaCT ++、HermiT、Pellet、Racer、JFact、Chainsaw等推理机合作的接口。OWLAPI的jar中提供了很多java包,含有各种类和接口,开发者使用其中提供的方法可以很方便地完成创建,加载,修改,保存本体,在本体中新建,获取,修改或者移除Axioms等操作,还可以完成对本体中的规则进行提取,对类,属性等单独提取等许多功能。

SWRLAPI是一个用于处理基于OWL的SWRL规则和SQWRL查询语言的JavaAPI,它还包括了用于编辑和执行规则查询的图形工具,前面章节中提到的Protégé中的SWRLTab插件就是基于SWRLAPI开发的。它提供了新建SWRL规则,修改SWRL规则等许多方法,本文在系统实现中主要使用它进行规则的处理。

3.2 系统需求分析

本文设计实现一个拥有双用户的智能家居规则冲突检测系统,需要实现基于用户优先级的冲突避免机制,以及完成在相同优先级下规则之间的冲突检测功能。实现思路为:首先进行智能家居本体的创建,以及构建系统规则库。然后从本地加载已经创建好的包含了预置SWRL规则的本体文件,其中A,B用户各有预先设定好的几条规则(后续用户可以根据需要在系统界面中添加新的规则),接着进行用户优先级的选择,当选定优先级之后,启动冲突检测模块进行检测,并将结果反馈给用户。

因此,该系统主要包括前端的控制界面,SWRL规则的提取和显示模块,规则添加模块,优先级设置模块,规则冲突检测模块,以及冲突结果反馈展示模块的设计和实现。

3.3 系统模块设计实现

3.3.1规则提取和显示模块

该模块完成规则提取和规则显示两部分功能。对于规则提取,首先将本地的owl本体文件加载至系统,然后使用OWLAPI中的OWLOntologyManager类来创建本体管理器。将owl本体载入本体管理器后,由于规则是以公理的形式存在本体文件中的,我们便可以使用OWLAPI提供的getAxioms()方法将本体中的SWRL规则提取出来,并且以字符串的方式存储下来。

对于规则显示,应该分别显示A,B用户的规则。因此使用同一智能家居本体,将A,B的规则文件分开保存。规则提取部分提取出来的规则包括Body和Head两部分,其中包含着各种类,属性的声明以及IRI等许多复杂的信息,通过对规则字符串进行操作处理,可以将规则简化为简明扼要的,以IF,THEN形式展示的规则,并由前端展示出来方便用户查看。

3.3.2规则添加模块

为了增加系统的灵活性,在规则添加模块我们可以为当前本体文件添加新的规则进去,SWRLAPI为实现该功能提供了方法。规则添加模块首先也是利用OWLAPI加载本地智能家居本体文件,然后使用SWRLAPI创建一个SWRLRuleEngine,该规则引擎可以对刚加载进来的本体文件对象进行处理。然后使用SWRLAPIRule接口中的createSWRLRule()方法便可以将新规则写入本体,并且能够在Protégé的SWRLTab中显示出来。同样,在添加规则时,考虑到不同用户的需求不同,将选择用户A或者B进行独立添加。

3.3.3 用户优先级设定

该系统实现仅考虑有A,B两位用户的情况,因此有三种用户优先级,即A>B,A=B,A

3.3.4规则冲突检测模块

每一条完整的SWRL规则都是由条件和动作两部分组成。首先使用OWLAPI提供的getBody()和getHead()方法可以将A,B两用户的规则的条件部分和动作部分提取出来并且分开进行保存。在选择用户优先级后,根据第三章中规则冲突类型的判定条件,依次遍历A,B所有规则的条件部分和动作部分。如果条件部分相同,执行动作相反,则发生执行矛盾冲突;如果两规则的条件和动作互相依赖,则发生依赖冲突;若两规则的条件部分相包含且执行动作一样,则发生影子冲突。找出所有冲突规则并返回冲突类型和规则序号。

3.3.5前端界面展示

系统主界面如图所示,含显示规则,添加规则,冲突检测,结果显示四大功能。其中选定A,B用户后,点击显示规则,在智能家居规则展示区将展示当前用户设定的规则。结果显示中包括冲突检测结果展示区以及冲突详情展示区。

添加规则界面如图所示,需要在Rule name文本框中键入规则名(SWRLAPI中的参数要求),IF文本框中键入条件部分,THEN文本框中键入动作部分,条件部分和动作部分是以形如SWRLTab(如示例所示)中的规则形式进行添加的,非常方便用户的阅读和理解。选择需要添加的用户后确认,一条形如示例的完整规则即可被添加到本体文件之中。

4系统测试

4.1 显示规则

根据所述,对于A,B用户,我们已经在Protégé中的SWRLTab中分别创建好了三条规则,启动检测系统后,首先本体文件将会被加载到系统中。此时在规则显示区用户A和用户B的规则显示分别如图所示,每行作为一条完整规则,其中IF后面为条件部分,THEN后面为动作部分。(在规则冲突检测以及返回检测结果时,规则的序号以此显示顺序为准。)

4.2 添加规则

一条SWRL规则的形式如Example所示,我们选择用户A添加一条规则,其内容表示当时间为晚上时,则关上窗帘。点击确认,重新加载本体便可以看到在A的规则显示区成功添加了该规则。

4.3 冲突检测

当前系统中A用户有四条规则,B用户有三条规则。根据冲突检测的流程,首先应该选择用户优先级,否则将无法启动检测模块。

当选择用户优先级为A>B时,系统检测到未发生冲突。

当选择用户优先级为A

当选择用户优先级为A=B时,根据上述章节中的规则冲突类型分析,我们可以得出目前系统中应当存在以下几组冲突。启动检测,系统检测到有冲突发生,检测结果符合预期。

(1)A用户规则4与B用户规则1发生执行矛盾冲突;

(2)A用户规则3与B用户规则2发生依赖冲突;

(3)A用户规则1与B用户规则3发生条件包含冲突。

参考文献:

[1] CayS.Horstmann, GaryCornell. Java核心技术.卷I,基础知识[M].北京:机械工业出版社,2016.

[2] 王若思.智能楼宇中规则验证方法的研究[D].北京:北京邮电大学,2014.

[3] 黄晓辉,李栋,石海龙,等.EasiRCC:面向智能家居的规则匹配与冲突消除方法[J]. 计算机研究与发展,2017,54(12):2797-2806.

[4] LeeH, JeongYK, LeeIW.A mechanism of ontology-based rule management for smart building energy saving service[C]//InternationalConferenceonICTConvergence. IEEE, 2012:737-738.

【通联编辑:王力】