人工智能实验报告大全

合集下载

人工智能实验报告大全

人工智能实验报告大全

人工智能实验报告大全人工智能课内实验报告(8次)学院:自动化学院班级:智能1501姓名:刘少鹏(34)学号: 06153034目录课内实验1:猴子摘香蕉问题的VC编程实现 (1)课内实验2:编程实现简单动物识别系统的知识表示 (5)课内实验3:盲目搜索求解8数码问题 (18)课内实验4:回溯算法求解四皇后问题 (33)课内实验5:编程实现一字棋游戏 (37)课内实验6:字句集消解实验 (46)课内实验7:简单动物识别系统的产生式推理 (66)课内实验8:编程实现D-S证据推理算法 (78)人工智能课内实验报告实验1:猴子摘香蕉问题的VC编程实现学院:自动化学院班级:智能1501姓名:刘少鹏(33)学号: 06153034日期: 2017-3-8 10:15-12:00实验1:猴子摘香蕉问题的VC编程实现一、实验目的(1)熟悉谓词逻辑表示法;(2)掌握人工智能谓词逻辑中的经典例子——猴子摘香蕉问题的编程实现。

二、编程环境VC语言三、问题描述房子里有一只猴子(即机器人),位于a处。

在c处上方的天花板上有一串香蕉,猴子想吃,但摘不到。

房间的b处还有一个箱子,如果猴子站到箱子上,就可以摸着天花板。

如图1所示,对于上述问题,可以通过谓词逻辑表示法来描述知识。

要求通过VC语言编程实现猴子摘香蕉问题的求解过程。

图1 猴子摘香蕉问题四、源代码#include<stdio.h>unsigned int i;void Monkey_Go_Box(unsigned char x, unsigned char y){printf("Step %d:monkey从%c走到%c\n", ++i, x, y);//x表示猴子的位置,y为箱子的位置}void Monkey_Move_Box(char x, char y){printf("Step %d:monkey把箱子从%c运到%c\n", ++i, x, y);//x表示箱子的位置,y为香蕉的位置}void Monkey_On_Box(){printf("Step %d:monkey爬上箱子\n", ++i);}void Monkey_Get_Banana(){printf("Step %d:monkey摘到香蕉\n", ++i);}void main(){unsigned char Monkey, Box, Banana;printf("********智能1501班**********\n");printf("********06153034************\n");printf("********刘少鹏**************\n");printf("请用a b c来表示猴子箱子香蕉的位置\n");printf("Monkey\tbox\tbanana\n");scanf("%c", &Monkey);getchar();printf("\t");scanf("%c", &Box);getchar();printf("\t\t");scanf("%c", &Banana);getchar();printf("\n操作步骤如下\n");if (Monkey != Box){Monkey_Go_Box(Monkey, Box);}if (Box != Banana){Monkey_Move_Box(Box, Banana);}Monkey_On_Box();Monkey_Get_Banana();printf("\n");getchar();}五、实验结果相关截图六、心得体会通过本次实验,我初步了学会了使用VC的新建工程,并且进行简单的程序编写。

《人工智能》实验报告

《人工智能》实验报告

一、实验目的1. 了解机器学习的基本概念和常用算法。

2. 掌握使用Python编程语言实现图像识别系统的方法。

3. 培养分析问题、解决问题的能力。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.73. 开发工具:PyCharm4. 机器学习库:TensorFlow、Keras三、实验内容1. 数据预处理2. 模型构建3. 模型训练4. 模型评估5. 模型应用四、实验步骤1. 数据预处理(1)下载图像数据集:选择一个适合的图像数据集,例如MNIST手写数字数据集。

(2)数据加载与处理:使用TensorFlow和Keras库加载图像数据集,并进行预处理,如归一化、调整图像大小等。

2. 模型构建(1)定义网络结构:使用Keras库定义神经网络结构,包括输入层、隐藏层和输出层。

(2)选择激活函数:根据问题特点选择合适的激活函数,如ReLU、Sigmoid等。

(3)定义损失函数:选择损失函数,如交叉熵损失函数。

(4)定义优化器:选择优化器,如Adam、SGD等。

3. 模型训练(1)将数据集分为训练集、验证集和测试集。

(2)使用训练集对模型进行训练,同时监控验证集的性能。

(3)调整模型参数,如学习率、批大小等,以优化模型性能。

