李 丽,王大勇,张 蕾,魏 颖
(1.辽宁大学创新创业学院,辽宁 沈阳 110036;2.东北师范大学物理学院,吉林 长春 130024;3.北华大学计算机科学技术学院,吉林 吉林 132013)
专家系统是在20世纪60年代初期产生并发展起来的一门应用科学[1],它从诞生到现在一直有着活跃和广泛的应用,它能模拟专家的大脑思维活动,运用逻辑推理技术进行推理和判断,形成了一套求解专业领域问题计算机程序系统.近年来,专家系统的研究涉及了很多领域,特别是医疗[2-4]、故障诊断[5-6]、农业管理[7-8]、财政管理[9]等领域成效显著.目前,伴随着人工智能和计算机技术的不断发展,专家系统的实用性增强,智能性也有了显著提高,涉及的领域更加广泛.
目前国外在公众健康方面的研究比较广泛和深入,从儿童健康、青少年健康到老年健康均有涉猎[10-12].国内针对健康状况评估的研究主要集中在对老年群体的研究,而针对中青年的研究则很少,由于外界压力、不良的生活方式、超负荷的工作等因素造成很多疾病的年轻化.在高校知识分子群体中,这种状况尤为突出[13-14].中青年教师不仅是学校的教学骨干,也是科学研究的中坚力量,但往往忽视必要的休息和体育锻炼,健康状况不佳的情况比较严重,急需对高校教师的健康状况进行深入的研究和评估,并给出合理的建议,使他们能够方便、快捷地了解到自身的健康状况,降低疾病带来的风险.进而控制一些疾病的发病率,延长发病时间,从而提高高校教师整体的健康状况.
现阶段,大多数高校健康体检管理方式还处于被动接受和传递状态,通常存在以下不足:(1)学校医院每年将体检纸质报告发放给基层单位,基层单位将体检报告发放给个人,逐层传递的形式会延误体检结果的接收时间;(2)历年的个人体检数据不能进行逐项比对,缺乏系统性管理和利用个人体检数据,导致对个人健康状况不能有效评估;(3)缺少对学校体检结果的综合分析,不能提供整体和部分群体的健康评估数据,主观分析会造成与实际情况的偏差.
本文旨在将高校教师的体检结果、饮食习惯、运动习惯等相关数据进行存储、分析,利用专家系统的智能性、灵活性,对高校教师的健康状况进行管理和评估,并给予适当的指导和干预,使高校教师可以通过系统的评估结果,认清自身的健康状况,适当调整自己的生活方式,以此改善教师的整体健康状况.
本文采用专家系统工具CLIPS对健康体检和调查问卷进行管理和评估,CLIPS是由美国国家航天局NASA的约翰逊空间中心的人工智能部开发的,是继Prolog之后被广泛使用的人工智能语言.CLIPS由于具有兼容性好、知识表达方式灵活、运行效率高、集成性好、可免费使用且可靠性高的特点,非常有利于专家系统的开发.因其推理功能强大,可移植性强而得到广泛使用.[15-16]
CLIPS采用产生式规则作为基本的知识表示方式.其核心由事实库、规则库、推理机三大部分组成.
事实由关系名(Relation name)、零个或多个槽(Slot)以及它们的相关值组成,用来表示已知的数据或信息.事实可以用自定义模板和自定义事实结构来定义,格式为:
(deftemplate < relation name >
[ < optional-comment > ]
< slot-deffinition >*),
(deffacts < deffact name >
[ < optional-comment> ]
< fact >*).
当CLIPS系统启动推理时,会把所有用deffacts定义的事实自动添加到事实库中.
CLIPS中的规则用来表示系统推理的有关知识.用defrule命令来定义,规则定义格式为:
(defrule < rule name >
[ < comment > ]
< patterns >
⟹
< action >).
其中patterns表示前提,action表示结论.
CLIPS推理机通过模式匹配、冲突消解、激活规则、动作4个阶段的重复循环,不断扫描规则的模式,并把和事实匹配的规则激活,通过堆栈实现推理.
1.2.1 健康体检部分
以健康体检的血脂检查为例,对CLIPS语言及推理规则在本系统中的应用进行介绍.血脂的正常范围如表1所示.
表1 血脂相关知识
参照表1为血脂检查及其包含的4项参数定义CLIPS事实xzjc:
CLIPS>(deftemplate xzjc
(slot TC
(type NUMBER))
(slot TG
(type NUMBER))
(slot HDL
(type NUMBER))
(slot LDL
(type NUMBER))).
定义血脂正常的规则xzzc:
CLIPS>(defrule xzzc
(xzjc(TC ?tc)(TG ?tg)(HDL ?hdl)(LDL ?ldl))
(test(and(≥ ?tc 2.28)
(≤ ?tc 5.60)
(≥ ?tg 0.51)
(≤ ?tg 2.30)
(≥ ?hdl 1.15)
(≤ ?hdl 1.60)
(≥ ?ldl 0.00)
(≤ ?ldl 4.11)))
⟹
(printout t “Ortholiposis” crlf)).
假设某个体的血脂检查的各项值:TC为3 mmol/L,TG为2.1 mmol/L,HDL为1.3 mmol/L, LDL为3.33 mmol/L.
定义该实例,并命名为txzzc:
CLIPS>(deffacts txzzc
(xzjc(TC 3)(TG 2.1)(HDL 1.3)(LDL 3.33))).
用CLIPS对该实例进行推理,实例添加及推理结果如图1所示.
图1 血脂正常实例添加及推理结果
在血脂测定报告单上,通常会显示4项指标:TC、TG、LDL-C、HDL-C.以上任何一个指标超过了正常值,都属于高血脂.根据该知识,建立规则如下:
CLIPS>(defrule Gaoxuezhi
(xzjc(TC ?tc)(TG ?tg)(HDL ?hdl)(LDL ?ldl))
(test(or(> ?tc 5.60)
(> ?tg 2.30)
(< ?hdl 1.15)
(> ?ldl 4.11)))
⟹
(printout t “ Hyperlipidemia” crlf)
(assert(is-Gaoxuezhi yes))).
通过检测值确定为高血脂症后,高血脂患者的饮食建议规则定义如下:
CLIPS>(defrule Gaoxzh_jianyi
(is-Gaoxuezhi yes)
⟹
(printout t “Dietary advice:” crlf
“Eat more vegetable,and less meat” crlf,
“Eat more freshwater fish,and less seafood” crlf,
“Eat more small animal,and less mass animal” crlf,
“Eat more steamed food,and less fried food” crlf)).
假设某个体的血脂检查的各项值为:TC为9.3 mmol/L,TG为2.15 mmol/L,HDL为1.2 mmol/L,LDL为3.9 mmol/L.
定义该实例,并命名为tgaoxzh:
CLIPS>(deffacts tgaoxzh
(xzjc(TC 9.3)(TG 2.15)(HDL 1.2)(LDL 3.9))).
用CLIPS对该实例进行推理,实例添加及推理结果如图2所示.
图2 高血脂实例添加及推理结果
根据表1中内容还可以添加相关规则,分别为总胆固醇高、甘油三酯高、高密度脂蛋白胆固醇低、低密度脂蛋白胆固醇高的规则,以及相应指标超标时的治疗、饮食、运动相关建议的规则等.例如TC低的规则:
CLIPS>(defrule TCdi
(xzjc(TC ?tc)(TG ?tg)(HDL ?hdl)(LDL ?ldl))
(test(< ?tc 2.28))
⟹
(printout t “Total cholesterol low” crlf)).
1.2.2 调查问卷部分
在调查问卷部分,本文以糖尿病为例,用CLIPS语言建立相应的事实及规则.已知糖尿病的相关知识如表2所示.
表2 糖尿病相关知识
根据调查问题定义事实XTinvestigation如下:
CLIPS>(deftemplate XTinvestigation
(slot Niao
(type SYMBOL)
(allowed-symbols more normal less))
(slot Drink
(type SYMBOL)
(allowed-symbols more normal less))
(slot Appetite
(type SYMBOL)
(allowed-symbols more normal less))
(slot Marasmus
(type SYMBOL)
(allowed-symbols yes no))).
如果调查结果满足多尿、多饮、多食、消瘦的特征,则怀疑患者血糖升高,建议抽血检查血糖值.定义规则XT_needcheck如下:
CLIPS>(defrule XT_needcheck
(XTinvestigation(Niao more)
(Drink more)
(Appetite more)
(Marasmus yes))
⟹
(printout t “You need to check your blood sugar.” crlf)).
假设某个体经填写调查问卷得出其具有多尿、多饮、多食、消瘦特征(见图3).则定义该实例txtnc如下:
CLIPS>(deffactstxtnc
(XTinvestigation(Niao more)(Drink more)(Appetite more)(Marasmus yes))).
图3 疑似高血糖实例
测试血糖值的相关定义如下:
血糖值事实定义——XTvalue
CLIPS>(deftemplate XTvalue
(slot KF
(type NUMBER))
(slot Two Hours Later
(type NUMBER))).
高血糖判定规则定义——hyperglycaemia
CLIPS>(defrule Gaoxuetang
(XTvalue(KF ?kf)(Two Hours Later ?thl))
(test(and(≥ ?kf 6.1)
(≥ ?thl 10)))
⟹
(printout t “Hyperglycaemia,Please refer to expert advice” crlf)
(assert(is-hyperglycaemia yes))).
判定为高血糖后,要有相应的治疗方法,本系统主要在非药物领域给出相应建议.
血糖高⟹(心理治疗:心理疏导、关怀、鼓励、肯定),
(运动:散步、慢跑、健身操、太极拳等),
(药物:遵医嘱),
(饮食:饮食清淡、少量多餐、戒烟、限酒、控制总热量、合理安排各种营养成分、食物的品种应多样化),
(监测:血糖、血压、血脂、体重、糖化血红蛋白、心脏、足部、眼底、肾脏功能).
根据上述对高血糖病症的辅助治疗描述,定义如下规则:
CLIPS>(defrule regimen
(is-hyperglycaemia yes)
⟹
(printout t “Psychotherapy:psychological counseling,solicitude,encouraging and recognizing” crlf),
(printout t “Exercise:Take a walk,jogging,Aerobics,Taiji boxing,et.al.” crlf),
(printout t “Medicine:follow the doctor’s advice” crlf).
(printout t “Diet:
light diet,
frequent small meals,
Quit smoking and alcohol restriction,
Total heat control,
Reasonable arrangements for various nutrients,
Variety of food should be varied” crlf).
(printout t “Monitor:
blood glucose,
blood pressure,
blood lipid,
body weight,
glycosylated hemoglobin,
heart,
foot,
fundus,
and kidney function” crlf)).
假设某个体的血糖检查结果:空腹血糖值为9.1 mmol/L、服糖2 h后血糖值为15.3 mmol/L,定义该实例tgaoxuetang如下:
CLIPS>(deffacts tgaoxuetang
(XTvalue(KF 9.1)(Two Hours Later 15.3))).
利用规则推导的结果如图4 所示.
图4 高血糖实例的推导结果
CLIPS专家系统开发工具已经完整地实现了专家系统所需要的开发环境和功能,但是CLIPS的界面是命令行界面,不利于人机交互.为弥补这一缺点,通常利用可视化语言与CLIPS相结合.
本文选取的可视化语言为C++,其产生时间长,应用范围广.C++和CLIPS是两种互补性很强的开发工具.C++是功能性很强的程序设计语言,擅长进行复杂的数值计算和与外设交换数据以及图形用户界面的开发;CLIPS是基于DOS语言开发的工具,用户界面采用命令行的形式,虽然界面友好度较差,但更擅长于逻辑推理.基于以上原因,本文的专家系统以VS作为整个系统的主要开发平台,负责开发用户界面、连接数据库,以及各子系统的衔接和协调等工作.以CLIPS作为专家系统开发工具,用于开发知识库系统.
由于CLIPS是开源软件,它提供了许多与外部程序连接的方法函数,利用这些函数可以实现CLIPS与VS的接口和通讯,交互过程中C++程序可以通过调用CLIPS相应的源代码函数来实现CLIPS命令及函数功能.
将CLIPS程序嵌入到C++语言中的一般步骤如下:
(1) CLIPS加入工程.将CLIPS源代码拷贝到用户目录中,打开VS的项目菜单项,建立一个新的工程,并将所有的CLIPS源文件添加到该项目中.
(2) 加入头文件声明.在要进行操作的窗体中加入头文件声明,使编译环境能够识别CLIPS源程序,也方便编译器在用户系统中找到CLIPS源文件.声明代码如下:
extern “C”{
#include “CLIPSSrcclips.h”
}.
(3) 声明自定义函数.用户自定义函数在被使用之前,如果想要被CLIPS正常访问,必须先对CLIPS进行声明.
(4) 传送参数到外部函数.编写自定义函数时,先要验证参数传送是否成功,然后再获取传送过来的参数.用户编写自定义函数时,应该确定传送参数的确切个数,验证CLIPS与外部函数的通讯是否成功.不可以直接使用编译软件中定义的变量和函数,但可以通过对象的方法调用.
(5) 启动CLIPS.在初始化CLIPS环境后,将规则库与事实库载入,再运行CLIPS,并由CLIPS完成推理过程,直到得出结果.
高校教师健康管理与评估专家系统对教师的相关数据和健康的相关知识进行存储、检索、分析.依据这些数据和知识,专家系统部分对某一种或几种常见病的发生率进行推理,并给出合理的建议.该系统主要包括人机接口、知识获取部件、推理机、知识库、数据库等几大部件,系统结构如图5所示,图5中每一部分的功能描述如下:
(1) 人机接口.该系统所采用的人机接口包括管理员和用户部分两大模块,根据权限不同,所完成的功能也有所不同.
(2) 知识获取部件.用于知识获取,帮助领域专家建立完整、系统的专家知识模型,为建立专家系统知识库提供支持.
(3) 推理机.推理机是专家系统的核心部件,主要用于模拟专家的思维模式,根据所提供的教师健康方面的初始数据和健康评估要求,运用知识库中的事实和规则,按照一定的推理方法和控制策略对问题进行搜索和匹配,从而求解出问题的答案.
图5 系统结构
(4) 知识库.知识库存储的是领域专家的经验和知识,是专家系统做出决策的依据.该系统知识库包含《国民体质测定标准手册(成人部分)》和《疾病累计评分表(CIR)》等标准的评判方式、常见病的体检指标、相关学术论述,特别是著作和教科书中关于高校教师常见病的专业知识[14-15].知识库分别存储呼吸、内分泌、消化、泌尿生殖、骨骼、血液等子库.
(5) 数据库.数据库是用来保存用户提供的各种初始数据,是对问题的描述和推理过程中得到的各种中间数据和推理结果.本文采用关系模型构建数据库,建立表并对表和字段加以设置.该系统数据库包括基本信息数据、体检数据和生活记录数据等.采用SQL语言建立相关数据表,这些数据表由教师编号关联在一起,以完成教师全部数据的描述.具体如下:
(ⅰ) 基本信息是指教师的自然信息包括教师的姓名、性别、民族、班级、出生年月、籍贯、血型、联系方式等.相关数据表为教师基本信息表.
(ⅱ) 体检数据中包含高校教师的体检结果,即教师每年体检结果中的相关信息,包括内科、外科、五官科、心电图、胸透等相关项目的检查结果.相关数据表为化验检查记录表、X射线图像参数表等.
(ⅲ) 生活记录数据主要记录调查问卷中了解到的相关信息,如吸烟、饮酒、睡眠时间及质量、运动等生活习惯,为健康管理中的行为干预提供指导依据.此外,该部分数据还计划采用健康调查问卷的形式,作为教师健康状况的一个有益补充,更为细致地了解教师的生活习惯,为健康指导提供参考.主要包括饮食习惯表、运动习惯表、作息时间表等基本数据表.
本系统的软件体系结构采用C/S(Client/Server客户机/服务器)结构.开发平台采用Windows10;选用Visual Studio 2015作为客户端开发软件;SQL Server 2008作为数据库和知识库的管理系统;采用CLIPS 6.3作为专家系统工具.软件界面的部分效果如图6所示.
图6 软件界面的部分效果
本文利用CLIPS工具描述健康体检数据及问卷调查数据,并以此作为基础构建高校教师健康管理与评估专家系统,为高校教师健康管理与评估工作提供了有效的解决方法.该方法具有通用性,对于普遍的体检管理和生活方式评估也有着良好的适用性.对于帮助人们全方位了解自己身体的健康数据,认清自己身体健康状态,积极地规范自己的健康生活方式也有着很好的辅助作用.能够对个体或其所在群体的不良生活方式进行干预和指导,帮助人们认识健康问题,预知影响健康的危险因素,从而达到降低健康风险,提高生活质量的目的.