西电电院人工智能课程大作业

合集下载

西电人工智能大作业

西电人工智能大作业

人工智能大作业学生:021151**021151**时间:2013年12月4号一.启发式搜索解决八数码问题1. 实验目的问题描述:现有一个3*3的棋盘,其中有0-8一共9个数字,0表示空格,其他的数字可以和0交换位置(只能上下左右移动)。

给定一个初始状态和一个目标状态,找出从初始状态到目标状态的最短路径的问题就称为八数码问题。

例如:实验问题为从初始状态:要求编程解决这个问题,给出解决这个问题的搜索树以及从初始节点到目标到目标状态:节点的最短路径。

2.实验设备及软件环境利用计算机编程软件Visual C++ 6.0,用C语言编程解决该问题。

3.实验方法(1).算法描述:①.把初始节点S放到OPEN表中,计算()f S,并把其值与节点S联系起来。

②.如果OPEN表是个空表,则失败退出,无解。

③.从OPEN表中选择一个f值最小的节点。

结果有几个节点合格,当其中有一个为目标节点时,则选择此目标节点,否则就选择其中任一节点作为节点i。

④.把节点i从OPEN表中移出,并把它放入CLOSED的扩展节点表中。

⑤.如果i是目标节点,则成功退出,求得一个解。

⑥.扩展节点i,生成其全部后继节点。

对于i的每一个后继节点j:a.计算()f j。

b.如果j既不在OPEN表中,也不在CLOSED表中,则用估价函数f把它添加入OPEN表。

从j加一指向其父辈节点i的指针,以便一旦找到目标节点时记住一个解答路径。

c.如果j已在OPEN表或CLOSED表上,则比较刚刚对j计算过的f值和前面计算过的该节点在表中的f值。

如果新的f值较小,则I.以此新值取代旧值。

II.从j指向i,而不是指向它的父辈节点。

III.如果节点j在CLOSED表中,则把它移回OPEN表。

⑦转向②,即GO TO ②。

(2).流程图描述:(3).程序源代码:#include <stdio.h>#include<stdlib.h>struct node{int number[3][3];//用二维数组存放8数码 int W;//W表示与目标状态相比错放的数码数int Depth;//记录当前节点的深度struct node *parent;//指向父节点的指针struct node *next;//指向链表中下一个节点的指针};int CounterW(int Number[3][3]){//函数说明:计算当前状态与目标状态的W值int i,j;int W=0;int Desnode[3][3]={1,2,3,8,0,4,7,6,5};for(i=0; i<3; i++)for(j=0; j<3; j++)if(Number[i][j] != Desnode[i][j])W++;return W;}void PrintNode(node *A){int i,j;for(i=0; i<3; i++){for(j=0; j<3; j++)printf("%d ",A->number[i][j]);printf("\n");}printf("\n");}int CheckNode(node *open, node *close, int a[3][3]) {//检验该节点状态是否出现过的子程序int CheckFlag=0;int flag1,flag2;node *p=open;node *q=close;while(p != NULL){flag1=0;for(int i=0; i<3; i++){for(int j=0; j<3; j++)if(a[i][j]==p->number[i][j])flag1++;}if(flag1 == 9)break;elsep=p->next;}while(q != NULL){flag2=0;for(int i=0; i<3; i++){for(int j=0; j<3; j++)if(a[i][j] == q->number[i][j])flag2++;}if(flag2 == 9)break;elseq=q->next;}if((flag1==9) || (flag2==9))CheckFlag=1;//如果出现过,置标志位为1return CheckFlag;}struct node *FindNextNode(node *Prenode, node *open, node *close) { //扩展Prenode指向的节点,并将扩展所得结点组成一条单链表int i,j,m,n; //循环变量int temp; //临时替换变量int flag=0;int a[3][3];//临时存放二维数组struct node *p, *q, *head;head=(node *)malloc(sizeof(node));//head指向该链表首结点,并且作为返回值p=head;q=head;head->next=NULL;//初始化for(i=0;i<3;i++)//找到二维数组中0的位置{for(j=0;j<3;j++)if(Prenode->number[i][j]==0){flag=1;break;}if(flag==1)break;}//根据0的位置的不同,对a进行相应的变换for(m=0;m<3;m++)//将Prenode->number赋给afor(n=0;n<3;n++)a[m][n]=Prenode->number[m][n];if(i+1<=2)//情况1,0向下移{temp=a[i][j]; a[i][j]=a[i+1][j]; a[i+1][j]=temp;int CheckNum=CheckNode(open, close, a);if(CheckNum == 0)//若该结点未出现过则执行下面的操作{q=(node *)malloc(sizeof(node));for(m=0;m<3;m++)//将a赋给扩展节点q->number for(n=0;n<3;n++)q->number[m][n]=a[m][n];PrintNode(q);q->parent=Prenode;q->Depth=q->parent->Depth+1;//子结点的深度等于其父结点深度加1q->W=CounterW(q->number);q->next=NULL;p->next=q;//扩展节点插入head链表p=p->next;}}for(m=0;m<3;m++)//将Prenode->number重新赋给afor(n=0;n<3;n++)a[m][n]=Prenode->number[m][n];if(i-1>=0)//情况2,0向上移{temp=a[i][j]; a[i][j]=a[i-1][j]; a[i-1][j]=temp;int CheckNum=CheckNode(open, close, a);if(CheckNum == 0)//若该结点未出现过则执行下面的操作{q=(node *)malloc(sizeof(node));for(m=0;m<3;m++)//将a赋给q->numberfor(n=0;n<3;n++)q->number[m][n]=a[m][n];PrintNode(q);q->parent=Prenode;q->Depth=q->parent->Depth+1;q->W=CounterW(q->number);q->next=NULL;p->next=q;p=p->next;}}for(m=0; m<3; m++)for(n=0; n<3; n++)a[m][n]=Prenode->number[m][n];if(j-1>=0)//情况3,0向左移{temp=a[i][j]; a[i][j]=a[i][j-1]; a[i][j-1]=temp;int CheckNum=CheckNode(open, close, a);if(CheckNum == 0)//若该结点未出现过则执行下面的操作{q=(node *)malloc(sizeof(node));for(m=0; m<3; m++)//将a赋给q->numberfor(n=0; n<3; n++)q->number[m][n]=a[m][n];PrintNode(q);q->parent=Prenode;q->Depth=q->parent->Depth+1;q->W=CounterW(q->number);q->next=NULL;p->next=q;p=p->next;}}for(m=0;m<3;m++)for(n=0;n<3;n++)a[m][n]=Prenode->number[m][n];if(j+1<=2)//情况4,0向右移{temp=a[i][j]; a[i][j]=a[i][j+1]; a[i][j+1]=temp;int CheckNum=CheckNode(open, close, a);if(CheckNum == 0)//若该结点未出现过则执行下面的操作{q=(node *)malloc(sizeof(node));for(m=0; m<3; m++)//将a赋给q->numberfor(n=0; n<3; n++)q->number[m][n]=a[m][n];PrintNode(q);q->parent=Prenode;q->Depth=q->parent->Depth+1;q->W=CounterW(q->number);q->next=NULL;p->next=q;p=p->next;}}head=head->next;return head;}node *insert(node *open,node *head){ //将head链表的结点依次插入到open链表相应的位置,//使open表中的结点按从小到大排序。

