人工智能动物识别系统 实验报告
动物识别实训报告
一、实训背景随着科技的发展,动物识别技术在农业、野生动物保护、生物多样性研究等领域发挥着越来越重要的作用。
为了提高学生对动物识别技术的理解和应用能力,我们开展了为期两周的动物识别实训课程。
本次实训旨在通过理论学习和实践操作,使学生掌握动物识别的基本原理、方法和技巧,提高学生在实际工作中应用动物识别技术的能力。
二、实训目标1. 理解动物识别的基本原理和常用方法。
2. 掌握动物识别软件的使用技巧。
3. 能够独立识别常见的动物种类。
4. 培养学生的团队协作能力和实践操作能力。
三、实训内容1. 理论学习(1)动物识别的基本原理:介绍了动物识别的背景、意义和发展趋势,讲解了动物识别的基本原理,如形态学识别、分子生物学识别、行为学识别等。
(2)动物识别方法:介绍了常见的动物识别方法,如图像识别、声音识别、气味识别等,并分析了各种方法的优缺点。
(3)动物识别软件:介绍了常用的动物识别软件,如Google Vision API、Microsoft Azure Computer Vision API、百度AI动物智能识别系统等,并讲解了软件的使用方法。
2. 实践操作(1)图像识别:利用动物识别软件对图片进行识别,识别内容包括动物种类、颜色、姿态等。
(2)声音识别:通过录制动物声音,利用动物识别软件进行识别,识别内容包括动物种类、叫声特点等。
(3)气味识别:利用动物识别设备,对动物的气味进行分析,识别动物种类。
四、实训过程1. 第一周:理论学习(1)组织学生进行理论学习,讲解动物识别的基本原理、方法和常用软件。
(2)安排学生进行动物识别软件的学习和操作,要求学生掌握软件的基本功能和使用方法。
2. 第二周:实践操作(1)分组进行实践操作,每组选择一种识别方法进行实践。
(2)教师对学生的实践过程进行指导和评价,帮助学生解决操作过程中遇到的问题。
(3)每组提交实践报告,总结实训过程中的收获和体会。
五、实训成果1. 学生掌握了动物识别的基本原理和方法。
《人工智能》课程设计报告--动物识别系统
计算机科学与技术学院《人工智能》课程设计报告设计题目:动物识别系统设计人员:学号:学号:学号:学号:学号:学号:指导教师:2015年7月目录目录 (1)摘要 (3)Abstract (4)一、专家系统基本知识 (5)1.1专家系统实际应用 (5)1.2专家系统的开发 (5)二、设计基本思路 (5)2.1知识库 (5)2.2.1知识库作用 (5)2.1.2 知识库建立 (6)2.1.3 知识库获取 (7)2.2 数据库 (7)2.2.1数据库作用 (7)2.2.2数据库建立 (7)三、推理机构 (8)3.1推理机介绍 (8)3.1.1 推理机作用原理 (8)3.1.2推理网络 (8)3.2 正向推理 (9)3.2.1 正向推理基本思想 (9)3.2.2 正向推理示意图 (10)3.2.3 正向推理机所要具有功能 (10)3.3反向推理 (11)3.3.1反向推理基本思想 (11)3.3.2 反向推理示意图 (11)3.3.3反向推理机所要具有功能 (11)四、实例系统实现 (12)4.1系统介绍 (12)4.2基本思路 (12)4.3程序主要代码 (12)4.4系统执行结果 (13)五、结论 (13)参考文献: (14)附录一 (15)附录二 (24)摘要动物识别专家系统是将人的思维过程转化为计算机语言的逻辑过程,其关键在于知识和信息的表示,智能推理或求解的基础——知识库的创建和管理,以及基于某种知识和信息表示的智能推理或求解过程。
使动物识别具有一定的智能性、良好的交互性和可视化效果。
本论文也主要以识别七种动物的设计思路和程序为例所写的。
动物识别专家系统是人工智能中一个比较基础的规则演绎系统,是人工智能领域里的一个大模块的专家系统的一个特定例子。
是集知识表与推理为一体的,以规则为基础对用户提供的事实进行向前、逆向或双向的推理得出结论的一种产生式系统。
如果通过良好的分析、精确地设计和细致的规划会创设出高度灵活和快速有效的识别系统,再加上良好的界面供用户添加新的事实和规则,反馈详细的错误或信息的话,那就是一个相当完整的识别系统了。
人工智能动物识别实验报告
一.实验目的:1.熟悉并掌握如何使用SQL SERVER 20002.熟悉JAVA语言编程3.熟悉讲JAVA与数据库结合进行数据库编程4.理解产生式表示法5.熟悉产生式系统的基本过程二.实验环境及工具SQL SERVER 2000,ECLIPSE 7.0,PC机一台,Tomcat 6.0三.实验步骤及方法1.产生式规则分析通过分析书上的15条规则,我们可以得到该图为动物识别系统的部分推理网络在该图中,最上层的节点称为“结论”,中间节点称为“中间假设”,终结点称为“事实”。
其中,每个“结论”都是问题的一个目标,所有的“结论”就构成了本问题的一个目标集合。
经过分析可以本问题的事实有:有毛发,有奶等20个事实;中间假设有:该动物是哺乳动物,鸟,肉食动物和有蹄类动物;目标集合是:金钱豹,虎,长颈鹿,斑马,鸵鸟,企鹅和信天翁。
2.数据库设计根据第一步的分析,我们可以建立一个animal数据库,其中存放两张表,一张称为facts的事实表。
另一种称为factRules的规则表3.程序设计数据库及表已经建立好之后,我们就可以设计本系统的程序了,经过分析,我们得到如下的流程图4.使用Eclipse编程实现AnimalAction的主要源代码为:import com.myhomework.animal.OpenDb;public class AnimalAction extends Action { static OpenDb db = null;public static OpenDb getDB() {if (db == null) {db = new OpenDb();}return db;}public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception {do {do {i++;String sql4 = "select * from factRules where rulesNo=" + "'i'";ResultSet rs = getDB().executeQuery(sql4);String sql8 = "select count(*) total from newFacts";ResultSet rsr = getDB().executeQuery(sql8);if (total < count) {return mapping.findForward("err2");}isNew = IsInNewFcats(obj1);} while (!isNew);String sql6 = "select * from factRules where rulesNo=" + "'i'";String cName = "att5";ResultSet rss = getDB().executeQuery(sql6);int m=0;try{isIn = (m > 24 && m < 32);if (isIn) {String sql9 = "select factName from facts where factNo="+ "'m'";ResultSet rss2 = getDB().executeQuery(sql9);request.setAttribute("reslut", factName);return mapping.findForward("succ");}String sql7 = "insert into newFacts values(" + "'m'" + ")";getDB().executeUpdate(sql7);} while (!isIn && i<16);return mapping.findForward("err1");}}Struts-config.xml的主要配置为:<form-beans><form-bean name="animalactionform"type="com.myhomework.animal.AnimalActionForm"> </form-bean></form-beans><action-mappings><action path="/animal"type="com.myhomework.animal.AnimalAction"scope="request"name="animalactionform"><forward name="succ"path="/success.jsp"/><forward name="err1"path="/error1.jsp"/><forward name="err2"path="/error2.jsp"/></action>四.实验结果1.在浏览器上输入http://localhost:8080/anistruts,显示该系统的首页为:2.单击“产生式规则”,即跳转到产生式规则表页面为:交”按钮,则系统成功识别的结果4.如果只选中“有毛发”,然后点击“提交”,条件不足,无法识别的结果5.条件错误,无法识别的结果五.实验总结通过本实验,我基本熟悉了SQL Server2000的基本使用,并理解了产生式表示法和产生式系统的基本过程;也可以熟练的使用Eclipse进行数据库编程。
动物识别系统实验报告
stringFindMaxNumber ="select max(动物序号) from动物库";
SqlCommandcmd2 =newSqlCommand( FindMaxNumber ,con);
1.1功能需求
1.1.1动物识别正向推理
正向推理是从已知事实出发,通过规则库求的结论,也称为自底向上,或称为数据驱动方式。
正向推理过程的具体步骤是:
(1)读入事实集到工作存储器。
(2)取出某条规则,将规则的全部前件与工作存储器中的所有事实进行比较。如果匹配成功,则所得结果显示到屏幕上,转向(3);否则,直接转向(3)。
动物识别系统设计主体框架:本系统只用了一个页面实现,界面使用上下结构的框架设计,当用户进入系统的时候,打开Default.aspx,该页面分为上下两个部分,上面的部分是用于根据问题输入动物特征,下面的部分是新规则的加入功能部分,也是用户进行添加新规则的页面,这好似一个导航页面,用户可以更具自己的选择进行的操作,由上至下进入不同的功能部分。各个功能模块的设计:
staticint[] a =newint[7];
SqlConnectioncon =newSqlConnection("Server = PC-11; user id = sa;password = ;Database = animal;");
protectedvoidPage_Load(objectsender,EventArgse)
YesOption.Checked =false;
}
protectedvoidNoOption_CheckedChanged(objectsender,EventArgse)
{
a[Convert.ToInt32(Questionselected.SelectedValue)] = 0;
人工智能实验报告_3
clauses run:-animal_is(X),!,write("\nyour animal may be a(n) ",X), nl,nl,clear_facts. run:-write("\n unable to determine what "),
write("\n your animal is \n\n"), clear_facts. positive(X,Y):-xpositive(X,Y),!. positive(X,Y):-not(xnegative(X,Y)),!,ask(X,Y). negative(X,Y):-xnegative(X,Y),!. negative(X,Y):-not(xpositive(X,Y)),!,ask(X,Y). ask(X,Y):-write(X," is ",Y,"\n" ),readln(Reply),
animal_is(penguin):-it_is(bird), negative(does,fly), positive(does,swim), positive(has,black_and_white_color).
animal_is(albatross):-it_is(bird),positive(does,fly_well). it_is(mammal):-positive(has,hair). it_is(mammal):-positive(does,give_milk). it_is(bird):-positive(has,feather). it_is(bird):-positive(does,fly),positive(does,lay_eggs). it_is(carnivore):-positive(does,eat_eat). it_is(carnivore):-positive(has,pointed_teeth),
动物视觉认知实验报告(3篇)
第1篇一、实验背景随着科学技术的不断发展,动物认知研究越来越受到重视。
其中,动物视觉认知作为动物认知研究的重要组成部分,对于揭示动物感知世界的方式和机制具有重要意义。
本研究旨在通过动物视觉认知实验,探讨动物视觉系统的工作原理和认知能力。
二、实验目的1. 了解动物视觉系统的工作原理和认知能力;2. 掌握动物视觉认知实验的基本方法和技术;3. 分析动物视觉认知实验数据,得出有意义的结论。
三、实验材料与设备1. 实验动物:小鼠(雄性、雌性各5只,年龄为1个月大);2. 实验器材:视觉水迷宫装置、计算机、摄像头、数据分析软件;3. 实验材料:光栅、水槽、平台、光源等。
四、实验方法1. 实验动物适应:将小鼠置于实验室环境中适应1周,使其熟悉实验环境和实验人员;2. 实验动物分组:将小鼠随机分为实验组和对照组,每组5只;3. 实验训练:对实验组动物进行视觉水迷宫训练,对照组动物进行普通水迷宫训练;4. 视觉水迷宫训练:将实验组动物置于视觉水迷宫装置中,观察其寻找隐藏平台的视觉能力;5. 数据收集:记录实验动物在视觉水迷宫中的行为数据,包括游泳时间、游泳路径、触底次数等;6. 数据分析:运用统计学方法对实验数据进行分析,比较实验组和对照组动物在视觉水迷宫中的表现差异。
五、实验结果1. 实验组动物在视觉水迷宫中的游泳时间明显短于对照组,表明实验组动物在视觉水迷宫中的表现更好;2. 实验组动物在视觉水迷宫中的游泳路径更加直接,触底次数更少,说明实验组动物在视觉水迷宫中的视觉能力更强;3. 实验结果提示,视觉水迷宫训练能够有效提高动物视觉认知能力。
六、讨论1. 本实验结果表明,视觉水迷宫训练能够有效提高动物视觉认知能力,为动物视觉认知研究提供了新的思路和方法;2. 视觉水迷宫实验作为一种动物视觉认知研究方法,具有较高的可操作性和重复性,有助于深入探讨动物视觉系统的工作原理和认知能力;3. 在实验过程中,动物视觉认知能力受到多种因素的影响,如动物种类、年龄、性别等,需要在实验设计和数据分析过程中充分考虑这些因素。
动物识别专家系统实验报告
题目:动物识别专家系统一.实验目的理解和掌握产生式只是表示方法,能够用选定的编程语言实现产生式系统的规则库。
二.实验内容(1)以动物识别系统的产生式规则为例。
(2)用选定的编程语言建造规则库和综合数据库,并能对它们进行增加、删除和修改操作。
三.实验原理动物识别专家系统是流行的专家系统实验模型,它用产生式r来表示知识,共15条r、可以识别七种动物,这些r既少又简单,可以改造他们,也可以加进新的r,还可以用来识别其他东西的新r来取代这些r。
动物识别15条r: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该动物是信天翁四.推理树部分推理树如下:五.代码程序是用java编写的规则对象代码:public class Rule {private ArrayList<Integer> premise = new ArrayList<Integer>();private int result;public void addPremise(int item) { premise.add(item);}public int size() {return premise.size();}public int getPremiseAt(int index) {return premise.get(index);}public void setResult(int result) {this.result = result;}public int getResult() {return result;}}规则库代码如下:public class RuleBase {private ArrayList<Rule> rules= new ArrayList<Rule>();public int size() {return rules.size();}public RuleBase() {init();}public void addRule(Rule rule) {rules.add(rule);}public Rule getRuleAt(int index) {return rules.get(index);}public void init() {Rule rule1 = new Rule();rule1.addPremise(0); rule1.setResult(20);rules.add(rule1);Rule rule2 = new Rule();rule2.addPremise(1); rule2.setResult(20);rules.add(rule2);Rule rule3 = new Rule();rule3.addPremise(2); rule3.setResult(21);rules.add(rule3);Rule rule4 = new Rule();rule4.addPremise(3); rule4.addPremise(13); rule4.setResult(21);rules.add(rule4);Rule rule5 = new Rule();rule5.addPremise(19); rule5.setResult(22);rules.add(rule5);Rule rule6 = new Rule();rule6.addPremise(4); rule6.addPremise(15); rule6.addPremise(12); rule6.setResult(22);rules.add(rule6);Rule rule7 = new Rule();rule7.addPremise(20); rule7.addPremise(9); rule7.setResult(23);rules.add(rule7);Rule rule8 = new Rule();rule8.addPremise(20); rule8.addPremise(18); rule8.setResult(23);rules.add(rule8);Rule rule9 = new Rule();rule9.addPremise(20); rule9.addPremise(22); rule9.addPremise(14); rule9.addPremise(11);rule9.setResult(24);rules.add(rule9);Rule rule10 = new Rule();rule10.addPremise(20); rule10.addPremise(22); rule10.addPremise(11); rule10.addPremise(5);rule10.setResult(25);rules.add(rule10);Rule rule11 = new Rule();rule11.addPremise(23); rule11.addPremise(6); rule11.addPremise(7); rule11.addPremise(14);rule11.setResult(30);Rule rule12 = new Rule();rule12.addPremise(23); rule12.addPremise(5); rule12.setResult(26);rules.add(rule12);Rule rule13 = new Rule();rule13.addPremise(21); rule13.addPremise(6); rule13.addPremise(17); rule13.addPremise(7);rule13.setResult(27);rules.add(rule13);Rule rule14 = new Rule();rule14.addPremise(21); rule14.addPremise(10); rule14.addPremise(17); rule14.addPremise(8);rule14.setResult(28);rules.add(rule14);Rule rule15 = new Rule();rule15.addPremise(21); rule15.addPremise(16); rule15.setResult(29);}}综合数据库代码如下:public class Database {ArrayList<Integer> db = new ArrayList<Integer>();public void addFact(int item) {db.add(item);}public boolean contains(int item) {return db.contains(item);}}控制系统代码如下:public class Machine {public static String inference(Database db) { RuleBase ruleBase = new RuleBase();int result = 0;for (int i = 0; i < ruleBase.size(); i++) { int size = ruleBase.getRuleAt(i).size();boolean flag = true;for (int j = 0; j < size; j++) {if(!db.contains(ruleBase.getRuleAt(i).getPremiseAt(j))) { flag = false;break;}}if (flag) {int fact = ruleBase.getRuleAt(i).getResult();db.addFact(fact);if (fact >= 24) {result = fact;break;}}}switch (result) {case 24:return"金钱豹";case 25:return"老虎";case 26:return"斑马";case 27:return"鸵鸟";case 28:return"企鹅";case 29:return"信天翁";case 30:return"长颈鹿";default:return"不存在";}}}六.截图七.感想通过这次课程设计我对专业课的学习有了更加深刻的认识,让我知道了学无止境的道理。
AI实验-七种动物识别系统
AI实验-七种动物识别系统AI-动物识别⼀、实验⽬的1. 理解产⽣式系统的结构原理与实际应⽤。
2. 掌握产⽣式规则表⽰及规则库组建的实现⽅法。
3. 熟悉和掌握产⽣式系统的运⾏机制,掌握基于规则推理的基本⽅法。
⼆、实验原理产⽣式系统⽤来描述若⼲个不同的以⼀个基本概念为基础的系统,这个基本概念就是产⽣式规则或产⽣式条件和操作对。
在产⽣式系统中,论域的知识分为两部分:⽤事实表⽰静态知识;⽤产⽣式规则表⽰推理过程和⾏为1.实验要求运⽤所学知识,设计并编程⼀个⼩型的动物识别系统,识别对象:虎、⾦钱豹、斑马、长颈⿅、鸵鸟、企鹅、信天翁七种动物2.识别规则库R1: 有⽑(1) --> 哺乳动物(12)R2: 有奶(2) --> 哺乳动物(12)R3: 有⽻⽑(3) --> 鸟类(13)R4: 会飞(4) & 会下蛋 --> 鸟类(13)R5: 吃⾁(6) --> ⾷⾁动物(14)R6: ⽝齿(7) & 有⽖(8) & 盯前⽅(9) --> ⾷⾁动物(14)R7: 哺乳动物(12) & 有蹄(10) --> 有蹄类动物(15)R8: 哺乳动物(12) & 反刍(11) --> 有蹄类动物(15)R9: 哺乳动物(12) & ⾷⾁动物(14) & 黄褐⾊(16) & 暗斑点(17) --> ⾦钱豹(a)R10: 哺乳动物(12) & ⾷⾁动物(14) & 黄褐⾊(16) & ⿊⾊条纹(18) --> 虎(b)R11: 有蹄类动物(15) & 长脖(19) & 长腿(20) & 暗斑⾊(17) --> 长颈⿅(c)R12: 有蹄类动物(15) & ⿊⾊条纹(18) & --> 斑马(d)R13: 鸟类(13) & 长脖(19) & 长腿(20) & 不会飞(21) & ⿊⽩两⾊(22) --> 鸵鸟(e)R14: 鸟类(13) & 会游泳(23) & 不会飞(21) & ⿊⽩⼆⾊(22) --> 企鹅(f)R15: 鸟类(13) & 善飞(24) --> 信天翁(g)以上为:动物识别规则的15条规则,已编码3.思路分析1. 第⼀次编写时:采⽤的是,条件对应原则,每个条件对应的动物做⼀个集合,多个条件集合取交集,得到对应动物。
动物识别系统实验报告
人工智能实验报告二班级: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]={"有爪","有犬齿","有奶","有毛发","目视前方","吃肉","有蹄","有羽毛","会飞","生蛋","不会飞","黑白色","会游泳","善飞","不怕风浪","长腿","长脖子","有暗斑点","白色","黑色斑点","黑色条纹","黄褐色","食肉动物","鸟","哺乳动物","有蹄动物","老虎","金钱豹","长颈鹿","斑马","鸵鸟","企鹅","海燕"};规则库为一个结构体数组。
动物识别专家系统实验报告
人工智能实验报告实验记录首先运行程序会出项上图界面,该界面显示了当前所有的动物,并且提出问题,用户可以根据问题进行选择,看到自己想要的动物。
对于每一个问题,都只能是真或者是假,因此在后续增加问题的时候也要注意。
其实可以有多种情况,但是要进行扩展,所以本实验没有增加该功能。
该系统中有不同的问题,根据问题的提示可以对现有的动物进行筛选,并且提出下一个问题,并使得提问的次数最少。
通过上面可以看出当生育方式是胎生的时候,那么就在哺乳动物中进行选择,哺乳动物中只有老虎是独居的,所以提问的时候就选择该问题。
这样提问两次就可以得出结论。
而当生育方式不是胎生的时候,就只有一个鸟类,所以可以直接获得结论。
for(int i=0;i<anc;i++){if(a[i]==1){if(an[i].flag[count]!=anser){a[i]=0;}}}代码分析:在回答一个问题之后,在剩下的动物判断提问的属性是否满足,如果满足,那么就留下;如果不满足,那么去除。
如上左所示,在增加了该动物之后,我们可以在下次提问的时候看到系统中的记录增加,并且可以根据问题获得刚刚增加的动物。
如上右图所示。
实验总结 本次实验运用了归结原理、规则演绎推理的推理方法,进行设计。
对于不同的属性可以有时间P1,P2…Pn 。
这样在满足不同的条件之后就可以进行推理,得到所要的动物了。
通过本次实验,我学习到了推理的使用方法,对于这种问题就的解决也有了理解。
这不仅仅让我学习到了如何进行推理问题的证明,也让我对该系统有了更深的了解。
这让我的编程的能力也有了进一步的提高。
人工智能动物产生式报告
人工智能第三次实验报告1.实验名称:动物识别产生式系统2.实验目的:通过本实验让学生理解并体会知识的产生式表示以及推理策略,为以后设计并实现复杂的专家系统奠定基础。
3.实验内容:知识表示为产生式知识表示方法,设计并实现具有15条规则能自动识别7种动物的产生式系统。
规则1:如果:动物有毛发则:该动物是哺乳动物规则2:如果:动物有奶则:该动物是哺乳动物规则3:如果:该动物有羽毛则:该动物是鸟规则4:如果:动物会飞,且会下蛋则:该动物是鸟规则5:如果:动物吃肉则:该动物是肉食动物规则6:如果:动物有犬齿,且有爪,且眼盯前方则:该动物是食肉动物规则7:如果:动物是哺乳动物,且有蹄则:该动物是有蹄动物规则8:如果:动物是哺乳动物,且是反刍动物则:该动物是有蹄动物规则9:如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点则:该动物是豹规则10:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹则:该动物是虎规则11:如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类则:该动物是长颈鹿规则12:如果:动物有黑条纹,且是有蹄类动物则:该动物是斑马规则13:如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞则:该动物是鸵鸟规则14:如果:动物是鸟,且不会飞,且会游泳,且是黑色的则:该动物是企鹅规则15:如果:动物是鸟,且善飞则:该动物是信天翁例如:该系统输入:有奶吃肉黑色条纹黄褐色系统输出:是虎4.实验代码#include <string.h>#include <math.h>#include <stdio.h>#include <iostream.h>char *FacAndRes[]={"反刍","蹄类","哺乳类","眼向前方", "有爪","犬齿","吃肉","会下蛋","会飞","有羽毛","有蹄","食肉动物","鸟类","能产奶","有毛发","善飞","黑白色条纹","会游泳","长腿","长脖子","黑条纹","黑斑点","黄褐色","信天翁","企鹅","驼鸟","斑马","长颈鹿","虎","豹",0};int rulePilcine[][6]={{22,23,12,3,0,0},{21,23,12,3,0,0},{22,19,20,11,0,0}, {21,11,0,0,0,0},{17,19,20,13,-9,0},{17,18,13,-9,0,0},{16,13,0,0,0,0}, {15,0,0,0,0,0},{14,0,0,0,0,0},{10,0,0,0,0,0},{8,7,0,0,0,0},{7,0,0,0,0,0},{4,5,6,0,0,0},{2,3,0,0,0,0},{1,3,0,0,0,0}};int rc[]={30,29,28,27,26,25,24,3,3,13,13,12,12,11,11,0};//断言编号数组class fact{private:int number;char name[21];int act;int suc;public:fact *next;fact(int num,char *L){strcpy(name,L);number=num;act=0;suc=-1;next=NULL;}char *getName(){char *L;L=new char[21];strcpy(L,name);return L;}int getNumber(){return number;}int getAct(){return act;}int getSuc(){return suc;}void putAct(const int tempAct,int tempSuc) {act=tempAct;suc=tempSuc;}};fact *f;class List{private:int number;public:List *next;List(int num){number=num;next=NULL;}int getNumber(){return number;}class rule{char *name;List *Pre;int con;public:rule *next;rule(char *N,int P[],int C);~rule();int query();void getName(){cout<<name;}};rule::~rule(){List *L;while(Pre){L=Pre->next;delete Pre;Pre=L;}delete name;}rule::rule(char *N,int P[],int C) {int i;List *L;Pre=NULL;next=NULL;name=new char[strlen(N)+1]; strcpy(name,N);i=0;while(P[i]!=0){L=new List(P[i++]);L->next=Pre;Pre=L;}con=C;int rule::query(){char c;int Tag=0;List *L;fact *F;F=f;L=Pre;if(L==NULL)cout<<"\nError";while(L!=NULL){F=f;for(;;){if(abs(L->getNumber())==F->getNumber()) break;F=F->next;}if(L->getNumber()>0){if((F->getSuc())==true) {L=L->next;continue;} if((F->getSuc())==false) return false;}else{if((F->getSuc())==1)return 0;if((F->getSuc())==0){L=L->next;continue;}}cout<<F->getName()<<"(Y/N)"<<endl;c=getchar();flushall();if((c=='Y')||(c=='y')){if(L->getNumber()>0)F->putAct(1,1);if(L->getNumber()<0){F->putAct(1,1);Tag=-1;return 0;}}else{if(L->getNumber()<0)F->putAct(-1,0);else{F->putAct(-1,0);Tag=-1;return 0;}}L=L->next;}F=f;for(;;){if(con==F->getNumber()) break;F=F->next;}if(con<24){F->putAct(1,1);return 0;}if(Tag!=-1){F=f;for(;;){if(con==F->getNumber()) break;F=F->next;}if(con<24){F->putAct(1,1);return 0;}cout<<"\n这个动物是"<<F->getName()<<endl; return 1;}return 0;}int main(){fact *F,*T;rule *r1,*r2;char ch[8];int i=1;f=NULL;while(FacAndRes[i-1]){F=new fact(i,FacAndRes[i-1]);F->next=f;f=F;i++;}F=f;f=NULL;while(F){T=F;F=F->next;T->next=f;f=T;}i=0;r1=NULL;for(i=0;i<15;i++){r2=new rule(ch,rulePilcine[i],rc[i]);r2->next=r1;r1=r2;ch[5]++;}r2=r1;for(;;){i=r2->query();if((i==1)||(i==-1))break;r2=r2->next;if(!r2)break;}if(!r2)cout<<"没有这种动物."<<endl;getchar();return 1;}5.实验结果:6实验心得:通过本次实验深刻体会到产生式推理的魅力,推理的过程已经基本了解和掌握,对代码的控制输出表达能力也有了很大的提高,流程的控制加深了我对逻辑控制的体会和强化。
人工智能动物识别系统JAVA
实验报告
课程名称
系别电子信息科学学院专业班级指导教师
学号____________姓名____________实验日期2016.4.1实验成绩___________
}
jp.add(lblImage);lblImage.setBounds(630,30,300,400);this.add(jp);
this.setTitle("动物识别系统");this.setBounds(100,100,1000,500);this.setVisible(true);
}
publicvoidactionPerformed(ActionEvente){
/用数组创复选框
{newCheckbox("有毛发"),newCheckbox("有奶"),newCheckbox("有羽毛"),
newCheckbox("会飞,且生蛋"),newCheckbox("吃肉"),
newCheckbox("有犬齿,且有爪,且眼盯前方"),newCheckbox("有蹄"),
publicclassRZSextendsJFrameimplementsActionListener{privatestaticJPaneljp=newJPanel();
privateJLabeljl1=newJLabel("请选择条件:");sta ticCheckbox[]Checkbox=
人工智能动物识别系统 实验报告
人工智能导论实验报告题目动物识别专家系统学院信息科学与工程学院专业计算机科学与技术姓名侯立军学号 *********** 班级计信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中选出一条知识进行推理,并将推出的新事实加入到数据库中作为下一步推理的已知事实,在此之后再在知识库中选取可适用的知识进行推理,如此重复,直到求得了所要求的解,或者知识库中再无可适用的知识为止。
人工智能的实验报告
一、实验目的1. 理解人工智能在动物识别领域的应用,掌握相关算法和模型。
2. 掌握深度学习在图像识别中的应用,学习使用神经网络进行图像分类。
3. 实现一个基于人工智能的动物识别系统,提高动物识别的准确率和效率。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.63. 开发工具:PyCharm4. 依赖库:TensorFlow、OpenCV、NumPy、Pandas三、实验内容1. 数据收集与预处理实验使用的数据集为公开的动物图像数据集,包含多种动物图片,共3000张。
数据预处理步骤如下:(1)将原始图像转换为统一尺寸(如224x224像素);(2)对图像进行灰度化处理,减少计算量;(3)对图像进行归一化处理,使图像像素值在0到1之间;(4)将图像数据转换为NumPy数组,方便后续处理。
2. 模型构建与训练实验采用卷积神经网络(CNN)进行图像识别。
模型构建步骤如下:(1)定义卷积层:使用卷积层提取图像特征,卷积核大小为3x3,步长为1,激活函数为ReLU;(2)定义池化层:使用最大池化层降低特征维度,池化窗口大小为2x2;(3)定义全连接层:将卷积层和池化层提取的特征进行融合,输入层大小为64x64x32,输出层大小为10(代表10种动物类别);(4)定义损失函数和优化器:使用交叉熵损失函数和Adam优化器进行模型训练。
训练模型时,采用以下参数:(1)批处理大小:32;(2)学习率:0.001;(3)训练轮数:100。
3. 模型评估与测试训练完成后,使用测试集对模型进行评估。
测试集包含1000张图像,模型准确率为80.2%。
4. 系统实现与演示根据训练好的模型,实现一个基于人工智能的动物识别系统。
系统功能如下:(1)用户上传动物图像;(2)系统对上传的图像进行预处理;(3)使用训练好的模型对图像进行识别;(4)系统输出识别结果。
四、实验结果与分析1. 模型准确率:80.2%,说明模型在动物识别任务中具有一定的识别能力。
实验一:产生式系统-动物识别系统
《人工智能导论》实验报告实验一:产生式系统——动物识别系统一、实验目的1、掌握知识的产生式表示法2、掌握用程序设计语言编制智能程序的方法二、实验内容1、所选编程语言:C语言;2.拟订的规则:(1)若某动物有奶,则它是哺乳动物。
(2)若某动物有毛发,则它是哺乳动物。
(3)若某动物有羽毛,则它是鸟。
(4)若某动物会飞且生蛋,则它是鸟。
(5)若某动物是哺乳动物且有爪且有犬齿且目盯前方,则它是食肉动物。
(6)若某动物是哺乳动物且吃肉,则它是食肉动物。
(7)若某动物是哺乳动物且有蹄,则它是有蹄动物。
(8)若某动物是哺乳动物且反刍食物,则它是有蹄动物。
(9)若某动物是食肉动物且黄褐色且有黑色条纹,则它是老虎。
(10)若某动物是食肉动物且黄褐色且有黑色斑点,则它是金钱豹。
(11)若某动物是有蹄动物且长腿且长脖子且黄褐色且有暗斑点,则它是长颈鹿。
(12)若某动物是有蹄动物且白色且有黑色条纹,则它是斑马。
(13)若某动物是鸟且不会飞且长腿且长脖子且黑白色,则它是驼鸟。
(14)若某动物是鸟且不会飞且会游泳且黑白色,则它是企鹅。
(15)若某动物是鸟且善飞,则它是海燕。
2、设计思路:用户界面:采用问答形式;知识库(规则库):存放产生式规则,推理时用到的一般知识和领域知识,比如动物的特征,动物的分类标准,从哺乳动物、食肉动物来分,再具体地添加一些附加特征得到具体动物;建立知识库的同时也建立了事实库。
事实库是一个动态链表,一个事实是链表的一个结点。
知识库通过事实号与事实库发生联系。
数据库:用来存放用户回答的问题,存放初始状态,中间推理结果,最终结果;推理机:采用正向推理,推理机是动物识别的逻辑控制器,它控制、协调系统的推理,并利用知识库中的规则对综合数据库中的数据进行逻辑操作。
推理机担负两项基本任务:一是检查已有的事实和规则,并在可能的情况下增加新的事实;二是决定推理的方式和推理顺序。
将推理机制同规则对象封装在一起,事实对象记录了当前的状态,规则对象首先拿出前提条件的断言(只有这些前提都有符合时才会做这条规则的结论),询问事实对象集,如事实对象集不知道,则询问用户,如所有前提条件都被证实为真则结论为真,否则系统不知道结论真假。
动物识别系统实验报告人工智能原理及其应用
实验目的及要求:实验目的:1.熟悉产生式的特点,基本结构和设计思想2.掌握基于规则推理的基本过程和方法(在实验中采用正向推理过程)3.学会用高级程序设计语言开发基于规则的动物识别系统实验要求: 1.根据动物识别系统的规则建立合理的数据结构或数据库来表示知识。
2.利用所选开发语言来建立推理过程。
(该程序能正向推理识别动物过程)3.利用控制台或者图形界面给出合理的交互接口,实现基本演示功能。
4.提交实验报告和源程序,总结实验结论和经验教训。
实验原理:1.基于规则产生式系统结构:基于规则的产生式系统一般由规则库(知识库)、综合数据库和推理引擎(推理机)三部分组成,规则库中它的基本组成框架如下图1 所示。
知识库由谓词演算事实和有关讨论主题的规则构成,综合库又称为上下文,用来暂时存储推理过程中的结论和数据。
推理机是用规则进行推理的过程和行为,。
知识采集系统是领域专家把相关领域的知识表示成一定的形式,并输入到知识库中。
解释系统通过用户输入的条件来分析被系统执行的推理结构,并将专家知识以易理解的方式并把知识解释给用户。
知识库综合库图1规则产生式系统的基本结构2. 简单动物识别产生式系统结构:知识库 ANIMAL 的知识库非常小,仅仅包含16条规则(一 般说来,一个产生式系统的知识库应包含》几百条规则); 解空间很小,仅仅包含8个解,或8个最高假设(在一个特定 的动物园里,共有虎、豹、长颈鹿、斑马、鸵鸟、企鹅和信天 翁、八哥等8种动物);初始事实集合很小,仅仅包含21个事实,如图中的F1至F21; 数据(即事实、证据、断言),知识(即浅层知识,规则)和推 理都是精确的,即确定性的;知识库。
实验步骤:本识别系统需要通过正向推理,正向推理过程的具体步骤是:(1) 读入事实集到工作存储器。
(2) 取出某条规则,将规则的全部前件与工作存储器中的所有事实进行比较。
如果匹配成功,则所得结果显示到屏幕上,转向(3);否则,直接转向(3)。
动物识别系统_人工智能课程实验
2 规则库
规则库RB(rule base)是一个用来存放与求 解问题有关的所有规则的集合,也称为知识库K B(knowledge base)。它包含了将问题从初始 状态转换成目标状态所需的所有变换规则。规则 库是产生式系统进行问题求解的基础。
3 控制系统(1)
控制系统(control system)也称为推理机, 其主要工作如下: 按一定的策略从规则库中选择规则与综合数据 库中的已知事实进行匹配。 当匹配成功的规则多于一条时,按照某种策略 选择一条执行。 对于要执行的规则,如果该规则的结论不是问 题的目标,将其加入综合数据库中。
动物识别系统
目录
You can briefly add outline of this slide page in this text box.
一、产生式系统的基本结构 二、产生式系统的类型
三、动物识别系统的相关策略
四、实验结果
一、产生式系统的基本结构
1 2 3
综合数据库
规则库 控制系统
1 综合数据库
综合数据库DB(data base)也称为事实库, 是一个用来存放与求解问题有关的各种当前信息 的数据结构。当某条规则的前提与综合数据库中 的已知事实相匹配时,该规则将被激活,并把其 结论放入综合数据库成为后面推理的已知事实。
四、实验结果(1实验结果(3)
四、实验结果(4)
二、产生式系统的类型(2)
3.2逆向推理产生式系统 也称目标驱动方式,它是从目标(作为假设) 状态出发,朝着初始状态前进,反向使用规则的 一种推理方法。所谓逆向使用规则,是指以问题 的目标状态作为初始综合数据库,仅当综合数据 库中的事实满足某条规则的后件时,该规则才被 使用。 优点:不使用与问题无关的规则。因此,对 那些目标明确的问题,使用反向推理方式是一种 最佳选择。
人工智能实验报告
暨南大学人工智能实验报告题目:动物识别系统院系:信科院计算机系专业:计算机软件与理论学号: 0934061004学生姓名:张韶远成绩:日期: 2009年11月10日一、目的与要求1.掌握人工智能的知识表示技术,能用产生式表示法表示知识,并实现一个用于识别的专家系统。
2.推理策略采用正向推理和反向推理两种。
二、主要内容1.学习人工智能的知识表示技术,关键掌握产生式知识表示的具体应用方法。
2.实现的动物识别系统的主要功能如下:2.1系统能通过正向、反向推理得到正确的动物识别结果。
2.2系统能动态地添加规则、能显示推理过程。
三.实验原理产生式表示:产生式表示是知识表示的一种。
这种方法是建立在因果关系的基础上的,可很容易的描述事实、规则及其不确定性度量。
1.事实的表示:事实可看成是断言一个语言变量的值或是多个语言变量间的关系的陈述句,语言变量的值或语言变量间的关系可以是一个词。
不一定是数字。
一般使用三元组(对象,属性,值)或(关系,对象1,对象2)来表示事实,其中对象就是语言变量,若考虑不确定性就成了四元组表示(增加可信度)。
这种表示的机器内部实现就是一个表。
如事实“老李年龄是35岁”,便写成(Lee,age,35)事实“老李、老张是朋友”,可写成(friend,Lee,Zhang)2.规则的表示:规则用于表示事物间的因果关系,以if condition then action 的单一形式来描述,将规则作为知识的单位。
其中的condition 部分称为条件式前件或模式,而action部分称作动作、后件或结论。
后件。
前件和后件也可以是有“与”、“或”、“非”等逻辑运算符的组合的表达式。
条件部分常是一些事实的合取或析取,而结论常是某一事实B。
如果不考虑不确定性,需另附可信度度量值。
产生式过则的含义是:如果前件满足,则可得到后件的结论或者执行后件的相应动作,即后件由前件来触发。
一个产生式生成的结论可以作为另一个产生式的前提或语言变量使用,进一步可构成产生式系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
人工智能导论
实验报告
题目动物识别专家系统
学院信息科学与工程学院
专业计算机科学与技术
姓名侯立军
学号 *********** 班级计信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中选出一条知识进行推理,并将推出的新事实加入到数据库中作为下一步推理的已知事实,在此之后再在知识库中选取可适用的知识进行推理,如此重复,直到求得了所要求的解,或者知识库中再
无可适用的知识为止。
2.3 反向推理
逆向推理是以某个假设目标作为出发点的一种推理,又称为目标驱动推理、逆向链推理及后件推理等。
2.2.1 反向推理的基本思想:
首先选定一个假设目标,然后寻找支持该假设的证据,若所需的证据都能找到,则说明原假设成立;若无论如何都找不到所需证据,说明原假设不成立,此时需要另作新的假设。
3 系统模块
struct cause_type{
char * cause; /* 事实字符串指针 */
struct cause_type * next; /* 指向下一个节点 */
};
struct rule_type{
char * result; /* 结论字符串指针 */
int lastflag; /* 结论规则标志 */
struct cause_type * cause_chain;/* 事实链表指针 */
struct rule_type * next; /* 指向下一个节点出*/
};
void freeKB(struct rule_type *);/* 释放规则链表子程序 */
void freeDB(struct cause_type *);/* 释放事实链表子程序 */
int FindCause(char *);/* 查证事实是否已知子程序 */
void markKB(); /* 标记结论性规则子程序 */
void creatKB();/* 创建知识库的子程序 */
void inputDB();/* 输入已知事实的子程序 */
void think();/* 推理机子程序 */
void explain(); /* 解释子程序 */
主函数:void main()
{
struct rule_type *rpp;
struct cause_type *cpp;
creatKB();
markKB();
getchar();
inputDB();
rpp=KnowledgeBase;
think();
while(rpp)
{ printf("result:%s \t",rpp->result);
printf("lastflag:%d \t",rpp->lastflag); cpp=rpp->cause_chain;
while(cpp){
printf("cause:%s \t",cpp->cause);
cpp=cpp->next;
printf("\n"); }
rpp=rpp->next; }
explain(); }
4 主要框图
5 各模块的设计思路
5.1 创建知识库
creatKB():首先判断是否存在知识库,若存在继续执行,若不存在则提示输入规则,创建知识库,将建立的知识库以文件的形式保存在d:\\rule.dat中。
5.2 输入已知事实
inputDB():用户按顺序输入已知的事实,判断是否充分,进行标记。
5.3 推理
think():对输入的已知事实进行推理,从已知事实出发,通过规则库求得结论。
5.4 解释
explain():对推理结果进行解释,显示解释的过程。
6 界面设计
输入规则:
7 调试与分析
8 小结
这次实验让我对专业课有了更深的理解,特别是对正向推理和反向推理的理解,同时也加强了自己阅读程序和编程的能力。
优点:逻辑清晰,结构简单。
缺点:推理过程指针发生变化,查询次数多了以后会出现差错。