产生式动物识别系统

产生式动物识别系统
产生式动物识别系统

重庆大学研究生课程报告书基于Java语言的可视化动物识别系统

课程名称:

学号:

姓名:

专业:

重庆大学自动化学院

二〇一五年十一月

目录

一、学习目的 (3)

二、系统原理 (3)

2.1规则库 (3)

2.2综合数据库 (3)

2.3推理机构 (3)

三、动物识别系统的设计过程 (4)

3.1系统整体设计 (4)

3.2系统各个部分设计 (4)

3.2.1 准备工作 (4)

3.2.2 推理子程序 (4)

3.2.3 规则库建立 (6)

3.2.4 可视化界面设计和数据输入输出 (7)

四、动物识别系统的实验效果 (9)

五、实验心得体会 (13)

六、附录 (14)

6.1 可视化界面设计程序 (14)

6.2 匹配算法子程序 (25)

一、学习目的

1.熟悉产生式的特点,基本结构和设计思想

2.掌握基于规则推理的基本过程和方法(在实验中采用正向推理过程)

3.学会用高级程序设计语言开发基于规则的动物识别系统

二、系统原理

用于描述相应领域内知识的产生式集合称为规则库。

显然,规则库是产生式系统求解问题的基础,其知识是否完整、一致,表达是否准确、灵活,对知识的组织是否合理等,将直接影响到系统的性能。因此,需要对规则库中的知识进行合理的组织和管理,检测并排除冗余及矛盾的知识,保持知识的一致性。采用合理的结构形式,可使推理机避免访问那些与求解当前问题无关的知识,从而提高求解问题的效率。

2.2综合数据库

综合数据库又称为事实库、上下文、黑板等。它是一个用于存放问题求解过程中各种当前信息的数据结构,例如问题的初始状态、原始证据、推理中得到的中间结论及最终结论。当规则库中某条产生式的前提可与综合数据库的某些已知事实匹配时,该产生式被激活,并把它推出的结论放入综合数据库中,作为后面推理的已知事实。显然,综合数据库的内容是在不断变化的。

2.3推理机构

由一组程序组成,负责整个产生式系统的运行,实现对问题的求解。粗略地说,它要做以下几项工作:

⑴、按一定的策略从规则库中选择与综合数据库中的已知事实进行匹配。

⑵、匹配成功的规则可能不止一条,这称为发生了冲突。此时,推理机构必须调用相应的解决冲突策略进行消解,以便从匹配成功的规则中选出一条执行。

⑶、在执行某一规则时,如果该规则的右部是一个或多个结论,则把这些结论加入到综合数据库中;如果是一条或多条操作,则执行这些操作。

⑷、对于不确定的知识,执行每一条规则时还要按照一定的算法计算结论的不确定性。

⑸、检查综合数据库中是否包含了最终结论,决定是否停止系统的运行。

三、动物识别系统的设计过程

3.1系统整体设计

根据课本中的流程以及老师给的思路,我将本系统分为推理子程序、规则库、综合数据容器、可视界面数据输入几个部分。然后分别实现,最后通过接口和调用方法来实现。

首先,根据推理子程序建立本系统所需的15条规则;然后通过可视化界面输入本系统要匹配的动物特征形成初始综合数据库;通过执行每条规则并匹配综合数据库中的特征。如果成功则更新综合数据库,否则执行下一条规则;最后判断是否匹配完成。匹配成功则显示匹配的动物图片和介绍,否则显示匹配不成功。它们之间的关系如图3.1所示。

图3.1系统的框架设计

3.2系统各个部分设计

3.2.1准备工作

(1)24个条件编号

为了方便程序内部的处理,我将24个动物特征依次编号如下:

9-毛发、10-哺乳动物、11-奶、12-羽毛、13-鸟、14-会飞、15-会下蛋、16-吃肉、17-食肉动物、18-有犬齿、19-有爪、20-眼盯前方、21-有蹄、22-有蹄类动物、23-咀嚼反刍动物、24-黄褐色、25-身上有暗斑、26-身上有黑色条纹、27-有长脖子、28-有长腿、29-不会飞、30-有黑白二色、31-会游泳、32-善飞

(2)7个动物编号

同样为了方便,我将7个动物的名称依次编号如下:

2-金钱豹、3-虎、4-长颈鹿、5-斑马、6-鸵鸟、7-企鹅、8-信天翁

3.2.2推理子程序

本程序把整个推理过程写成子程序,然后通过参数设置来完成每条规则库的建立,推理子程序的流程图如图3.2所示:

⑴、首先把当前规则的各个条件和结论编号送人数组以便于循环遍历。

⑵、遍历规则的每个条件对比综合数据库。若该条件在综合数据库中,则把该条件置1;若该条件不在综合数据库中,则把该条件赋值0。

⑶、判断综合数据库是否完全满足当前规则的条件。若满足,则把该规则的结果加入综合数据库;若不满足,则结束。

⑷、遍历综合数据库,判断是否匹配目标成功。若成功则返回匹配目标;否则,返回0。

编程实现代码如下:

public int Matching(int a,int b,int c,int d,int e,int f){

int [] r={a,b,c,d,e}; //推理条件送入数组

int [] result={2,3,4,5,6,7,8}; //推理目标数组

boolean tv=false;

int rlt=0;

//判断容器中的综合数据库中是否有该条规则的条件,如果有则把该条件置1,没有则置0

for(int i=0;i

{

if(r[i]!=1)

{

for(Integer k:https://www.360docs.net/doc/d116748047.html,prehensive )

{

if(r[i]==k)

{

tv=true;

}

}

if(tv==true)

{

r[i]=1;

tv=false;

}else{

r[i]=0;

}

}

}

//判断容器中的综合数据库是否具备该规则的所有条件,如果是则把该规则的结果加入综合数据库

if(r[0]*r[1]*r[2]*r[3]*r[4]==1){

https://www.360docs.net/doc/d116748047.html,prehensive.add(f);

}

//判断是否达到匹配目标,如果是,则把结构参数传递出去

for(int i=0;i

for(Integer s:https://www.360docs.net/doc/d116748047.html,prehensive ){

if(result[i]==s){

rlt=s;

}

}

}

return rlt;

}

3.2.3规则库建立

本系统能够识别7种动物,规则库共有以下15条规则:

R1 IF该动物有毛发THEN该动物是哺乳动物

R2 IF该动物有奶THEN该动物是哺乳动物

R3 IF该动物有羽毛THEN该动物是鸟

R4 IF该动物会飞AND会下蛋THEN该动物是鸟

R5 IF该动物是哺乳动物AND 吃肉THEN该动物是肉食动物

R6 IF该动物有爪AND 有犬齿AND 目视前方THEN该动物是肉食动物

R7 IF该动物是哺乳动物AND有蹄THEN该动物是有蹄类动物

R8 IF该动物是有蹄动物AND是反刍食物THEN该动物是有蹄动物

R9 IF该动物是哺乳动物AND食肉动物AND是黄褐色AND身上有黑色斑点THEN该动物是金钱豹

R10 IF该动物是哺乳动物AND食肉动物AND是黄褐色AND身上有黑色条纹THEN

该动物是老虎

R11 IF该动物是有蹄类动物AND有长脖子AND有长腿AND身上有暗斑点THEN该动物是长颈鹿

R12 IF该动物是有蹄类动物AND身上有黑色条纹THEN该动物是斑马

R13 IF该动物是鸟AND有不会飞AND有长腿AND长脖子AND是黑白色THEN 该动物是鸵鸟

R14 IF该动物是鸟AND不会飞AND会游泳AND是黑白色THEN该动物是企鹅

R15 IF该动物是鸟AND善飞THEN该动物是信天翁

推理过程如图3.3所示。

图3.3推理网络框图

对应的编程代码如下:

Matching(9,1,1,1,1,10); // R1

Matching(11,1,1,1,1,10); // R2

Matching(12,1,1,1,1,13); // R3

Matching(14,15,1,1,1,13); // R4

Matching(16,1,1,1,1,17);// R5

Matching(18,19,20,1,1,17);// R6

Matching(10,21,1,1,1,22);// R7

Matching(10,23,1,1,1,22);// R8

d[0]=Matching(10,17,24,25,1,2);// R9

d[1]=Matching(10,17,24,26,1,3);// R10

d[2]=Matching(22,27,28,25,1,4);// R11

d[3]=Matching(22,26,1,1,1,5);// R12

d[4]=Matching(13,27,28,29,30,6);// R13

d[5]=Matching(13,31,29,30,1,7);// R14

d[6]=Matching(13,32,1,1,1,8); // R15

3.2.4可视化界面设计和数据输入输出

该系统的可视化界面共分为选择动物的特征、匹配结果、动物介绍三个部分。首先,可通过选择动物的特征栏目来选择想要匹配的动物特征,然后通过确认键把这些特征送到程序的内部;然后程序根据内部推理判断匹配相应的动物,若匹配成功则显示该动物的图片和百科介绍,若匹配不成功,则显示匹配失败。界面如图3.4所示。

图3.4可视化界面设计

四、动物识别系统的实验效果

程序匹配结果如下列图片所示:

图4.1鸵鸟匹配结果图

图4.2长颈鹿匹配结果图

图4.3金钱豹匹配结果图

图4.4信天翁匹配结果图

图4.5企鹅匹配结果图

图4.6虎匹配结果图

图4.7斑马匹配结果图

图4.8匹配失败图

五、实验心得体会

通过本次实验我学习和理解了产生式知识的表示方法,通过编程实现体会到了简单人工智能学科知识应用的乐趣。同时也建立了构建产生式系统的基本流程,学会了基本的Java 编程知识,对以后的进一步学习和发展有了很大的帮助。此外,我也感受到了编程思想的魅力,一开始本来想用数据库的方法来解决规则库的问题,最后发现使用条件判断结合Java 中的方法的建立数据库更加方便,这种通过综合考虑实现了一个具体的功能让人感觉到了编程的乐趣,希望我以后能够进一步发展,能够编出更高效、更简洁的程序。

六、附录

6.1可视化界面设计程序

package generative;

import java.awt.BorderLayout;

import java.awt.EventQueue;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.border.EmptyBorder;

import javax.swing.GroupLayout;

import javax.swing.GroupLayout.Alignment;

import javax.swing.ImageIcon;

import javax.swing.border.TitledBorder;

import javax.swing.UIManager;

import java.awt.Color;

import javax.swing.JLabel;

import java.awt.Font;

import https://www.360docs.net/doc/d116748047.html,ponentPlacement; import javax.swing.JCheckBox;

import javax.swing.SwingConstants;

import javax.swing.JButton;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.io.File;

import java.io.FileInputStream;

import javax.swing.JLayeredPane;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import javax.swing.JTextArea;

public class View extends JFrame {

private JPanel contentPane;

private JCheckBox C;

private JCheckBox D;

private JCheckBox F;

private JCheckBox H;

private JCheckBox J;

private JCheckBox T;

private JCheckBox X;

private JCheckBox G;

private JCheckBox P;

private JCheckBox S;

private JCheckBox U;

private JCheckBox W;

private JCheckBox B;

private JCheckBox I;

private JCheckBox L;

private JCheckBox V;

private JCheckBox N;

private JCheckBox O;

private JCheckBox Q;

private JCheckBox R;

private JCheckBox A;

private JCheckBox E;

private JCheckBox K;

private JCheckBox M;

private JPanel panel_1;

private JPanel panel_2;

private JLabel image;

/**

* Launch the application.

*/

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() { public void run() {

try {

View frame = new View();

frame.setVisible(true);

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

//处理图片

public static byte[] imag(String img){

File file=new File(img);

FileInputStream fin=null;

byte a[]=new byte[(int)file.length()];

try

{

fin=new FileInputStream(file);

fin.read(a,0,(int)file.length());

fin.close();

}catch(Exception e)

{

e.printStackTrace();

}

return a;

}

//处理文本

/**

* Create the frame.

*/

public View() {

setTitle("201513113036 \u4E25\u7EAA\u5CF0");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setBounds(100, 100, 652, 468);

contentPane = new JPanel();

contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

setContentPane(contentPane);

JPanel panel = new JPanel();

panel.setBorder(new TitledBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"),

"\u8BF7\u9009\u62E9\u8981\u5339\u914D\u7684\u52A8\u7269\u7279\u5F81\uFF1A", TitledBorder.LEFT, TitledBorder.TOP, null, new Color(0, 0, 255)), "\u8BF7\u9009\u62E9\u8981\u5339\u914D\u7684\u52A8\u7269\u7279\u5F81\uFF1A", TitledBorder.LEFT, TitledBorder.TOP, null, Color.BLUE));

JLabel label = new JLabel("\u52A8\u7269\u8BC6\u522B\u7CFB\u7EDF");

label.setHorizontalAlignment(SwingConstants.CENTER);

label.setForeground(Color.BLUE);

label.setFont(new Font("华文行楷", Font.PLAIN, 30));

panel_1 = new JPanel();

panel_1.setBorder(new TitledBorder(null, "\u5339\u914D\u7ED3\u679C\uFF1A", TitledBorder.LEFT, TitledBorder.TOP, null, Color.BLUE));

panel_2 = new JPanel();

panel_2.setBorder(new TitledBorder(null, "\u52A8\u7269\u4ECB\u7ECD\uFF1A", TitledBorder.LEFT, TitledBorder.TOP, null, Color.BLUE));

GroupLayout gl_contentPane = new GroupLayout(contentPane);

gl_contentPane.setHorizontalGroup(

gl_contentPane.createParallelGroup(Alignment.LEADING)

.addGroup(gl_contentPane.createSequentialGroup()

.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)

.addGroup(gl_contentPane.createSequentialGroup()

.addGap(179)

.addComponent(label, GroupLayout.PREFERRED_SIZE, 243, GroupLayout.PREFERRED_SIZE))

.addGroup(gl_contentPane.createSequentialGroup()

.addContainerGap()

.addComponent(panel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_V ALUE))

.addGroup(gl_contentPane.createSequentialGroup()

.addContainerGap()

.addComponent(panel_1, GroupLayout.PREFERRED_SIZE, 174, GroupLayout.PREFERRED_SIZE)

.addGap(18)

.addComponent(panel_2, GroupLayout.DEFAULT_SIZE, 408, Short.MAX_VALUE)))

.addContainerGap())

);

gl_contentPane.setVerticalGroup(

gl_contentPane.createParallelGroup(Alignment.LEADING)

.addGroup(gl_contentPane.createSequentialGroup()

.addContainerGap()

.addComponent(label, GroupLayout.PREFERRED_SIZE, 28, GroupLayout.PREFERRED_SIZE)

.addPreferredGap(ComponentPlacement.UNRELATED)

.addComponent(panel, GroupLayout.PREFERRED_SIZE, 150, GroupLayout.PREFERRED_SIZE)

.addGap(18)

.addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)

.addComponent(panel_2, GroupLayout.DEFAULT_SIZE, 161, Short.MAX_VALUE)

.addComponent(panel_1, GroupLayout.DEFAULT_SIZE, 161, Short.MAX_VALUE))

.addContainerGap())

);

JTextArea character = new JTextArea();

character.setEditable(false);

character.setLineWrap(true);

GroupLayout gl_panel_2 = new GroupLayout(panel_2);

gl_panel_2.setHorizontalGroup(

gl_panel_2.createParallelGroup(Alignment.LEADING)

.addGroup(gl_panel_2.createSequentialGroup()

.addContainerGap()

.addComponent(character, GroupLayout.PREFERRED_SIZE, 376,

Short.MAX_VALUE)

.addContainerGap())

);

gl_panel_2.setVerticalGroup(

gl_panel_2.createParallelGroup(Alignment.LEADING)

.addComponent(character, GroupLayout.DEFAULT_SIZE, 169, Short.MAX_VALUE)

);

panel_2.setLayout(gl_panel_2);

image = new JLabel("");

image.setHorizontalAlignment(SwingConstants.CENTER);

GroupLayout gl_panel_1 = new GroupLayout(panel_1);

gl_panel_1.setHorizontalGroup(

gl_panel_1.createParallelGroup(Alignment.LEADING)

.addGroup(gl_panel_1.createSequentialGroup()

.addComponent(image, GroupLayout.DEFAULT_SIZE, 152, Short.MAX_VALUE)

.addContainerGap())

);

gl_panel_1.setVerticalGroup(

gl_panel_1.createParallelGroup(Alignment.LEADING)

.addGroup(gl_panel_1.createSequentialGroup()

.addComponent(image, GroupLayout.DEFAULT_SIZE, 127, Short.MAX_VALUE)

.addContainerGap())

);

//每种动物的介绍

String text1=" 金钱豹(拉丁学名:Panthera pardus 英文名:Leopard),又称:开普士,花豹。身长1.5至2.4米,体重50到100公斤。野生最大记录130公斤,奔跑时速可达70公里。头圆、耳小。全身棕黄而遍布黑褐色金钱花斑,故名。还有一种黑化型个体,通体暗黑褐,细观仍见圆形斑,常被称为墨豹。金钱豹是一种大型食肉兽.身体强健,行动敏捷,能跳善爬,性情凶猛狡猾甚至能猎食鹿等大型动物,偷袭食草动物。金钱豹的爬树本领非常高。";

String text2=" 虎(学名:Panthera tigris ;英文名:Tiger):大型猫科动物;毛色浅黄或棕黄色,满有黑色横纹;头圆、耳短,耳背面黑色,中央有一白斑甚显著;四肢健壮有力;尾粗长,具黑色环纹,尾端黑色。";

String text3=" 长颈鹿(学名:Giraffa camelopardalis)是一种生长在非洲的反刍偶蹄动物,拉丁文名字的意思是“长着豹纹的骆驼”。它们是世界上现存最高的陆生动物。站立时由头至脚可达6-8米,体重约700千克,刚出生的幼仔就有1.5米高;皮毛颜色花纹有斑点和网纹型,头的额部宽,吻部较尖,耳大竖立,头顶有1对骨质短角,角外包覆皮肤和茸毛;颈特别长(约2米),颈背有1行鬃毛;体较短;四肢高而强健,前肢略长于后肢,蹄阔大;尾短小,尾端为黑色簇毛。牙齿为原始的低冠齿,不能以草为主食,只能以树叶为主食;舌较长,可以用于取食;具短角,角上被有毛的皮肤覆盖。";

String text4=" 斑马是斑马亚属(学名:Hippotigris)和细纹斑马亚属(学名:

Dolichohippus)的通称,是一类常见于非洲的马科动物。斑马因身上有起保护作用的斑纹而得名,每只斑马身上的条纹都不一样。";

String text5=" 鸵鸟是非洲一种体形巨大,不会飞但奔跑得很快的鸟,也是世界上现存体型最大的鸟类。高可达2.5米,全身有黑白色的羽毛,脖子长而无毛,翼短小,腿长。平时速度达80km/h,最快达90km/h。";

String text6=" 企鹅(学名:Spheniscidae):有“海洋之舟”美称的企鹅是一种最古老的游禽,它们很可能在地球穿上冰甲之前,就已经在南极安家落户。全世界的企鹅共有17种,大多数都分布在南半球。主要生活在南半球,属于企鹅目,企鹅科。特征为不能飞翔;脚生于身体最下部,故呈直立姿势;趾间有蹼;跖行性(其他鸟类以趾着地);前肢成鳍状;羽毛短,以减少摩擦和湍流;羽毛间存留一层空气,用以保温。背部黑色,腹部白色。各个种的主要区别在于头部色型和个体大小。";

String text7=" 信天翁属于鹱形目、信天翁科,共4属21种。他们分别分布在从约南纬25°至流冰群岛的南半球海域,并利用该区域内的岛屿进行繁殖。";

panel_1.setLayout(gl_panel_1);

C = new JCheckBox("\u5976");

E = new JCheckBox("\u9E1F");

K = new JCheckBox("\u722A");

M = new JCheckBox("\u8E44");

A = new JCheckBox("\u6BDB\u53D1");

D = new JCheckBox("\u7FBD\u6BDB");

F = new JCheckBox("\u4F1A\u98DE");

H = new JCheckBox("\u5403\u8089");

J = new JCheckBox("\u72AC\u9F7F");

T = new JCheckBox("\u957F\u817F");

X = new JCheckBox("\u5584\u98DE");

G = new JCheckBox("\u4F1A\u4E0B\u86CB");

P = new JCheckBox("\u9EC4\u8910\u8272");

S = new JCheckBox("\u957F\u8116\u5B50");

U = new JCheckBox("\u4E0D\u4F1A\u98DE");

W = new JCheckBox("\u4F1A\u6E38\u6CF3");

B = new JCheckBox("\u54FA\u4E73\u52A8\u7269");

I = new JCheckBox("\u98DF\u8089\u52A8\u7269");

L = new JCheckBox("\u773C\u76EF\u524D\u65B9");

V = new JCheckBox("\u9ED1\u767D\u4E8C\u8272");

N = new JCheckBox("\u6709\u8E44\u7C7B\u52A8\u7269");

O = new JCheckBox("\u5480\u56BC\u53CD\u520D\u52A8\u7269");

Q = new JCheckBox("\u8EAB\u4E0A\u6709\u6697\u6591\u70B9");

R = new JCheckBox("\u8EAB\u4E0A\u6709\u9ED1\u8272\u6761\u7EB9");

JButton OK = new JButton("\u786E\u5B9A");

OK.addMouseListener(new MouseAdapter() {

@Override

//鼠标事件监听器,把选择的参数送到用来存放综合数据库中的容器中public void mouseClicked(MouseEvent arg0) {

Mathingrules d=new Mathingrules();

if(A.isSelected()){d.Shuru(9);}

if(B.isSelected()){d.Shuru(10);}

if(C.isSelected()){d.Shuru(11);}

if(D.isSelected()){d.Shuru(12);}

if(E.isSelected()){d.Shuru(13);}

if(F.isSelected()){d.Shuru(14);}

if(G.isSelected()){d.Shuru(15);}

if(H.isSelected()){d.Shuru(16);}

if(I.isSelected()){d.Shuru(17);}

if(J.isSelected()){d.Shuru(18);}

if(K.isSelected()){d.Shuru(19);}

if(L.isSelected()){d.Shuru(20);}

if(M.isSelected()){d.Shuru(21);}

if(N.isSelected()){d.Shuru(22);}

if(O.isSelected()){d.Shuru(23);}

if(P.isSelected()){d.Shuru(24);}

if(Q.isSelected()){d.Shuru(25);}

人工智能课程设计报告--动物识别系统

计算机科学与技术学院 《人工智能》课程设计报告设计题目:动物识别系统 设计人员:学号: 学号: 学号: 学号: 学号: 学号: 指导教师: 2015年7月

目录 目录 (1) 摘要 (2) Abstract (2) 一、专家系统基本知识 (3) 1.1专家系统实际应用 (3) 1.2专家系统的开发 (3) 二、设计基本思路 (4) 2.1知识库 (4) ....................................................................................................... 错误!未定义书签。 2.1.2 知识库建立 (4) 2.1.3 知识库获取 (5) 2.2 数据库 (6) ....................................................................................................... 错误!未定义书签。 ....................................................................................................... 错误!未定义书签。 三、推理机构 (7) 3.1推理机介绍 (7) 3.1.1 推理机作用原理 (7) ....................................................................................................... 错误!未定义书签。 3.2 正向推理 (7) 3.2.1 正向推理基本思想 (7) 3.2.2 正向推理示意图 (8) 3.2.3 正向推理机所要具有功能 (8) 3.3反向推理 (8) ....................................................................................................... 错误!未定义书签。 3.3.2 反向推理示意图 (8) ....................................................................................................... 错误!未定义书签。 四、实例系统实现 (9)

简单动物识别系统的知识表示

?简单动物识别系统的知识表示 ? 1. 实验目的 ?理解产生式知识表示方法,能够用选定的编程语言设计产生式系统的规则库和综合数据库。 ? 2. 实验环境 ?在微型计算机上,选一种编程语言。 ? 3. 实验要求 ?(1) 以动物识别系统的产生式规则为例。 ?(2) 用选定的编程语言建造知识库和综合数据库,并能对它们进行增加、删除和修改操作。 ?学习任务 ?通过网络搜索,以“专家系统的作用”为主题进行调查。搜集各种应用专家系统的实例,分析其用途,并根据不同的用途进行分类。 ?请上网查找专家系统的相关资料,从不同的角度追溯专家系统的发展史。 ?作品结果:把上面两个任务结果,形成一个WORD文档。其中对专家系统的用途分类形成一个表格。 ?用Intermodeller设计一个小型的专家系 MYCIN是一个通过提供咨询服务来帮助普通内科医生诊治细菌感染性疾病的专家系统,其于1972年开始研制,74年基本完成,并投入实际应用。MYCIN的取名来自多种治疗药物的公共后缀,如clindamycin、erythromycin、kanamycin等。如果说能推测有机化合物分子结构的DENDRAL是世界上第一个有重要实用价值的专家系统,那末MYCIN则是最有影响力的专家系统。围绕着MYCIN的各种研究工作一直沿续了10年,对于推动知识工程以及专家系统学科的建立和发展具有重要影响。可以说,早期的专家系统,尤其是医疗诊断和咨询型专家系统,许多都参照了MYCIN系统的技术,如知识表示、不确定推理、推理解释、知识获取等。 MYCIN也设计为典型的产生式系统,由规则库、综合数据库和控制系统三个部分组成;只是基于规则的推理采用逆向方式,即从问题求解

人工智能实验报告-产生式系统推理-动物识别

人工智能第二次实验报告 产生式系统推理 班级:姓名:学号: 一、实验目的 1. 理解并掌握产生式系统的基本原理; 2. 掌握产生式系统的组成部分,以及正向推理和逆向推理过程。 二、实验要求 1. 结合课本内容, 以动物识别系统为例,实现小型产生式系统; 2. 要求: 正向推理中能根据输入的初始事实,正确地识别所能识别的动物;逆向推理中 能根据所给的动物给出动物的特征。 三、实验算法 1. 如何表示事实和特征的知识; 在本程序中,我将动物的特征写入data.txt,将规则记入rules.txt,将动物种类记为goal.txt。

通过函数void readFiles() { readGoal(); readCod(); readRule(); }读入所有数据分别存放于goal[],rule[],cod[]自定义数组中。 2. 指出综合数据库和规则库分别使用哪些函数实现的? 综合数据库(包括特征和目标) typedef struct { int xuh;//存放编号 char valu[50];//存放具体内容 }Node; Node goal[20]; Node cod[50];

规则库 typedef struct { int rslt; int codNum;//记载前提的个数 int cod[10];//记载前提的序号 int used;//记载是否已匹配成功 }Nrule; Nrule rule[50]; void readRule() { FILE *fp; int i; int tempxuh,tempcodn; char ch; if((fp=fopen("rules.txt","r"))==NULL) { printf("cannot open data\n"); exit(0); } i=0; rule[i].codNum=0; while((ch=fgetc(fp))!=EOF) { if(i==14) i=i; tempcodn=0; while(ch!='\n'&&ch!=EOF) //每一条规则 { tempxuh=0; while(ch<='9'&&ch>='0') { tempxuh=tempxuh*10+ch-'0';

产生式动物识别系统word版本

实验7:产生式动物识别系统 一、实验目的 理解和掌握产生式系统的推理方法,能够用选定的编程语言实现推理机。 二、编程环境 本文主要编译环境是Windows 10 Visual Studio 2015 三、问题描述 设计一个用于动物识别的产生式系统,该系统通过规则库识别老虎、金钱豹、斑马、长颈鹿、企鹅、信天翁、鸵鸟7种动物。 四、解决方案 1.规则库: 用于描述相应领域内知识的产生式集合称为规则库。 本规则库包括以下规则 R1:if 动物有毛发 then 动物是哺乳动物 R2:if 动物有奶 then 动物是哺乳动物 R3:if 动物有羽毛 then 动物是鸟 R4:if 动物会飞 and 会生蛋then 动物是鸟 R5:if 动物吃肉then 动物是食肉动物 R6:if 动物有犀利牙齿and 有爪and 眼向前方 then 动物是食肉动物 R7:if 动物是哺乳动物and有蹄then动物是有蹄类动物 R8:if 动物是哺乳动物and反刍then动物是有蹄类动物 R9:if 动物是哺乳动物and是食肉动物and有黄褐色 and 有暗斑点then 动物是豹 R10:if 动物是哺乳动物and是食肉动物and有黄褐色and 有黑色条纹then 动物是虎 R11:if动物是有蹄类动物 and 有长脖子and有长腿and有暗斑点then 动物是长颈鹿 R12:if 动物是有蹄类动物and有黑色条纹then 动物是斑马 R13:if 动物是鸟and不会飞and有长脖子and有长腿and有黑白二色then 动物是鸵鸟 R14:if 动物是鸟and不会飞and会游泳and有黑白二色 then 动物是企鹅 R15:if 动物是鸟and善飞then 动物是信天翁 2.综合数据库 char *ans0 = "抱歉,我也不知道这是什么动物"; char *ans1 = "这个动物是金钱豹";

人工智能动物识别专家系统

一.题目:动物识别专家系统 二.实验目的 1.理解并掌握基于规则系统的表示与推理 2.学会编写小型的生产式系统,理解正向推理和反向推理的过程以及两 者的区别 3.学会设计简单的人机交互界面 三.实验内容 动物识别专家系统是流行的专家系统实验模型,它用产生式规则来表示知识,共15条规则、可以识别七种动物,这些规则既少又简单,可以改造他们,也可以加进新的规则,还可以用来识别其他东西的新规则来取代这些规则。 四.实验要求 1、确定推理方法(正向还是反向),并根据问题设计实现一个简单的不通用推理机(匹配、冲突消解) 2、规则库要求至少包含15条规则 3、初始事实可以任意给定,输入初始事实后能够得到推理结果 4、设计人机界面,解释模块提供查询规则的功能 5、可以不考虑知识库管理模块 6、提交实验报告, 7、报告中要有推理树 五.实验原理 动物识别专家系统是流行的专家系统实验模型,它用产生式规则来表示知识,共15条规则、可以识别七种动物,这些规则既少又简单,可以改造他们,也可以加进新的规则,还可以用来识别其他东西的新规则来取代这些规则。动物识别15条规则: 规则1: 如果:动物有毛发 则:该动物是哺乳动物

规则2: 如果:动物能产奶 则:该单位是哺乳动物 规则3: 如果:该动物有羽毛 则:该动物是鸟 规则4: 如果:动物会飞,且会下蛋 则:该动物是鸟 规则5: 如果:动物吃肉 则:该动物是肉食动物 规则6: 如果:动物有犬齿,且有爪,且眼盯前方 则:该动物是食肉动物 规则7: 如果:动物是哺乳动物,且有蹄 则:该动物是有蹄动物 规则8: 如果:动物是哺乳动物,且是反刍动物 则:该动物是有蹄动物 规则9: 如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点则:该动物是豹 规则10: 如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹则:该动物是虎 规则11: 如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类 则:该动物是长颈鹿 规则12: 如果:动物有黑条纹,且是有蹄类动物 则:该动物是斑马 规则13: 如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞

动物专家识别系统

运行环境:Windows XP + VC6.0

逻辑:

代码: #include #include #include #include #include #include using namespace std; struct CAUSE_TYPE{ //事实 string cause; //事实字符串描述 bool flag; //是否已经使用,防止输入的事实重复 //其他省略 }; struct RULE_TYPE{ //结论 string result; //结论字符串描述 vector cause; //判断依据的事实 int count; //结论的前件有多少个吻合 bool finded; //是否匹配好所有前件 //其他省略 }; class AniDist{ public: bool load(string str); //根据文件创建结论队列和它们的事实,str为文件路径(知识获取机构) void clear(); //将所有结论的possible清零,所有flag清空 RULE_TYPE* find(vector str); //推理过程(推理机) vector split(string str); //将输入的事实字符串转换为队列,字符串以空格分割(用于人机接口) void print(RULE_TYPE* rul); //打印判断的信息 void print_table(); //打印从文件中读取的的结论队列 void clearmem(); //清理内存 friend bool operator !(AniDist ad); private: bool isload; vector queue; //结论队列链表 CAUSE_TYPE* create_cause(string str); //根据输入的字符串创建单个事实 RULE_TYPE* create_rule(string str); //根据输入的字符串创建单个结论

基于WEB的动物识别系统 实验报告

基于web的动物识别系统 一、实验目的 理解和掌握产生式知识表示方法及产生式系统的基本过程,能够利用Web编程技术建立一个基于产生式知识表示的简单的智能系统。 二、实验环境 (1) 硬件环境:网络环境中的微型计算机。 (2) 软件环境:Windows操作系统,Microsoft Visual Studio C#语言。 三、实验原理 该系统用到的表示方法是产生式表示方法,是陈述性知识表示方法的一种。 3.1 产生式表示的基本方法 (1)事实的表示

在产生式表示方法中,事实通常是用三元组或四元组来表示的。对确定性知识,一个事实可用一个三元组 (对象,属性,值)或(关系,对象1,对象2) 来表示。这种表示方式,在机器内部可用一个表来实现。 (2)规则的表示 规则描述的事物间的因果关系。规则的产生式表示形式常称为产生式规则,简称为产生式,或规则。其基本形式为 P→Q 或者 IF P THEN Q 其中,P是产生式的前提,也称为产生式的前件,它给出了该产生式可否使用的先决条件,用事实的逻辑组合来构成;Q是一组结论或操作,也成为产生式的后件,它指出当前提P满足时应该推出的结论或应该执行的操作。产生式的含义是:如果前提P满足,则可推出结论Q或执行Q所规定的操作。 2.产生式系统的基本结构及过程 通常,把用产生式知识表示方法构造的智能系统统称为产生式系统。一个产生式系统的基本结构包括综合数据库、规则库和控制系统这三个主要部分。 2.1综合数据库 综合数据库也称为事实库,是一个用来存放与求解问题有关的各

种当前信息的数据结构。在推理过程中,当规则库中某条规则的前提可以和综合数据库中的已知事实相匹配时,该规则被激活,由它推出的结论将被作为新的事实放入综合数据库,成为后面推理的已知事实。 2.2规则库 规则库是一个用来存放与求解问题有关的所有规则的集合。它包含了将问题从初始状态转换成目标状态所需要的所有变换规则。 2.3控制系统 控制系统也成为推理机,它由一组程序组成,用来控制整个产生式系统的运行,决定问题求解过程的推理路线,实现对问题的求解。其主要工作如下: (1)按一定策略从规则库中选择规则与综合数据库的已知事实进行匹配。 (2)当匹配成功的规则多于一条时,推理机构应该能够按照某种策略从中选出一条规则去执行。 (3)对要执行的规则,如果该规则的后件不是问题的目标,则当其为一个或多个结论时,把这些结论加入到综合数据库中;当其为一个或多个操作时,执行这些操作。 (4)对要执行的规则,如果该规则的后件满足问题的结束条件,则停止推理。 (5)在问题求解过程中,记住应用过的规则序列,以便最终能够给出问题的解路径。

动物识别系统代码

简易动物识别专家系统源代码(调试无错!) #include void birds() { int a; printf("**************************************\n"); printf("1.长腿,长脖子,黑色,不会飞。\n"); printf("2.不会飞,会游泳,黑色.\n"); printf("3.善飞\n"); printf("4.无上述特征\n"); printf("**************************************\n\n"); printf("请选择该动物特点:\n"); scanf_s("%d", &a); switch(a) { case 1: printf("该动物为\"鸵鸟\"\n\n"); break; case 2: printf("该动物为\"企鹅\"\n\n"); break; case 3: printf("该动物为\"信天翁\"\n\n"); break; case 4: printf("\"我们将会尽快升级系统,谢谢使用。\"\n\n"); break; default: printf("错误选择!\n"); break; } } void carnivore()//食肉动物识别 { int d; printf("**************************************\n"); printf("1.黄褐色有暗斑\n2.黄褐色有褐色条纹\n3.无上述特点\n");

printf("**************************************\n\n"); printf("请选择该动物特点:\n"); scanf_s("%d", &d); switch(d) { case 1: printf("该动物为\"猎豹\"\n\n"); break; case 2: printf("该动物为\"老虎\"\n\n"); break; case 3: printf("\"我们将会尽快升级系统,谢谢使用。\"\n\n"); break; default: printf("错误选择!\n"); break; } } void ungulate()//哺乳动物识别 { int e; printf("**************************************\n"); printf("1.黑白条纹\n2.有暗斑点,且长腿,长脖子\n3.无上述特点\n"); printf("**************************************\n"); printf("请选择该动物特点:\n\n"); scanf_s("%d", &e); switch(e) { case 1: printf("该动物为\"斑马\"\n\n"); break; case 2: printf("该动物为\"长颈鹿\"\n\n"); break; case 3: printf("\"我们将会尽快升级系统,谢谢使用。\"\n\n"); break; default: printf("错误选择!\n"); break; } }

小型动物分类专家系统的设计与实现_2016

小型动物分类专家系统的设计与实现 一、实验目的 通过本实验可使学生能够综合利用高级程序设计语言、面向对象程序设计、数据结构、数据库原理、人工智能、软件工程等课程的相关知识,设计并实现小型动物分类专家系统,培养学生综合运用所学计算机软件知识解决实际问题的能力,为今后从事计算机软件开发及应用打下基础。 二、实验内容 运用下列规则,设计并实现一个小型动物分类专家系统。 规则1: 如果:动物有毛发 则:该动物是哺乳动物 规则2: 如果:动物有奶 则:该单位是哺乳动物 规则3: 如果:该动物有羽毛 则:该动物是鸟 规则4: 如果:动物会飞,且会下蛋 则:该动物是鸟 规则5: 如果:动物吃肉 则:该动物是肉食动物 规则6: 如果:动物有犬齿,且有爪,且眼盯前方 则:该动物是食肉动物 规则7: 如果:动物是哺乳动物,且有蹄 则:该动物是有蹄动物 规则8: 如果:动物是哺乳动物,且是反刍动物 则:该动物是有蹄动物 规则9: 如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点 则:该动物是豹 规则10: 如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹 则:该动物是虎 规则11: 如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类 则:该动物是长颈鹿 规则12:

如果:动物有黑条纹,且是有蹄类动物 则:该动物是斑马 规则13: 如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞 则:该动物是鸵鸟 规则14: 如果:动物是鸟,且不会飞,且会游泳,且是黑色的 则:该动物是企鹅 规则15: 如果:动物是鸟,且善飞 则:该动物是信天翁 动物分类专家系统由15条规则组成,可以识别七种动物. 三、工具 四、例子

动物识别系统__代码

动物识别专家系统 动物识别专家系统是流行的专家系统实验模型,它用产生式规则来表示知 识,共15 条规则、可以识别七种动物,这些规则既少又简单,可以改造他 们,也可以加进新的规则,还可以用来识别其他东西的新规则来取代这些规则。动物识别15 条规则的中文表示是: 规则1: 如果:动物有毛发 则:该动物是哺乳动物 规则2: 如果:动物有奶 则:该单位是哺乳动物 规则3: 如果:该动物有羽毛 则:该动物是鸟 规则4: 如果:动物会飞,且会下蛋 则:该动物是鸟 规则5: 如果:动物吃肉 则:该动物是肉食动物 规则6: 如果:动物有犬齿,且有爪,且眼盯前方 则:该动物是食肉动物 规则7: 如果:动物是哺乳动物,且有蹄 则:该动物是有蹄动物 规则8: 如果:动物是哺乳动物,且是反刍动物 则:该动物是有蹄动物 规则9: 如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点 则:该动物是豹 规则10: 如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹 则:该动物是虎 规则11: 如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类 则:该动物是长颈鹿 规则12: 如果:动物有黑条纹,且是有蹄类动物 则:该动物是斑马

规则13: 如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞 则:该动物是鸵鸟 规则14: 如果:动物是鸟,且不会飞,且会游泳,且是黑色的 则:该动物是企鹅 规则15: 如果:动物是鸟,且善飞 则:该动物是信天翁 动物分类专家系统由15 条规则组成,可以识别七种动物,在15 条规则中, 共出现 30 个概念(也称作事实),共30 个事实,每个事实给一个编号,从编号从1 到30,在规则对象中我们不存储事实概念,只有该事实的编号,同样规则的结论也是事实概念的编号,事实与规则的数据以常量表示,其结构如下:char *str[]={"chew_cud反刍动物","hooves蹄类动物","mammal哺乳动物","forward_eyes眼盯前方", "claws有爪","pointed_teeth有犬齿","eat_meat吃肉","lay_eggs会下蛋","fly会飞", "feathers有羽毛","ungulate有蹄","carnivore食肉动物","bird鸟","give_milk能产奶", "has_hair有毛发","fly_well善飞","black&white_color黑白色","can_swim会游泳", "long_legs长腿","long_neck长脖子","black_stripes黑条纹","dark_spots黑斑点", "tawny_color黄褐色","albatross信天翁","penguin企鹅","ostrich驼鸟","zebra斑马", "giraffe长颈鹿","tiger老虎","cheetah猎豹",0}; 程序用编号序列的方式表达了产生式规则,如资料中规则15,如果动物是 鸟,且善飞,则该动物是信天翁。相应的规则数组第七条是{16,13,0,0,0,0},第十三个是“bird”(鸟),如果事实成立,询问使用者下一个事实,第十六个“fly_weil”(善飞),如果也成立,则查找结论断言编号数组{30,29,28, 27,26,25,24,3,3,13,12,12,11,11,0}中第七个“24”,这里24 对应事实数组中的“albatross”(信天翁)。 上述就是程序的推理过程,也是程序中的重点,该部分是由规则类(类rul e)中的Query 方法实现。 程序完整代码: #include #include #include #include #define True 1 #define False 0 #define DontKnow -1 char *str[]={"chew_cud反刍动物","hooves蹄类动物","mammal哺乳动物","forward_eyes眼盯前方",

人工智能动物识别系统 实验报告

人工智能导论 实验报告 题目动物识别专家系统 学院信息科学与工程学院 专业计算机科学与技术 姓名侯立军 学号 20131222036 班级计信1301 二O一五年十一月二十六日

1 设计内容 题目:动物识别专家系统 内容:动物识别专家系统是流行的专家系统实验模型,他用产生是规则来表示知识可以识别不同的动物。这些规则既少又简单,可以改造他们,也可以加入新的规则,还可以用来识别其他新规则来取代这些规则。 2 基本原理 2.1 产生式系统的问题求解基本过程: (1) 初始化综合数据库,即把欲解决问题的已知事实送入综合数据库中; (2) 检查规则库中是否有未使用过的规则,若无转 (7); (3) 检查规则库的未使用规则中是否有其前提可与综合数据库中已知事实相匹配的规则,若有,形成当前可用规则集;否则转(6); (4) 按照冲突消解策略,从当前可用规则集中选择一个规则执行,并对该规则作上标记。把执行该规则后所得到的结论作为新的事实放入综合数据库;如果该规则的结论是一些操作,则执行这些操作; (5) 检查综合数据库中是否包含了该问题的解,若已包含,说明解已求出,问题求解过程结束;否则,转(2); (6) 当规则库中还有未使用规则,但均不能与综合数据库中的已有事实相匹配时,要求用户进一步提供关于该问题的已知事实,若能提供,则转(2);否则,执行下一步; (7) 若知识库中不再有未使用规则,也说明该问题无解,终止问题求解过程。 2.2 正向推理 正向推理是以已知事实作为出发点的一种推理,又称数据驱动推理、前向链推理及前件推理等。 2.2.1 正向推理的基本思想: 从用户提供的初始已知事实出发,在知识库KB中找出当前可适用的知识,构成可适用知识集KS,然后按某种冲突消解策略从KS中选出一条知识进行推理,并将推出的新事实加入到数据库中作为下一步推理的已知事实,在此之后再在知识库中选取可适用的知识进行推理,如此重复,直到求得了所要求的解,或者知识库中再

人工智能动物识别系统JAVA

经典文档下载后可编辑复制 工 作存储器 用户界面 实验报告 课程名称人工智能与专家系统实验名称动物分类专家系统设计 系别电子信息科学学院专业班级指导教师 学号____________姓名____________实验日期2016.4.1 实验成绩___________ 一、实验目的 1、加深理解专家系统的结构原理与实际应用。 2、初步掌握知识获取的基本方法。 3、掌握产生式规则知识表示方法及其编程实现方法。 4、初步掌握知识库的组建方法。 5、加深理解推理机的算法原理并初步掌握其编程实现方法。 二、实验环境 1 、硬件环境:微机 2 、编程语言不限 三、实验原理 一个基于规则专家系统的完整结构示于图 1 。其中,知识库、推理机和工作存储器是构成专家系统的核心。系统的主要部分是知识库和推理引擎。知识库由谓词演算事实和有关讨论主题的规则构成。推理引擎由所有操纵知识库来演绎用户要求的信息的过程构成-如消解、前向链或反向链。用户接口可能包括某种自然语言处理系统,它允许用户用一个有限的自然语言形式与系统交互;也可能用带有菜单的图形接口界面。解释子系统分析被系统执行的推理结构,并把它解释给用户。 用户知识工程师 图1 一个基于规则专家系统的完整结构 发 外部程序

三、实验内容 运用下列规则,设计并实现一个小型动物分类专家系统。 规则 1 : 如果:动物有毛发 则:该动物是哺乳动物 规则 2 : 如果:动物有奶 则:该单位是哺乳动物 规则 3 : 如果:该动物有羽毛 则:该动物是鸟 规则 4 : 如果:动物会飞,且会下蛋 则:该动物是鸟 规则 5 : 如果:动物吃肉 则:该动物是肉食动物 规则 6 : 如果:动物有犬齿,且有爪,且眼盯前方 则:该动物是食肉动物 规则 7 : 如果:动物是哺乳动物,且有蹄 则:该动物是有蹄动物 规则 8 : 如果:动物是哺乳动物,且是反刍动物 则:该动物是有蹄动物 规则 9 : 如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点 则:该动物是豹 规则 10 : 如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹 则:该动物是虎 规则 11 : 如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类 则:该动物是长颈鹿 规则 12 : 如果:动物有黑条纹,且是有蹄类动物 则:该动物是斑马 规则 13 : 如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞 则:该动物是鸵鸟 规则 14 : 如果:动物是鸟,且不会飞,且会游泳,且是黑色的 则:该动物是企鹅 规则 15 : 如果:动物是鸟,且善飞 则:该动物是信天翁 利用上述15 条规则,可区分7 种动物。 ( 2 )推理机设计:采用正向推理。

人工智能动物识别系统JAVA

精品文档 工作存储器解释器 用户界面 实验报告 课程名称人工智能与专家系统实验名称动物分类专家系统设计 系别电子信息科学学院专业班级指导教师 学号____________姓名____________实验日期2016.4.1 实验成绩___________ 一、实验目的 1、加深理解专家系统的结构原理与实际应用。 2、初步掌握知识获取的基本方法。 3、掌握产生式规则知识表示方法及其编程实现方法。 4、初步掌握知识库的组建方法。 5、加深理解推理机的算法原理并初步掌握其编程实现方法。 二、实验环境 1 、硬件环境:微机 2 、编程语言不限 三、实验原理 一个基于规则专家系统的完整结构示于图 1 。其中,知识库、推理机和工作存储器是构成专家系统的核心。系统的主要部分是知识库和推理引擎。知识库由谓词演算事实和有关讨论主题的规则构成。推理引擎由所有操纵知识库来演绎用户要求的信息的过程构成-如消解、前向链或反向链。用户接口可能包括某种自然语言处理系统,它允许用户用一个有限的自然语言形式与系统交互;也可能用带有菜单的图形接口界面。解释子系统分析被系统执行的推理结构,并把它解释给用户。 推理机 知识库 用户知识工程师 图1 一个基于规则专家系统的完整结构 开发界面 外部程序

三、实验内容 运用下列规则,设计并实现一个小型动物分类专家系统。 规则 1 : 如果:动物有毛发 则:该动物是哺乳动物 规则 2 : 如果:动物有奶 则:该单位是哺乳动物 规则 3 : 如果:该动物有羽毛 则:该动物是鸟 规则 4 : 如果:动物会飞,且会下蛋 则:该动物是鸟 规则 5 : 如果:动物吃肉 则:该动物是肉食动物 规则 6 : 如果:动物有犬齿,且有爪,且眼盯前方 则:该动物是食肉动物 规则 7 : 如果:动物是哺乳动物,且有蹄 则:该动物是有蹄动物 规则 8 : 如果:动物是哺乳动物,且是反刍动物 则:该动物是有蹄动物 规则 9 : 如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点 则:该动物是豹 规则 10 : 如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹 则:该动物是虎 规则 11 : 如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类 则:该动物是长颈鹿 规则 12 : 如果:动物有黑条纹,且是有蹄类动物 则:该动物是斑马 规则 13 : 如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞 则:该动物是鸵鸟 规则 14 : 如果:动物是鸟,且不会飞,且会游泳,且是黑色的 则:该动物是企鹅 规则 15 : 如果:动物是鸟,且善飞 则:该动物是信天翁 利用上述15 条规则,可区分7 种动物。 ( 2 )推理机设计:采用正向推理。

动物识别专家系统

动物识别专家系统 摘要:专家系统是具有人工智能和推理功能的知识系统。本系统用15条规则,可识别7种动物,用C编程实现,并对结果进行了分析。该系统把规则的前提与推理机构结合起来,规则的前提作为推理的情况,规则的结论作为推理过程的状态,推理出最终结果后,就能直接处理,不需要判断。 关键字:专家系统;动物;推理 Animal recognition expert system Abstract: Expert systems are knowledge systems with artificial intelligence and reasoning function. The system uses 15 rules, and can identify seven kinds of animals, using C programming, and the results were analyzed. The system is the premise and reasoning mechanism combining rules, rules for reasoning rule conclusion as the reasoning process , reasoning out the final result , can directly handle, without judge. Key words: Expert systems; Animals; Reasoning

1 引言 1.1 专家系统简介 专家系统是人工智能中最重要的也是最活跃的一个应用领域,它实现了人工智能从理论研究走向实际应用、从一般推理策略探讨转向运用专门知识的重大突破。专家系统是早期人工智能的一个重要分支,它可以看作是一类具有专门知识和经验的计算机智能程序系统,一般采用人工智能中的知识表示和知识推理技术来模拟通常由领域专家才能解决的复杂问题 [1]。 自第1个专家系统1965年问世以来,经过30多年的发展,专家系统在全世界得到广泛的应用,甚至渗透到政治、经济、军事以及人类生活的各个领域。[2] 1.2 专家系统结构 专家系统包括构造、知识库、推理机三部分内容。 其中构造包括:专家系统通常由人机交互界面、知识库、推理机、解释器、综合数据库、知识获取等6个部分构成。其中尤以知识库与推理机相互分离而别具特色。专家系统的体系结构随专家系统的类型、功能和规模的不同,而有所差异。知识库用来存放专家提供的知识。专家系统的问题求解过程是通过知识库中的知识来模拟专家的思维方式的,因此,知识库是专家系统质量是否优越的关键所在,即知识库中知识的质量和数量决定着专家系统的质量水平。一般来说,专家系统中的知识库与专家系统程序是相互独立的,用户可以通过改变、完善知识库中的知识内容来提高专家系统的性能。推理机针对当前问题的条件或已知信息,反复匹配知识库中的规则,获得新的结论,以得到问题求解结果。在这里,推理方式可以有正向和反向推理两种[3]。 专家系统的核心是知识库和推理机,其基本工作过程为:系统根据知识库中的知识和用户提供的事实进行推理,不断地由已知前提推出一些初步结论,并将这些初步结论作为中间结果存放在数据库中,然后将其作为新的已知事实进行下一步推理,往复循环,逐步逼近求解目标。在这个过程中,系统可以通过人机接口不断地与用户交流,向用户提问,或对用户提出的问题做出解释[4]。 下图为专家系统的基本构成。

实验一产生式系统

实验一产生式系统——动物识别系统 一、实习目的和意义 1、掌握人工智能的知识表示技术,能用产生式表示法表示知识; 2、掌握基于规则推理的基本方法; 3、掌握产生式系统的运行机制。 二、实习内容 参考教材规则库包含15条规则,开发一个专家系统可以识别老虎,金钱豹,斑马,长颈鹿,企鹅,鸵鸟等6种动物。 三、实习要求 1、本次实验语言MATLAB; 2、系统能通过正向推理得到正确的动物识别结果。 四、实习过程 1.实验原理 正向推理(事实驱动推理) 1)从初始已知事实出发,在知识库KB中找出当前可适用的知识,构成可适 用知识集KS; 2)按某种冲突消解策略,从KS中选出一条知识进行推理,并将推出的新事 实加入到数据库DB中,作为下一步推理的已知事实,再在KB中选取可 适用知识构成KS; 3)重复步骤二,直到求得问题的解,或KB中再无可适用的知识。 2.问题背景 根据课本P33的15调动物识别的专家知识,建立规则库。 3.算法设计 主要利用数组下标和元素的0,1值表示知识,规则,及相关标记。

4.Matlab实现 a.算法 函数名函数说明 learn function learn(arr_category, arr_feature)主函数checkRule function [arr_category,arr_feature,arr_rule,ifMore,mark]= checkRule(arr_category,arr_feature,arr_rule,ifMore,mark ) 规则符合检测 showCategory function showCategory( ) 类别选项打印函数 showFeature function showFeature() 特征选项打印函数 showResult function showResult(mark) 结果显示 b.测试 测试数据一 arr_category[5] 1 0 0 0 1 arr_feature[20] 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 测试数据二

简单动物识别系统的知识表示实验报告

简单动物识别系统的知识表示实验报告 一、实验目的: 1、理解和掌握产生式知识表示方法。 2、能够用选定的编程语言实现产生式系统的规则库。 二、实验内容和要求: 1、以动物识别系统的产生式规则为例。 2、用选定的编程语言建造规则库和综合数据库,并能对它们进行增 加、删除和修改操作。 三、实验步骤: 1、确定需要识别的动物及其属性: 本次实验的简单动物识别系统总共能识别7种动物,即:老虎、金钱豹、斑马、长颈鹿、企鹅、鸵鸟、信天翁。 2、建立识别七种动物识别系统的规则: 由于实验要求系统的规则库和综合数据库能够进行增加、删除和修改操作,因此可以采取逐步添加条件,压缩范围的方法进行识别,即:先跟据一些动物的共性进行大致分类,然后在添加约束条件,将范围缩小,直到能够识别出每一种不同的动物为止。这样,我们在需要添加识别其他动物的功能时,只需要添加那些动物的个性方面的信息即可,这样也可以简化系统的结构和内容。识别老虎、金钱豹、斑马、长颈鹿、企鹅、鸵鸟、信天翁这7种动物的简单动物识别系统规则一共可以写成以下15条: Rule1:IF 该动物有毛发 THEN 该动物是哺乳动物

Rule2:IF 该动物有奶 THEN 该动物是哺乳动物 Rule3:IF 该动物有羽毛 THEN 该动物是鸟 Rule4:IF 该动物会飞 AND 会下蛋 THEN该动物是鸟 Rule5:IF 该动物吃肉 THEN 该动物是肉食动物 Rule6:IF 该动物有犬齿 AND 有爪 AND 眼盯前方 THEN该动物是肉食动物 Rule7:IF 该动物是哺乳动物 AND 有蹄 THEN 该动物是有蹄类动物Rule8:IF 该动物是哺乳动物 AND 是嚼反刍动物 THEN 该动物是有蹄类动物 Rule9:IF 该动物是哺乳动物 AND 是肉食动物 AND 是黄褐色AND 身上有暗斑点THEN该动物是金钱豹 Rule10:IF 该动物是哺乳动物 AND 是肉食动物 AND 是黄褐色AND 身上有黑色条纹 THEN 该动物是老虎 Rule11:IF 该动物是有蹄类动物 AND 有长脖子 AND 有长腿 AND 身上有暗斑点 THEN 该动物是有长颈鹿 Rule12:IF 该动物是有蹄类动物 AND 身上有黑色条纹 THEN 该动物是斑马 Rule13:IF 该动物是鸟 AND 有长脖子 AND 有长腿 AND不会飞 THEN 该动物是鸵鸟 Rule14:IF 该动物是鸟 AND 会游泳 AND 有黑白二色 AND不会飞THEN 该动物是企鹅 Rule15:IF 该动物是鸟 AND 善飞 THEN 该动物是信天翁

基于规则的动物识别系统

实验报告 信工学院 系:智能科学与技术班级:08级6班姓名:于欢学号:1081000230 课程名称:人工智能原理及其应用实验 实验题目:基于规则的动物识别系统 实验目的: 1.熟悉产生式的特点,基本结构和设计思想 2.掌握基于规则推理的基本过程和方法 3.学会用高级程序设计语言开发基于规则的动物识别系统 实验要求: 1.根据动物识别系统的规则建立合理的数据结构或数据库来表示知识。 2.利用所选开发语言来建立推理过程。 3.利用控制台或者图形界面给出合理的交互接口,实现基本演示功能。 4.提交实验报告和源程序,总结实验结论和经验教训。 实验原理: 1.基于规则产生式系统结构: 基于规则的产生式系统一般由规则库(知识库)、综合数据库和推理引擎(推理机)三部分组成,规则库中它的基本组成框架如下图1所示。 知识库由谓词演算事实和有关讨论主题的规则构成,综合库又称为上下文,用来暂时存储推理过程中的结论和数据。推理机是用规则进行推理的过程和行为,。知识采集系统是领域专家把相关领域的知识表示成一定的形式,并输入到知识库中。解释系统通过用户输入的条件来分析被系统执行的推理结构,并将专家知识以易理解的方式并把知识解释给用户。 图1 规则产生式系统的基本结构 2. 简单动物识别产生式系统结构: ⑴知识库ANIMAL的知识库非常小,仅仅包含16条规则(一 般说来,一个产生式系统的知识库应包含≥几百条规则); ⑵解空间很小,仅仅包含8个解,或8个最高假设(在一个特定 的动物园里,共有虎、豹、长颈鹿、斑马、鸵鸟、企鹅和信天 翁、八哥等8种动物); ⑶初始事实集合很小,仅仅包含21个事实,如图中的F1至F21;