4. 模型评估(1)使用测试集评估模型性能,计算准确率、召回率、F1值等指标。

(2)分析模型在测试集上的表现,找出模型的优点和不足。

5. 模型应用(1)将训练好的模型保存为模型文件。

(2)使用保存的模型对新的图像进行识别,展示模型在实际应用中的效果。

五、实验结果与分析1. 模型性能:在测试集上,模型的准确率为98.5%,召回率为98.3%,F1值为98.4%。

2. 模型优化:通过调整学习率、批大小等参数,模型性能得到了一定程度的提升。

3. 模型不足:在测试集中,模型对部分图像的识别效果不佳,可能需要进一步优化模型结构或改进训练方法。

六、实验总结通过本次实验,我们了解了机器学习的基本概念和常用算法,掌握了使用Python编程语言实现图像识别系统的方法。

人工智能实验报告大全

人工智能实验报告大全

人工智能课内实验报告(8次)学院:自动化学院班级:智能1501 姓名:刘少鹏(34)学号: ********目录课内实验1:猴子摘香蕉问题的VC编程实现 (1)课内实验2:编程实现简单动物识别系统的知识表示 (5)课内实验3:盲目搜索求解8数码问题 (18)课内实验4:回溯算法求解四皇后问题 (33)课内实验5:编程实现一字棋游戏 (37)课内实验6:字句集消解实验 (46)课内实验7:简单动物识别系统的产生式推理 (66)课内实验8:编程实现D-S证据推理算法 (78)人工智能课内实验报告实验1:猴子摘香蕉问题的VC编程实现学院:自动化学院班级:智能1501姓名:刘少鹏(33)学号: 06153034日期: 2017-3-8 10:15-12:00实验1:猴子摘香蕉问题的VC编程实现一、实验目的(1)熟悉谓词逻辑表示法;(2)掌握人工智能谓词逻辑中的经典例子——猴子摘香蕉问题的编程实现。

二、编程环境VC语言三、问题描述房子里有一只猴子(即机器人),位于a处。

在c处上方的天花板上有一串香蕉,猴子想吃,但摘不到。

房间的b处还有一个箱子,如果猴子站到箱子上,就可以摸着天花板。

如图1所示,对于上述问题,可以通过谓词逻辑表示法来描述知识。

要求通过VC语言编程实现猴子摘香蕉问题的求解过程。

图1 猴子摘香蕉问题四、源代码#include<stdio.h>unsigned int i;void Monkey_Go_Box(unsigned char x, unsigned char y){printf("Step %d:monkey从%c走到%c\n", ++i, x, y);//x表示猴子的位置,y为箱子的位置}void Monkey_Move_Box(char x, char y){printf("Step %d:monkey把箱子从%c运到%c\n", ++i, x, y);//x表示箱子的位置,y为香蕉的位置}void Monkey_On_Box(){printf("Step %d:monkey爬上箱子\n", ++i);}void Monkey_Get_Banana(){printf("Step %d:monkey摘到香蕉\n", ++i);}void main(){unsigned char Monkey, Box, Banana;printf("********智能1501班**********\n");printf("********06153034************\n");printf("********刘少鹏**************\n");printf("请用a b c来表示猴子箱子香蕉的位置\n");printf("Monkey\tbox\tbanana\n");scanf("%c", &Monkey);getchar();printf("\t");scanf("%c", &Box);getchar();printf("\t\t");scanf("%c", &Banana);getchar();printf("\n操作步骤如下\n");if (Monkey != Box){Monkey_Go_Box(Monkey, Box);}if (Box != Banana){Monkey_Move_Box(Box, Banana);}Monkey_On_Box();Monkey_Get_Banana();printf("\n");getchar();}五、实验结果相关截图六、心得体会通过本次实验,我初步了学会了使用VC的新建工程,并且进行简单的程序编写。

人工智能实验报告

人工智能实验报告

人工智能实验报告实验一 在搜索策略实验群实验目的熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用A*算法求解N 数码难题,理解求解流程和搜索顺序。

