当前位置:文档之家› 人工智能大作业实验

人工智能大作业实验

湖南中医药大学本科课程实验教学大纲《人工智能》计算机科学与技术专业执笔人:丁长松审定人:***学院负责人:***湖南中医药大学教务处二○一四年三月一、课程性质和教学目的《人工智能》是计算机专业本科生的一门专业必修课,适应于计算机科学与技术专业、医药信息工程专业。

本课程是关于人工智能领域的引导性课程,通过本课程的学习,是使学生了解和掌握人工智能的基本概念、原理和方法,培养学生在计算机领域中应用人工智能技术提高分析和解决较复杂问题的能力,启发学生对人工智能的兴趣,培养知识创新和技术创新能力。

《人工智能》主要研究智能信息处理技术、开发具有智能特性的各类应用系统的核心技术。

本课程主要介绍人工智能的基本理论、方法和技术,主要包括常用的知识表示、逻辑推理和问题求解方法、人工智能发展学派以及主要理论。

先修课程:高等数学、数据结构、数据库原理、算法设计与分析、数理逻辑二、课程目标人工智能实验应在一种为高效率开发专家系统而设计的高级程序系统或高级程序设计语言环境中进行。

在目前开来,专家系统开发工具和环境可分为5种主要类型:程序设计语言、知识工程语言、辅助型工具、支持工具及开发环境。

在这里主要是要求学生能用相关术语描述、表示一些问题;用程序设计语言如:C、C++、JA V A编程来实现一些基本的算法、推理、搜索等过程。

三、实验内容与要求实验一:谓词表示【实验内容】设农夫、狼、山羊、白菜都在河的左岸,现在要把它们运送到河的右岸去,农夫有条船,过河时,除农夫外船上至多能载狼、山羊、白菜中的一种。

狼要吃山羊,山羊要吃白菜,除非农夫在那里。

试设计出一个确保全部都能过河的方案。

【实验目的】让学生加深对谓词逻辑和谓词知识表示的理解。

【实验要求】写出所用谓词的定义,并给出每个谓词的功能及变量的个体域,然后编程来实现。

【参考学时】1.定义状态的谓词2.定义变元的个体域3.描述问题的初始和目标状态4.定义动作5.解释过程解:(1) 先定义描述状态的谓词AL(x):x在左岸¬AL(x)表示x在右岸。

(2)定义个体域x的个体域:{农夫,船,狼,羊,白菜}。

(3)定义初始状态和目标状态问题的初始状态:AL(农夫),AL(船),AL(狼),AL(羊),AL(白菜),问题的目标状态:¬AL(农夫),¬AL(船),¬AL(狼),¬AL(羊),¬AL(白菜)(4) 定义动作4个动作:农夫不带来回农夫带来回L-R:农夫自己划船从左岸到右岸L-R(x):农夫带着x划船从左岸到右岸R-L:农夫自己划船从右岸到左岸R-L(x) :农夫带着x划船从右岸到左岸x的个体域是{狼,羊,白菜}。