大工23春《人工智能》大作业题目及要求

大工23春《人工智能》大作业题目及要求

大工23春《人工智能》大作业题目及要求引言概述:人工智能(Artificial Intelligence,简称AI)是一门关注于使机器能够模仿人类智能行为的科学与技术。

在大工23春的《人工智能》课程中,学生们将面临一项重要的大作业。

本文将介绍大工23春《人工智能》大作业的题目和要求。

正文内容:1. 题目一:机器学习算法的实现与应用1.1 算法选择:学生需选择并实现一个机器学习算法,如决策树、支持向量机、神经网络等。

1.2 数据集准备:学生需准备一个合适的数据集,用于训练和测试所选择的机器学习算法。

1.3 算法实现:学生需要编写代码,实现所选择的机器学习算法,并对数据集进行训练和测试。

2. 题目二:自然语言处理应用开发2.1 文本处理:学生需要选择一个自然语言处理任务,如文本分类、情感分析等,并准备相应的文本数据集。

2.2 特征提取:学生需要设计并实现合适的特征提取方法,将文本数据转化为机器学习算法可以处理的形式。

2.3 模型训练与应用:学生需要选择并实现一个适当的机器学习算法,对提取的特征进行训练,并应用于所选择的自然语言处理任务。

3. 题目三:计算机视觉应用开发3.1 图像处理:学生需要选择一个计算机视觉任务,如图像分类、目标检测等,并准备相应的图像数据集。

3.2 特征提取:学生需要设计并实现合适的特征提取方法,将图像数据转化为机器学习算法可以处理的形式。

3.3 模型训练与应用:学生需要选择并实现一个适当的机器学习算法,对提取的特征进行训练,并应用于所选择的计算机视觉任务。

4. 题目四:强化学习算法的实现与应用4.1 算法选择:学生需选择并实现一个强化学习算法,如Q-learning、Deep Q Network等。

4.2 环境建模:学生需要设计一个适当的环境,用于训练所选择的强化学习算法。

4.3 算法实现:学生需要编写代码,实现所选择的强化学习算法,并对环境进行训练和测试。

5. 题目五:深度学习模型的实现与应用5.1 模型选择:学生需选择并实现一个深度学习模型,如卷积神经网络、循环神经网络等。

人工智能课程大作业

人工智能课程大作业

作业题目摘要:机器博弈是人工智能的一个重要研究分支,本文通过设计一个五子棋智能博奕程序,采用传统的博弈树算法,利用剪枝和极大极小树搜索最佳位置,从而实现人机智能博弈。

并对现有算法存在的问题进行探究改进,最后给出展示,结果表明效果比较理想。

关键词:人工智能;五子棋;博弈本组成员:本人分工:α-β剪枝实现1 引言人工智能[1]是一门综合新型的新兴边缘科学,与生物工程、空间技术并列为三大尖端技术,而机器博弈却是其一个重要的研究分支。

它研究如何利用计算机去实现那些过去只能靠人的智力去完成的工作,博弈为人工智能提供了一个很好的应用场所。

博弈过程可以采用与或树进行知识表达,这种表达形式称为博弈树。

α—β剪枝技术是博弈树搜索中最常采用的策略。

2 算法原理与系统设计根据五子棋游戏规则,此次五子棋游戏我们采用基于极大极小值分析法的α—β剪枝算法来实现计算机走棋。

α—β剪枝技术是博弈树搜索中最常采用的策略,α—β剪枝搜索由极大极小值分析法演变而来[2]。

极大极小分析法其基本思想或算法是:(1) 设博弈的双方中一方为MAX,另一方为MIN。

然后为其中的一方(例如MAX)寻找一个最优行动方案。

(2) 为了找到当前的最优行动方案,需要对各个可能的方案所产生的后果进行比较,具体地说,就是要考虑每一方案实施后对方可能采取的所有行动,并计算可能的得分。

(3) 为计算得分,需要根据问题的特性信息定义一个估价函数,用来估算当前博弈树端节点的得分。

此时估算出来的得分称为静态估值。

(4) 当端节点的估值计算出来后,再推算出父节点的得分,推算的方法是:对“或”节点,选其子节点中一个最大的得分作为父节点的得分,这是为了使自己在可供选择的方案中选一个对自己最有利的方案;对“与”节点,选其子节点中一个最小的得分作为父节点的得分,这是为了立足于最坏的情况。

这样计算出的父节点的得分称为倒推值。

(5) 如果一个行动方案能获得较大的倒推值,则它就是当前最好的行动方案。

人工智能大作业题目

人工智能大作业题目

人工智能大作业题目嘿,同学们!咱们今天来聊聊这个听起来超级酷的“人工智能”。

要说这人工智能啊,那可真是个神奇的东西。

就拿我前几天的一次经历来说吧。

我去商场逛街,看到有个智能机器人在给顾客指引方向,回答各种问题,那叫一个溜!它不仅能清楚地告诉你各个店铺的位置,还能根据你的需求推荐合适的商品。

我当时就在想,这人工智能发展得也太快了,说不定哪天它就能完全替代人类的某些工作啦。

咱们先从小学的教材说起。

在小学阶段,人工智能的内容更多是通过一些有趣的故事和简单的示例来引入的。

比如说,会讲一个小朋友和智能小助手一起完成任务的故事,让小朋友们初步感受人工智能的神奇。

就像有个故事里,小明同学做作业的时候遇到了难题,他的智能学习伙伴一下子就给出了详细的解题步骤和思路,帮助小明轻松解决了问题。

到了初中,教材里的人工智能内容就逐渐深入啦。

会开始介绍一些基本的原理和概念,像什么是机器学习、什么是图像识别。

记得有一次,我看到一群初中生在讨论他们做的一个关于智能垃圾分类的小项目。

他们可积极了,有的在研究如何让机器通过图像准确识别不同的垃圾类别,有的在想办法提高分类的效率。

看着他们那认真的劲儿,我就知道,这人工智能的种子已经在他们心里生根发芽了。

高中的教材那可就更有深度了。

不仅要深入理解人工智能的算法和模型,还要能够运用所学知识去解决一些实际的问题。

比如说,会让同学们去设计一个简单的智能交通系统,优化城市的交通流量。

我听说有个高中班级,为了完成这个作业,分成了好几个小组。

有的去收集交通数据,有的负责建立模型,还有的负责测试和优化。

最后他们呈现出来的成果还真让人眼前一亮,连老师都忍不住竖起大拇指呢!其实啊,人工智能不仅仅是在教材里的知识,它已经渗透到我们生活的方方面面啦。

比如说,我们用的智能手机里的语音助手,能够听懂我们的话,帮我们完成各种操作;还有家里的智能家电,能根据我们的习惯自动调节工作模式。

这一切都离不开人工智能的功劳。

西安电子科技大学人工智能复习课习题

西安电子科技大学人工智能复习课习题

1.请选用框架法和语义网络法表示下述报道的沙尘暴灾害事件。

(虚拟新华社3月16日电)昨日,沙尘暴袭击韩国汉城,气场与高速公路被迫关闭,造成的损失不详。

