- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
结合CLIPS和VC++实现规则推理的方法
引言
专家系统的开发一直是人工智能领域的一个重要研究方向。目前比较流行的专家系统开发语言主要有以下几种工具:⑴ 程序设计语言。包括通用程序设计语言(如C\C++,PASCAL)Prolog和Lisp)VC++等面向对象的可视化编程工具早已成为科研人员熟悉的开发工具。选择两者结合的方法来开发专家系统,可以充分利用两者的特点实现优势互补。
CLPS简介
CLIPS基本结构是产生式系统,采用正向推理机制,CLIPS与一般的产生式系统的不同在于其推理过程中独特的rete模式匹配算法,极大地提高了系统的反应速度。CLIPS专家系统主要有三大部分组成:⑴ 知识库:包括初始事实和初始对象实例以及规则库。⑵ 推理机构:控制整个规则的执行,决定规则是否应该执行和什么时候被执行。⑶ 黑板:由事实列表和对象实例列表组成,用于存储推理结果数据(黑板数据)。黑板数据包括开始推理以来得到的事实集对象实例集。
CLIPS和VC++结合的优势
利用VC++实现专家系统的主要缺点是C++在逻辑推理方面并不擅长,因此采用C++编写的推理机的开发程序量相对较大。CLIPS的优点包括:⑴ 逻辑推理方面的强大功能。使用CLIPS开发专家系统,推理机的设计可以大大简化。只需要将相关领域的知识按照给定的知识表示模型表示并按一定结构顺序组织起来即可。⑵ 有利于和其他语言联合使用。CLIPS很容易实现和其他语言的接口,而且CLIPS写成的专家系统可以和VC++共同编译,极大地提高了系统运行速度和可移植性。
从以上分析可以看出,VC++和CLIPS在开发专家系统方面都有各自突出的优势,也有其缺陷。两者具有很强的互补性:CLIPS在逻辑推理方面的强大功能使它适合编写专家系统的知识库和推理机部分;VC++用于开发人机界面、处理与数据库和外设的数据交换。CLIPS在推理过程中遇到的复杂数值运算则通过调用VC++编写的外部函数来完成。这样结合VC++和CLIPS编程可以实现功能强大、界面友好的专家系统。
CLIP嵌入VC++的一般过程
首先将CLIPS的源代码拷贝到VC++工程文件目录下。
在VC++中选取菜单:工程→添加工程→Files,将所有文件(*.C)
为使在VC++中能识别CLIPS源程序,并可以在用户自定义函数中使用CLIPS中的方法函数,必须加入clips.h的头文件声明,声明代码为:
extern “C”{#include “CLIPSSrc\clips.H”}
声明可在stdAfx.h头文件末尾加入,但在菜单工程→设置→C/C++标签下,将/yu stdAfx去掉或者在分类中将precompiled header选取为不预处理头文件。
在UserFunctions函数中声明用户自定义函数
用户自定义函数必须对CLIPS声明,以使它们能被CLIPS正常访问。用户自定义函数可以通过修改函数UserFunctions来向CLIPS声明。在UserFuncitons中,需为每个用户自定义函数调用函数DefineFuntion,这样用户的源代码才能被CLIPS编译和链接。例如:
extern “C” void UserFunctions();
void UserFunctions()
{
extern void TextOut(char strl,char str2);
extern int YesOrNo(char* strl,ehar* str2,ehar* str3);
extern void ExplainOut(char strl,char str2);
DefineFunction(“TextOut”,’v’,PTIF TextOut,”TextOut”);
DefineFunction(“YesOrNo”,’b’,PTIF YesOrNo,”YesOrNo”);
DefineFunetion(“ExplainOut”,’v’,PTIF ExplainOut,”ExplainOut”);
}
DefineFunction的第1个参数是函数的名字,是一个字符串;第2个参数是返回CLIPS 的值的类型。返回类型如表1所示:
表1 返回类型
返回代码 b c f i o 返回类型 布尔型 字符串型 单精度浮点数 整型 实例名 返回代码 l v d a w 返回类型 长整型 无返回值 双精度浮点数 外部地址 符号 第3个参数是指向实际函数的指针,它与第一个参数不一定相同,第4个参数是第3个参数的字符串表现形式,它必须与第3个参数相同,但得加上引号。
编写用户自定义函数
启动CLIPS
在VC++中启动CLIPS,需要在窗口中激发一按钮,在初始化CLIPS环境后,将规则库与事实库载入,再运行CLIPS,进行推理
文档评论(0)