宁志强,陶元芳,杨家威
(1.山推工程机械股份有限公司,山东 济宁 272073;2.太原科技大学 机械工程学院,山西 太原 030024)
已有的起重机设计型专家系统,流行于20世纪90年代,其特点是产生式规则的运用,集成有限元、优化方法、绘图和评价体系.与故障诊断专家系统相比,起重机设计专家系统发展缓慢,因其多以prolog语言实现,接口不方便,而VC++与其他语言接口方便,且易于扩展,其MFC(Microsoft Foundation Classes),比较适合工程应用,但用来实现专家系统比较困难.CLIPS的出现对于设计型专家系统有优势.但CLIPS界面不友好,无法满足工程计算时以编辑框实现数值输入和输出的要求.而优化设计在机械领域应用非常广泛,以VC++编写的优化程序较多.为了共享优化代码,把VC++和CLIPS融合可以优势互补.
CLIPS优点在于良好的可移植性和高效模式匹配算法[1],CLIPS采用的Rete算法可以用于机械设计中的案例检索和零部件的选取.CLIPS基于规则的专家系统的结构如图1所示.
图1 CLIPS结构图解Fig.1 Structure of CLIPS
推理机是通过决定规则满足事实或目标,并授予规则优先级,然后执行最高优先级规则进行推理.推理机包括推理方式和推理策略两个部分,推理方法就是对知识的运用过程,推理策略就是对知识的选择过程.
在机械设计中,通常的设计过程是:首先,根据机械用途、目的,确定机械的动力方案、传动方案、机构形式、零部件等,不通过计算而参考以往的设计方案;其次,采用基于实例的检索,借鉴以往产品的设计经验,通过适当修改过去成熟产品案例的方法来设计新产品.例如,通过检索存储在知识库中的成熟的起重机案例,根据最相近案例选取某些设计参数,如吊具总质量、滑轮组倍率、卷筒材料、卷筒机械效率、减速器传动效率;然后通过计算确定方案中的具体参数,包括电动机的功率、转速,减速比;最后,经过推理确定设计方案和通过计算确定计算数值,把以上3部分的结果导入推理机中,触发规则,以选取合适的零部件,如电动机、减速器等.
结构设计专家系统应有的结构形式,如图2所示.
图2 设计专家系统的结构Fig.2 Structure of designing expert system
选型树表示法:机械设计中,方案从动力方案、传动方案、零件种类等根据不同的情况会有不同选择方案.用树状树图来表示这种复杂的关系比较方便.如图3所示,以桥式起重机的设计方案选型为例.
图3 设计选型树Fig.3 Tree of design selection
设计选型专家系统是计算机程序模仿人类专家的思维推理策略,利用储存在知识库中的专业知识,来实现待设计产品的方案选型.确定选型方案是一个具有层次性的复杂过程,可以理解为逐步判定的过程.首先提供初始推理条件,推理机根据初始推理条件和知识库中的选型树,得到推理结果和供用户选择的新推理条件.若当前节点的子节点有除当前节点以外的父节点,如节点“传动方案”的2个子节点“闭式传动”、“开式传动”有“中小吨位”、“大吨位”2个父节点,则优先提取这些父节点供用户下一步选择的辅助推理条件;否则,如节点“起升机构”,其2个子节点没有其他父节点,直接输出子节点到界面.
对选型树搜索推理是指在直观的选型树图形下,按照一定控制策略的推理机制,对树进行搜索推理的方法.以广度优先搜索为主,按照树的层次逐层进行搜索.对树的每一层进行广度优先搜索,该层的每一节点都分别与推理条件作正反向推理匹配,判断该节点是否为目标节点.如该层的某些节点与推理条件相匹配,就这些节点作为目标节点,生成下一层子节点,作深度优先搜索[2].CLIPS中事实表示法是框架式的,可以方便地表示选型树.
以图3选型树为例.选择“桥式起重机”,经推理得到3个路径,输出到辅助列表框,以供用户从中选择,即“小车运行机构”、“大车运行机构”“起升机构”.如用户选择了“起升机构”,点击推理按钮,经推理得到2个推理结果,输出到辅助列表框,以供用户从中选择,即“传动方案”和“部件选取”.假如用户选择了“传动方案”,点击推理按钮,经推理得到2个推理结果,输出到辅助列表框,以供用户从中选择,即“中小吨位”和“大吨位”.假如用户选择了“中小吨位”,点击推理按钮,经推理得到一个推理结果“闭式传动”,同时输出“卷筒和减速器连接”、“电动机和减速器连接”到辅助列表框以供用户选择.图4为设计选型板块的界面.
图4 桥机设计选型专家系统界面Fig.4 Interface for crane expert for design and selection
基于实例的设计方法 CBD(Case-Based Design)是近年来人工智能领域中兴起的一项重要的设计技术.实例的表达是把存在的成熟设计事例表达成为计算机可以识别和利用的信息.实例的表示有二部分内容:一是实例的内容,事例的属性描述和事例的解决方案;二是实例的索引,它和实例的组织结构以及检索有关,反映了不同实例间的区别.
实例的数学模型为
式中:C表示实例函数;F=(f1,f2,…,fn),fi(i=1,2,3,…,n)为索引结构;H=(h1,h2,…,hm),hj(j=1,2,3…,m)为实例答案[3].
本文采用实例检索的最常采用的方法——最相邻近策略.最近相邻策略是以实例之间的某种距离作为标准来判断实例的相似程度.在此方法中,属性对应实例中的特征项.计算新旧实例之间的相似度,据此确定最接近设计参数的实例[3].
最相邻近策略的相似度计算为
S的定量计算方法为
起重机以往设计实例分为索引结构和实例答案两部分.索引结构为设计主参数,包括起重量、起升速度、起升高度、起升机构工作级别.实例答案为:机构布置形式、吊具总质量、滑轮组倍率、卷筒材料、卷筒机械效率、减速器传动效率、稳态负载平均系数、减速器生产厂家和制动器类型.案例检索板块界面如图5所示.
图5 起重机案例检索板块界面Fig.5 Case retrieval interface for crane
在机械设计时,由于设计方案多样而复杂,设计人员常花费大量的精力凭借实际经验进行选型设计和参数调整,以确定较合理的设计方案.针对具体情况有些参数要被保留,有些参数要进行再设计.
机械设计中往往需要多个数学公式嵌套,一个公式计算出的结果,是另外一个公式的输入.由此可见,机械设计数学公式具有网状联系.在实际计算中,设计人员为了能使计算关系网中的中间结果或者最后结果达到某个数值,必须要对前部设计参数进行不断调整,要借助反函数倒着往回算,只有一个计算公式还可以,如果在计算网中要随意指定其中一个参数,要通过改变其他计算参数以满足整个关系网,则会非常复杂.
设计专家系统过对计算参数的输入顺序、个数都无限制,可以正着计算也可以倒着算.如在起重机设计过程中,起重量、吊具质量、起升速度、稳态系数、电动机计算功率、电机转速、卷筒直径、吊钩组倍率、减速比、卷筒转速,这些参数可以随意指定或者不指定.识别是否指定了其中的某一个方法是通过检测该编辑框是否为0.如果编辑框为0,使用一个结构体数组,向坐标轮换法所在的函数中传递信息.
要实现这样一个要求,借助优化方法对变量的搜索相对容易实现.优化问题的模型[4]:求n维设计变量x=[x1x2…xn]T使目标函数f(x)→min,且满足一定的约束条件a≤xi≤b.函数z=f(x,y),当给定x,z时,要求解y可以先表示成的反函数形式再求解.而当用优化方法求解时,求变量x,y,z使[f(x,y)-z]2→0,等同于满足z=f(x,y)的等式关系,避开求解反函数的复杂变形是该方法的优点[4].当要限定某几个变量时,要把该变量的上下限同时定义为要指定的那个数,要给定z=a时,约束条件设为a≤z≤a.当没有指定值时则用黄金分割法和进退法结合搜索.这种方法的前提是必须要使目标函数最小值为0.
用优化中的坐标轮换法实现这种功能,目标函数定义为
式中:Q为起升载荷;G为吊具载荷;v为起升速度;p0为稳态平均功率系数;m为吊具倍率;η为传动效率;P为计算功率;n0为电机功率,n为卷筒转速;i为减速比;D为卷筒直径.
图6 起升机构设计专家系统框图Fig.6 Diagram of expert system for design of hoisting mechanism
选取一个部件时,对这个部件和对这个部件参数要求的匹配程度,用一个有大小的隶属度值来衡量.模糊命题“x近似γ”的隶属函数为
式中:β为系数.
如图7所示,该隶属函数可以表达所有近似于某个特定值γ的数,β对应着交叉点0.5,由用户根据自己由经验定义.
图7 模糊命题“x近似于γ”的隶属函数Fig.7 Membership function of fuzzy proposition“x is onγ”
当存在多个评价指标时,用权系数来描述各个方面重要程度.加权之后得到一个0到1之间分数.例如电动机选择有两个方面输入转速、许用功率,每个存储的电动机型号都包含这两个参数,规则会自动逐个计算各个电动机事实的加权隶属度,最大者即最符合要求的.这种方法可以用来选取电机、减速器、联轴器等部件.
电动机隶属度为
式中:x,y分别为各个电动机的额定输入转速、许用功率;x1,y1为实际需要的输入转速、许用功率.β1,β2为对应隶属函数交叉点0.5.
在部件选取时会遇到选择多个部件的情况.这些部件之间的关系多且杂.传统程序设计方法,是将所有零部件的数据事先保存在数据库中,在需要选用多个部件时,循环读取数据库.但一次只能读取一个部件,不能利用多个部件之间的相互关系来选取[5].
在专家系统工具CLIPS中,所有零部件的数据是被存储在工作内存中,而不是数据库中.对于部件的选取采用测试条件元素法,可以同时测试多个零部件事实之间的关系.
以联轴器、浮动轴、制动器的选取为例.在桥式和门式起重机起升机构的设计中,电动机和减速器高速轴连接,通常采用齿轮联轴器制成2个半齿联轴器,中间用一段轴连起来,这根轴称为浮动轴.如图7所示.在连接高速轴和联轴器时,采用带制动轮半齿联轴器,联轴器的输入轴和输出轴的轴孔直径及所带的制动轮直径是标准的.在选择联轴器、浮动轴、制动器时,要考虑电动机的输出轴直径必须与联轴器相等,联轴器的许用扭矩要合适,浮动轴的直径与联轴器的输出端直径有关,且浮动轴要满足应力要求,制动轮直径被联轴器限定,制动器选择也被制动轮直径限定了,并要求满足制动力矩要求.
现有的CLIPS和VC++的交互方法分为直接嵌入法和包装类法.这两种交互方法都必须通过文本文件作为中介.文本文件作为交互中介对树搜索有局限性.推理条件向CLIPS输入和推理结果从CLIPS中导出都必须先保存在文本文件中.向文本中介文件输出一个事实比较合适,而当连续输出不同的几个事实时,后一个输出会把文本文件中的前一个事实覆盖.在这种情况下,专家系统只能根据现有的条件进行一次性推理,不能从树中提取多个启发性的事实.
专家系统开发工具CLIPS是用C语言设计的,把CLIPS的源代码(为C语言)制作成动态链接库,得到CLIPS.dll和CLIPS.lib两个文件.用VC++6.0调用CLIPS动态链接库可以使CLIPS兼具MFC可视化界面和专家系统工具的功能.为避开中介文本文件的交互,可以采用从动态链接库中调用事实添加函数和事实槽值读取函数的交互方法.借助改进的交互方法容易实现向MFC同时输出多个事实.
要从CLIPS中提取事实时,首先对用来指向新事实的指针newFact赋初值0(NULL),用指针new-Fact循环指向CLIPS内部的事实,当指针再次为NULL时,说明指针就已经对所有事实的指向过,不必使指针再移动.读取指向CLIPS中某个事实,用函数GetFactSlot(newFact,"x",&theValue)的值判断该事实是否有槽名为x.GetFactSlot返回值为1时,表示有名为x的槽,用槽值提取函数“DOToString”,读取字符型槽值,然后把指针移动到下一个事实;Get-FactSlot返回值为0时,表示不是要寻找的事实,指针移动到下一个事实.简要代码如下:
CLIPS推理机的推理步骤[6-7]:
(1)调用CLIPS初始化函数InitializeEnvironment().
(2)用载入事实库和知识库函数Load(<filename.clp>).
(3)调用添加事实函数AssertString(char*temp[100]),该函数参数是字符串指针类型.
(4)运行推理函数:Run().
(5)得到下一个事实地址,因为计算结果都要以存储在事实的槽中,要得到槽值必须要得到指向该事实的指针,Void* GetNextFact(newFact)[7].
(6)根据指向事实的指针newFact与槽名x,取得槽名为x的事实中的槽值,并把它存在结构体DATA_OBJECT theValue中.
用CLIPS软件本身来实现对零部件数据的存储,同时要在VC++对话框界面实现数据的添加和删除数据.将所有的零部件数据存储在一个后缀名为clp的文件中,clp文件为CLIPS规则与事实的特定存储方式.数据的存储独立于使用它的程序.对于新数据的插入和对于原有数据的修改与检索均能按一种公用的和可控制的方式进行.零部件相关样本主要包括:钢丝绳、电机、卷筒、减速器、联轴器、制动器等.
基于CLIPS零部件数据库中的知识以框架式来表达.框架是描述对象(事物,事件或概念)属性的一种数据结构.框架的基本形式:一个框架由若干个被称为“槽”的结构组成.槽用于描述对象的某一方面的属性.
以减速器模板为例:
Jiansuqi槽用来表示减速器的参数:e1为输入轴转速,e2为名义中心距,e3为许用输出扭矩,e4为传动比,e5为高速轴输出功率.
新建名为Engine.clp的文件,用于保存推理机程序;新建名为part.clp的文件,用于保存零部件信息.定义两个不同的文件,实现程序与数据的分离.
在part.clp文件中保存零部件数据(jiansuqi(e1 1000.0)(e2 500.0)(e3 42500.0)(e4 16.0)(e5 259.0)):
(1)载入保存在part.clp中的数据.在VC++中FILEVIEW中,调用CLIPS初始化函数:InitializeEnvironment();调用 CLIPS载入函数:Load(Engine.clp);运行推理函数:Run(-1l),此时规则defrule load会被激发,执行载入事实库part.clp,减速器数据将会被载入到推理机事实列表中.调用函数Void*GetNextFact(newFact),得到指向某个事实的指针.调用函数int GetFactSlot(new-Fact,"e1",&theValue),根据指向事实的指针new-Fact,槽名为e1,e2,e3,e4,e5,取得槽值并把它存在结构体DATA_OBJECT theValue中.函数double DOToFloat(theValue)用来读取事实中的浮点类型的槽值,并传递到VC++,输出到对话框列表框.CLIPS命令load-facts"文件.clp"用来载入保存在另一个文件中的数据.
在CLIPS中,每一个事实都有一个特定的事实号.当得到某个事实的事实号时,就可以对该事实进行操作,如修改或删除.要得到事实号需从CLIPS动态链接库中调用int FactIndex函数,参数为事实指针.当每次向列表框输出事实时,每一项都有唯一的列表框索引号,同时建立一个整型数组int w1[100].将事实号保存在整型数组int w1[100]中,列表框项的索引号就是保存在整型数组int w1[100]中的地址.
图8 删除零部件信息框图Fig.8 Diagram of deletinging parts information
(2)从MFC界面保存零部件到part.clp文件中,此时需要用到CLIPS的一个函数save-facts"文件名.clp".该函数被调用后,会保存所有事实列表中的事实到某一个文件中.
(3)从MFC列表框删除零部件数据.图8为删除数据框图.在Engine.clp中定义删除规则defrule retract,CLIPS语言中用retract来删除事实,函数retract(int i)的参数为事实号,调用retract命令可以删除某个事实.事实(M1?a)用来从对话框向CLIPS推理机传递待删除的事实号,k为列表框中选择项的索引号,w1[k]为选中的事实的事实号,w1[k]赋值给?a,通过(M1?a)传递到CLIPS中.
(retract?a)用来执行删除命令.?f为事实指针,用来指向事实(M1?a)、删除(M1?a)事实.当删除命令结束后函数save-facts保存现有的事实.
规则(defrule retract
该软件基于CLIPS专家系统工具,由4部分功能构成:
(1)根据保存在知识库中的桥式起重机起升机构的选型树,采用符号推理的方法,从用途和吨位等具体情况来确定动力方案、传动方案、零件种类,得到的推理结果以事实的形式输入到推理机中,根据不同的推理结果触发不同的规则.选型树的添加和修改可以通过MFC来实现,且不必进行再次编译.算法和数据实现了分离.
(2)在起重机设计过程中,起重量、吊具质量、起升速度、稳态系数、电动机计算功率、电动机转速、卷筒直径、吊钩组倍率、减速比、卷筒转速,这些参数可以随意指定或者不指定.不指定就是编辑框为0,指定就是给编辑框一个非0的数,让软件改变编辑框为0的参数,而不改变编辑框非0的参数,自动去寻找一组满足既定数学关系的参数,代替了人工试凑,方便了设计计算.把参数计算结果也按事实形式输入到推理机中以供零部件的选取.
(3)根据索引参数(起重量、起升速度、起升高度、工作级别)检索最相近实例得到实例答案,如机构布置形式、吊具总质量、滑轮组倍率、卷筒材料、卷筒机械效率、减速器传动效率、稳态负载平均系数、减速器生产厂家、制动器类型.
(4)根据以上3个部分的推理结果,触发相应规则,采用模糊数学的方法来选取零部件,如电动机、减速器、联轴器、制动器、钢丝绳等.这些零部件以事实的形式保存在知识库中,通过定义CLIPS专家系统中的条件测试元素,可以自动选择所需的零部件.与传统的数据库保存零部件的方法相比,知识库更方便.图9为起重机起升机构设计型专家系统的主界面.
图9 桥式起重机起升机构设计型专家系统界面Fig.9 Interface for hoisting mechanism of overhead travelling crane design expert system
本文针对桥式起重机传统设计方法参数选取繁琐、数据管理困难、难以借鉴以往资料指导后续设计等问题进行研究.利用完全由C语言编写的专家系统工具CLIPS,编写可移植性较好桥式起重机设计专家系统.通过此系统可以借鉴以往设计选型经验,有望提升产品的设计效率和缩短设计周期.
[1]JOSEPH C,GIARRATANC G,RILEY D.专家系统原理和编程[M].北京:机械工业出版社,2010.
JOSEPH C,GIARRATANC G,RILEY D.Expert system of principle and programming[M].Beijing:China Machine Press,2010.
[2]吴坚.基于CLIPS的数控机床故障诊断专家系统[D].南宁:广西大学,2008.
WU Jian.The CNC machine faults diagnosis expert system base on CLIPS[D].Nanning:Guangxi University,2008.
[3]郭智春.铸造起重机起升机构CAD系统研究与开发[D].大连:大连理工大学,2008.
GUO Zhichun.Research and development of CAD system for hoisting mechanism design of ladle crane[D].Dalian:Dalian U-niversity of Technology,2008.
[4]王国强.机械优化设计[M].北京:机械工业出社,2009.
WANG Guoqiang.Mechanical optimum design[M].Beijing:China Machine Press,2009.
[5]宁志强,陶元芳,刘晓莲.CLIPS数值应用及与VC++交互[J].计算机技术与发展,2013,23(4):226-229.
NING Zhiqiang,TAO Yuanfang,LIU Xiaolian.Numerical application of CLIPS and interoperation between CLIPS and VC++[J].Computer Technology And Development,2013,23(4):226-229.
[6]National Aeronautics and Space Administration.CLIPS advanced programming guide[M/OL].[2008-03-22].http://www.ghgcorp.com/clips/CLIPS.html.
[7]National Aeronautics and Space Administration.CLIPSbasic programming guide[M/OL].[2008-03-22].http://www.ghgcorp.com/clips/CLIPS.html.