此次沙尘暴起因中韩专家认为是由于中国内蒙古地区过分垦牧破坏植被所致。

(提示:分析概况用下划线标出的要点,经过概念化形成槽或节点)2. 请用归结反演的方法求解下述问题。

已知:(1)John 是贼。

(2)Paul 喜欢酒(wine )。

(3)Paul 也喜欢奶酪(cheese )。

(4)如果Paul 喜欢某物,那么John 也喜欢某物。

(5)如果某人是贼,而且他喜欢某物,那么他就会偷窃该物。

请回答下面的问题:John 会偷窃什么?3. MYCIN 是一个用于细菌感染性疾病诊断的专家系统,它的不确定性推理模型中采用可信度作为不确定性量度。

请简述什么是不确定性推理及不确定性推理几个关键问题,并按照MYCIN 系统的推理方法计算结论B1和B2的可信度。

已知初始证据A1,A2,A3的可信度值均为1,推理规则如下:R1: IFA1 THEN B1 (0.8) R2: IFA2 THEN B1 (0.5) R3: IF A3∧B1 THENB2 (0.8) 求CF(B1)和CF(B2)的值。

()()()(),()0,()0121212()()()()(),()0,()012121212()()12,()()0121min{|()|,|()|}12CF H CF H CF H CF H CF H CF H CF H CF H CF H CF H CF H CF H CF H CF H CF H CF H CF H CF H CF H ⎧⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎩+-⨯≥≥=++⨯<<+⨯<- 4.设A 、B 分别是论域U 、V 上的模糊集,U=V={1,2,3,4,5}, A=1/1+ 0.5/2, B=0.4/3+0.6/4+1/5并设模糊知识及模糊证据分别为:IF x is A THEN y is B x is A ’其中,A ’的模糊集为:A ’=1/1+ 0.4/2+ 0.2/3假设A 和A ’可以匹配,请利用模糊推理的方法求出该模糊知识和模糊证据能得出什么样的模糊结论。

人工智能大作业

人工智能大作业

人工智能大作业在当今科技飞速发展的时代,人工智能无疑是最具影响力和变革性的领域之一。

它已经悄然渗透进我们生活的方方面面,从智能手机中的语音助手,到医疗领域的疾病诊断,再到交通系统的智能调控,其身影无处不在。

人工智能的定义其实并不复杂,通俗地说,就是让机器能够像人类一样思考、学习和行动。

然而,要实现这一点,背后涉及到的技术和理论却极其复杂和深奥。

让我们先来谈谈人工智能在图像识别方面的应用。

以往,要让计算机理解一张图片的内容,几乎是天方夜谭。

但现在,通过深度学习算法,计算机可以准确地识别出图片中的物体、人物甚至是场景。

这一技术的应用范围十分广泛,比如在安防领域,能够快速识别出可疑人员;在自动驾驶中,帮助车辆识别道路标志和障碍物。

再来说说自然语言处理。

我们每天使用的语音助手,如 Siri 和小爱同学,就是自然语言处理的实际应用。

它们能够理解我们的语言,并给出相应的回答。

不仅如此,在机器翻译领域,人工智能也取得了巨大的进步。

以往的机器翻译往往生硬且不准确,而如今,借助深度学习和大规模语料库,翻译结果越来越流畅和准确。

人工智能在医疗领域的应用更是给人们带来了新的希望。

通过对大量医疗数据的分析,人工智能可以辅助医生进行疾病诊断,提高诊断的准确性和效率。

例如,在癌症的早期筛查中,人工智能系统能够从海量的影像数据中发现细微的病变迹象,为患者争取到宝贵的治疗时间。

然而,人工智能的发展也并非一帆风顺。

其中一个重要的挑战就是数据的质量和隐私问题。

高质量的数据对于训练有效的人工智能模型至关重要,但获取和整理这些数据并非易事。

同时,数据的隐私保护也成为了公众关注的焦点,如何在利用数据的同时确保个人隐私不被泄露,是亟待解决的问题。

另一个挑战是人工智能的伦理和道德问题。

比如,在决策过程中,如果人工智能系统存在偏见,可能会导致不公平的结果。

此外,当人工智能系统出现错误时,责任的界定也变得模糊不清。

尽管面临诸多挑战,但人工智能的未来依然充满无限可能。

人工智能大作业

人工智能大作业

人工智能大作业人工智能(Artificial Intelligence,AI)是计算机科学的一个重要分支领域,旨在使计算机能够模拟和执行人类智能任务。

随着人工智能技术的发展和应用范围的不断拓展,越来越多的领域开始借助人工智能来解决问题,提高效率。

作为人工智能大作业的一部分,我们将探讨人工智能在医疗领域的应用和前景。

1. 人工智能在医疗领域的应用1.1 医学影像诊断人工智能能够通过分析医学图像(如CT扫描、MRI等)提供准确的诊断结果和判断,辅助医生进行疾病诊断和治疗方案选择。

通过对海量医学影像数据的学习和分析,人工智能可以帮助医生更快速、精确地识别和定位疾病。

1.2 个性化治疗通过分析患者个体化的生理数据和基因信息,人工智能可以为每位患者设计出最佳的治疗方案。

人工智能可以根据患者的基因型、病史以及其他相关数据,进行风险评估和治疗效果预测,为患者提供更精确的治疗建议。

1.3 机器人辅助手术借助人工智能技术,机器人可以在手术过程中提供精确的操作和辅助。

机器人可以通过高精度的定位和手术规划,提高手术的准确性和安全性。

此外,机器人还可以在手术过程中收集和分析数据,帮助医生做出更准确的决策。

1.4 医疗健康管理通过人工智能技术的支持,可以开发出智能化的医疗健康管理系统。

这些系统可以实时监测患者的生理数据,并根据患者的状况提供个性化的健康指导和建议。

患者可以通过智能设备和手机应用来管理和监控自己的健康状况。

2. 人工智能在医疗领域的前景随着人工智能技术的不断发展和完善,它在医疗领域的应用前景非常广阔。

2.1 提高医疗效率和精准度人工智能可以通过分析和处理大量的医学数据,帮助医生快速准确地做出诊断和治疗决策。

这将大大提高医疗效率,缩短患者等待时间,并降低医疗错误率,提高精确度。

2.2 实现个性化医疗人工智能可以根据患者的个体差异,提供个性化的诊断和治疗方案。

通过分析患者的基因、生理数据和病史等信息,人工智能可以为每位患者定制适合其的医疗方案,提高治疗效果。

大工《人工智能》大作业参考题目及要求【内容仅供参考】592

大工《人工智能》大作业参考题目及要求【内容仅供参考】592

题目:广度优先搜索算法1.谈谈你对本课程学习过程中的心得体会与建议?人工智能是一门前沿且综合性非常强的课程,自己在整个课程的学习中,认识到人工智能领域的许多方面,以及了解和学习了人工智能课程相关的一些课程的学习过程中,涉及到了较多的计算机知识点,包括很多计算机个人建议学完这门课程后,多去尝试做一些简单的实践练习,实践中除了相关理论知识如算法等作为分析支撑,还要能够通过代码来编写实现一些简单案例,并进行测试验证和推导,最后尽可能将实现的案例进行举一反三,学习效果会大大提升。

