基于CLIPS语言的智能规划表示方法研究

2020-12-22 12:21王大勇
关键词:定义规则状态

李 丽,王大勇,张 杨,索 菲

(辽宁大学 创新创业学院 辽宁 沈阳 110036)

0 引言

智能规划是人工智能的一个重要分支,其主要思想是在一定的初始条件下,依据备选动作以及动作或状态的约束进行推理,综合制定出能够实现既定目标的动作序列的过程[1-2].智能规划广泛应用在车间调度、物流管理、智能机器人、航空航天等领域[3-4].美国航空航天局(NASA)的EUROPA系统等多项重大项目中均有应用.

CLIPS语言是人工智能领域的一个经典语言,普遍应用于专家系统[5].CLIPS(C Language Integrated Production System)语言语法简洁、易于操作、性能优异,是广大人工智能研究者青睐的一款语言,分为基于规则的CLIPS、面向对象的CLIPS和面向过程的CLIPS.CLIPS包括事实列表、知识库和推理机三个部分.该语言能够与C、C++等很好的结合,适合编写基于规则框架的软件.规划问题一般利用了前提、效果的规则推导,因此CLIPS语言同样适用在智能规划表示中.

Python语言是目前比较热门的一种编程语言,该语言简单、易于操作,包含众多第三方库,功能强大、应用广泛.目前很多人工智能领域都基于该语言及其第三方库开展科学研究.PyCLIPS库是Python中嵌入的一个功能齐全的CLIPS模块,可以轻松地实现CLIPS与编程语言之间的交互[6-7].PyCLIPS支持面向对象的编程,支持事件触发、事实动态撤销.由于Python和CLIPS都是由C语言编写的,所以能够实现Python与CLIPS的良好交互.

1 智能规划的定义

智能规划分为经典规划和非经典规划.经典规划问题是一个三元组P(S,A,γ),其中S是状态的集合,A是动作的集合,γ是状态转换函数.

规划问题常用的定义语言包括STRIPS、ADL、PDDL,其中STRIPS是一种经典的规划语言,很长时间规划系统都是采用STRIPS语言进行描述的,但其也有很多限制条件,比如要求文字是无函数的、时间是离散的、动作的前提和效果必须是合取的.ADL语言对STRIPS语言进行了扩展,取消了一些限制,使得其可以对更多实际问题进行编码.ADL语言包括STRIPS的所有功能,并且还能表达动作的条件效果和量化效果.PDDL语言到目前为止经历了PDDL1.2、PDDL2.1、PDDL+、PPDDL1.0、PDDL3.0、PDDL4J[8]等多个版本.PDDL4J是一个面向Java跨平台开发的开源工具包.很多的规划器都是基于Linux系统开发的.

2 CLIPS语言

基于规则的CLIPS语言是一种多范例编程语言,支持正向链规则,不支持反向链规则,不同环境下格式也会有所不同.CLIPS包含三种基本元素,分别为简单数据类型、控制数据的函数和添加知识的结构.CLIPS中提供了8种简单数据类型,能够完成不同任务的需求.

CLIPS提供三种知识表示方式,分别为规则、函数和对象.规则是基于启发式经验知识库的首要选择.函数包括自定义函数和通用函数.函数与面向对象设计都是程序式知识表示的首选.

启发式规则为特定场景定义了一系列出发动作.设计者定义一系列规则,这些规则将协同解决一个实际问题.规则由前件和后件组成.前件由一系列条件组成,这些条件必须全部满足,该条规则才能被触发.这种由前件推导出后件的模式恰好与智能规划的推导方式一致,如图1、图2所示.

3 用CLIPS语言描述规划问题

3.1 事实表示

assert命令会将一个或多个事实添加到事实列表中,因此用其定义智能规划中的添加效果,其语法规则如下:

(assert(<事实名1>)(<事实名2>)…(<事实名n>)).

与assert对应的命令为retract,retract命令会将一个或多个事实从事实列表中删除,因此用其定义智能规划中的删除效果,retract的语法规则如下:

(retract <事实索引1><事实索引2>…<事实索引n>).

这类事实的定义可以借助CLIPS语言中的deftemplate和deffacts来描述.deftemplate用来定义状态结构,deffacts用来定义智能规划中的初始状态和目标状态.它们的一般格式为

(deftemplate<状态结构名> [<可选注释>]

<槽定义>*),

(deffacts<状态名>[<可选注释>]

<事实>*).

3.2 规则表示