搜索图算法比较广度优先深度优先 A*Open 表 节点G ,节点10节点G ,节点6节点3,节点9,节点G ,节点10,节点8Close 表节点s ,节点1,节点2,节点3,节点4,节点5,节点6,节点7,节点8,节点9 节点s,节点1,节点3,节点7,节点4,节点8,节点2,节点5,节点9节点s ,节点2,节点1,节点5,节点6,节点4估价函数无无)()()(n h n g n f +=搜索节点次序记录 节点s ,节点1,节点2,节点3,节点4,节点5,节点6,节点7,节点8,节点9,节点G 节点s,节点1,节点3,节点7,节点4,节点8,节点2,节点5,节点9,节点G 节点s ,节点2,节点1,节点5,节点6,节点4,节点G观测结果 经过11步搜索得到目标节点经过10步搜索得到目标节点经过7步搜索得到目标节点学生结论宽度优先搜索能保证在搜索树 深度优先搜索要沿路径一条一 A*算法是启发式算法的一中找到一条通向目标节点的最短路径,但由于盲目性大所以当搜索数据比较多的时候该方法较为费时。

条的走到底,如果目标在前几条路径中那么该搜索会较为快捷,在本搜索树中虽然比宽度优先少一步,但是若第一条路径或者某几条路径很深,则该搜索会相当耗时且不能保证成功。

种能通过路径的权值找出代价最为小的一条,所以很具优越性,但是算法本身计算较为复杂,要考虑以前的和将来两方面的代价,进行估算,所以没有前两种方法简单。

实验二:产生式系统实验实验目的熟悉和掌握产生式系统的运行机制,掌握基于规则推理的基本方法。

推理方法□ 正向推理 □ 反向推理建立规则库 建立事实库该动物是哺乳动物 <- 该动物有毛发. 该动物是哺乳动物 <- 该动物有奶.该动物是鸟 <- 该动物有羽毛.该动物是鸟 <- 该动物会飞&会下蛋. 该动物是食肉动物 <- 该动物吃肉.该动物是食肉动物 <- 该动物有犬齿&有爪&眼盯前方. 该动物是有蹄类动物 <- 该动物是哺乳动物&有蹄. 该动物是有蹄类动物 <- 该动物是哺乳动物& 是嚼反刍动物.该动物是金钱豹 <- 该动物是哺乳动物&是食肉动物&是黄褐色&身上有暗斑点.该动物是虎 <- 该动物是哺乳动物&是食肉动物&是黄褐色&身上有黑色条纹.该动物是长颈鹿 <- 该动物是有蹄类动物&有长脖子&有长腿&身上有暗斑点.该动物是斑马 <- 该动物是有蹄类动物&身上有黑色条纹.该动物是鸵鸟 <- 该动物是鸟&有长脖子&有长腿&不会飞&有黑白二色.该动物是企鹅 <- 该动物是鸟&会游泳&不会飞&有黑白二色.该动物是信天翁 <- 该动物是鸟&善飞.%------动物识别系统事实集: %--该动物是企鹅 会游泳. 不会飞.有黑白二色. %该动物是鸟.%-------- %--该动物是鸟 该动物会飞.会下蛋.%----该动物是金钱豹 <- 该动物是哺乳动物&是食肉动物&是黄褐色&身上有暗斑点. 该动物有毛发. %是食肉动物. 是黄褐色. 身上有暗斑点. 该动物吃肉.%----该动物是虎 <- 该动物是哺乳动物&是食肉动物&是黄褐色&身上有黑色条纹.该动物是哺乳动物.%是食肉动物. 是黄褐色.身上有黑色条纹.%----该动物是长颈鹿 <- 该动物是有蹄类动物&有长脖子&有长腿&身上有暗斑点. %该动物是有蹄类动物. 有长脖子. 有长腿. 身上有暗斑点.%----该动物是有蹄类动物 <- 该动物是哺乳动物&有蹄. %有蹄.预测结果在相关询问:该动物是哺乳动物? 该动物是鸟? 该动物是食肉动物? 该动物是金钱豹?该动物是鸵鸟?该动物是企鹅?时为真,其余为假。

人工智能_实验报告

人工智能_实验报告

人工智能_实验报告
一、实验目标
本次实验的目的是对人工智能进行深入的理解,主要针对以下几个方面:
1.理论基础:了解人工智能的概念、定义和发展历史;
2.技术原理:学习人工智能的基本技术原理,如机器学习、自然语言处理、图像处理等;
3. 设计实现: 熟悉基于Python的人工智能开发;
4.实践应用:了解常见的应用场景,例如语音识别、图像分析等;
二、实验环境
本次实验基于Python3.7语言编写,实验环境如下:
1. 操作系统:Windows10
3. 基础库和工具:Numpy, Matplotlib, Pandas, Scikit-Learn, TensorFlow, Keras
三、实验内容
1. 机器学习
机器学习是一门深受人们喜爱的人工智能领域,基于机器学习,我们可以让计算机自动学习现象,并做出相应的预测。

主要用于语音识别、图像处理和自然语言处理等领域。

本次实验主要通过一个关于房价预测的实例,结合 Scikit-Learn 库,实现了机器学习的基本步骤。

主要包括以下几步:
(1)数据探索:分析并观察数据,以及相关的统计数据;
(2)数据预处理:包括缺失值处理、标准化等;
(3)建模:使用线性回归、决策树等监督学习模型,建立房价预测
模型;。

人工智能课内实验报告1

人工智能课内实验报告1

人工智能课内实验报告(一)----主观贝叶斯一、实验目的1.学习了解编程语言, 掌握基本的算法实现;2.深入理解贝叶斯理论和不确定性推理理论;二、 3.学习运用主观贝叶斯公式进行不确定推理的原理和过程。

三、实验内容在证据不确定的情况下, 根据充分性量度LS 、必要性量度LN 、E 的先验概率P(E)和H 的先验概率P(H)作为前提条件, 分析P(H/S)和P(E/S)的关系。

具体要求如下:(1) 充分考虑各种证据情况: 证据肯定存在、证据肯定不存在、观察与证据 无关、其他情况;(2) 考虑EH 公式和CP 公式两种计算后验概率的方法;(3) 给出EH 公式的分段线性插值图。

三、实验原理1.知识不确定性的表示:在主观贝叶斯方法中, 知识是产生式规则表示的, 具体形式为:IF E THEN (LS,LN) H(P(H))LS 是充分性度量, 用于指出E 对H 的支持程度。

其定义为:LS=P(E|H)/P(E|¬H)。

LN 是必要性度量, 用于指出¬E 对H 的支持程度。

其定义为:LN=P(¬E|H)/P(¬E|¬H)=(1-P(E|H))/(1-P(E|¬H))2.证据不确定性的表示在证据不确定的情况下, 用户观察到的证据具有不确定性, 即0<P(E/S)<1。

此时就不能再用上面的公式计算后验概率了。

而要用杜达等人在1976年证明过的如下公式来计算后验概率P(H/S):P(H/S)=P(H/E)*P(E/S)+P(H/~E)*P(~E/S) (2-1)下面分四种情况对这个公式进行讨论。

(1) P (E/S)=1当P(E/S)=1时, P(~E/S)=0。

此时, 式(2-1)变成 P(H/S)=P(H/E)=1)()1()(+⨯-⨯H P LS H P LS (2-2) 这就是证据肯定存在的情况。

(2) P (E/S)=0当P(E/S)=0时, P(~E/S)=1。

人工智能深度学习实验报告

人工智能深度学习实验报告

人工智能深度学习实验报告一、实验背景随着科技的飞速发展,人工智能已经成为当今社会最热门的研究领域之一。

深度学习作为人工智能的核心技术之一,具有强大的学习能力和数据处理能力,在图像识别、语音识别、自然语言处理等领域取得了显著的成果。

本次实验旨在深入探究人工智能深度学习的原理和应用,通过实际操作和数据分析,加深对深度学习的理解和掌握。

二、实验目的1、了解深度学习的基本概念和原理,包括神经网络、反向传播算法、优化算法等。

2、掌握深度学习框架的使用方法,如 TensorFlow、PyTorch 等。

3、通过实验数据,训练深度学习模型,并对模型的性能进行评估和优化。

4、应用深度学习模型解决实际问题,如图像分类、文本分类等。

三、实验环境1、操作系统:Windows 102、编程语言:Python 373、深度学习框架:TensorFlow 204、开发工具:Jupyter Notebook四、实验数据1、图像数据集:CIFAR-10 数据集,包含 10 个不同类别的 60000 张彩色图像,其中 50000 张用于训练,10000 张用于测试。

2、文本数据集:IMDB 数据集,包含 50000 条电影评论,其中25000 条用于训练,25000 条用于测试。

评论被标记为正面或负面,用于文本分类任务。

五、实验步骤1、数据预处理对于图像数据集,进行图像的裁剪、缩放、归一化等操作,以适应模型的输入要求。

对于文本数据集,进行词干提取、词向量化等操作,将文本转换为数字向量。

2、模型构建构建卷积神经网络(CNN)模型用于图像分类任务。

模型包括卷积层、池化层、全连接层等。

构建循环神经网络(RNN)或长短时记忆网络(LSTM)模型用于文本分类任务。

3、模型训练使用随机梯度下降(SGD)、Adagrad、Adadelta 等优化算法对模型进行训练。

设置合适的学习率、迭代次数等训练参数。

4、模型评估使用准确率、召回率、F1 值等指标对模型的性能进行评估。

人工智能实验报告大全

人工智能实验报告大全

人工智能实验报告大全
报告题目:基于人工智能的图像处理
报告内容:
1.人工智能概述
近几年来,人工智能技术的发展迅猛,并在图像处理领域发挥着重要
作用。

人工智能包括机器学习、深度学习、自然语言处理等技术,它们能
够结合图像处理的各种算法,实现从图像到期望结果的精确转换,使图像
处理技术获得巨大进步。

2.图像处理原理
图像处理技术可以通过编程技术,利用图像处理算法对图像进行自动
处理、处理增强和分析,以获得用户需要的图像信息。

图像处理涉及的算
法包括图像锐化、图像压缩、图像增强、图像分类、图像分割、图像辨识、图像变形等多种算法。

在图像处理的过程中,技术人员需要编写一定的程序,实现图像的处理、增强和分析功能。

3.人工智能在图像处理中的应用
随着人工智能技术的发展,它已经为图像处理带来了巨大的变化,并
在图像处理技术的发展中发挥了重要作用。

人工智能主要应用于以下几个
方面:
(1)图像识别:通过人工智能技术,可以将图像转换成一组数据,
然后通过机器学习对这些数据进行分类分析,最终实现图像的识别。

(2)图像识别:通过深度学习和机器学习。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

人工智能课内实验报告(8次)学院:自动化学院班级:智能1501 姓名:刘少鹏(34)学号: ********目录课内实验1:猴子摘香蕉问题的VC编程实现 (1)课内实验2:编程实现简单动物识别系统的知识表示 (5)课内实验3:盲目搜索求解8数码问题 (18)课内实验4:回溯算法求解四皇后问题 (33)课内实验5:编程实现一字棋游戏 (37)课内实验6:字句集消解实验 (46)课内实验7:简单动物识别系统的产生式推理 (66)课内实验8:编程实现D-S证据推理算法 (78)人工智能课内实验报告实验1:猴子摘香蕉问题的VC编程实现学院:自动化学院班级:智能1501姓名:刘少鹏(33)学号: 06153034日期: 2017-3-8 10:15-12:00实验1:猴子摘香蕉问题的VC编程实现一、实验目的(1)熟悉谓词逻辑表示法;(2)掌握人工智能谓词逻辑中的经典例子——猴子摘香蕉问题的编程实现。

二、编程环境VC语言三、问题描述房子里有一只猴子(即机器人),位于a处。

在c处上方的天花板上有一串香蕉,猴子想吃,但摘不到。

房间的b处还有一个箱子,如果猴子站到箱子上,就可以摸着天花板。

如图1所示,对于上述问题,可以通过谓词逻辑表示法来描述知识。

要求通过VC语言编程实现猴子摘香蕉问题的求解过程。

图1 猴子摘香蕉问题四、源代码#include<stdio.h>unsigned int i;void Monkey_Go_Box(unsigned char x, unsigned char y){printf("Step %d:monkey从%c走到%c\n", ++i, x, y);//x表示猴子的位置,y为箱子的位置}void Monkey_Move_Box(char x, char y){printf("Step %d:monkey把箱子从%c运到%c\n", ++i, x, y);//x表示箱子的位置,y为香蕉的位置}void Monkey_On_Box(){printf("Step %d:monkey爬上箱子\n", ++i);}void Monkey_Get_Banana(){printf("Step %d:monkey摘到香蕉\n", ++i);}void main(){unsigned char Monkey, Box, Banana;printf("********智能1501班**********\n");printf("********06153034************\n");printf("********刘少鹏**************\n");printf("请用a b c来表示猴子箱子香蕉的位置\n");printf("Monkey\tbox\tbanana\n");scanf("%c", &Monkey);getchar();printf("\t");scanf("%c", &Box);getchar();printf("\t\t");scanf("%c", &Banana);getchar();printf("\n操作步骤如下\n");if (Monkey != Box){Monkey_Go_Box(Monkey, Box);}if (Box != Banana){Monkey_Move_Box(Box, Banana);}Monkey_On_Box();Monkey_Get_Banana();printf("\n");getchar();}五、实验结果相关截图六、心得体会通过本次实验,我初步了学会了使用VC的新建工程,并且进行简单的程序编写。

此外我还学会如何使用一些谓词来解决生活中的一些简单问题,并且用VC编程给出具体的操作步骤,感觉对VC编程有了新的认识。

在实验中我也遇到过许多问题,比如在我写完代码进行编译时总是会出现一个错误“ fatal error C1010: 在查找预编译头时遇到意外的文件结尾,是否忘记了向源中添加“#include ‘stdafx.h’”关于这个错误我我问了几个同学得不出答案后,我决定通过上网查找,最终找到了解决方法,需要在该项目的每一个cpp结尾的文件属性中设置不使用预编译头即可。

在这个过程中也锻炼了自己解决问题的能力。

人工智能课内实验报告实验2:编程实现简单动物识别系统的知识表示学院:自动化学院班级:智能1501姓名:刘少鹏(33)学号: 06153034日期: 2017-3-13 10:15-12:00实验2:编程实现简单动物识别系统的知识表示一、实验目的1、理解和掌握产生式知识表示方法;2、能够通过VC编程语言实现产生式系统的规则库。

二、实验内容1、以动物识别系统的产生式规则为例;2、用选定的编程语言建造规则库和综合数据库,并能对它们进行增加、删除和修改操作。

三、实验步骤1、确定需要识别的动物及其属性本次实验的简单动物识别系统总共能识别7种动物,即:老虎、金钱豹、斑马、长颈鹿、企鹅、鸵鸟和信天翁。

2、建立识别七种动物识别系统的规则3、选定编程语言并确定综合数据库和规则库结构(1)选用C语言作为编程语言(2)综合数据库的建立(3)规则库的建立四、程序源代码#include<iostream>#include<string>using namespace std;struct RULES{int count;char pre[255];char back[255];int mark;};void check();RULES r[100] = {{ 1,"有毛发","哺乳动物",0 }, //所有规则静态数据库{ 1,"有奶","哺乳动物",0 },{ 1,"有羽毛","鸟",0 },{ 2,"会飞&下蛋&","鸟",0 },{ 1,"吃肉","食肉动物",0 },{ 3,"有锋利的牙齿&有爪&眼睛盯着前方&","食肉动物",0 },{ 2,"哺乳动物&有蹄&","有蹄类哺乳动物",0 },{ 2,"哺乳动物&反刍&","有偶蹄类哺乳动物",0 },{ 4,"哺乳动物&食肉动物&黄褐色&有暗斑&","金钱豹",0 },{ 4,"哺乳动物&食肉动物&黄褐色&黑色条纹&","老虎",0 },{ 4,"有蹄类哺乳动物&有长脖子&有长腿&有暗斑&","长颈鹿",0 },{ 2,"有蹄类哺乳动物&黑条纹&","斑马",0 },{ 5,"鸟&不会飞&有长脖子&有长腿&黑白色&","鸵鸟",0 },{ 4,"鸟&不会飞&会游泳&黑白色&","企鹅",0 },{ 2,"鸟&会飞&","信天翁",0 },{ 1,"反刍","哺乳动物",0 }};int number;int m;int cat = 15;int a;int length; //输入的事实长度string f[255]; //输入的事实数组void input(){while (1){cat++;cout <<"number"<< endl;cin >> r[cat].count;cout <<"输入事实,两种以上的事实请在每个事实后加上‘&’符号"<< endl;cin >> r[cat].pre;cout <<"输入结果"<< endl;cin >> r[cat].back;r[cat].mark = 0;while (1){cout <<"输入“1”继续添加规则,输入“2”查看规则库"<< endl;int p;cin >> p;if (p == 1){input();}else{if (p == 2){check();}else{cout <<"输入错误,重新输入"<< endl;}}}}}void delate(){cout <<"输入要删除的条数"<< endl;int bar;cin >> bar;for (int t = 0; t <= cat; t++){r[bar - 1] = r[bar];bar++;}cat--;check();}void check(){cout << endl <<"规则库如下"<< endl;for (int i = 0; i <= cat; i++){cout << i + 1 <<"."<<"由"<< r[i].pre <<"可得"<< r[i].back << endl; }cout << endl;while (1){cout <<"输入“1”继续添加规则,输入“3”删除选定的规则"<< endl;cin >> m;if (m == 1){input();}else{if (m == 3)delate();}}}int find_rule(int s) //查找规则库中是否还有可使用的规则{for (int i = 0; i <= 15; i++)s = s*r[i].mark;//cout<<"find_rule结果"<<s<<endl;return s;}int compare1(RULES r) //当前提条件为1时{int j = 0, i = 1;string str, str2;str =r.pre;while (i <= length){if (f[i] == str){str2 =r.back;f[length + 1] = str2; //加入事实库length++; //事实库的长度加1r.mark = 1; //标记规则已使用过break;}elsei++;}return r.mark;}int compare2(RULES r) //前提条件不为1{string b[10];string str, str2;int i, j = 1, num = 0;int a = 0;str =r.pre;for (i = 0; i != 10; ++i) //转换数组{b[i] ="";}for (i = 0; i != str.length(); ++i){if (str.at(i) != '&'){b[j] += str.at(i);}else{j++;}}i = 1;while (i <= r.count){for (j = 1; j != length + 1; j++){if (f[j] == b[i]){a += 1;}}i++;}if (a == r.count){str2 =r.back;f[length + 1] = str2; //加入事实库length++; //事实库的长度加1r.mark = 1; //标记规则已使用过}return r.mark;}void result(){int i = 1, m = 0;while (i != length + 1){if (f[i] =="金钱豹"){cout <<"该动物是金钱豹"<< endl;m = 1;break;}elseif (f[i] =="老虎"){cout <<"该动物是老虎"<< endl;m = 1;break;}elseif (f[i] =="长颈鹿"){cout <<"该动物是长颈鹿"<< endl;m = 1;break;}elseif (f[i] =="斑马"){cout <<"该动物是斑马"<< endl;m = 1;break;}elseif (f[i] =="鸵鸟"){cout <<"该动物是鸵鸟"<< endl;m = 1;break;}elseif (f[i] =="企鹅"){cout <<"该动物是企鹅"<< endl;m = 1;break;}elseif (f[i] =="信天翁"){cout <<"信天翁"<< endl;m = 1;break;}elsei++;}if (m == 0)cout <<"没有符合的动物,请确认特征,重新输入"<< endl;}void idetify(){int i = 0, u = 0;if (find_rule(u) == 0) //如果规则库中还有未使用的规则{//cout<<"还有未使用的规则"<<endl;int num = length;while (i<16) //从第一条规则开始遍历{if (r[i].mark == 0) //如果该条规则未使用{if (r[i].count == 1) //该条规则前提数为1{u = compare1(r[i]);if (u == 1)r[i].mark = 1;if (r[i].mark == 1){cout <<"使用规则"<< i + 1;cout <<"且加入的新事实为"<< r[i].back << endl;}}else{u = compare2(r[i]);if (u == 1)r[i].mark = 1;if (r[i].mark == 1){cout <<"使用规则"<< i + 1;cout <<"且加入的新事实为"<< r[i].back << endl;}}}if (i == 15){if (num != length){i = 0;num = length;}elsei = 16;}else{i++;}}}else{cout <<"所有的规则都已使用"<< endl;}result();}/*主函数*/void main(){cout <<"******智能1501班********"<< endl;cout <<"******06153034**********"<< endl;cout <<"******刘少鹏************"<< endl;cout <<"进行动物识别请输入7"<< endl;cout <<"进行规则库操作请输入8"<< endl;cin >> a;while (a == 8){ while (1){cout <<"添加规则输入‘1’,查看已有规则输入‘2’"<< endl;cin >> m;if (m == 1){input();}else{if (m == 2){check();}elsecout <<"输入错误请重新输入"<< endl;}}}if (a == 7){int u = 0;cout <<"请输入动物的特征数"<< endl;cin >> length;cout <<"请输入动物的特征"<< endl;for (int i = 1; i <= length; i++)cin >> f[i];idetify();}system("pause");}五、实验结果相关截图1、程序总体结构2、规则库操作→查看规则库3、规则库操作→添加规则→添加袋鼠规则4、规则库操作→删除规则→删除袋鼠规则5、动物识别→识别长颈鹿六、心得体会通过本次实验我深刻的理解和掌握产生式知识表示方法,并且能够通过VC编程语言实现产生式系统的规则库。

相关文档
最新文档