在尝试实现练习案例中,涉及到编程技术,首先至少应该熟练使用一门编程语言,比较推荐Python作为主要编程语言进行实现案例以及日常练习,而且在Python编程相关的领域内,本身已经有很多相关成熟的代码demo去借鉴参考,这也有助于自己快速的上手和试验。

另外,无论是课程学习中,还是学习完后,一定要善于作笔记总结,汇总遇到的每个难点知识。

现在互联网比早以前发展的更成熟,我们可以通过互联网搜索相关知识,进行课外补充,这也是一种非常有效的提升课程知识的方式。

同时,利用互联网进行沟通探讨也是一种良好的学习方式,比如自己写博客交流,或者在相关论坛进行发帖提问式交流,都是非常方便且有效的,最后不要忘记将知识点进行再次归纳、记录进自己的笔记中。

目前人工智能技术的发展已经进入了更广泛的领域,而且目前还在不断的发展并且欣欣向荣,所以该课程是一门非常有意义的课程,学完这门课程后,个人推荐应该对这个领域进行持续关注,结合现代化人工智能需求,以及融入到身边的日常案例,积极进行更广泛和有深度的自我研究学习。

2.《人工智能》课程设计,从以下5个题目中任选其一作答。

题目:广度优先搜索算法广度优先搜索算法算法介绍:广度优先搜索算法又称为宽度优先搜索算法,英文全称是Breadth First Search(BFS),它是属于一种盲目搜索算法,该算法按照广度或宽度进行扩展搜索的,如果目标节点存在,用该算法总可以找到该目标节点,而且是最短路径节点,但该算法的时间和空间复杂度都相对比较高。

人工智能大作业(一)

人工智能大作业(一)

人工智能大作业(一)引言:人工智能(Artificial Intelligence,简称AI)是近年来备受关注的热门领域。

随着计算能力的提高和算法的进步,人工智能正在日益渗透到各个行业和领域中。

本文将探讨人工智能大作业的相关内容,着重分析了其中的五个重要方面。

正文:一、机器学习(Machine Learning)1.1 监督学习(Supervised Learning)的基本概念及示例1.2 无监督学习(Unsupervised Learning)的基本概念及应用领域1.3 强化学习(Reinforcement Learning)的基本原理和算法1.4 深度学习(Deep Learning)的基本结构和典型应用1.5 机器学习在人工智能大作业中的实践与挑战二、自然语言处理(Natural Language Processing)2.1 词法分析和语法分析的基本原理和任务2.2 语义分析和语义关系的理论基础和实践应用2.3 文本分类和情感分析的相关技术和方法2.4 机器翻译和语音识别的高级应用和发展趋势2.5 自然语言处理在人工智能大作业中的应用与挑战三、计算机视觉(Computer Vision)3.1 图像处理和特征提取的基本原理和方法3.2 目标检测和图像识别的常用算法和技术3.3 图像分割和场景理解的相关研究和实践3.4 视频分析和行为识别的进展和应用领域3.5 计算机视觉在人工智能大作业中的应用案例和前景展望四、数据挖掘(Data Mining)4.1 数据预处理和数据清洗的基础知识和常用技术4.2 数据集成和数据转换的数据挖掘流程和方法4.3 关联规则和聚类分析的基本概念和算法4.4 分类和预测分析的实践案例和评价指标4.5 数据挖掘在人工智能大作业中的应用与发展趋势五、智能决策系统(Intelligent Decision System)5.1 知识表示和推理的基本方法和知识表示语言5.2 不确定性建模和决策制定的技术和策略5.3 专家系统和推荐系统的典型特征和实现方法5.4 异常检测和智能优化的相关研究和应用5.5 智能决策系统在人工智能大作业中的实践案例和展望总结:人工智能大作业(一)涵盖了机器学习、自然语言处理、计算机视觉、数据挖掘和智能决策系统等五个重要方面。

人工智能大作业

人工智能大作业

人工智能大作业课程人工智能实验名称动物专家系统算法的实现专业班级计算机0803 姓名宋喜新学号 0304080328专家系统在动物识别领域内的应用一:专家系统概念1.1专家系统(expert system)是人工智能领域应用研究最活跃和最广泛的课题之一。

第一个专家系统是在1956年由Allen Newell、Herbert Simon及J. C. Shaw 所发展。

其后,许多专家系统也纷纷随之建立,但在前期多半是属于研究性质的雏形系统。

1970年代之后,人工智能与专家系统专用的程序语言及软件开发工具逐渐开始发展,而各种知识表示法及算法也被广泛地研究,使得专家系统的建构与发展方式产生了不小的改变。