CLIPS语言用defrule定义规则,智能规划中可以用defrule定义动作,defrule的一般格式为

(defrule<动作名>[<注释>]

<前提>*;前件

=>

<添加效果/删除效果>*;后件.

3.3 应用实例

利用上述命令,以经典规划中的图规划为例,对于积木世界问题进行表示,选取初始状态和目标状态如图3所示.

图规划的是智能规划的一个重要分支,图规划问题是一个四元组φ(A,O,I,G),其中A是操作的集合,O是对象的集合,I是初始状态的集合,G是目标状态的集合[9-10].

利用图规划对这一问题进行扩张与解搜索,如图4所示.

图中时间步1的命题列为初始状态,经过时间步1的动作列、时间步2的命题列和动作列,到达时间步3的命题列,即目标状态.经过解搜索得到规划解的动作集为{(put B C)(put A B)}.

这一过程采用CLIPS语言描述,可以利用assert、retract、deftemplate、deffacts、defrule等命令完成.

用事实描述正在被处理的积木的目标,这些目标可以用自定义模板来描述.deffacts自定义事实结构特别适合程序运行前已知知识的定义,因此用其定义规划的初始条件.同理,也可以用deffacts定义规划的目标.具体实例如下:

(deftemplate goal

(slot on(type STRING))

(slot noting(type STRING)))

(deftemplate initial-state

(slot block(type STRING))

(slot on(type STRING))

(slot noting(type STRING)))

目标和初始状态的实例如下:

(deffacts goal

(on A B)

(on B C)

(on C T)

(nothing A))

(deffacts initial-state

(block A)

(block B)

(block C)

(on A T)

(on B T)

(on C T)

(noting A)

(noting B)

(noting C))

利用defrule命令定义规则put-on,该规则能够将一个积木搭建在另一块积木上,规则定义如下所示.

(defrule put-on

?goal<-(goal(on ?block1 ?block2))

(block ?block1)

(block ?block2)

(nothing ?block1)

(nothing ?block2)

?t<-(nothing ?block2)

=>

(assert(on ?block1 ?block2)

(retract ?t))

实例推导过程:

(defrule put-on

?goal<-(goal(on B C))

(block B)

(block C)

(nothing B)

(nothing C)

?t<-(nothing C)

=>

(assert(on B C)

(retract ?t))

(defrule put-on

?goal<-(goal(on A B))

(block A)

(block B)

(nothing A)

(nothing B)

?t<-(nothing B)

=>

(assert(on A B)

(retract ?t))

3.4 PyCLIPS库应用

CLIPS语言有自带的开发工具,目前最新版本为CLIPS 6.4.系统开发时需要将CLIPS嵌入到高级语言中,主要方法为直接嵌入方式和动态链接库嵌入方式,两种方式都存在不同程度的实现繁琐、通用性差等缺点.PyCLIPS可以实现CLIPS的所有功能,是Python语言的第三方库.在使用时只需要遵循Python常规方式先行导入clips库,在Python语言中就可以轻松调用CLIPS的功能.CLIPS与PyCLIPS常用功能对照如表1所示.

表1 CLIPS与PyCLIPS功能对照表

程序中部分PyCLIPS语句如下:

>>> import clips

>>>clips.Reset()

>>> t0=clips.BuildTemplate(“goal”,″″″

(slot on (type STRING))

(slotnoting (type STRING))

″″″)

>>>f1=clips.Fact(t0)

……

>>>r1=clips.BuildRule(“put-on”,″″″

?goal<-(goal (on ?block1 ?block2))

(block ?block1)

(block ?block2)

(nothing ?block1)

(nothing ?block2)

?t<-(nothing ?block2)

=>

(assert (on ?block1 ?block2)

(retract ?t))″″″)

4 结束语

本文研究了基于CLIPS语言的智能规划表示方法.利用CLIPS语言的事实和规则等概念,描述智能规划中的对象、事实、状态和操作.CLIPS方法是经典的人工智能表示语言,结合Python语言及其第三方库更易于应用在不同情况的处理.当然,相比STRIPS、ADL和PDDL语言,CLIPS语言不是专门的规划语言,描述规划问题时会有所局限.

猜你喜欢
定义规则状态
撑竿跳规则的制定
严昊:不定义终点 一直在路上
状态联想
奥斯卡的规则变了!
生命的另一种状态
让规则不规则
TPP反腐败规则对我国的启示
坚持是成功前的状态
成功的定义
修辞学的重大定义