. . .
中医药大学本科课程实验教学大纲
《人工智能》
计算机科学与技术专业
. . 执笔人:丁长松 审定人:*** 学院负责人:***
中医药大学教务处 二○一四年三月
. .
. . .
一、课程性质和教学目的
《人工智能》是计算机专业本科生的一门专业必修课,适应于计算机科学与技术专业、医药信息工程专业。本课程是关于人工智能领域的引导性课程,通过本课程的学习,是使学生了解和掌握人工智能的基本概念、原理和方法,培养学生在计算机领域中应用人工智能技术提高分析和解决较复杂问题的能力,启发学生对人工智能的兴趣,培养知识创新和技术创新能力。
《人工智能》主要研究智能信息处理技术、开发具有智能特性的各类应用系统的核心技术。本课程主要介绍人工智能的基本理论、方法和技术,主要包括常用的知识表示、逻辑推理和问题求解方法、人工智能发展学派以及主要理论。
先修课程:高等数学、数据结构、数据库原理、算法设计与分析、数理逻辑
二、课程目标
人工智能实验应在一种为高效率开发专家系统而设计的高级程序系统或高级程序设计语言环境中进行。在目前开来,专家系统开发工具和环境可分为5种主要类型:程序设计语言、知识工程语言、辅助型工具、支持工具及开发环境。在这里主要是要求学生能用相关术语描述、表示一些问题;用程序设计语言如:C、C++、JAVA编程来实现一些基本的算法、推理、搜索等过程。
三、实验容与要求
实验一:谓词表示
【实验容】
设农夫、狼、山羊、白菜都在河的左岸,现在要把它们运送到河的右岸去,农夫有条 船,过河时,除农夫外船上至多能载狼、山羊、白菜中的一种。狼要吃山羊,山羊要吃白菜,除非农夫在那里。试设计出一个确保全部都能过河的方案。
. . . .
. . .
【实验目的】
让学生加深对谓词逻辑和谓词知识表示的理解。 【实验要求】
写出所用谓词的定义,并给出每个谓词的功能及变量的个体域,然后编程来实现。 【参考学时】
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
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; //置头下标为0 paqu->r=0; //置尾下标为0 return 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(\空队列!\ else paqu->f=(paqu->f+1)%(paqu->maxnum); }
/*取队列头元素*/
datatype frontque (pseqque paqu) { if (paqu->f==paqu->r) printf(\队列为空!\ else return (paqu->q[paqu->f]); }
/*判断是否为空队列函数*/ int isemptyque(pseqque paqu)
. . . .