在1980年代后期开始,专家系统便能够逐渐脱离实验室的研究而广泛应用于各行业中[。

专家系统是一个具有大量的专门知识与经验的程序系统,它应用人工智能技术和计算机技术,根据某领域一个或多个专家提供的知识和经验,进行推理和判断,模拟人类专家的决策过程,以便解决那些需要人类专家处理的复杂问题[1]。

1.2 专家系统的结构专家系统的基本结构如图1所示,其中箭头方向为数据流动的方向。

专家系统通常由人机交互界面、知识库、推理机、解释器、综合数据库、知识获取等6个部分构成。

机构中的知识库包括两个部分,一是与当前问题有关的数据信息,二是进行推理时要用到的一般知识和领域知识。

专家系统的问题求解过程是通过知识库中的知识来模拟专家的思维方式的,所以知识库中知识的质量和数量决定着专家系统的质量水平;而推理机用于记忆所采用的规则和控制策略的程序,使整个专家系统能够以逻辑方式协调的工作,它能够根据知识进行推理并导出结论,而不是简单的搜索现成的答案;综合数据库用于存储领域或问题的厨师数据和推理过程中得到的中间数据,即被处理对象的一些当前事实;解释器能够向用户解释专家的行为,包括解释推理结论的正确性以及系统输出其他候选解的原因;人机交互界面能够使系统与用户进行对话,用户能够输入必要数据、提出问题和了解推理过程及推理结果,而系统则通过此界面要求用户回答问题,或回答用户提出的问题并作必要解释[1。

人工智能大作业-

人工智能大作业-

人工智能课程考查论文学号姓名系别年级专业人工智能大作业(1)什么是人工智能?人工智能(Artificial Intelligence) ,英文缩写为AI。

它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。

人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。

人工智能的定义可以分为两部分,即“人工”和“智能”。

“人工”比较好理解,争议性也不大。

有时我们会要考虑什么是人力所能及制造的,或者人自身的智能程度有没有高到可以创造人工智能的地步,等等。

但总的来说,“人工系统”就是通常意义下的人工系统。

人工智能是计算机学科的一个分支,二十世纪七十年代以来被称为世界三大尖端技术之一(空间技术、能源技术、人工智能)。

也被认为是二十一世纪(基因工程、纳米科学、人工智能)三大尖端技术之一。

这是因为近三十年来它获得了迅速的发展,在很多学科领域都获得了广泛应用,并取得了丰硕的成果,人工智能已逐步成为一个独立的分支,无论在理论和实践上都已自成一个系统。

人工智能(Artificial Intelligence,AI)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。

人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,但没有一个统一的定义。

(2)简述人工智能的研究内容与研究目标、人工智能的研究途径和方法、人工智能的研究领域。

A.人工智能的研究内容:1、搜索与求解:为了达到某一目标而多次地进行某种操作、运算、推理或计算的过程。

事实上,搜索是人在求解问题时而不知现成解法的情况下所采用的一种普遍方法。

许多问题(包括智力问题和实际工程问题)的求解都可以描述为或归结为对某种图或空间的搜索问题。

搜索技术就成为人工智能最基本的研究内容2、学习与发现:学习与发现是指机器的知识学习和规律发现。

西电电院人工智能课程大作业。

西电电院人工智能课程大作业。

西电人工智能大作业八数码难题一.实验目的八数码难题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态。

例如:(a) 初始状态 (b) 目标状态图1 八数码问题示意图请任选一种盲目搜索算法(深度优先搜索或宽度优先搜索)或任选一种启发式搜索方法(A 算法或 A* 算法)编程求解八数码问题(初始状态任选),并对实验结果进行分析,得出合理的结论。

本实验选择宽度优先搜索:选择一个起点,以接近起始点的程度依次扩展节点,逐层搜索,再对下一层节点搜索之前,必先搜索完本层节点。

二.实验设备及软件环境Microsoft Visual C++,(简称Visual C++、MSVC、VC++或VC)微软公司的C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++/CLI 等编程语言。

三.实验方法算法描述:(1)将起始点放到OPEN表;(2)若OPEN空,无解,失败;否则继续;(3)把第一个点从OPEN移出,放到CLOSE表;(4)拓展节点,若无后继结点,转(2);(5)把n的所有后继结点放到OPEN末端,提供从后继结点回到n的指针;(6)若n任意后继结点是目标节点,成功,输出;否则转(2)。

流程图:代码:#include <stdlib.h>#include <stdio.h>typedef struct Node {int num[9]; //棋盘状态int deepth; //派生的深度 g(n)int diffnum; //不在位的数目 h(n)int value; //耗散值 f(n)=g(n)+h(n)struct Node * pre;struct Node * next;struct Node * parent;}numNode; /* ---------- end of struct numNode ---------- */int origin[9]; //棋盘初始状态int target[9]; //棋盘目标状态int numNode_num,total_step;numNode *open,*close; //Open表和Close表numNode *create_numNode(){return (numNode *)malloc(sizeof(numNode));}numNode *open_getfirst(numNode *head); //返回第一项,并从Open表中删除void open_insert(numNode *head,numNode *item); //向Open表中按序插入新节点void close_append(numNode *head,numNode *item); //向Close表中插入新节点int expand(numNode *item); //扩展节点int print_result(numNode *item); //打印结果numNode *copy_numNode(numNode *orgin);char isNewNode(numNode *open,numNode *close,int num[9]);//是否在Open表或Close表中void print_num(int num[9]); //打印棋盘状态int diff(int num[9]); //求不在位棋子的个数void init(); //初始化,获得棋盘初始状态和目标状态void swap(int *a,int *b);int operate(int num[],int op);void free_list(numNode *head);/** Name: 主函數* Description: 程序入口*/Int main ( int argc, char *argv[] ){//初始化Open表和Close表open=create_numNode();close=create_numNode();open->pre=open->next=close->pre=close->next=NULL; init(); //由用户输入初始和目标状态//初始化初始节点numNode *p1;p1=create_numNode();p1->parent=NULL;p1->deepth=0;int i=0;for ( i=0; i<9; i++){p1->num[i]=origin[i];}open_insert(open,p1);numNode_num=1;p1=open_getfirst(open);while (p1!=NULL){close_append(close,p1);if(expand(p1))return EXIT_SUCCESS;p1=open_getfirst(open);}printf("No solution!\n");return EXIT_SUCCESS;} /* ---------- end of function main ---------- */voidinit ( ){while(1){printf("Please input opriginal status:\nFor example:123456780 stands for\n""1 2 3\n""4 5 6\n""7 8 0\n");char temp[10];scanf("%s",&temp);int i=0;for ( i=0;i<9 && temp[i]-'0'>=0 && temp[i]-'0'<=8; i++){origin[i]=temp[i]-'0';}printf("Please input target status:\n");scanf("%s",&temp);int j=0;for ( j=0; j<9 && temp[j]-'0'>=0 && temp[j]-'0'<=8; j++){target[j]=temp[j]-'0';}system("cls");if ( i==9&&j==9){break;}}} /* ----- end of function init ----- */voidopen_insert (numNode *head,numNode *item){numNode *p,*q;p=head->next;q=head;while ( p!=NULL && item->value > p->value ){q=p;p=p->next;}q->next=item;item->pre=q;item->next=p;if(p!=NULL){p->pre=item;}} /* ----- end of function open_insert ----- */numNode *open_getfirst (numNode *head){numNode *p;if ( head->next == NULL ){return NULL;}p=head->next;head->next=p->next;if ( p->next != NULL ){p->next->pre=head;}p->pre=NULL;p->next=NULL;return p;} /* ----- end of function open_getfirst ----- */voidclose_append (numNode *head,numNode *item){item->next=head->next;item->pre=head;head->next=item;if ( item->next!=NULL ){item->next->pre=item;}} /* ----- end of function close_append ----- */intexpand (numNode *p1){numNode * p2;int op=1;for ( op=1; op<=4; op++){p2=copy_numNode(p1);operate(p2->num,op);if(isNewNode(open,close,p2->num)=='N'){p2->parent=p1;p2->deepth=p1->deepth+1;p2->diffnum=diff(p2->num);p2->value=p2->deepth+p2->diffnum;if(p2->diffnum==0){total_step=print_result(p2);printf("Total step: %d\n",total_step); free_list(open);free_list(close);return 1;}else{numNode_num++;open_insert(open,p2);}}elsefree(p2);}return 0;} /* ----- end of function expand ----- */intoperate(int m[], int op){int blank;blank=0;while (m[blank]!=0 && blank<9 )++blank;if (blank==9)return 1;switch (op) {case 1: /* up */if (blank>2)swap(m+blank,m+blank-3);break;case 2: /* down */if (blank<6)swap(m+blank,m+blank+3);break;case 3: /* left */if (blank!=0 && blank!=3 && blank!=6) swap(m+blank,m+blank-1);break;case 4: /* right */if (blank!=2 && blank!=5 && blank!=8) swap(m+blank,m+blank+1);break;default : return 1;}return 0;}voidswap(int *a, int *b){int c;c=*a;*a=*b;*b=c;}numNode *copy_numNode (numNode *origin){numNode *p;p=create_numNode();p->deepth=origin->deepth;p->diffnum=origin->diffnum;p->value=origin->value;int i;for ( i=0; i<9; i++){(p->num)[i]=(origin->num)[i];}return p;} /* ----- end of function copy_numNode ----- */intdiff (int num[9]){int i,diffnum=0;for(i=0;i<9;i++)if(num[i]!=target[i])diffnum++;return diffnum;} /* ----- end of function diff ----- */charisNewNode (numNode *open,numNode *close,int num[9]) {numNode *p;int i=0;p=open->next;while ( p!=NULL ){for ( i=0; i<9; i++){if(p->num[i]!=num[i])break;}if(i==9)return 'O'; //Openp=p->next;}p=close->next;while ( p!=NULL ){for ( i=0; i<9; i++){if(p->num[i]!=num[i])break;}if(i==9)return 'C'; //Closep=p->next;}return 'N';} /* ----- end of function isNewNode ----- */voidfree_list (numNode *head){numNode *p,*q;p=head->next;while ( p!=NULL ){q=p->next;free(p);p=q;}free(head);} /* ----- end of function free_list ----- */voidprint_num (int num[9]){int i;for ( i=0; i<9; i++){printf("%d\t",num[i]);if((i%3)==2)printf("\n");}} /* ----- end of function print_num ----- */intprint_result ( numNode *item){numNode *p;int step;p=item;if(p!=NULL){step=print_result(p->parent);printf("\nStep %d:\n",step+1);print_num(p->num);return step+1;}else{return -1;}}四.结果:下图实验结果中,一步代表一层的搜索结果中的最优解;八数码难题的宽度优先搜索树:五.实验分析宽度优先搜索属于一种盲目搜索算法,可以系统的展开所有节点,理论上一定能达到搜寻目的。

大工《人工智能》大作业参考题目及要求【内容仅供参考】647

大工《人工智能》大作业参考题目及要求【内容仅供参考】647

题目:人工智能1.谈谈你对本课程学习过程中的心得体会与建议?人工智能是研究如何利用计算机来模拟人脑所从事的感知、推理、学习、思考、规划等人类智能活动,来解决需要用人类智能才能解决的问题,以延伸人们智能的科学。

掌握人工智能的基本概念、基本原理、知识的表示、推理机制和求解技术,以及机器学习的技术方法,掌握人工智能的一个问题和三大技术,即通用问题求解和知识表示技术、搜索技术、推理技术。

人工智能的定义可以分为两部分,即“人工”和“智能”。

“人工”比较好理解,争议性也不大。

有时我们会要考虑什么是人力所能及制造的,或者人自身的智能程度有没有高到可以创造人工智能的地步,等等。

但总的来说,“人工系统”就是通常意义下的人工系统。

关于什么是“智能”,就问题多多了。

这涉及到其它诸如意识、自我、思维等等问题。

人唯一了解的智能是人本身的智能,这是普通人认可的观点。

但是我们对我们自身智能的理解都非常有限,对构成人的智能的必要元素也了解有限,所以就很难定义什么是“人工”制造的“智能”了。

2.《人工智能》课程设计,从以下5个题目中任选其一作答。

《人工智能》课程设计题目三:深度优先搜索算法要求:(1)撰写一份word文档,里面包括(算法思路、算法程序框图、主要函数代码)章节。

(2)算法思路:简单介绍该算法的基本思想,至少100字。

(3)算法程序框图:绘制流程图或原理图,从算法的开始到结束的程序框图。

(4)主要函数代码:列出算法的具体代码。

(5)简单描述在人工智能的哪些领域需要使用深度优先搜索算法。

答:深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。

一般用堆数据结构来辅助实现DFS算法。

1.深度优先遍历图算法步骤:(1)访问顶点v;(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。

西电 人工智能 习题

西电 人工智能 习题

(2)和(7)归结得: T(孙) ( 8) (4)和(8)归结得: ¬ T(赵) (9) (6)和(9)归结得: NIL 所以,赵不是盗窃犯。同理可以证明李也不是盗窃犯。
5.已知 规则 1:任何人的兄弟不是女性。 规则 2:任何人的姐妹必是女性。 事实:Mary 是 Bill 的姐妹。 求证:用消解反演方法证明 Mary 不是 Tom 的兄弟。
R2:任何人的姐妹必是女性。
(x)(y)(sister( x, y) woman( x))
事实:Mary是Bill的姐妹。
sister(Mary,Bill )
求证:Mary不是Tom的兄弟。
brother ( Mary, Tom )
第二步:将上述规则与事实及求证目标的否定化成子句集。
R1 : (x)(y )(brother ( x, y ) woman( x))
答:钱和孙是盗窃犯,赵和李不是。下面给出求解过程。 设用 T(x)表示 x 是盗窃犯,则根据题意可得如下子句集: A:T(赵)∨T(钱) ( 1) B:T(钱)∨T(孙) ( 2) C: T(孙) ∨T(李) (3) D: ¬ T(赵)∨ ¬ T(孙) ( 4) E: ¬ T(钱)∨ ¬ T(李) ( 5) 下面先求谁是盗窃犯。把¬T(x)∨Ansewer(x)并入上述子句集,即多出一个子句: ¬T(x)∨Ansewer(x) (6) (1)和(4)归结得: T(钱)∨ ¬ T(孙) (7) (2)和(7)归结得: T(钱)。 ( 8) (6)和(8)归结得: Answer(钱)。 (9) {钱/x} (3)和(5)归结得: T(孙)∨ ¬ T(钱) (10) (2)和(10)归结得: T(孙)。 (11) (6)和(11)归结得: Answer(孙)。 (12) {孙/x} 因此,钱和孙是盗窃犯,此外无论如何也归结不出 Ansewer(赵)和 Ansewer(李)。 下面证明赵不是盗窃犯,即证明¬T(赵)。子句集如下: A:T(赵)∨T(钱) (1) B:T(钱)∨T(孙) ( 2) C: T(孙) ∨T(李) (3) D: ¬ T(赵)∨ ¬ T(孙) ( 4) E: ¬ T(钱)∨ ¬ T(李) ( 5) 要证明赵不是盗窃犯,即证明¬T(赵)。 对¬T(赵)进行否定,并入上述子句集中,即多出如下子句: ¬(¬T(赵)), 即 T(赵) (6) 应用归结原理对子句集进行归结: (3)和(5)归结得: T(孙)∨ ¬ T(钱) (7)

西电人工智能大作业八数码问题

西电人工智能大作业八数码问题

一、 问题描述
1.1 待解决问题的解释 八数码游戏(八数码问题)描述为:在 3×3 组成的九宫格棋盘上,摆有八 个将牌, 每一个将牌都刻有 1-8 八个数码中的某一个数码。 棋盘中留有一个空格, 允许其周围的某一个将牌向空格移动, 这样通过移动将牌就可以不断改变将牌的 布局。这种游戏求解的问题是:给定一种初始的将牌布局或结构(称初始状态) 和一个目标的布局(称目标状态) ,问如何移动将牌,实现从初始状态到目标状 态的转变。 1.2 问题的搜索形式描述(4 要素) 初始状态: 8 个数字将牌和空格在九宫格棋盘上的所有格局组成了问题的状态空间。其 中,状态空间中的任一种状态都可以作为初始状态。 后继函数: 通过移动空格(上、下、左、右)和周围的任一棋子一次,到达新的合法状 态。
eight_num(void); //计算启发函数 g(n)的值 void eight_num::cul_para(void); //显示当前节点的状态 void eight_num::show(); //复制当前节点状态到一个另数组中
void eight_num::get_numbers_to(int other_num[9]); //设置当前节点状态(欲设置的状态记录的 other 数组中) void eight_num::set_num(int other_num[9]); eight_num& eight_num::operator=(eight_num& another_8num); eight_num& eight_num::operator=(int other_num[9]); int eight_num::operator==(eight_num& another_8num); int eight_num::operator==(int other_num[9]); //空格向上移 int move_up(int num[9]); //空格向下移 int move_down(int num[9]); //空格向左移 int move_left(int num[9]); //空格向右移 int move_right(int num[9]); //判断可否解出 int icansolve(int num[9],int target[9]); //判断有无重复 int existed(int num[9],eight_num *where); //寻找估价函数最小的叶子节点 eight_num* find_OK_leaf(eight_num* start); } 3.3 实验结果 h: 启发函数(不在位将牌数)

人工智能大作业

人工智能大作业

人工智能大作业在当今科技飞速发展的时代,人工智能无疑是最引人瞩目的领域之一。

它正以惊人的速度改变着我们的生活,从智能家居到自动驾驶,从医疗诊断到金融服务,人工智能的身影无处不在。

然而,对于大多数人来说,人工智能仍然是一个充满神秘色彩的概念,仿佛是隐藏在高科技面纱背后的魔法。

那么,究竟什么是人工智能?它是如何工作的?又将如何影响我们的未来呢?要理解人工智能,首先我们需要明确它的定义。

简单来说,人工智能就是让计算机模拟人类的智能行为和思维方式。

这包括学习、推理、解决问题、理解语言、识别图像等等。

听起来似乎很简单,但实现起来却极其复杂,需要涉及到数学、统计学、计算机科学、神经科学等多个领域的知识。

人工智能的实现主要依赖于两种方法:机器学习和深度学习。

机器学习是让计算机通过数据学习模式和规律,从而能够进行预测和决策。

例如,通过分析大量的信用卡交易数据,机器学习算法可以识别出可能的欺诈行为。

深度学习则是机器学习的一个分支,它利用深度神经网络来模拟人脑的神经元结构,从而能够处理更加复杂的任务,如图像识别和语音识别。

然而,人工智能的发展并非一帆风顺。

在早期,由于计算能力的限制和数据的缺乏,人工智能的发展进展缓慢。

但随着技术的不断进步,尤其是云计算和大数据的出现,为人工智能的发展提供了强大的支持。

如今,人工智能已经取得了许多令人瞩目的成就。

例如,谷歌的AlphaGo 在围棋比赛中战胜了世界冠军李世石,这一事件让全世界为之震惊,也让人们对人工智能的能力有了新的认识。

人工智能的应用领域非常广泛。

在医疗领域,人工智能可以帮助医生进行疾病诊断、制定治疗方案,甚至可以进行手术操作。

在教育领域,人工智能可以为学生提供个性化的学习方案,根据每个学生的特点和需求进行有针对性的教学。

在交通领域,自动驾驶技术有望大大减少交通事故的发生,提高交通效率。

在金融领域,人工智能可以进行风险评估、投资决策,提高金融服务的效率和准确性。

然而,人工智能的发展也带来了一些担忧和挑战。

西电智能控制大作业

西电智能控制大作业

题目:浅谈智能控制班级:姓名:学号:目录摘要 (3)Abstract (3)1.前言 (4)2.智能控制的定义 (4)3.传统控制系统的特点 (5)4.传统智能控制面临的难题 (5)5.智能控制系统的特点 (6)6.智能控制的研究内容 (6)6.1 分层递阶控制系统 (7)6.2学习控制系统 (8)6.3专家控制系统 (9)6.4人工神经网络控制系统 (10)6.5模糊控制系统 (11)7.智能控制的发展与前景 (11)参考文献 (12)浅谈智能控制摘要本文是对智能控制的一个综述,结合这学期学习智能控制原理与应用的感悟,介绍了智能控制产生的定义,特点,应用,研究内容,对智能控制所面临的问题与挑战进行了叙述,还具体阐述了未来发展的趋势和前景,说明了智能控制象征着自动化的未来。

智能控制正是在各行各业应用中的一个缩影,它的作用以及影响力将会关系到国民生计。

又因为在当今社会各行各业中,智能控制技术对实现生产过程自动化有着更为积极的作用。

所以智能控制技术的研究和发展也越来越成为当代科学的一门重要课程。

AbstractThis paperis an overview of theintelligent control,it introduces the definition, the characteristic ,the application and the research contents of intelligent control.It describes the problems and challenges faced by intelligent control,the future development trends and prospects.So intelligent control symbolizes the future of automation.Intelligent control is so important that it relates to national life.Because in today's society in all walks of life, intelligent control technology has play a more active role to achieve automation of the production process.Therefore, the research and development of intelligent control technology is increasingly becoming an important course of contemporary science.关键词:智能控制定义人工智能传统控制研究内容发展与前景1.前言人类的进化归根结底是智能的进化,而智能反过来又为人类的进步服务。

人工智能大作业

人工智能大作业

人工智能大作业第一章1.3 什么是人工智能?它的研究目标是什么?人工智能(Artificial Intelligence),英文缩写为AI。

它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。

研究目标:人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。

1.7 人工智能有哪几个主要学派?各自的特点是什么?主要学派:符号主义,联结主义和行为主义。

1. 符号主义:认为人类智能的基本单元是符号,认识过程就是符号表示下的符号计算,从而思维就是符号计算;2. 联结主义:认为人类智能的基本单元是神经元,认识过程是由神经元构成的网络的信息传递,这种传递是并行分布进行的。

3. 行为主义:认为,人工智能起源于控制论,提出智能取决于感知和行动,取决于对外界复杂环境的适应,它不需要只是,不需要表示,不需要推理。

1.8 人工智能有哪些主要研究和应用领域?其中有哪些是新的研究热点?1.研究领域:问题求解,逻辑推理与定理证明,自然语言理解,自动程序设计,专家系统,机器学习,神经网络,机器人学,数据挖掘与知识发现,人工生命,系统与语言工具。

2.研究热点:专家系统,机器学习,神经网络,分布式人工智能与Agent,数据挖掘与知识发现。

第二章2.8 用谓词逻辑知识表示方法表示如下知识:(1) 有人喜欢梅花,有人喜欢菊花,有人既喜欢梅花又喜欢菊花。

三步走:定义谓词,定义个体域,谓词表示定义谓词P(x):x是人L(x,y):x喜欢yy的个体域:{梅花,菊花}。

将知识用谓词表示为:( x)(P(x)→L(x, 梅花)∨L(x, 菊花)∨L(x, 梅花)∧L(x, 菊花)) (2) 不是每个计算机系的学生都喜欢在计算机上编程序。

定义谓词S(x):x是计算机系学生感谢您的阅读,祝您生活愉快。

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

西电人工智能大作业八数码难题一.实验目的八数码难题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态。

例如:(a) 初始状态 (b) 目标状态图1 八数码问题示意图请任选一种盲目搜索算法(深度优先搜索或宽度优先搜索)或任选一种启发式搜索方法(A 算法或 A* 算法)编程求解八数码问题(初始状态任选),并对实验结果进行分析,得出合理的结论。

本实验选择宽度优先搜索:选择一个起点,以接近起始点的程度依次扩展节点,逐层搜索,再对下一层节点搜索之前,必先搜索完本层节点。

二.实验设备及软件环境Microsoft Visual C++,(简称Visual C++、MSVC、VC++或VC)微软公司的C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++/CLI 等编程语言。

三.实验方法算法描述:(1)将起始点放到OPEN表;(2)若OPEN空,无解,失败;否则继续;(3)把第一个点从OPEN移出,放到CLOSE表;(4)拓展节点,若无后继结点,转(2);(5)把n的所有后继结点放到OPEN末端,提供从后继结点回到n的指针;(6)若n任意后继结点是目标节点,成功,输出;否则转(2)。

流程图:代码:#include <stdlib.h>#include <stdio.h>typedef struct Node {int num[9]; //棋盘状态int deepth; //派生的深度 g(n)int diffnum; //不在位的数目 h(n)int value; //耗散值 f(n)=g(n)+h(n)struct Node * pre;struct Node * next;struct Node * parent;}numNode; /* ---------- end of struct numNode ---------- */int origin[9]; //棋盘初始状态int target[9]; //棋盘目标状态int numNode_num,total_step;numNode *open,*close; //Open表和Close表numNode *create_numNode(){return (numNode *)malloc(sizeof(numNode));}numNode *open_getfirst(numNode *head); //返回第一项,并从Open表中删除void open_insert(numNode *head,numNode *item); //向Open表中按序插入新节点void close_append(numNode *head,numNode *item); //向Close表中插入新节点int expand(numNode *item); //扩展节点int print_result(numNode *item); //打印结果numNode *copy_numNode(numNode *orgin);char isNewNode(numNode *open,numNode *close,int num[9]);//是否在Open表或Close表中void print_num(int num[9]); //打印棋盘状态int diff(int num[9]); //求不在位棋子的个数void init(); //初始化,获得棋盘初始状态和目标状态void swap(int *a,int *b);int operate(int num[],int op);void free_list(numNode *head);/** Name: 主函數* Description: 程序入口*/Int main ( int argc, char *argv[] ){//初始化Open表和Close表open=create_numNode();close=create_numNode();open->pre=open->next=close->pre=close->next=NULL; init(); //由用户输入初始和目标状态//初始化初始节点numNode *p1;p1=create_numNode();p1->parent=NULL;p1->deepth=0;int i=0;for ( i=0; i<9; i++){p1->num[i]=origin[i];}open_insert(open,p1);numNode_num=1;p1=open_getfirst(open);while (p1!=NULL){close_append(close,p1);if(expand(p1))return EXIT_SUCCESS;p1=open_getfirst(open);}printf("No solution!\n");return EXIT_SUCCESS;} /* ---------- end of function main ---------- */voidinit ( ){while(1){printf("Please input opriginal status:\nFor example:123456780 stands for\n""1 2 3\n""4 5 6\n""7 8 0\n");char temp[10];scanf("%s",&temp);int i=0;for ( i=0;i<9 && temp[i]-'0'>=0 && temp[i]-'0'<=8; i++){origin[i]=temp[i]-'0';}printf("Please input target status:\n");scanf("%s",&temp);int j=0;for ( j=0; j<9 && temp[j]-'0'>=0 && temp[j]-'0'<=8; j++){target[j]=temp[j]-'0';}system("cls");if ( i==9&&j==9){break;}}} /* ----- end of function init ----- */voidopen_insert (numNode *head,numNode *item){numNode *p,*q;p=head->next;q=head;while ( p!=NULL && item->value > p->value ){q=p;p=p->next;}q->next=item;item->pre=q;item->next=p;if(p!=NULL){p->pre=item;}} /* ----- end of function open_insert ----- */numNode *open_getfirst (numNode *head){numNode *p;if ( head->next == NULL ){return NULL;}p=head->next;head->next=p->next;if ( p->next != NULL ){p->next->pre=head;}p->pre=NULL;p->next=NULL;return p;} /* ----- end of function open_getfirst ----- */voidclose_append (numNode *head,numNode *item){item->next=head->next;item->pre=head;head->next=item;if ( item->next!=NULL ){item->next->pre=item;}} /* ----- end of function close_append ----- */intexpand (numNode *p1){numNode * p2;int op=1;for ( op=1; op<=4; op++){p2=copy_numNode(p1);operate(p2->num,op);if(isNewNode(open,close,p2->num)=='N'){p2->parent=p1;p2->deepth=p1->deepth+1;p2->diffnum=diff(p2->num);p2->value=p2->deepth+p2->diffnum;if(p2->diffnum==0){total_step=print_result(p2);printf("Total step: %d\n",total_step); free_list(open);free_list(close);return 1;}else{numNode_num++;open_insert(open,p2);}}elsefree(p2);}return 0;} /* ----- end of function expand ----- */intoperate(int m[], int op){int blank;blank=0;while (m[blank]!=0 && blank<9 )++blank;if (blank==9)return 1;switch (op) {case 1: /* up */if (blank>2)swap(m+blank,m+blank-3);break;case 2: /* down */if (blank<6)swap(m+blank,m+blank+3);break;case 3: /* left */if (blank!=0 && blank!=3 && blank!=6) swap(m+blank,m+blank-1);break;case 4: /* right */if (blank!=2 && blank!=5 && blank!=8) swap(m+blank,m+blank+1);break;default : return 1;}return 0;}voidswap(int *a, int *b){int c;c=*a;*a=*b;*b=c;}numNode *copy_numNode (numNode *origin){numNode *p;p=create_numNode();p->deepth=origin->deepth;p->diffnum=origin->diffnum;p->value=origin->value;int i;for ( i=0; i<9; i++){(p->num)[i]=(origin->num)[i];}return p;} /* ----- end of function copy_numNode ----- */intdiff (int num[9]){int i,diffnum=0;for(i=0;i<9;i++)if(num[i]!=target[i])diffnum++;return diffnum;} /* ----- end of function diff ----- */charisNewNode (numNode *open,numNode *close,int num[9]) {numNode *p;int i=0;p=open->next;while ( p!=NULL ){for ( i=0; i<9; i++){if(p->num[i]!=num[i])break;}if(i==9)return 'O'; //Openp=p->next;}p=close->next;while ( p!=NULL ){for ( i=0; i<9; i++){if(p->num[i]!=num[i])break;}if(i==9)return 'C'; //Closep=p->next;}return 'N';} /* ----- end of function isNewNode ----- */voidfree_list (numNode *head){numNode *p,*q;p=head->next;while ( p!=NULL ){q=p->next;free(p);p=q;}free(head);} /* ----- end of function free_list ----- */voidprint_num (int num[9]){int i;for ( i=0; i<9; i++){printf("%d\t",num[i]);if((i%3)==2)printf("\n");}} /* ----- end of function print_num ----- */intprint_result ( numNode *item){numNode *p;int step;p=item;if(p!=NULL){step=print_result(p->parent);printf("\nStep %d:\n",step+1);print_num(p->num);return step+1;}else{return -1;}}四.结果:下图实验结果中,一步代表一层的搜索结果中的最优解;八数码难题的宽度优先搜索树:五.实验分析宽度优先搜索属于一种盲目搜索算法,可以系统的展开所有节点,理论上一定能达到搜寻目的。

相关文档
最新文档