收藏 分销(赏)

专家系统的设计实现论文.doc

上传人:仙人****88 文档编号:9444202 上传时间:2025-03-26 格式:DOC 页数:18 大小:175.50KB
下载 相关 举报
专家系统的设计实现论文.doc_第1页
第1页 / 共18页
专家系统的设计实现论文.doc_第2页
第2页 / 共18页
点击查看更多>>
资源描述
基于Visual C++的专家系统的设计与实现 摘要:介绍专家系统的基本概念和Visual C++的特点及其建造专家系统的适宜性,介绍面向对象程序设计技术以及专家系统的基本设计思想和结构。重点研究和探讨了如何在Visual C++环境中采用产生式规则表示法将专家系统中涉及到的经验知识表示成计算机可以识别的形式,建立知识库,设计出以精确推理机制为基础的推理机,并从软件工程的角度阐述了专家系统的开发步骤。详细给出了一个采用Visual C++实现的课堂教学质量评估专家系统的运行实例。 关键词:专家系统,知识表示,推理机制,面向对象技术 The Design and Realizing of Visual C++-based Expert System Abstract: This paper introduces some basic concepts about Expert System and the characteristics of Visual C++ as well as its suitability in building Expert System. It also introduces the object-oriented programming techniques and the basic designing ideas and structures of Expert System. With an emphasis in Visual C++, the paper discusses how to use production rule expression to transform the experience and knowledge involved in Expert System into the forms that computers can recognize, and then create knowledge base and design the rezoning machine based on the accurate rezoning mechanism. Furthermore, it elaborates the development steps of Expert System from the angle of software engineering. At the end of the paper, the author demonstrates a quality evaluation of classroom instruction Expert System realized by Visual C++. Key words: Expert System, Knowledge Expression, Reasoning Mechanism, Object-oriented Technology 目 录 1 引言…………………………………………………………………………………………1 1.1 专家系统及其发展现状………………………………………………………………1 1.2 Visual C++的特点及其建造专家系统的适宜性……………………………………1 2 面向对象程序设计技术…………………………………………………………… 2 3 专家系统的基本设计思想和结构………………………………………………4 3.1 专家系统的基本设计思想……………………………………………………………4 3.2 专家系统的结构………………………………………………………………………5 3.2.1 基本组成……………………………………………………………………… 5 3.2.2 一般结构……………………………………………………………………… 5 3.3.3 理想结构……………………………………………………………………… 6 4 用Visual C++实现专家系统…………………………………………………… 7 4.1 知识表示………………………………………………………………………………7 4.2 知识获取………………………………………………………………………………9 4.3 推理机制………………………………………………………………………………10 4.4 专家系统的开发步骤…………………………………………………………………12 5 程序实现及实例验证…………………………………………………………………13 6 结论…………………………………………………………………………………………15 参考文献………………………………………………………………………………………15 1 引言 1.1 专家系统及其发展现状 专家系统是人工智能的重要应用领域,自60年代开始,经历了近三十年的发展历史,取得了很大的成功,数以万计的专家系统相继出现,被广泛地应用于国民经济的各个领域,如:医学、农业、军事、气象、地质、法律、科学技术、教育等方面。专家系统的成功应用使社会看到了人工智能研究的价值,特别是知识表示、获取的研究、不确定性推理的研究,大大丰富和扩展了AI的研究领域,人们开始从探索思维规律转向智能行为的研究,提出了新的课题——知识工程。 近十几年来,我国对专家系统的研究和开发应用也取得了很大的成绩,如:医学专家系统、气象专家系统、农业专家系统、故障诊断专家系统等,实际应用均具有较高水平。 什么是专家系统呢?所谓专家系统就是一个在某一特定的领域内,运用人类专家的丰富知识进行推理求解的计算机程序系统。它是基于知识的智能系统,主要包括知识库、数据库、推理机制、解释机制、人机接口和知识获取等功能模块。一个专家系统具有以下主要特点:启发性、透明性和灵活性,即能利用专家的知识进行启发式推理,能够解释其推理过程,对用户的询问作出回答,并且能够不断地、灵活地增加新的知识。 一般讲,专家系统具有如下一些特点: ·象人类专家一样甚至比单个人类专家更好地解决困难的问题,因为它除速度高以外,还可以取众(专)家之长。 ·根据专家们凭经验认为是有效的规则进行启发式推理,即以知识为基础。 ·以适当的方式与人进行对话,包括使用自然语言,类似于专家的行为。 ·基于符号描述进行操作和推理。 ·规则能处理有错误的数据和不确定的判断。 ·同时考虑多个不同的假设。 ·对它们提出的问题做出解释。 ·证明得出的结论。 不过,与人类专家相比,目前的专家系统显得“狭隘”、“浅薄”和“脆弱”,它缺少人类专家知识面的广度和对基本原理的理解。很显然,它不可能象人那样思考:抓住重点,分析、判断得出结论,从不同的角度考察同一问题。更恰当的描述是,今天的专家系统只能大体上模仿专家的思考方法。它是通过从专家那里得到的许多相关的判断或猜测而做出主要决策的。与专家不同,专家系统还不能有效地依靠最初的原理推理,不能类推及依靠常识推理,也不能学习过去的经验。 比起数据处理系统,专家系统似乎跟专门、更特殊。传统的数据处理系统是通过从算法上对大量的数据进行累积和处理,使费时的事物员的工作自动化,而专家系统通常是完成那种典型要由具有专门知识的人在几分钟或几个小时内完成的量大而性质相对重要的任务,如翻译、诊断、订计划、排时间表等等。为了完成这些任务,专家系统有选择的利用数据进行推理。与基于算法的数据处理方法中所出现的问题相反,专家系统通常要考察大量的可能性,或者说动态地建立解决问题的方法。因此,专家系统具有广阔的发展前途。这就是为什么专家系统会被称为第二次计算机革命。 1.2 Visual C++的特点及其建造专家系统的适宜性 C++是1983年由Bell实验室开发成功的,至90年代已发展成为主流的程序设计语言,被广泛地应用于系统程序设计、数据库、人工智能专家系统及计算机辅助设计等。它的成功应用主要由两方面的原因。第一个原因是,C++是C的一个扩展集,C++最初的版本称为:“带类的C“。这两种语言的基本语法和语义是相同的,C++模块与C模块基本兼容,能自由链接,所以现有C库函数能直接被C++程序所调用,特别是熟悉C的程序员仅需学习C++语言的新特点就可以很快掌握C++进行编程。另一更重要的原因是:C++支持面向对象的程序设计方法,它是一种新的软件设计方法,更接近于人类的思维活动,它模仿对现实世界自然结构的认知过程进行系统的分析与设计,使人们的认识系统与计算系统一致,问题空间和求解空间在结构上一致,提高了软件的可重用性、可扩展性,可设计出更加结构化、可扩充、易移植和易维护的程序,成为开发大型化复杂软件系统行之有效的开发方法。 Visual C++作为一个功能非常强大的可视化应用程序开发工具,是计算机界公认的最优秀的应用开发工具之一。Visual C++是Windows环境下最主要的面向对象(Objected-Oriented)应用开发环境之一,它不仅是C++语言的集成开发环境,而且与Win32紧密相连。所以,使用Visual C++可以灵活地开发从低层软件到上层直接面向用户的软件。另外,在大型复杂软件的开发中使用Visual C++的调试工具可以有效地进行排错。开发环境是程序员Visual C++的交互界面,通过它程序员可以创建工程文件,创建或访问C++源代码、资源文件等。Developer Studio开发环境,即Visual C++的开发环境,为程序员提高了一个对面向对象C++程序进行开发和调试的平台。Microsoft的基本类库MFC使得开发Windows应用程序比以往任何时候都要容易。 专家系统的开发工作可以由多种工具和方法来完成,建造专家系统的传统工具是LISP和PROLOG,它们的特长在于推理,但推理的流程又不容易控制。目前有很多Windows环境下的编程语言如Visual C++、Delphi等也可以实现类似的推理,只不过是搜索过程要自己实现。而面向对象程序设计技术的技术特征表明用它来进行专家系统开发工作是行之有效的,因此在专家系统的开发中使用Visual C++具有很多优点。 2 面向对象程序设计技术 面向对象程序设计技术是在软件业中出现“软件危机”的背景下出现的一种新的程序设计技术。它一改传统的以过程和操作为中心来设计系统的结构化程序设计方法,以“对象”或“数据结构”为中心来设计软件,使得软件结构比较稳定,软件的可重用性也比较好,能较好地反映人们求解问题的方式和方法。面向对象技术是目前流行的系统设计开发技术,它包括面向对象分析和面向对象程序设计。面向对象程序设计技术的提出,主要是为了解决传统程序设计方法——结构化程序设计所不能解决的代码重用问题。结构化程序设计从系统的功能入手,按照工程的标准和严格的规范将系统分解为若干功能模块,系统是实现模块功能的函数和过程的集合。由于用户的需求和软、硬件技术的不断发展变化,按照功能划分设计的系统模块必然是易变的和不稳定的。这样开发出来的模块可重用性不高。面向对象程序设计从所处理的数据入手,以数据为中心而不是以服务(功能)为中心来描述系统。它把编程问题视为一个数据集合,数据相对于功能而言,具有更强的稳定性。面向对象程序设计同结构化程序设计相比最大的区别就在于:前者首先关心的是所要处理的数据,而后者首先关心的是功能。面向对象程序设计是一种围绕真实世界的概念来组织模型的程序设计方法,它采用对象来描述问题空间的实体。关于对象这一概念,目前还没有统一的定义。一般的认为,对象是包含现实世界物体特征的抽象实体,它反映了系统为之保存信息和(或)与它交互的能力。它是一些属性及服务的一个封装体,在程序设计领域,可以用“对象=数据+作用于这些数据上的操作”这一公式来表达。面向对象程序设计技术有如下一些基本特征: (1)模块性(Module) 一个对象是系统中基本的运行实体,其内部状态不受或很少受外界的影响,它具有模块化最重要的特性:抽象和信息隐蔽。模块反映了数据和对象的抽象,是设计良好软件系统的基本属性,每一个模块是程序可单独编址的元素。 (2)封装性(Encapsulation) 封装是一种信息隐蔽技术,就是把数据和加工数据的操作封装在一起,构成一个具有类类型的实例即对象。对象是封装的数据和操作。如图1所示。对象将自己的功能封装起来,以便将对象的使用者和设计者分开,从而加快软件研制的速度。 对象 数据 操作 图1 对象的封装示意图 (3)继承性(Inheritance) 继承是类的特性,即子类可以继承父类的特性,系统的处理能力可以通过对象的继承性实现共享。继承可以用一个偏序关系来定义:   inh∷=(C,≥) 式中:C——具有继承关系的所有类;    ≥——表示继承关系。 显然继承关系具有传递性:如果(C2≥C1),(C3≥C2),则C3≥C1,继承关系常称:“(is a)”关系。因为若A类继承B类,B类是父类,A类是子类,A类继承B类的全部性质,所以A即是B“(A is a B)”,一般情况下A也可以具有B所没有的特性和内容,即增加的部分。如图2所示。 B 继承 继承 增加 A 图2 继承性 一个类可以有多个子类,也可以有多个父类,所以一个类可以继承多个类,这种继承方式就称为多重继承,如图3所示。 A Bn B2 B1 …… 图3 多重继承 (4)动态链接(Dynamic binding)   面向对象的程序设计中,对象功能的执行是在运行时消息传送时确定的,因此可以实现对象间的动态链接,这样比较灵活,有利于建立类库,便于重用和扩充。 (5)多态性(Polymorphism) 面向对象的程序设计语言支持多态性。从本质上,多态就是一个名字可以有多种语义,允许把同一消息送到一个父类的对象和它的子类的对象上,多态性主要强调在一个类等级中,可以使用相同函数的多个版本,取决于运行时入口参数的类型、存取方式和返回值,可在不同的运行时间执行。 (6)易维护性和开放型设计 由于对象实现了抽象和封装,使可能的错误局限于自身,不易传播,易于查错和修改,同时利用对象的继承性,可使系统的功能不断地根据需要进行扩充,而很少影响到其它软件的运行。 3 专家系统的基本设计思想和结构 3.1 专家系统的基本设计思想 专家系统是一种基于知识的智能系统,主要包括知识库、数据库、推理机制、解释机制、人机接口和知识获取等功能模块。它具有以下主要特点:启发性、透明性、灵活性和智能性,即能利用专家的知识进行启发式推理,能够解释其推理过程,对用户的询问作出回答,并且能够不断地、灵活地增加新的知识。一般的应用程序将其知识组织成两级——数据级和程序级,而大多数专家系统则将知识组织成三级——数据级、知识库级和控制级。 专家系统的主要特征是有一个巨大的知识库,存储着某个专门领域(如医学、化学、探矿等)的知识。而系统的控制级,通常表达成某种推理规则。整个系统的工作过程是从知识库出发,通过控制推理,得到所需的结论。 对一般传统的应用程序来讲,系统的工作过程是在程序的(或数据)的控制下,按规定的步骤逐条执行程序指令的过程。专家系统有所不同,它是在环境控制下的推理程序。它比前者能更及时、更灵活地反映环境的变化。由于专家系统的工作工程是一种推理过程,因此它“理解”自己的行为的目的,“知道”为什么采取某个步骤的缘由,所以它比传统程序具有更高的智能水平。 综上所述,专家系统应该具有四个基本特征: (1)启发性:人类专家在科学实验和生产实践中积累起来的知识很多是经验性知识,往往是某一现象或某一结果多次重复出现使其成为一条值得注意的经验,它们没有严谨的理论依据,也很难建立精确的数学模型,但对于解决实际问题往往是非常有效的,这就是启发性知识。以人类专家知识为主要组成部分的专家系统,不仅能使用严格的逻辑性知识,而且也要能使用启发性知识。 (2)透明性:专家系统必须能解释其推理过程,并且对有关它的知识的询问做出回答。也就是说每条知识应该具有良好的用户接口。专家经验知识是在实践中总结出来的,没有上升为理论,没有正确性保障,很那为旁人所理解。如果专家系统象只黑箱,只给出结论,不作任何解释,特别是当专家系统的结论与用户的结论矛盾时,专家系统就很难让用户信服。能够回答用户为什么“why”和怎样“how”,就能增加用户对专家系统的信任程度,有助于知识的检查和更新,有利于专家经验的推广。 (3)灵活性:人类的知识在不断更新,特别是经验知识,人们在随时发现新问题,解决新问题,解决新问题的方法就是新知识。一个专家系统知识库应该很容易地加入知识对象。另一方面专家经验知识的表达是非常困难的,解决问题的微妙之处很难传授给别人,这就应该允许专家经验在反复修改的过程中表达出来,在专家系统的运行中发现问题,因而,专家系统的知识必须具有灵活性。 (4)智能性:专家系统是人工智能的一个分支,它必须具有智能性,就是要有相对独立的解决问题能力,成为独立的对象,它不应该是领域专家的奴隶,而应该是与领域专家具有同级水平的专家,在某些地方甚至可以略胜一筹,这就要求系统能有总结经验完善自身的功能,也就是具有自学功能。 由专家系统的特征可知,面向对象技术适合于建造专家系统。在面向对象的技术中,对象能在单个实体中封装数据和操作,并为专家系统的知识和被模拟领域中的实体的表示提供条件。由于我们能将对象看成是实体在计算机中的表示,因此,面向对象的方法可以让我们将注意力集中在这些实体上,并且构造那些有相同的抽象能力的计算实体。 面向对象的程序设计还具有模块性的特点。模块性和其它的面向对象特征(如数据隐蔽、多态性)允许异构知识结构和推理机制的无缝集成。虽然不同的对象可采用不同的内部表示方法,而且行为差异也甚大,但它们都能响应同一组消息或协议。 同时,面向对象的程序设计也是一项能使专家系统与传统应用程序集成的技术。 面向对象的程序设计还为系统的构造提供了其他策略。由于对象封装了状态和行为且具有一致性的良好的通讯能力,它们是实现分布式、多推理智能系统的自然选择。 3.2 专家系统的结构 3.2.1 基本组成 专家系统的基本组成如图4所示。专家系统第一个重要组成部分是知识库,它存储从专家那里得到的、关于某个领域的专门知识。专家系统的第二个组成部分是推理机,它具有依据一定的策略进行推理的能力,即能够根据知识推导出结论,而不是简单地去搜索现成的答案。 知识库 专家 推理机 要解答的问题 答案 图4 专家系统的组成 为了建造知识库,我们需要解剖如何存储知识的问题,这就是知识表示,确切地说就是如何以计算机能够存储的形式表达知识。另一个与此相关的问题是如何从专家那里获得知识,即所谓的知识获取问题,在建立专家系统的过程在中,这是个重要的问题。 专家系统的很多能力来自于对所存储的大量专家知识和恰当地应用有效的推理技术。推理方法不可能完全独立于所要解决问题的种类,但同时,推理模型的研究又不能过于依赖某一特定问题,以致在其他场合不能适用。我们所要寻求的推理方法应该是很有效的,同时又可普遍地应用于描述和解决一类问题。 推理机除了具有推理能力以外,还包括和使用者对话的能力及解释的能力,这被称为问题咨询。在某些系统里,使用者可以很方便地使用自然语言进行人机对话。 3.2.2 一般结构 不同领域的专家系统,其功能、结构都不尽相同。有些可以作为用户的“顾问”来解答其提出的某个专门领域的问题;有些可以作为专家的“学生”,而不断地获取新知识以增添或改善所拥有的知识;有的则可以作为“专家”或“教授”,向用户传授某个专门领域的知识,以教育学生或训练新手。 目前大多数专家系统有五个组成部分:知识库、推理子系统、综合数据库、解释子系统和知识获取子系统。如图5所示。 知识库只用于存放不依赖于领域中具体问题的知识,如一些判断性知识的元知识,而与领域中具体问题有关的知识(如描述问题的数据等)则放在综合数据库中。 推理子系统 综合 数据库 知识库 解释子系统 知识获取子系统 领域专家与知识工程师 图5 专家系统的一般结构 综合数据库用于存放系统运行过程中所需和产生的所有信息,包括问题的描述、中间结果、解题过程的记录等信息。数据库的组织、数据间的联系、数据的管理等是设计数据库时需要考虑的重要问题。这些问题在传统的程序设计中也经常遇到,目前也有许多技术来处理这些问题。在专家系统中,数据的表示与组织结构应尽量做到与知识的表示与组织相容,以便推理机制使用知识库中的知识和描述当前状态的数据去求解问题。 解释子系统程序负责回答用户提出的各种问题,包括与系统运行有关的问题和与运行无关的关于系统本身的一些问题。解释子系统是实现系统透明性的主要部件。 知识获取子系统负责管理知识库中的知识,包括根据需要修改、删除或添加知识及由此引起的一切必要的改动,维持知识库的一致性、完整性等。知识获取子系统是实现系统灵活性的主要部件,它使领域专家可以修改知识库而不必了解知识库中知识的表示方法、知识库的组织结构等实现上的细节问题,这大大提高了系统的可扩充性。 为了方便使用,多数专家系统都为用户提供了某些用户熟悉的表示信息的手段(如自然语言、图形、表格等)。人机借口蕴含在各子系统中,它负责把用户输入的信息转换成系统的内部表示形式,然后把这些表示形式交给相应部件去处理。系统输出的信息也由人机接口转换成用户易于理解的外部形式显示给用户。大多数系统使用自然语言作为人机交流信息的媒体。 我们有时把与求解问题直接相关的综合数据库、知识库和推理子系统综合起来称为执行系统以区别与求解无直接关系的其它部件。 3.3.3 理想结构 专家系统的理想结构是著名的知识工程和专家系统学者F.Hayes-Roth、D.A.Waterman和D.B.Lenat等提出的。目前还没有一个专家系统能包括这个结构的所有部件。此结构的思想来源于HEARSAY系统的黑板(Blackboard)控制结构和基于规则的专家系统结构。如图6所示。 面向领域的语言处理程序。它负责用户与系统之间的信息交流和转换。它为用户提供了与系统对话的直观而方便的手段。 黑板用于记录系统在问题求解过程中所产生的中间结果和假设。它包括三种信息:解题规划、议事议程和中间结果。规划部分描述总体的解题步骤。议程部分记录当前等待执行的动作。结果部分表示到目前为止系统所生成的候选假设和中间结果及这些结果间的依赖关系。 验证程序(Justifier)负责解答用户有关解题规划、当前的议程、中间结果、系统解题能力等问题。相当于前面提到的解释程序。 调度程序管理控制议程,决定下一步做什么工作。在调度程序中可以利用一些策略性知识,指导对议事日程中各个项目的调度。 解释程序(Interpreter),相对于推理机或执行程序,应用知识库中相应的规划来完成调度程序从议事日程上选出的议程项目。通常情况下,解释程序检验这条规则的条件部分,把条件中的变量约束到黑板中的特定中间结果上,并把规则所预言的变化记录到黑板中。 事实 规则 语言处理程序 用户 验证程 序 规则 议程 结果 解释程序 调度程序 黑 板 一致性处理程序 图6 专家系统的理想结构 一致性处理程序用于维护系统所得结果的一致表示形式。调整潜在的结果的可信度,以尽可能得出可靠结论而避免不一致的结论。 4 用Visual C++实现专家系统 4.1 知识表示 人之所以有智能行为是因为有知识。要使智能的机器系统具有某种人的智能,必须以人的知识作为其工作基础。知识表示就是要研究用机器表示知识的可行、有效、通用的原则和方法。近年来知识表示的研究引起了广泛的注意,成为人工智能研究中的热门课题。 在研究中我们采用产生式规则法来表示知识,其规则的一般形式是:   if <前提为真> then <产生动作> 或 <得出结论>   我们把规则定义成对象,把规则的结构以及关于规则的推理使用定义成规则类(rule class),由规则类生成的所有规则对象(rule object)组成知识库,对知识库的操作方法由规则类的操作方法提供。知识库的结构如图7所示。 前提2 前提1 规则名 前提链 结论 规则名 前提链 结论 Rule 前提n Null …… 图7 规则的结构 规则类定义如下: class rule { char *Name; //规则名 list *Pre; //前提链 int Conc; //结论(事实/概念编号) public: rule *Next; //规则指针(以便连成链) rule(char *N, int P[], int C); ~rule(); int Query(); void GetName() { cout<<Name; } }; 规则由规则类的构造函数建立,规则动态结点的存储单元由析构函数释放。一条规则是一个知识实体,它本身具有咨询推理功能,这由规则类的函数Query实现。规则是规则链中的一个结点,一条规则链组成一个知识库。对于产生式系统,除了由规则链组成一个知识库以外,还有一个事实库,记录用户与系统对话的结果及推理的中间结果,也就是表示当前的环境。事实库是动态的,它最初包括原始的所有断言,但不知断言是真是假,随着与用户对话,激活断言有的为真,也有的为假,同时规则库中的规则根据事实库中断言的真假做出推理。 事实库的结构如图8所示。 事实号 事实名 激活标志 断言 事实链 Fact 图8 事实的结构 其中事实号是事实的内部代号,断言是关于事实的结论,取值为“真”、“假”、“不知道”三种情况,事实对象建立时,断言的值为不知道。 事实定义如下: class fact { private: int Number; char Name[21]; int Active; int Succ; public: fact *Next; //事实指针(以便连成链) fact(int Num, char *L); char *GetName(); int GetNumber() { return Number; } int GetAct() { return Active; } int GetSucc() { return Succ; } void PutAct(const int Act0, int Suc0) { Active=Act0; Succ=suc0; } };   在建立知识库的同时,也建立了事实库,事实库也是一个动态链表,一个事实是链表中的一个结点,确切地说事实库与知识库是一个统一体,事实号是事实库的唯一关键字,知识库中的规则通过事实号与事实库发生联系,如图9所示。 前提2 事实Kn+1 规则名 前提链 结论 前提1 事实K1 事实K2 前提n Null 事实Kn 图9 规则及前提链 前提链由链对象实现,链的结点只有两个数据域,一个是事实号,另一个是指向下一个结点的指针,链类说明如下: class list { private: int Number; public: list *Next; list(int Num) { Number=Numl Next=NULL; } int GetNumber() { return Number; } }; 4.2 知识获取 本文实现的专家系统由11条规则组成,共出现25个概念,我们把概念称作事实,共25个事实,每个事实给一个编号,编号从1到25,在规则对象中我们不存储事实概念,只有该事实的编号。同样规则的结论也是事实概念的编号,事实与规则的数据以常量表示。我们把这些事实存放在一个Access数据库中作为知识库,然后在程序中打开它并添加到规则表中,从而获取知识。 具体实现方法如下: void AddRule::OnAdd() { // TODO: Add your control notification handler code here CWnd::UpdateData(); CDaoDatabase kdb; kdb.Open(kdbname); //打开知识库 CDaoTableDef AtrTbdef(& kdb); //申明一个表定义对象 AtrTbdef.Open("规则"); //打开表定义对象 CDaoRecordset AtrTbset(& kdb); //生成该记录集对象 AtrTbset.Open(& AtrTbdef); //打开记录集 AtrTbset.AddNew(); //开始添加记录 COleVariant value1(numb++); AtrTbset.SetFieldValue("number",value1); for(int i1=0;i1<kdb.GetTableDefCount()-5;i1++) //将数组中存放的各个条件值存入规则表中 { COleVariant value2(atrvalue[i1]); AtrTbset.SetFieldValue(i1+1,value2); } LPCTSTR lpconclusion=LPCTSTR(m_conclusion); AtrTbset.SetFieldValue("结论",lpconclusion); AtrTbset.Update(); AtrTbset.Close(); AtrTbdef.Close(); kdb.Close(); CListBox * ptjrks=(CListBox*) GetDlgItem(IDC_LIST3); ptjrks->ResetContent( ); //清除所有条件列表框中所有条目 for(int i2=0;i2<30;i2++) atrvalue[i2]=-1; //重新将条件内容数组置为空,-1代表该条件项内容为空 for(int i3=0;i3<30;i3++) order[i3]=-1; //重新将顺序数组置为空 rmksord=0; m_gznumb = numb; m_conclusion = _T(""); this->UpdateData(FALSE); //将对话框中规则代码加1,结论编辑框清空 } 4.3 推理机制 规则数据由规则类的构造函数生成规则对象,这个构造函数需要三个参数,一个规则名,一个表示前提断言编号的数组,还有一个结论断言编号。 规则对象是知识的实体,它包括知识的存储和知识的使用。在尺寸精度设计专家系统中,我们把推理机制同规则对象分离开来,使规则作为独立的知识单元,方便用户增加知识。规则对象与事实对象和用户交互,推理过程如图10。 用户 规则对象集 事实对象集 图10 规则对象的接口 在推理机制上我们采用的是基于精确推理机制的正向推理方法,事实对象记录了当前状态。规则对象首先拿出前提条件的断言,询问事实对象集,如事实对象集不知道,则询问用户,并将用户的回答结果存入事实对象集。如所有前提条件都被证实则结论为真,否则系统不知道结论是真还是假。 推理函数如下: void UseruleDlg::OnOK() { // TODO: Add extra validation here CWnd::UpdateData(); bool find=false; //0代表没找到匹配规则 m_conclusion="知识库中没有解答"; CDaoDatabase kdb; KdbManage kmg; kdb.Open(kmg.GetUsekdbname()); //打开知识库 CDaoTableDef Tbdef(& kdb); //申明一个表定义对象 Tbdef.Open("规则"); //打开表定义对象 CDaoRecordset Tbset(& kdb); //生成该记录集对象 Tbset.Open(& Tbdef); //打开记录集 Tbset.MoveFirst(); COleVariant var; COleVariant value; int k=kmg.RetriveAtrName(); for(int i=0;i<Tbdef.GetRecordCount();i++) { int march=0; int want=0; for(int j=0;j<k;j++) { Tbset.GetFieldValue(j+1,var); if(var.lVal==atrvalue[j]) march++; if(var.lVal!=atrvalue[j] && atrvalue[j]==-1) want++; } if((float)march>(float)k/2) { Tbset.GetFieldValue(j+1,value); m_conclusion=value.pcVal; m_exact=(float)march/((float)k); find=true; break; } Tbset.MoveNext(); } if(!find) { int t=0; for(int s=0;s<30;s++) if(atrvalue[s]!=-1) t++; if((float)t<=(float)k/2) m_explain="已知信息太少,请您进行更详细的考察"; else m_explain="知识库中没有知识可以解答"; } else m_explain="在知识库中找到解答"; this->UpdateData(FALSE); } 4.4 专家系统的开发步骤 介绍完用Visual C++实现专
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服