📄 模型说明.cpp
字号:
专家系统通用模型介绍
传统的智能语言,如prolog等,由于采用DOS界面、编程思想复杂、支持计算机其他性能较差,
已经无法适应飞速发展的计算机技术,不能满足用户的应用需求。
为方便以后的开发,我们用VC 5.0编写了一组类库,来实现基于Horn子句的规则推理,
提供给不熟悉智能语言的用户,用它来实现推理这一编程需要。(VC是目前众多流行编程语言中对
“面向对象”这一特性支持最佳的语言,而且用它开发的代码可以被多种编程语言调用。)
我们编写了诸如命题类、规则类等总共八个类的代码,充分利用了C++面向对象的封装性、
多态性,在类的内部实现了对整个系统的事实和规则的存储、按事实和规则进行搜索等各项功
能。其中,对事实、规则的书写可以实现对命题的取反(在prolog中不支持),在搜索方式中
包含了正向推理、反向推理、启发式推理等多种搜索机制。
在设计框架时,我们考虑了以后应用的各种需求,使我们的代码具有很强的通用性、易用
性。下面给出使用这个框架的一个例子的代码:
#include "AiExpert.h" //包含专家系统框架的头文件,只需这一个。
AiExpert myExpert; //定义一个专家系统的对象。
AiAssert P("有翅膀","没有翅膀"); //定义一个判断,两个字符串分别为该
AiAssert Q("翅膀有力","翅膀无力"); // 断言成立和不成立时相应的说明,
AiAssert R("会飞","不会飞"); // 该断言会自动被加入到myExpert中。
myExpert.AddRule(P&Q,R); //添加规则,参数中前一个表达式为规则前提,
myExpert.AddRule(!P,!R); // 后一个表达式为规则结论,仅当
// 规则前提表达式成立时,才推出规则结论。
myExpert.AddFact(Q); //添加事实,确认该命题已经成立。
myExpert.AddGoal(R); //添加一个命题为系统搜索目标,可有多个目标。
//上述四个语句的出现次序可任意。
myExpert.Search(); //启动搜索,默认依次进行正向搜索,反向启发式搜索,
// 直到推出目标或确定无法推出时停止。
CString str;
str = myExpert.GetAnswerString(); //取得搜索的结论。
BOOL result = myExpert.GetFact(R); //取得系统中的某个命题是否成立。
#include "AiExpert.h"
AiExpert myExpert;
myExpert.LoadFromFile(filename);
myExpert.Search();
myExpert.StoreToFile(filename);
最后,在此模型框架的基础上,我们编写了一个可视化的工具,通过它可以对事实、规则
等直接进行编辑、存盘,并可测试推理过程。一旦文件被调入后,即可进行基于此文件中的事实、
规则的推理,并可显示搜索过程(推理依据)。使用该工具可很方便地建立类似“动物识别”
一类的专家系统。
模型框架改进方向:推理方式、规则中加入过程、给其它语言的接口。
搜索方法有错
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -