基于规则的动物识别系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验内容:
通过用户输入的初始化事实进行规则的匹配,得出具体的动物名称。
思想过程:首先用户输入事实库,判断事实库中如果包含动物,则成功推出,否则匹配规则库中的每一条规则,将产生的新事实加入到事实库,直到匹配出动物为止,如果规则库用完,仍然没有识别具体的动物,则提示用户补充事实,如果用户没有补充的事实,失败推出,否则将补充的事实加入事实库,重新进行匹配的过程。
知识库由谓词演算事实和有关讨论主题的规则构成,综合库又称为上下文,用来暂时存储推理过程中的结论和数据。推理机是用规则进行推理的过程和行为,。知识采集系统是领域专家把相关领域的知识表示成一定的形式,并输入到知识库中。解释系统通过用户输入的条件来分析被系统执行的推理结构,并将专家知识以易理解的方式并把知识解释给用户。
String strAnimalsItems="";
for(int i=(int)(this.lines-1);i>=0;i--)
{
String Precondition=array[i][1];
String Conclusion=array[i][2];
if(strEvidenceItems.indexOf(Conclusion)==-1)//如果strEvidenceItems中没有出现Conclusion
System.out.println(j);
String feature=fearureleft.substring(0, j);//截取字符串(截取第i条规则中的前件)
int m=feature.length();//m为第i条规则中前件的长度
int k=facts.indexOf(feature);//在facts中字符串feature出现的位置
图1规则产生式系统的基本结构
2.简单动物识别产生式系统结构:
⑴知识库ANIMAL的知识库非常小,仅仅包含16条规则(一
般说来,一个产生式系统的知识库应包含≥几百条规则);
⑵解空间很小,仅仅包含8个解,或8个最高假设(在一个特定
的动物园里,共有虎、豹、长颈鹿、斑马、鸵鸟、企鹅和信天
翁、八哥等8种动物);
{
String factsArray[]=new String[20];
boolean flags=false;
factsArray=facts.split(" ");
int length=factsArray.length;
// System.out.println(length);
for(int i=0;i<length;i++)
{wk.baidu.com
strAnimalsItems+=Conclusion;
strEvidenceItems+=Precondition;
}
else
{
strEvidenceItems+=Precondition;
}
}
return strAnimalsItems;
}
}
实验分析:
考虑实际情况,当用户给出的事实不足以推出结果时,系统将会给出提示:"没有找到具体动物,想要继续吗(1代表继续,2代表不继续)?",如果用户输入1,系统将提示用户继续输入事实比运行程序,如果用户输入2,系统将结束运行程序,并返回给用户“Test(未找到结果)”。
public static String facts;//事实
public static void main(String[] args) throws IOException
{
boolean i;
int response;
String strResult;
Recognition myrecognition=new Recognition ();
facts+=br.readLine();
strResult=myrecognition.AnimalsRecognition(facts);
}
else
{
break;
}
}
System.out.print(strResult);
}
}
}
/ / / / / / / / / / / / / / / / / / / / / / / / / / / /
boolean flags=false;
for(int i=0;i<length;)
{
String fearureleft=precondition.substring(i,length);//截取字符串(截取第i条规则)
System.out.println(fearureleft);
int j=fearureleft.indexOf("|");//在字符串fearureleft中“|”出现的位置
⑶初始事实集合很小,仅仅包含21个事实,如图中的F1至F21;
⑷数据(即事实、证据、断言),知识(即浅层知识,规则)和推
理都是精确的,即确定性的;
⑸知识库。
实验步骤:
1.研习产生式的结构和确定性推理方法详解相关内容,熟悉基本的理论和思想方法。
2.理解原有程序的基本结构,并在其基础上搭建自己的推理过程,实现基于规则的动物识别系统。
package animalsrecognitionjava;
public class Recognition {
private String RuleName[]=new String[50];
private String Precondition[]=new String[50];
private String Conclusion[]=new String[50];
String strResult="Test";
for(int j=0;j<this.RuleNumbers;j++)
{
String qianti=this.Precondition[j];
String jielun=this.Conclusion[j];
boolean result=this.Precondition_match_Facts(qianti, strFacts);
实
信工学院
系:智能科学与技术班级:08级6班姓名:于欢学号:1081000230
课程名称:人工智能原理及其应用实验
实验题目:基于规则的动物识别系统
实验目的:
1.熟悉产生式的特点,基本结构和设计思想
2.掌握基于规则推理的基本过程和方法
3.学会用高级程序设计语言开发基于规则的动物识别系统
实验要求:
1.根据动物识别系统的规则建立合理的数据结构或数据库来表示知识。
{
if((this.AnimalsItems.indexOf(facts))!=-1)//如果this.AnimalsItems中没有facts
{
flags=true;
}
}
return flags;
}
public String AnimalsRecognition(String strFacts)
{
//学生添加代码,实现识别的过程。
i=myrecognition.CheckAnimals(facts);
if(i==true){ System.out.print(facts);}
else
{
strResult=myrecognition.AnimalsRecognition(facts);
while(strResult=="Test")
源程序代码:
package animalsrecognitionjava;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public classMain{
}
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public String GetAnimalsItems()
{
String strEvidenceItems="";
String array[][]=new String[50][3];
FileReader fr=null;
BufferedReader br=null;
File file1=null;
int lines=0;
Rules()
{
try
{
file1=new File("G:\\人工智能\\实验\\AnimalsRecognition(java学生)\\AnimalsRecognition\\Rule.txt");
private int RuleNumbers=0;
private String AnimalsItems="";
public String Facts="";
Recognition()
{
Rules myrule=new Rules();
RuleNumbers=myrule.lines;
AnimalsItems=myrule.GetAnimalsItems();
{
System.out.print("没有找到具体动物,想要继续吗(1代表继续,2代表不继续)?");
Scanner in=new Scanner(System.in);
response=in.nextInt();
if(response==1)
{
System.out.println("请继续输入事实:");
2.利用所选开发语言来建立推理过程。
3.利用控制台或者图形界面给出合理的交互接口,实现基本演示功能。
4.提交实验报告和源程序,总结实验结论和经验教训。
实验原理:
1.基于规则产生式系统结构:
基于规则的产生式系统一般由规则库(知识库)、综合数据库和推理引擎(推理机)三部分组成,规则库中它的基本组成框架如下图1所示。
System.out.println("请输入你的初始化事实:");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
facts=br.readLine();
//获取用户输入的一行信息,故事实之间用逗号或其他符号隔开
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Rules {
for(int i=0;i<RuleNumbers;i++)
{
RuleName[i]=myrule.array[i][0];
Precondition[i]=myrule.array[i][1];
Conclusion[i]=myrule.array[i][2];
}
}
public boolean CheckAnimals(String facts)
fr=new FileReader(file1);
br=new BufferedReader(fr);
String str="";
while ((str=br.readLine())!=null)
{
lines++;
array[lines-1]=str.split(" ");//分隔符
System.out.println(str);
strResult=jielun;
}
else
{
}
}
this.Facts=strFacts;
return strResult;
}
public boolean Precondition_match_Facts(String precondition,String facts )//前件和事实匹配
{
int length=precondition.length();
if(k!=-1)//如果在facts中没有出现字符串feature
{
flags=true;
i+=m+1;
}
else
{
flags=false;
break;
}
}
return flags;
}
}
/ / / / / / / / / / / / / / / / / / / / / / / / / / / /
package animalsrecognitionjava;
if(result)
{
if(strFacts.indexOf(jielun)==-1)
{
strFacts+=jielun;
}
else
{
}
System.out.println("匹配了规则"+this.RuleName[j]);
System.out.println("事实库更新为"+strFacts);
通过用户输入的初始化事实进行规则的匹配,得出具体的动物名称。
思想过程:首先用户输入事实库,判断事实库中如果包含动物,则成功推出,否则匹配规则库中的每一条规则,将产生的新事实加入到事实库,直到匹配出动物为止,如果规则库用完,仍然没有识别具体的动物,则提示用户补充事实,如果用户没有补充的事实,失败推出,否则将补充的事实加入事实库,重新进行匹配的过程。
知识库由谓词演算事实和有关讨论主题的规则构成,综合库又称为上下文,用来暂时存储推理过程中的结论和数据。推理机是用规则进行推理的过程和行为,。知识采集系统是领域专家把相关领域的知识表示成一定的形式,并输入到知识库中。解释系统通过用户输入的条件来分析被系统执行的推理结构,并将专家知识以易理解的方式并把知识解释给用户。
String strAnimalsItems="";
for(int i=(int)(this.lines-1);i>=0;i--)
{
String Precondition=array[i][1];
String Conclusion=array[i][2];
if(strEvidenceItems.indexOf(Conclusion)==-1)//如果strEvidenceItems中没有出现Conclusion
System.out.println(j);
String feature=fearureleft.substring(0, j);//截取字符串(截取第i条规则中的前件)
int m=feature.length();//m为第i条规则中前件的长度
int k=facts.indexOf(feature);//在facts中字符串feature出现的位置
图1规则产生式系统的基本结构
2.简单动物识别产生式系统结构:
⑴知识库ANIMAL的知识库非常小,仅仅包含16条规则(一
般说来,一个产生式系统的知识库应包含≥几百条规则);
⑵解空间很小,仅仅包含8个解,或8个最高假设(在一个特定
的动物园里,共有虎、豹、长颈鹿、斑马、鸵鸟、企鹅和信天
翁、八哥等8种动物);
{
String factsArray[]=new String[20];
boolean flags=false;
factsArray=facts.split(" ");
int length=factsArray.length;
// System.out.println(length);
for(int i=0;i<length;i++)
{wk.baidu.com
strAnimalsItems+=Conclusion;
strEvidenceItems+=Precondition;
}
else
{
strEvidenceItems+=Precondition;
}
}
return strAnimalsItems;
}
}
实验分析:
考虑实际情况,当用户给出的事实不足以推出结果时,系统将会给出提示:"没有找到具体动物,想要继续吗(1代表继续,2代表不继续)?",如果用户输入1,系统将提示用户继续输入事实比运行程序,如果用户输入2,系统将结束运行程序,并返回给用户“Test(未找到结果)”。
public static String facts;//事实
public static void main(String[] args) throws IOException
{
boolean i;
int response;
String strResult;
Recognition myrecognition=new Recognition ();
facts+=br.readLine();
strResult=myrecognition.AnimalsRecognition(facts);
}
else
{
break;
}
}
System.out.print(strResult);
}
}
}
/ / / / / / / / / / / / / / / / / / / / / / / / / / / /
boolean flags=false;
for(int i=0;i<length;)
{
String fearureleft=precondition.substring(i,length);//截取字符串(截取第i条规则)
System.out.println(fearureleft);
int j=fearureleft.indexOf("|");//在字符串fearureleft中“|”出现的位置
⑶初始事实集合很小,仅仅包含21个事实,如图中的F1至F21;
⑷数据(即事实、证据、断言),知识(即浅层知识,规则)和推
理都是精确的,即确定性的;
⑸知识库。
实验步骤:
1.研习产生式的结构和确定性推理方法详解相关内容,熟悉基本的理论和思想方法。
2.理解原有程序的基本结构,并在其基础上搭建自己的推理过程,实现基于规则的动物识别系统。
package animalsrecognitionjava;
public class Recognition {
private String RuleName[]=new String[50];
private String Precondition[]=new String[50];
private String Conclusion[]=new String[50];
String strResult="Test";
for(int j=0;j<this.RuleNumbers;j++)
{
String qianti=this.Precondition[j];
String jielun=this.Conclusion[j];
boolean result=this.Precondition_match_Facts(qianti, strFacts);
实
信工学院
系:智能科学与技术班级:08级6班姓名:于欢学号:1081000230
课程名称:人工智能原理及其应用实验
实验题目:基于规则的动物识别系统
实验目的:
1.熟悉产生式的特点,基本结构和设计思想
2.掌握基于规则推理的基本过程和方法
3.学会用高级程序设计语言开发基于规则的动物识别系统
实验要求:
1.根据动物识别系统的规则建立合理的数据结构或数据库来表示知识。
{
if((this.AnimalsItems.indexOf(facts))!=-1)//如果this.AnimalsItems中没有facts
{
flags=true;
}
}
return flags;
}
public String AnimalsRecognition(String strFacts)
{
//学生添加代码,实现识别的过程。
i=myrecognition.CheckAnimals(facts);
if(i==true){ System.out.print(facts);}
else
{
strResult=myrecognition.AnimalsRecognition(facts);
while(strResult=="Test")
源程序代码:
package animalsrecognitionjava;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public classMain{
}
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public String GetAnimalsItems()
{
String strEvidenceItems="";
String array[][]=new String[50][3];
FileReader fr=null;
BufferedReader br=null;
File file1=null;
int lines=0;
Rules()
{
try
{
file1=new File("G:\\人工智能\\实验\\AnimalsRecognition(java学生)\\AnimalsRecognition\\Rule.txt");
private int RuleNumbers=0;
private String AnimalsItems="";
public String Facts="";
Recognition()
{
Rules myrule=new Rules();
RuleNumbers=myrule.lines;
AnimalsItems=myrule.GetAnimalsItems();
{
System.out.print("没有找到具体动物,想要继续吗(1代表继续,2代表不继续)?");
Scanner in=new Scanner(System.in);
response=in.nextInt();
if(response==1)
{
System.out.println("请继续输入事实:");
2.利用所选开发语言来建立推理过程。
3.利用控制台或者图形界面给出合理的交互接口,实现基本演示功能。
4.提交实验报告和源程序,总结实验结论和经验教训。
实验原理:
1.基于规则产生式系统结构:
基于规则的产生式系统一般由规则库(知识库)、综合数据库和推理引擎(推理机)三部分组成,规则库中它的基本组成框架如下图1所示。
System.out.println("请输入你的初始化事实:");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
facts=br.readLine();
//获取用户输入的一行信息,故事实之间用逗号或其他符号隔开
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Rules {
for(int i=0;i<RuleNumbers;i++)
{
RuleName[i]=myrule.array[i][0];
Precondition[i]=myrule.array[i][1];
Conclusion[i]=myrule.array[i][2];
}
}
public boolean CheckAnimals(String facts)
fr=new FileReader(file1);
br=new BufferedReader(fr);
String str="";
while ((str=br.readLine())!=null)
{
lines++;
array[lines-1]=str.split(" ");//分隔符
System.out.println(str);
strResult=jielun;
}
else
{
}
}
this.Facts=strFacts;
return strResult;
}
public boolean Precondition_match_Facts(String precondition,String facts )//前件和事实匹配
{
int length=precondition.length();
if(k!=-1)//如果在facts中没有出现字符串feature
{
flags=true;
i+=m+1;
}
else
{
flags=false;
break;
}
}
return flags;
}
}
/ / / / / / / / / / / / / / / / / / / / / / / / / / / /
package animalsrecognitionjava;
if(result)
{
if(strFacts.indexOf(jielun)==-1)
{
strFacts+=jielun;
}
else
{
}
System.out.println("匹配了规则"+this.RuleName[j]);
System.out.println("事实库更新为"+strFacts);