动物识别系统实验报告

人工智能实验报告二 班级:XXXX 姓名:XXXX 学号:XXXXX 一.实验目的 1. 理解并掌握基于规则系统的表示与推理。 2. 学会编写小型的产生式系统,理解正向推理和反向推理的过 3. 程以及两者的差别。 4. 学会设计简单的人机交互界面。 二.实验预习内容及实验环境: 1. 了解动物识别系统问题; 2. 产生式系统的组成部分,正向推理,逆向推理的算法和产生式系统的类型。 三、实验内容和步骤: 1.内容:结合第五章内容,以动物识别系统(或货物袋装系统)为例,实现基于规则的系统构造实验。2.要求: 1>结果显示要求 (1)有若干选择动物特征的选择列表; (2)表现判断动物时,使用了哪些规则;

(3)表现数据库的变化;(正向推理中表现每使用一次规则后,产生新事实。反向推理中表现新的目标事实有哪些需要证明,哪些已经得到证实); (4)显示规则的调用次序; (5)显示最后的结果,包含动物能识别出来和动物不能识别出来两种情况。

(6)至少检查两个例子实现正向推理和反向推理的区别;老虎的例子如上所示,以下为金钱豹的例子: 正向推理: 反向推理:

2>指出综合数据库和规则库分别使用哪些函数实现 的? 综合数据库和规则库均采用数组完成。其中的综合数据库为一个string类型的数组,内容为事实的名称字符串,下标则为该事实的序号。数组长度为33,表示共有33个事实(最后7个为动物名称)。代码如下: string facts[factnum]={"有爪","有犬齿","有奶","有毛发","目视前方","吃肉","有蹄","有羽毛","会飞","生蛋","不会飞","黑白色","会游泳","善飞","不怕风浪","长腿","长脖子","有暗斑点","白色","黑色斑点","黑色条纹","黄褐色","食肉动物","鸟","哺乳动物","有蹄动物","老虎","金钱豹","长颈鹿","斑马","鸵鸟","企鹅","海燕"}; 规则库为一个结构体数组。该结构体由一个int型数组(表示前提条件的序号集合)和一个int数据(表示由此前提推出的结果)表示。该数组长度为14,表明有14条规则。该规则库在建立时有一个内在要求:前提的规则(子规则)的序号必须在父规则之前。(便于正向推理的实现)代码如下: struct rule { int con[10]; int res; }; Rule rules[rulenum]={{{2,-1},24},{{3,-1},24},{{7,-1},23},{{8,9,-1},23},{{24,0,1,4,-1},22 }, {{24,5,-1},22},{{24,6,-1},25},{{22,21,20,-1},26},{{22,21,19,-1},27},{{25,15,16,21,17,-1},28},{{25,18,20,-1},29},{{23,10,15,16,11,-1},30},{{23,10,12,11,-1},31},{{23,13,14,-1},32}}; 3>规则库的匹配算法是什么?如何选用可用规则集中 的规则?分别使用哪些函数实现的? 用一个bool型的与数据库数组等长的enfact数组表示各事实是否已经满足(或已经推出)。要匹配一个规则的时候,只需查

相关文档
最新文档