L-R:农夫划船从左岸到右岸条件:AL(船),AL(农夫),¬AL(狼)∨¬AL(羊),¬AL(羊)∨¬AL(白菜)动作:删除表:AL(船),AL(农夫)添加表:¬AL(船),¬AL(农夫)L-R(狼):农夫带着狼划船从左岸到右岸条件:AL(船),AL(农夫),AL(狼),¬AL(羊)动作:删除表:AL(船),AL(农夫),AL(狼)添加表:¬AL(船),¬AL(农夫),¬AL(狼)L-R(羊):农夫带着羊划船从左岸到右岸条件:AL(船),AL(农夫),AL(羊),AL(狼),AL(白菜)或:AL(船),AL(农夫),AL(羊),¬AL(狼),¬AL(白菜) 动作:删除表:AL(船),AL(农夫),AL(羊)添加表:¬AL(船),¬AL(农夫),¬AL(羊)L-R(白菜):农夫带着白菜划船从左岸到右岸条件:AL(船),AL(农夫),AL(白菜),¬AL(狼)动作:删除表:AL(船),AL(农夫),AL(白菜)添加表:¬AL(船),¬AL(农夫),¬AL(白菜)R-L:农夫划船从右岸到左岸条件:¬AL(船),¬AL(农夫),AL(狼)∨AL(羊),AL(羊)∨AL(白菜) 或:¬AL(船),¬AL(农夫) ,¬AL(狼),¬AL(白菜),AL(羊) 动作:删除表:¬AL(船),¬AL(农夫)添加表:AL(船),AL(农夫)R-L(羊) :农夫带着羊划船从右岸到左岸条件:¬AL(船),¬AL(农夫),¬AL(羊) ,¬AL(狼),¬AL(羊),AL(白菜)动作:删除表:¬AL(船),¬AL(农夫),¬AL(羊)添加表:AL(船),AL(农夫),AL(羊)(3)问题求解过程代码如下#include<stdio.h>#include<malloc.h>typedef int datatype; //datatype定义struct seqque //队列结构体{int maxnum;int f,r; //存放头尾下标datatype *q;};typedef struct seqque *pseqque;/*创建一个新的队列*/pseqque createmptyqueue (int m){pseqque paqu=(pseqque)malloc(sizeof(struct seqque)); //申请结构体动态空间if (paqu!=NULL){paqu->q=(datatype*)malloc(sizeof(datatype)*m); //申请datatype动态空间if (paqu->q){paqu->maxnum=m;paqu->f=0; //置头下标为0paqu->r=0; //置尾下标为0return paqu;}else free(paqu);}printf("超出存储空间!");return NULL;}/*入队运算函数*/void enque(pseqque paqu,datatype x){if ((paqu->r+1)%(paqu->maxnum)==paqu->f)printf("队列已满!");else{paqu->q[paqu->r]=x;paqu->r=(paqu->r+1)%(paqu->maxnum);}}/*出队运算函数*/void deque(pseqque paqu){if (paqu->f==paqu->r)printf("空队列!");elsepaqu->f=(paqu->f+1)%(paqu->maxnum);}/*取队列头元素*/datatype frontque (pseqque paqu){if (paqu->f==paqu->r)printf("队列为空!");elsereturn (paqu->q[paqu->f]);}/*判断是否为空队列函数*/int isemptyque(pseqque paqu){if (paqu->f==paqu->r)return 1;elsereturn 0;}/*判断农夫位置*/int farmer(int location){return(0!=(location&0x08));}/*判断狼位置*/int wolf(int location){return(0!=(location&0x04));}/*判断白菜位置*/int cabbage(int location){return(0!=(location&0x02));}/*判断羊位置*/int goat(int location){return(0!=(location&0x01));}/*安全状态的判断函数*/int safe(int location){if ((goat(location)==cabbage(location))&&(goat(location)!=farmer(location))) return 0; //羊吃白菜if ((goat(location)==wolf(location))&&(wolf(location)!=farmer(location))) return 0; //狼吃羊return 1;}/*解决农夫问题函数*/void farmerproblem(void){int i,movers,location,newlocation;int route[16]; //记录已走过的步骤pseqque moveto; //存放安全的步骤moveto=createmptyqueue(16); //创建新队列enque(moveto,0x00); //置状态初值for (i=0;i<16;i++) //置已走过步骤初值route[i]=-1;route[0]=0;while(!isemptyque(moveto)&&(route[15]==-1)){location=frontque(moveto); //取头状态为当前状态deque(moveto); //删除队列头状态for (movers=1;movers<=8;movers<<=1) //依次考虑羊、白菜、狼、农夫的移动if ((0!=(location&0x08))==(0!=(location&movers))) //判断是否和农夫同边{newlocation=location^(0x08|movers); //移动后的状态if (safe(newlocation)&&(route[newlocation]==-1)) //判断是否为安全状态{route[newlocation]=location; //将新的安全状态赋给locationenque(moveto,newlocation); //新的状态入队列}}}if (route[15]!=-1) //到达最终状态{printf("过程是:\n"); //输出过程和位置for (location=15;location>=0;location=route[location]){printf("位置是:%d\n",location);if (location==0)exit(0);}}else printf("此问题无解!");}/*主函数*/void main(){farmerproblem();}实验二:一个用于动物识别的产生式系统【实验内容】设计该系统,让其实现可以识别老虎、金钱豹、斑马、长颈鹿、企鹅、信天翁这6种动物。

相关主题