第一篇:人工智能与专家系统课程设计解读
目录
1.设计任务 1.1 设计题目 1.2设计要求 1.3设计任务 2.方案设计 2.1原理
2.2 具体设计方法 3.系统实施
3.1 系统开发环境 3.2系统主要功能介绍 3.3处理流程图 3.4 核心源程序 3.5系统运行结果 4.开发心得
4.1设计存在的问题
4.2进一步改进提高的设想 4.3经验和体会 5.参考文献 1.设计任务 1.1 设计题目
在一个3*3的方棋盘上放置着1,2,3,4,5,6,7,8八个数码,每个数码占一格,且有一个空格。这些数码可以在棋盘上移动,该问题称八数码难题或者重排九宫问题。
1.2 设计要求
其移动规则是:与空格相邻的数码方格可以移入空格。现在的问题是:对于指定的初始棋局和目标棋局,给出数码的移动序列。
1.3 设计任务
利用人工智能的图搜索技术进行搜索,解决八数码问题来提高在推理中的水平,同时进行新方法的探讨。
2.方案设计 2.1 原理
八数码问题是个典型的状态图搜索问题。搜索方式有两种基本的方式,即树式搜索和线式搜索。搜索策略大体有盲目搜索和启发式搜索两大类。盲目搜索就是无“向导”的搜索,启发式搜索就是有“向导”的搜索。
2.2 具体设计方法
启发式搜索
由于时间和空间资源的限制,穷举法只能解决一些状态空间很小的简单问题,而对于那些大状态空间的问题,穷举法就不能胜任,往往会导致“组合爆炸”。所以引入启发式搜索策略。启发式搜索就是利用启发性信息进行制导的搜索。它有利于快速找到问题的解。由八数码问题的部分状态图可以看出,从初始节点开始,在通向目标节点的路径上,各节点的数码格局同目标节点相比较,其数码不同的位置个数在逐渐减少,最后为零。所以,这个数码不同的位置个数便是标志一个节点到目标节点距离远近的一个启发性信息,利用这个信息就可以指导搜索。即可以利用启发信息来扩展节点的选择,减少搜索范围,提高搜索速度。
启发函数设定。对于八数码问题,可以利用棋局差距作为一个度量。搜索过程中,差距会逐渐减少,最终为零,为零即搜索完成,得到目标棋局。
3.系统实施
3.1 系统开发环境
Windows操作系统、SQL Server 200X
3.2 系统主要功能介绍
该搜索为一个搜索树。为了简化问题,搜索树节点设计如下: struct Chess//棋盘
3.4 核心源程序
#include “stdio.h” #include “stdlib.h” #include “time.h” #include “string.h” #include
const int N=3;//3*3棋盘
const int Max_Step=30;//最大搜索深度
enum Direction{None,Up,Down,Left,Right};//方向 struct Chess//棋盘 { int cell[N][N];//数码数组
int Value;//评估值
Direction BelockDirec;//所屏蔽方向
struct Chess * Parent;//父节点 };
//打印棋盘
void PrintChess(struct Chess *TheChess){ printf(“----------n”);for(int i=0;i printf(“t”); for(int j=0;j { printf(“%dt”,TheChess->cell[i][j]); } printf(“n”);} printf(“tttt差距:%dn”,TheChess->Value);} break;case Left: t_j++; if(t_j>=N) AbleMove=false; break;case Right: t_j--; if(t_j<0) AbleMove=false; break;};if(!AbleMove)//不可以移动则返回原节点 { return TheChess;} if(CreateNewChess){ NewChess=new Chess(); for(int x=0;x { for(int y=0;y NewChess->cell[x][y]=TheChess->cell[x][y]; } } else NewChess=TheChess;NewChess->cell[i][j]=NewChess->cell[t_i][t_j];NewChess->cell[t_i][t_j]=0; return NewChess;} //初始化一个初始棋盘 struct Chess * RandomChess(const struct Chess * TheChess) p=NULL;queue do{ p1=(struct Chess *)Queue1.front(); Queue1.pop(); for(int i=1;i<=4;i++)//分别从四个方向推导出新子节点 { Direction Direct=(Direction)i; if(Direct==p1->BelockDirec)//跳过屏蔽方向 continue; p2=MoveChess(p1,Direct,true);//移动数码 if(p2!=p1)//数码是否可以移动 { Appraisal(p2,Target);//对新节点估价 if(p2->Value<=p1->Value)//是否为优越节点 { p2->Parent=p1; switch(Direct)//设置屏蔽方向,防止往回推 { case Up:p2->BelockDirec=Down;break; case Down:p2->BelockDirec=Up;break; case Left:p2->BelockDirec=Right;break; case Right:p2->BelockDirec=Left;break; } Queue1.push(p2);//存储节点到待处理队列 if(p2->Value==0)//为0则,搜索完成{ p=p2; i=5; } } else { //打印 if(T){ /*把路径倒序*/ Chess *p=T; stack while(p->Parent!=NULL) { Stack1.push(p); p=p->Parent; } printf(“搜索结果:n”); while(!Stack1.empty()) { PrintChess(Stack1.top()); Stack1.pop(); } printf(“n完成!”);}else printf(“搜索不到结果.深度为%dn”,Max_Step); scanf(“%d”,T);} 3.5 系统运行结果 4.开发心得 4.1 设计存在的问题 完全能解决简单的八数码问题,但对于复杂的八数码问题还是无能为力。4.2 进一步改进提高的设想 可以改变数码规模(N),来扩展成N*N的棋盘,即扩展为N数码问题的求解过程。 2、内存泄漏。由于采用倒链表的搜索树结 05.参考文献 [1]王汝传.计算机图形学[M].北京:人民邮电出版社,1999:123-130.[2]刘榴娣,刘明奇,党长民.实用数字图像处理[M].北京:北京理工大学出版,2000:12-25..[3]丁兆海.Delphi基础教程[M].北京:电子工业出版社,1999.[4]王小华.Delphi 5程序设计与控件参考[M].北京:电子工业出版社,1999:70-120.[5]赵子江.多媒体技术基础[M].北京:机械工业出版社,2001:118-130.[6]段来盛,郑城荣,曹恒.Delphi实战演练[M].北京:人民邮政出版社,2002:80-95. 读书的好处 1、行万里路,读万卷书。 2、书山有路勤为径,学海无涯苦作舟。 3、读书破万卷,下笔如有神。 4、我所学到的任何有价值的知识都是由自学中得来的。——达尔文 5、少壮不努力,老大徒悲伤。 6、黑发不知勤学早,白首方悔读书迟。——颜真卿 7、宝剑锋从磨砺出,梅花香自苦寒来。 8、读书要三到:心到、眼到、口到 9、玉不琢、不成器,人不学、不知义。 10、一日无书,百事荒废。——陈寿 11、书是人类进步的阶梯。 12、一日不读口生,一日不写手生。 13、我扑在书上,就像饥饿的人扑在面包上。——高尔基 14、书到用时方恨少、事非经过不知难。——陆游 15、读一本好书,就如同和一个高尚的人在交谈——歌德 16、读一切好书,就是和许多高尚的人谈话。——笛卡儿 17、学习永远不晚。——高尔基 18、少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。——刘向 19、学而不思则惘,思而不学则殆。——孔子 20、读书给人以快乐、给人以光彩、给人以才干。——培根 姓名:万伟 学号:1120100924 人工智能与专家系统感想 人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。 人工智能技术导论这门课的学习,让我知道了人工智能从诞生发展到今天经历了一条漫长的路,许多科研人员为此而不懈努力。人工智能的开始可以追溯到电子学出现以前。象布尔和其他一些哲学家和数学家 建立的理论原则后来成为人工智能逻辑学的基础。而人工智能真正引起 研究者的兴趣则是1943年计算机发明以后的事。技术的发展最终使得人们可以仿真 人类的智能行为,至少看起来不太遥远。接下来的四十年里,尽管碰到许多阻碍,人工智能仍然从最初只有十几个研究者成长到现在数以千计的工程师和专家在研究; 从一开始只有一些下棋的小程序到现在的用于疾病诊断的专家系统,人工智能的发展有目共睹。 人工智能经过几十年的发展,其应用在不少领域得到发展,在我们的日常生活和学习当中也有许多地方得到应用。我通过网络查找,知道了以下领域的人工智能的发展。 专家系统是一种模拟人类专家解决领域问题的计算机程序系统。专家系统内部含有大量的某个领域的专家水平的知识与经验,能够运用人类专家的知识和解决 问题的方法进行推理和判断,模拟人类专家的决策过程,来解决该领域的复杂问题。专家系统是人工智能应用研究最活跃和最广泛的应用领域之一,涉及到社会各个 方面,各种专家系统已遍布各个专业领域,取得很大的成功。根据专家系统处理的问题的类型,把专家系统分为解释型、诊断型、调试型、维修型、教育型、预测 型、规划型、设计型和控制型等10种类型。具体应用就很多了,例如血液凝结疾病诊断系统、电话电缆维护专家系统、花布图案设计和花布印染专家系统等等。为了实现专家系统,必须要存储有该专门领域中经过事先总结、分析并按某种模式表示的专家知识(组成知识库),以及拥有类似于领域专家解决实际问题的 推理机制(构成推理机)。系统能对输入信息进行处理,并运用知识进行推理,做出决策和判断,其解决问题的水平达到或接近专家的水平,因此能起到专家或专家 助手的作用。 开发专家系统的关键是表示和运用专家知识,即来自领域专家的己被证明对解决有关领域内的典型问题有用的事实和过程。目前,专家系统主要采用基于规则 的知识表示和推理技术。由于领域的知识更多是不精确或不确定的,因此,不确定的知识表示与知识推理是专家系统开发与研究的重要课题。此外,专家系统开发工 具的研制发展也很迅速,这对扩大专家系统的应用范围,加快专家系统的开发过程,将起到积极地促进作用。随着计算机科学技术整体水平的提高,分布式专家系 统、协同式专家系统等新一代专家系统的研究也发展很快。在新一代专家系统中,不但采用基于规则的推理方法,而且采用了诸如人工神经网络的方法与技术。 一、人工智能与专家系统应用领域 1在管理系统中的应用 人工智能应用于企业管理的意义主要不在于提高效率,而是用计算机实现人们非常需要做,但工业工程信息技术是靠人工却做不了或是很难做到的事情。智能教学系统(ITS)是人工智能与教育结合的主要形式,也是今后教学系统的发展方向。信息技术的飞速发展以及新的教学系统开发模式的提出和不断完善,推动人们综合运用超媒体技术、网络基础和人工智能技术区开发新的教学系统,计算机智能教学系统就是其中的典型代表。它包含学生模块、教师模块,体现了教学系统开发的全部内容,拥有着不可比拟的优势和极大的吸引力。2在工程领域的应用 医学专家系统是人工智能和专家系统理论和技术在医学领域的重要应用,具有极大的科研和应用价值,它可以帮助医生解决复杂的医学问题,作为医生诊断、治疗的辅助工具。目前,医学智能系统已通过其在医学影像方面的重要作用,从而应用于内科、骨科等多个医学领域中,并在不断发展完善中。 3在技术研究中的应用 人工智能在电子技术领域的应用可谓由来已久。随着网络的迅速发展,网络技术的安全是我们关心的重点,因此我们必须在传统技术的基础上进行网络安全技术的改进和变更,大力发展数据挖掘技术、人工免疫技术等高效的AI技术,开发更高级AI通用和专用语言,和应用环境以及开发专用机器,而与人工智能技术则为我们提供了可能性。4人工智能在现实中的应用。 AI系统是设计出的一种计算机程序,这种程序具有某些像人和动物智能一样的功能。在过去的30多年中,已经建立了一些具有一定“智能”的AI系统,例如下棋程序、定理证明系统、集成电路设计与分析系统、自然语言翻译系统、智能信息检索系统、疾病诊断系统等 在一年一度AT&T实验室举行的机器人足球赛中,每支球队的“球员”都装备上了AI软件和许多感应器,它们都很清楚自己该踢什么位置,同时也明白有些情况下不能死守岗位。尽管现在的AI技术只能使它们大部分时间处于个人盘带的状态,但它们传接配合的能力正在以很快的速度改进。5.机器翻译 机器翻译是利用计算机把一种自然语言转变成另一种自然语言的过程,用以完成这一过程的软件系统叫做机器翻译系统。几十年来,国内外许多专家、学者为 机器翻译的研究付出了大量的心血和汗水。虽然至今还没有一个实用、全面、高质量的自动翻译系统出现,不过也取得了很大的进展,特别是作为人们的辅助翻译工 具,机器翻译已经得到大多数人的认可。目前,国内的机器翻译软件不下百种,根据这些软件的翻译特点,大致可以分为三大类:词典翻译类、汉化翻译类和专业翻 译类。词典类翻译软件代表是“金山词霸”了,堪称是多快好省的电子词典,它可以迅速查询英文单词或词组的词义,并提供单词的发音,为用户了解单词或词组含 义提供了极大的便利。汉化翻译软件的典型代表是“东方快车2000”,它首先提出了“智能汉化”的概念,使翻译软件的辅助翻译作用更加明显。以“译星”、“雅信译霸”为代表的专业翻译系统,是面对专业或行业用户的翻译软件,但其专业翻译的质量与人们的实用性还有不少差距,有人评价说“满篇英文难不住,满篇 中文看不懂”,该说法虽然比较极端,但机译译文的质量确实却一直是个老大难问题。这里,我们不妨对现有的机译和人译过程作一比较,从中可以看出一些原因。 机器翻译: 1.一句一句处理,上下文缺乏联系; 2.对源语言的分析只是求解句法关系,完全不是意义上的理解; 3.缺乏领域知识,从计算机到医学,从化工到法律都通用,就换专业词典; 4.译文转换是基于源语言的句法结构的,受源语言的句法结构的束缚; 5.翻译只是句法结构的和词汇的机械对应。 人工翻译: 1.一般会先通读全文,会前后照应; 2.对源语言是求得意义上的理解; 3.只有专业翻译人员,而没有万能翻译人员; 4.译文是基于他对源语言的理解,不受源语言的句法结构的束缚; 5.翻译是一个再创造的过程。 在目前的情况下,计算机辅助翻译应该是一个比较好的实际选择。事实上,在很多领域中,计算机辅助人类工作的方式已经得到了广泛的应用,例如CAD软 件。如果计算机辅助技术用于语言的翻译研究,应该同样可以起到很大的辅助作用,这就是所谓的“计算机辅助翻译”。它集机器记忆式翻译、语法分析式翻译和人 际交互式翻译为一体,把翻译过程中机械、重复、琐碎的工作交给计算机来完成。这样,翻译者只需将精力集中在创造性的思考上,有利于工作效率的提高。 机器翻译研究归根结底是一个知识处理问题,它涉及到有关语言内的知识、语言间的知识、以及语言外的世界知识,其中包括常识和相关领域的专门知识。随 着因特网的普及与发展,机器翻译的应用前景十分广阔。作为人类探索自己智能和操作知识的机制的窗口,机器翻译的研究与应用将更加诱人。国际上有关专家分析 认为机器翻译要想达到类似人工翻译一样的流畅程度,至少还要经历15年时间的持续研究,但在人类对语言研究还没有清楚“人脑是如何进行语言的模糊识别和判 断”的情况下,机器翻译要想达到100%的准确率是不可能的。 二、人工智能与专家系统的发展前景 1 人工智能的研究新课题 人工智能的长远目标是要理解人类智能的机器,用机器模拟人类的智能。这是一个十分漫长的过程,人工智能研究者奖通过多种途径、从不同的研究课题入手进行探索。 在近期,有几方面的研究课题可供选择:更完善更新的人工智能理论框架;自动或半自动的知识获取工具;能实现海量高速存储并具有学习功能的联想知识库;新型推理机制和推理机;分布式人工智能与协同式专家系统;智能控制与智能管理;智能机器人;人工智能机;新一代的脑模型。 2人机融合 人机融合是一个相当长的发展过程,它将伴随技术进步,逐级逐步地向前发展。首先实现的是低级和局部的融合,近几年人工智能科授的进步不断证实了这种趋势。如最近美国科学家就明确宣布,他们研制的“神经芯片”首先就是用于改善人的中枢神经功能,“使截瘫患者丢掉手杖”。随着人机融合的升级,最终将在地球上产生一种人机高度融合、高智慧、能自行繁殖(复制)的“新智体”(或曰“新人类”)。因此,文明人类的演化由于技术的影响将经历自然进化——人工促进人智能的进化——人机融合体(新智体)的自行进化的辩证发展过程。在人机融合时代,出于物理目标的不同,将存在多种多样、多层次的智能机(体),但具有怨茁级智能的应是人机融合体。当今人工智能科技和其他高科技的种种发展动向表明,在人类进入“信息社会”之后,将有一场规模巨大的“智能革命”,智能革命的环境是人工智能对人、对社会的广泛而深入的影响,就像今天的微电子技术对信息革命的影响一样。人工智能科技将渗透到社会各个领域,人类将对人工智能科技进行大规模的研究、开发和应用。 当今人工智能科技和其他高科技的种种发展动向表明,在人类进入“信息社会”之后,将有一场规模巨大的“智能革命”,智能革命的环境是人工智能对人、对社会的广泛而深入的影响,就像今天的微电子技术对信息革命的影响一样。人工智能科技将渗透到社会各个领域,人类将对人工智能科技进行大规模的研究、开发和应用。 总之,人工智能的应用前景一片的好,当然,挑战也很多,只有科学不断发展突破进步,我们才能真正的享受智能化带给我们的乐趣„ 河南城建学院 《 人工智能 》实验报告 实验名称:__实验四 名称实现一个基于产生式系统的小型专家系统(动物识别)成绩: 专业班级: 0814112 学号: 081411202 姓名: xxxxxxxxxxxx 实 验 日 期 : 2014 年 5 月 20 日 实验器材:VC6.0软件,多媒体计算机。 一、实验目的 掌握产生式系统的运行机制和基于规则推理的基本方法。通过一个实例了解小型专家系统的结构、设计和实现过程,初步掌握专家系统的设计和实现方法。 二、实验要求 设计并实现一个某领域的小型专家系统(动物识别),该系统能对输入的询问回答分类或预测的结果,并根据推理过程回答“为什么”或“怎样得出该结论”的问题。 三、实验步骤 (1)定义变量,包括变量名和变量的值。(2)建立规则库,其方法是:(a)输入规则的条件:每条规则至少有一个条件和一个结论,选择变量名,输入条件(符号);选择变量值,按确定按钮就完成了一条条件的输入。重复操作,可输入多条条件; (b)输入规则的结论:输入完规则的条件后,就可以输入规则的结论了,每条规则必须也只能有一个结论。选择变量名,输入条件(符号),选择变量值,按确定按钮就完成了一个结论的输入。重复以上两步,完成整个规则库的建立。 (3)建立事实库(总数据库):建立过程同步骤2。重复操作,可输入多条事实。 该动物识别专家系统由15条规则组成,可以识别七种动物,在15条规则中,共出现 30个概念(也称作事实),共30个事实,每个事实给一个编号,从编 号从1到30,在规则对象中我们不存储事实概念,只有该事实的编号,同样规则的结论也是事实概念的编号,事实与规则的数据以常量表示,其结构如下: char *feature[]={“有毛”,“产奶”,“有羽毛”,“会飞”,“会下蛋”,“吃肉”,“有犬齿”,“有爪”,“眼睛盯前方”,“有蹄”,“反刍”,“黄褐色”,“有斑点”,“有黑色条纹”,“长脖”,“长腿”,“不会飞”,“会游泳”,“黑白两色”,“善飞”,“哺乳类”,“鸟类”,“肉食类”,“蹄类”,“企鹅”,“海燕”,“鸵鸟”,“斑马”,“长颈鹿”,“虎”,“金钱豹”};存放规则的结构体: typedef struct { int relation[5]; int name;}Rule;存放产生式规则推理过程的数组: Rule rule[15]={ {{0,-1},20}, {{1,-1},20}, {{2,-1},21}, {{3,4,-1},21}, {{20,5,-1},22}, {{6,7,8,-1},22}, {{20,8,-1},23}, {{20,9,-1},23}, {{22,11,12,-1},30}, {{22,11,13,-1},29}, {{23,14,15,12,-1},28}, {{23,13,-1},27},//如果动物是蹄类(23),且有黑色条纹(13),则该动物对应事实数组的第27个“斑马” {{21,14,15,16,-1},26}, {{21,19,-1},25},//如果动物是鸟类(21),且是肉食类(19),则该动物对应事实数组的第25个“海燕”。 {{21,17,18,16,-1},24} };程序用编号序列的方式表达了产生式规则,如资料中规则14,如果动物是鸟,且是肉食类,则该动物对应事实数组的第二十五个“海燕”。如资料中规则12,如果动物是蹄类,且有黑色条纹,则该动物对应事实数组的第二十七个“斑马”。 (4)按“开始”或“单步”按钮即可。 此外,利用实例演示,可以运行系统默认的产生式系统,并且可以进行正反向推理。其他的可参见其帮助文件。 三、源代码 #include “有黑色条纹”,“长脖”,“长腿”,“不会飞”,“会游泳”,“黑白两色”,“善飞”,“哺乳类”,“鸟类”,“肉食类”,“蹄类”,//13 “企鹅”,“海燕”,“鸵鸟”,“斑马”,“长颈鹿”,“虎”,“金钱豹”}; //24 typedef struct //存放规则的结构体 { int relation[5]; int name;}Rule;Rule rule[15]={ {{0,-1},20}, {{1,-1},20}, {{2,-1},21}, {{3,4,-1},21}, {{20,5,-1},22}, {{6,7,8,-1},22}, {{20,8,-1},23}, {{20,9,-1},23}, {{22,11,12,-1},30}, {{22,11,13,-1},29}, {{23,14,15,12,-1},28}, {{23,13,-1},27}, {{21,14,15,16,-1},26}, {{21,19,-1},25}, {{21,17,18,16,-1},24}};int flag[23]={0};//标记各个特征是否选择 int IsAnimal(int a);int inference();void input();void menu();void menu(){ int i=0; for(i=0;i<24;i++){ if(i%4==0&&i!=0) { cout< } printf(“%-3d.%-15s”,i,feature[i]); } } void input(){ int ti=0;for(int i=0;i<24;i++){ flag[i]=0;} while(ti!=-1){ cout<<“n输入选择(-1结束):”; cin>> ti; if(ti>=0&&ti<=23) flag[ti]=1; else if(ti!=-1) { cout<<“输入错误!请输入0~23//notanimal=25 cin.clear();//清除流错误错误标 cin.sync();////////////清空输入缓冲区 } } } int IsAnimal(int a){ if(a>=24&&a<=30) return 1; else return 0;} int inference()//正向推理 { int ti; int i,j; int tres; cout< for(i=0;i<15;i++) { j=0; 之间的数字!”<< endl; ti=rule[i].relation[j]; while(ti!=-1)//-1作为结束 { if(flag[ti]==0) break; j++; ti=rule[i].relation[j]; } if(ti==-1)//ti==-1代表规则满足 { tres=rule[i].name; flag[tres]=1; printf(“运用了规则%d : ”,i); j=0; while(rule[i].relation[j]!=-1) { cout< j++; } cout<<“====> ”< if(IsAnimal(tres)) { return 1; } } } if(i==15) { cout<<“没有这种动物”; } return-1;} void main(){ char q; while(q!='n') { menu(); input(); inference(); cout<<“n继续?(Y/N)”< cin>>q; system(“cls”); } } 四、结果分析 1、若已知:动物是蹄类(23),且有黑色条纹(13),则结果:该动物对应事实数组的第27个“斑马”。使用了推理规则12,即:{{23,13,-1},27},使用规则运行结果如图1所示: 图1 2、若已知:动物是鸟类(21),且是肉食类(19),则结果该动物对应事实数组的第25个“海燕”。使用了推理规则14,即:{{21,19,-1},25},使用规则运行结果如图2所示: 图2 五、心得体会 本实验环境主要提供一个能够实现模拟产生式专家系统的验证、设计和开发的可视化操作平台。使用户既能用本系统提供的范例进行演示或验证性实验,也能够用它来设计并调试自己的实验模型。 通过这次实验,我对产生式系统有了更深刻的认识。产生式系统是由一组规则组成的、能够协同作用的推理系统。其模型是设计各种智能专家系统的基础.产生式系统主要由规则库、综合数据库和推理机三大部分组成。产生式系统用来描述若干个不同的以一个基本概念为基础的系统,这个基本概念就是产生式规则或产生式条件和操作对。在产生式系统中,论域的知识分为两部分:用事实表示静态知识;用产生式规则表示推理过程和行为。专家系统的规则是由专家定的,在该实验中,是由本人制定的。 教师评语: 教师签名: 《人工智能导论》课程报告 课题名称: 五子棋 姓名: X X 学号:114304xxxx 课题负责人名(学号): X X114304xxxx 同组成员名单(学号、角色): x x1143041325 XXX1143041036 指导教师: 张建州 评阅成绩: 评阅意见: 提交报告时间:2014年 1 月 9 日 课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 五子棋 计算机科学与技术 专业 学生 XXX 指导老师 张建州 [摘要] 人类之所以不断在进步,是因为我们人类一直不断的在思考,五子棋游戏程序的开发符合人类进步也是促进人类进步的一大动力之一。五子棋游戏程序让人们方便快捷的可以下五子棋,让人们在何时都能通过下棋来提高逻辑思维能力,同时也培养儿童的兴趣以及爱好,让孩子更加聪明。 同时,五子棋游戏程序的开发也使得五子棋这个游戏得到了广泛的推广,让世界各地的人们知道五子棋,玩上五子棋,这已经不是局限。五子棋游戏程序使得越来越多的人喜欢上了五子棋,热爱下五子棋,它是具有很好的带动性的。 关键词:五子棋 进步 思考 -1-课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 目录 《人工智能导论》课程报告..................................................................................0 1 引言.....................................................................................................................3 1.1 五子棋简介...........................................................................................3 1.2 五子棋游戏的发展与现状......................................................................3 2 研究问题描述......................................................................................................4 2.1 问题定义...................................................................................................4 2.2 可行性研究...............................................................................................4 2.3 需求分析...................................................................................................5 2.4 总体设计...................................................................................................5 2.5 详细设计...................................................................................................6 2.6编码和单元测试........................................................................................6 3 人工智能技术......................................................................................................6 4 算法设计.............................................................................................................7 4.1α-β剪枝算法.............................................................................................7 4.2极大极小树................................................................................................7 4.3深度优先搜索(DFS).............................................................................8 4.4静态估值函数............................................................................................9 5 软件设计和实现..................................................................................................9 5.1 数据结构定义...........................................................................................9 5.2 程序流程图.............................................................................................17 6 性能测试...........................................................................................................18 6.1 程序执行结果.........................................................................................18 7 总结...................................................................................................................21 参考文献...............................................................................................................21 -2-课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 1 引言 1.1 五子棋简介 五子棋是一种两人对弈的纯策略型汉族棋类益智游戏,棋具与围棋通用,由中国汉族人发明,起源于中国上古时代的传统黑白棋种之一。主要流行于华人和汉字文化圈的国家以及欧美一些地区。 容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。已在各个游戏平台有应用。 古代五子棋棋盘与围棋棋盘是通用的,汉魏时为十七路(17×17)棋盘,至南北朝时即已流行十九路(19×19)棋盘,直至1931年出现所谓五子棋专用棋盘。 1.2 五子棋游戏的发展与现状 目前,连珠这一棋类运动已迅速在国际上发展起来。外国人都十分看好这一不起眼的智力游戏,并认为五子棋不仅能提高思维、开发智力、手脑并用、修身养性 而且富含哲理,具有东方的神秘和西方的直观,是中西文化的交汇点。许多国家的人对五子棋都有不同的爱称,例如韩国人把五子棋称之为“情侣棋”,言下之意是情人之间下五子棋有利于增加情感的交流;欧洲人称之为“中老年棋”,表示五子棋适合中老年人的生理特点和思维方式;美洲人喜欢将五子棋称之为“商业棋”,就是说商人谈生意时可一边下棋一边谈生意,棋下完了生意也谈成了。由此可见,尽管国度不同,语言各异,但人们都可以借助五子棋这一简单而又深奥的棋艺进行交流、比赛,增进友谊。 当前,有40多个国家和地区都在下五子棋,并有各种规模和级别的比赛。1989年8月在日本京都、1991年8月在俄罗斯联邦的莫斯科、1993年8月在瑞典、1995年8月在爱沙尼亚的塔林分别举行了第一、二、三、四届世界锦标赛。除第三届的冠军是爱沙尼亚人之外,其余三届的冠军都是日本人。五子棋 的世界锦标赛,每两年举办一次,其申国竞争也十分激烈。日本目前拥有自己的五子棋职业棋手,并且对连珠(五子棋)技术的研究也相当普遍和全面,就水平也正在日益增强。同时,五子棋的理论研究与探索也呈现蓬勃发展的势头,从1858年第一部五子棋专著问世以来,目前,全世界有2000多种五子棋的书籍及期刊,分别以日文、俄文、英文、瑞典文及中文出版发行。五子棋在我国的北京、上海、天津、云南、浙江、广东、四川、湖北、辽宁、新疆、河北等省(区)市都有很大的发展。北京多次举办了北京地区的五子棋赛,如“思曼杯”、“京空杯”、“奇奇童杯”、“北京第六届民族团结杯”和“北京第四岂民族运动会”的五子棋比赛。上海地区举办了“上文杯”五子棋大赛。云南省以及其他省市亦举办过许多五子棋比赛。所有这些赛事都越来越多地吸引了无数人的关注,表明了根植于中国的五子棋有着广泛的群众基础,-3-课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 是群众喜闻乐见的体育活动。 而现在,很多很多游戏平台上面都有五子棋游戏供我们玩,任何游戏平台上面只要有棋牌类游戏的,那么它就有五子棋在里面,网络五子棋比赛,在联众,263,QQ游戏,UC里进行了10几年了可见,五子棋游戏在网络上面是非常火暴的,而且在棋牌游戏里面玩家人数排名总会占到很前面,不愧是风靡全球的棋牌游戏啊!在未来中,将会有越来越多的人关注五子棋,喜欢五子棋,那么将其变为商业化也会越来越多,而且还可以以教育孩子的方式来将其嵌套进去,或者用来做测试等等,可以说以后的五子棋游戏会是那么的精彩,那么的让人憧憬。那么对于它的游戏开发和发展也将会上升到举足轻重的地位去,它的发展会是相当之快的,就让我们拭目以待吧。研究问题描述 2.1 问题定义 问题定义的一个的关键问题是“要解决的问题是什么”,这个是这个阶段必须要明确要回答的问题。在没将问题定义好,试图准备下个阶段的任务。这明显是不成熟,甚至不可能的事。 本次系统设计中首先明确了需要解决的问题是五子棋AI算法,基本的要求是设计一款能够实现人机对战、人人对战和禁手的五子棋游戏,提供一些基本的操作如退出系统,向后悔棋等操作,重点是放在AI算法的研究。而并不是美工设计,也不是为了提供各种操作丰富的接口。主要是通过这种可视化的界面探讨AI,当然增加可玩性和美工会给系统润色不少。 上面只是很粗略的明确大概的方向,严格按照软件工程的方法这个阶段需要生产一份书面报告。需要通过对系统的实际用户访问调查,扼要地写出他对问题的理解,并在用户和使用部门负责人的会议上认真讨论这份书面报告,澄清含糊不精的地方,改正理解不正确的地方,最后得出一份双方都满意的文档。本系统的需求很少也很明显了。 2.2 可行性研究 这个阶段要回答的关键问题:“对于上一个阶段所确定的问题是否可行?”为了回答这个问题,我们需要进行一次大大压缩和简化了的系统分析和设计的过程,也就是在较抽象的高层次上进行的分析和设计的过程。 可行性研究应该比较简短,这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。 可行性研究应该比较简短,这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。可行性研 -4-课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 究以后的那些阶段将需要投入要多的人力物力。及时中止不值得投资的工程项目,可以避免更大的浪费。 根据这些基本的概念,我在技术上主要是通过相关文档资料的查找后确定可行性,凭着大学期间打下厚实的专业科基础,特别是数据结构和算法,能够在这段时间理解通透并应该有所改进,后来证明是对的。利用剩下时间也应该来说也比较充裕的。经济上暂不考虑。 下面主要从技术上进行分析: 工具: Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。所以用java来编写是一个很好的选择。 算法:在这图论搜索技术这方面,前人已有很成熟的算法。如粗糙的有深度优先算法(DFS)和广度优先算法(BFS)这两个基本的算法,关键需要解决的是能够设计出一种高效的剪枝函数,减小搜索问题的规模。目前博弈类游戏中的人工智能基本都采用极大极小值方法这对我来说是个挑战,而剪枝的则采用Alpha-Beta,通过丰富的文档资料初步了解到这些技术已经很成熟了。我们有信心能解决好这个问题。 2.3 需求分析 人工智能的第一大成就是下棋程序,在下棋程度中应用的某些技术,如向前看几步,把困难的问题分解成一些较容易的子问题,发展成为搜索和问题归纳这样的人工智能基本技术。今天的计算机程序已能够达到下各种方盘棋和国际象棋的锦标赛水平。但是,尚未解决包括人类棋手具有的但尚不能明确表达的能力。如国际象棋大师们洞察棋局的能力。另一个问题是涉及问题的原概念,在人工智能中叫做问题表示的选择,人们常能找到某种思考问题的方法,从而使求解变易而解决该问题。到目前为止,人工智能程序已能知道如何考虑它们要解决的问题,即搜索解答空间,寻找较优解答。 在设计本系统时考虑到用户需要的是一个操作简便界面简单的游戏软件,同时要提供人机和人人这样的功能,特别是人机部分,要考虑到不同级别的用户,电脑智能不能太低需要有一定的智能下棋功能等等。所以采用α-β剪枝法算法时就是为了达到这些目标。 2.4 总体设计 这个阶段必须回答的关键问题是:“概括地说,应该如何解决这个问题?” -5-课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 首先,应该考虑几种可能的解决方案。如,目标系统的一些主要功能是用计算机自动完成还是用人工完成;如果使用计算机,那么是使用批处理方式还是人机交互方式;信息存储使用传统的文件系统还是数据库„„。通常至少应该考虑下述几类可能的方案: 低成本的解决方案。系统只能完成最必要的工作,不能多做一点额处的工作。本系统的最基本要求就是能够实现必要的操作,其他额外的一些工作在后面完成 中等成本的解决方案。这样的系统不仅能够很好地完成预定的任务,使用起来很方便,而且可能还具有用户没有具体指定的某些功能和特点。虽然用户没有提出这些具体要求,但是系统分析员根据自己的知识和经验断定,这些附加的能力在实践中将证明是很有价值的。 这个成本方案在完成上面的低成本方案后添加的。如增加保存棋局,美化界面,实现观看电脑与电脑之间的对战等功能。 高成本的“十全十美”的系统。这样的系统具有用户可能希望有的所有功能和特点。 结构设计的一条基本原理就是程序应该模块化,也就是一个大程序应该由许多规模适中的模块按合理的层次结构组织而成。总体设计阶段的第二项主要任务就是设计软件的结构,也就是确定程序由哪些模块组成以及模块间的关系。通常用层次图或结构图描绘软件的结构。 2.5 详细设计 总体设计阶段以比较抽象概括的方式提出了解决问题的办法。详细设计阶段的任务就是把解法具体化,也就是回答下面这个关键问题:“应该怎样具体地实现这个系统呢?” 这个阶段的任务还不是编写程序,而是设计出程序的详细规格说明。这种规格说明的作用很类似于其他工程领域中工程师经常使用的工程蓝图,它们应该包含必要的细节,程序员可以根据它们写出实际的程序代码。 2.6编码和单元测试 这个阶段的关键任务是根据以上阶段分析的软件模型,编写各个功能模块。 要注意的是程序的扩张性和可读性。以便以后软件的升级修改。同时要仔细的测试每个功能编写好的功能模块。人工智能技术 人工智能也就是所谓的AI(Artificial Intelligence),它是一门很抽象的技术,-6-课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 AI程序的编写不需要依据任何既定的思考模式或者规则。尤其是游戏中的AI可以完全依程序设计者本身的思考逻辑制作。我个人认为人工智能的核心应该是使计算机具有自动的处理事件的能力,而我们的所有的研究也应该围绕着这一方向。我们今天讨论的是策略类的人工智能。 策略类人工智能可以说是AI中比较复杂的一种,最常见的策略类AI游戏就是棋盘式游戏。在这类游戏中,通常的策略类AI程序都是使计算机判断目前状况下所有可走的棋与可能的获胜状况,并计算当前计算机可走棋步的获胜分数或者玩家可走棋步的获胜分数,然后再决定出一个最佳走法。本课程设计是基于AI中α-β剪枝算法的五子棋的博弈游戏,下面让我们来具体介绍一下相关的内容。算法设计 4.1α-β剪枝算法 我们的程序主要是用α-β剪枝法实现的。其基本思想或算法是,边生成博弈树边计算评估各节点的倒推值,并且根据评估出的倒推值范围,及时停止扩展那些已无必要再扩展的子节点,即相当于剪去了博弈树上的一些分枝,从而节约了机器开销,提高了搜索效率。具体的剪枝方法如下: (1)对于一个与节点MIN,若能估计出其倒推值的上确界β,并且这个β值不大于 MIN的父节点(一定是或节点)的估计倒推值的下确界α,即α≥β,则就不必再扩展该 MIN节点的其余子节点了(因为这些节点的估值对MIN父节点的倒推值已无任何影响 了)。这一过程称为α剪枝。 (2)对于一个或节点MAX,若能估计出其倒推值的下确界α,并且这个α值不小于 MAX的父节点(一定是与节点)的估计倒推值的上确界β,即α≥β,则就不必再扩展该MAX节点的其余子节点了(因为这些节点的估值对MAX父节点的倒推值已无任何影响 了)。这一过程称为β剪枝。 4.2极大极小树 目前绝大部分的博弈类游戏中的人工算法都采用这种方法。假设己方为MAX点,对方则为MIN点。如果当层的节点为奇数时那么就为MAX层,同样为偶数时就为MIN层。当在MAX层时,该层的值就应该为下一个MIN层中的最大一个的值。当在MIN层是,该层的值就应该为它子层MAX的最小的一个。通俗的说就是当轮到我方时,我们就应该选择一个最有利于我们的点,预测对方可能下的最有利他方的点(相对我方来说就是最坏的点)。这样反复计算下去就能够得到根节点的最大值,这个点也就是我们最佳下棋点。在计算这个点时可以很明显的看出这是一个不断递归的过程,到达叶子节点时根据相关 -7-课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 的计算规则算出该值然后向上一层不断的返回。下图中矩形代表极大层,椭圆代表极小层。 4.3深度优先搜索(DFS) 在图论中有两个很重要的遍历的方法,一个是深度优先搜索(DFS),另外一个是广度优先搜索(BFS).这两个方法的主要区别在于下一个节点的选择。DFS首先选择它的连接节点,若它的下个节点已经全部被遍历过或者不存在的话。则向上返回到上一个节点,在遍历其他的未被访问过的点。很容易想到这要用到堆栈结构,使用一个递归来实现。而BFS则是逐个的遍历它的联接接点,将已经访问过的点放入队列中。然后再依次取出继续这个过程。 DFS遍历过程如下: 首先从A点出发访问它的领接点B,因为B的领接点C,F均未被访问过,所以B点选择C(当然也可以选择F点)作为下一个要访问的点,C点的领接点是D,F选择下个节点D,而D的邻接点只有一个E且未被访问过,就将E作为了它下个节点。这时因为E已经没有可访问的邻点,所以向上一层返回到D,发现D也已经没有可访问的点了,继续向上层返回到C,由于C的邻节点F未被访问过,那么就访问F。所以整个过程的遍历结果为: -8-课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 ABECFD。 BFS的遍历过程为ABECFD。 4.4静态估值函数 当极大极小树到达叶子节点时,需要估算一下当前盘面的值。这个就根据某个计算规则计算也即是估值函数。因为这个值是已经确定的所以称为静态。 当只有一个点时,并且相邻的无对方的棋子或者不是边界等“阻碍物” 就给他50,否则给予10。 当两个点时,并且相邻的无对方的棋子或者不是边界等“阻碍物”给予1000,若存在一方有“阻碍物”则给以100,否则给予10。 当是活三的时候给予3600,当存在一边被堵时,就给予500。否则给予10。当是活四的时候给以500000,当一边被堵时,给予50000。否则给予10 当是五连子的时候就给予最高分1000000。最后判断是否是己方的,若不是则给予负号。 静态估值函数会很严重的影响到算法的智能,所以可根据在下棋的过程中不断的做出调整,使其更加的合理。根据一些测试,这组静态估值函数能够很好的反映棋盘重要性指标。软件设计和实现 5.1 数据结构定义 本程序定义15*15的五子棋棋盘,实现算法,在算法中采用的数据结构包括:int isChessOn[][]描述当前棋盘,0表示黑子,1表示白字,2表示无子;int pre[][]用来记录棋点的x,y坐标。 由于本课程设计是基于Java语言开发的,在Java中只能用类来表示并实现所定义的数据结构。所以下面将用类来描述相应的数据结构及算法: public class ChessPanel extends JPanel{ private ImageIcon map; //棋盘背景位图 private ImageIcon blackchess; //黑子位图 private ImageIcon whitechess; //白子位图 public int isChessOn [][]; //棋局 protected boolean win = false; // 是否已经分出胜负 protected int win_bw; // 胜利棋色 protected int deep = 3, weight = 7; // 搜索的深度以及广度 public int drawn_num = 110; // 和棋步数 int chess_num = 0; // 总落子数目 -9-课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 public int[][] pre = new int[drawn_num + 1][2]; // 记录下棋点的x,y坐标 最多(drawn_num + 1)个 public int sbw = 0; //玩家棋色黑色0,白色1 public int bw = 0; // 当前应该下的棋色 0:黑色(默认),1:白色 // 边界值,用于速度优化 protected int x_max = 15, x_min = 0; protected int y_max = 15, y_min = 0; protected boolean able_flag = true; // 是否选择禁手标志 0:无禁手 1:有禁手(默认 private int h; //棋子长 private int w; //棋子宽 private int insx; //插入棋子的位置 private int insy; private Point mousePoint; //鼠标当前位置 private int winer; //获胜方 private boolean humanhuman=false; //是否是人人对弈 private int plast=0; //走了几步了,public int BLACK_ONE; //0表黑子 public int WHITE_ONE; //1表白子 public int NONE_ONE; //2表无子 public int N; //棋盘边长 //---------搜索当前搜索状态极大值-// //alpha 祖先节点得到的当前最小最大值,用于alpha 剪枝 //beta 祖先节点得到的当前最大最小值,用于beta 剪枝。 //step 还要搜索的步数 //return 当前搜索子树极大值 protected int findMax(int alpha, int beta, int step){ int max = alpha; if(step == 0){ return evaluate(); } int[][] rt = getBests(1sbw)== 1) //电脑可取胜 return 100 *(getMark(1)+ step*1000); isChessOn[x][y] = 11); isChessOn[x][y] = 2; // 还原预设边界值 x_min=temp1; x_max=temp2; y_min=temp3; y_max=temp4; if(t > max) max = t; //beta 剪枝 if(max >= beta) return max; } return max; } //-----------------------搜索当前搜索状态极小值--// //alpha 祖先节点得到的当前最小最大值,用于alpha 剪枝 //beta 祖先节点得到的当前最大最小值,用于beta 剪枝 //step 还要搜索的步数 //return 当前搜索子树极小值。 protected int findMin(int alpha, int beta, int step){ int min = beta; if(step == 0){ return evaluate(); } int[][] rt = getBests(sbw); for(int i = 0;i < rt.length;i++){ int x = rt[i][0]; int y = rt[i][1]; int type = getType(x, y, sbw); if(type == 1) //玩家成5 return-100 *(getMark(1)+ step*1000); // 预存当前边界值 int temp1=x_min,temp2=x_max,temp3=y_min,temp4=y_max; isChessOn[x][y] = sbw; resetMaxMin(x,y); int t = findMax(alpha, min, stepbwf); if(able_flag && bwf==0 &&(type_1 == 20 || type_1 == 21 || type_1 == 22))// 禁手棋位置,不记录 continue; rt[n][0] = i; rt[n][1] = j; rt[n][2] = getMark(type_1)+ getMark(type_2); n++; -12-课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 } // 对二维数组排序 Arrays.sort(rt, new ArrComparator()); int size = weight > n? n:weight; int[][] bests = new int[size][3]; System.arraycopy(rt, 0, bests, 0, size); return bests; } //----------------------------计算指定方位上的棋型-------------------// // x,y 方向线基准一点。 //ex,ey 指定方向步进向量。 // k 棋子颜色,0:黑色,1:白色 // 该方向上的棋子数目 以及 活度 private int[] count(int x, int y, int ex, int ey, int bwf){ // 该方向没意义,返回0 if(!makesense(x, y, ex, ey, bwf)) return new int[] {0, 1}; // 正方向 以及 反方向棋子个数 int rt_1 = 1,rt_2 = 1; // 总棋子个数 int rt = 1; // 正方向 以及 反方向连子的活度 int ok_1 = 0,ok_2 =0; // 总活度 int ok = 0; // 连子中间有无空格 boolean flag_mid1 =false,flag_mid2 = false; // 连子中间空格的位置 int flag_i1 = 1,flag_i2 = 1; if(isChessOn[x][y]!= 2){ throw new IllegalArgumentException(“position x,y must be empty!..”); } int i; // 往正方向搜索 for(i = 1;x + i * ex < 15 && x + i * ex >= 0 && y + i * ey < 15 && y + i * ey >= 0;i++){ if(isChessOn[x + i * ex][y + i * ey] == bwf) rt_1++; -13-课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 // 位置为空,若中空标志为false,则记为中空并继续搜索 否则,break else if(isChessOn[x + i * ex][y + i * ey] == 2){ if(!flag_mid1){ flag_mid1 = true; flag_i1 = i; } else break; } // 位置为对方棋子 else break; } // 计算正方向活度,,// 最后一个位置不超过边界 if(x + i * ex < 15 && x + i * ex >= 0 && y + i * ey < 15 && y + i * ey >= 0){ // 最后一个位置为空位 +1活 if(isChessOn[x + i * ex][y + i * ey] == 2){ ok_1++; // 若是在尾部检测到连续的空格而退出搜索,则不算有中空 if(rt_1 == flag_i1) flag_mid1 = false; // 若中空的位置在4以下 且 棋子数>=4,则这一边的4非活 if(flag_mid1 && rt_1 > 3 && flag_i1 < 4){ ok_1--; } } // 最后一个位置不是空格,且搜索了2步以上,若前一个是空格, 则不算中空,且为活的边 else if(isChessOn[x + i * ex][y + i * ey]!= bwf && i >= 2) if(isChessOn[x +(i-1)* ex][y +(i-1)* ey] == 2){ ok_1++; flag_mid1 = false; } } // 最后一个位置是边界 搜索了2步以上,且前一个是空格, 则不算中空,且为活的边 else if(i >= 2 && isChessOn[x +(i-1)* ex][y +(i-1)* ey] == 2){ -14-课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 ok_1++; flag_mid1 = false; } // 往反方向搜索 for(i = 1;xi * ex < 15 && yi * ey < 15;i++){ if(isChessOn[xi * ey] == bwf) ey >= 0){ rt_2++; else if(isChessOn[xi * ey] == 2){ if(!flag_mid2){ flag_mid2 = true; flag_i2 = i; } else break; } else break;} // 计算反方向活度 if(xi * ex >= 0 && yi * if(isChessOn[xi * ey] == 2){ ok_2++; if(rt_2 == flag_i2) flag_mid2 = false; if(flag_mid2 && rt_2 > 3 && flag_i2 < 4){ ok_2--; } } else if(isChessOn[xi * ey]!= bwf && i >= 2) if(isChessOn[x(i-1)* ey] == 2){ ok_2++; flag_mid2 = false; } } else if(i >= 2 && isChessOn[x(i-1)* ey] == 2){ ok_2++;flag_mid2 = false;} 课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 //------------------分析棋子类型 // 两边都没中空,直接合成 if(!flag_mid1 &&!flag_mid2){ rt = rt_1 + rt_21; // 判断中间的纯连子数,在5以上,直接返回;为4,返回活4; if(temp >= 5) return new int[] {temp, 2}; if(temp == 4) return new int[] {temp, 2}; // 先看有没死4,再看有没活3,剩下只能是死3 if(rt_1 + flag_i21 >= 4) return new int[] {4, 1}; if(rt_1+flag_i2-1 == 3 && ok_1 > 0 || rt_2+flag_i1-1 == 3 && ok_2 > 0) return new int[] {3, 2}; return new int[] {3, 1}; } // 有一边有中空 else { // 总棋子数少于5,直接合成if(rt_1 + rt_21, ok_1 + ok_2}; // 多于5,先找成5,再找活4,剩下的只能是死4 else { if(flag_mid1 && rt_2 + flag_i11, ok_2 + 1}; if(flag_mid2 && rt_1 + flag_i21, ok_1 + 1}; if(flag_mid1 &&(rt_2 + flag_i11 == 4 && ok_1 == 1 || flag_i2 == 4)) -16-课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 } } } return new int[] {4, 2}; return new int[] {4, 1};5.2 程序流程图 -17-课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 6 性能测试 6.1 程序执行结果 1.初始界面 2.人机博弈 3.人人博弈 -18-课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 4.禁手选择 5.悔棋选择 -19-课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 6.规则界面 -20-课程名称:人工智能原理及其应用 学生姓名:何兵 学生学号:1143041163 7 总结 本程序是使用α-β搜索的算法完成的一个简单的五子棋博弈游戏。虽然α-βAlpha-Beta已经尽力做到细致、全面,但由于α-β搜索存在博弈树算法中普遍存在的一个缺点¬一随着搜索层数的增加,算法的效率大大下降。所以该搜索的效率还是不怎么理想,五子棋程序的“智力”也不高。因此可以在上述程序的基础上,针对五子棋本身的特点和规律对α-β搜索算法进行优化与修正,比如用启发式搜索。还有就是虽然使用了禁手思维的算法,但是这并不能平衡先后手之间的差距,依然是“先行必胜”,这个问题还有待进一步解决。 参考文献 [1] 明日科技.Java项目案例分析.清华大学出版社 [2](美)埃克尔著 陈昊鹏 译.Java编程思想.机械工业出版社-21- 读书的好处 1、行万里路,读万卷书。 2、书山有路勤为径,学海无涯苦作舟。 3、读书破万卷,下笔如有神。 4、我所学到的任何有价值的知识都是由自学中得来的。——达尔文 5、少壮不努力,老大徒悲伤。 6、黑发不知勤学早,白首方悔读书迟。——颜真卿 7、宝剑锋从磨砺出,梅花香自苦寒来。 8、读书要三到:心到、眼到、口到 9、玉不琢、不成器,人不学、不知义。 10、一日无书,百事荒废。——陈寿 11、书是人类进步的阶梯。 12、一日不读口生,一日不写手生。 13、我扑在书上,就像饥饿的人扑在面包上。——高尔基 14、书到用时方恨少、事非经过不知难。——陆游 15、读一本好书,就如同和一个高尚的人在交谈——歌德 16、读一切好书,就是和许多高尚的人谈话。——笛卡儿 17、学习永远不晚。——高尔基 18、少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。——刘向 19、学而不思则惘,思而不学则殆。——孔子 20、读书给人以快乐、给人以光彩、给人以才干。——培根 人工智能与电子商务 2013年6月16日 人工智能在电子商务中的应用 摘要:人工智能技术和电子商务的飞速发展推动了全球科技经济领域的进步,基于人工智能技术的电子商务更趋向完美和成熟。随着电子商务的不断发张和人工智能的不断完善,两者在各自领域、各个层次的相互融合将更加紧密。作为各自的成功因素,电子商务和人工智能技术的融合必将成为一种关键技术。 关键词:电子商务;人工智能;数据仓库;数据挖掘 一、引言 电子商务的飞速发展给全球经济带来的冲击是巨大的。基于人工智能技术的电子商务将能更好地为其发展带来良好的基础.这过程是电子商务向着良性发展的必然趋势。本文从人工智能技术与电子商务的国内外动态人工智能技术在电子商务中的应川例子,以及数据挖掘技术在web上的应用等几个方面对其进行论述。 二、人工智能 人工智能(artificialintelligence,AI)是在计算机科学、控制论、信息论、神经心理学、哲学、语言学、等多种学科研究的基础上发展起来的一门综合性很强的交叉科学,是一门新思想、新观念、新理论、新技术不断出现的新兴科学以及正在迅速发展的前沿学科【1】。人工智能是研究使机器具备人所具有的智能功能的一门高新技术学科。其目的是模拟、延伸和扩展人的智能,以实现某些脑力劳动的自动化。实质上,它是开拓计算机应用、研制新一代计算机和扩展计算机应用领域的技术基础,也是探索人脑奥秘的重要科学途径。人工智能、原子能技术、空间技术,被称2O世纪的三大尖端科技。进入21世纪后,人工智能仍是适应信息时代需求的关键技术之一。明确上述人工智能定义后,不难指明智能化与电脑化的区别。“人工智能”是指,采用人工能理论方法和技术,并具有某种或某些拟人智能特性或功能。有电脑后不一定采用人工智能方法,也不一定具有拟人智能特性,故不一定能被称为“智能化”。 三、电子商务 电子商务,源于英文ELECTR0NICC0MMERCE,简写为EC,指的是利用简单、快捷、低成本的电子通讯方式,买卖双方不谋面地进行各种商贸活动。【2】其内容包含两个方面:一是电子方式;二是商贸活动。电子商务可以通过多种电子通讯方式来完成,但是,现在人们所探讨的电子商务主要是以EDI(电子数据交换)和INTER—NET来完成的。尤其是随着INTERNET技术的日益成熟,电子商务真正的发展将是建立在INTERNET技术上的,所以也有人把电子商务简称为IC(INTERNETC0MMERCEo从贸易活动的角度分析,电子商务可以在多个环节实现,由此也可以将电子商务分为两个层次,较低层次的电子商务如电子商情、电子贸易、电子合同等;最完整的也是最高级的电子商务应该是利用INTENET网络能够进行全部的贸易活动,即在网上将信息流、商流、资金流和部分的物流完整地实现,也就是说,你可以从寻找客户开始,一直到洽谈、订货、在线付(收)款、开据电子发票以至到电子报关、电子纳税等通过INTERNET一气呵成。要实现完整的电子商务,还会涉及到很多方面,除了买家、卖家外,还要有银行或金融机构、政府机构、认证机构、配送中心等机构的加入才行。由于参与电子商务中的各方在物理上是互不谋面的,因此整个电子商务过程并不是物理世界商务活动的翻版,网上银行、在线电子支付等条件和数据加密、电子签名等技术在电子商务中发挥着重要的、不可或缺的作用。 四、人工智能国内外的动态 从1955年正式提出人工智能学科算起40多年来人工智能学科取得了长足的发展.成为一门广泛的交叉和前沿科学。总的说来人工智能的目的就是让计算机这台机器能够像人一样思考,如果希望做出一台能够思考的机器月B就必须知道什么是思考更进一步讲就是什么是智慧。什么样的机器才是智慧的呢,科学家已经作出了汽车火车飞机收音机等等.它们我们身体器官的功能但是能不能模仿人类大脑的功能呢7到目前为止我也仅仅知道这个装在我们天灵盖里面的东西是由数十亿个神经细胞组成的器官.我们对这个东西知之甚少,模仿它或许是天下最困难的事情了当计算机出现后人类开始真正有了个可以模拟人类思维的工具在以后的岁月中无数科学家为这个目标努力着.现在人“商场现代化"2007年10月(上甸刊j总 整个数据仓库系统是一个包含四个层次的体系结构。 (1)数据源。是数据仓库系统的基础,是整个系统的数据源泉通常包括企业内部信息和外部信息。内部信息包括存放于RDBMS中的各种业务处理数据和各类文档数据;外部信息包括各类法律法规、市场信息和竞争对手的信息等等。(2).数据的存储与管理。是整个数据仓库系统的核心。数据仓库的真正关键是数据的存储和管理。数据仓库的组织管理方式决定了它有别于传统数据库,同时也决定其对外部数据的表现形式。要决定采用什么产品和技术来建立数据仓库的核心,则需要从数据仓库的技术特点着手分析。针对现有各业务系统的数据,进行抽取、清理,并有效集成,按照主题进行组织。数据仓库按照数据的覆盖范围可以分为企业级数据仓库和部门级数据仓库(通常称为数据集市)。(3).OLAP(On—lineAnalysis&Processing)fJ~.务器。对分析 需要的数据进行有效集成,按多维模型予以组织,以便进行多角度、多层次的分析,并发现趋势。其具体实现可以分为ROLAP、MOLAP和HOLAP。ROLAP基本数据和聚合数据均存放在RDBMS之中;MOLAP基本数据和聚合数据均存放于多维数据库中;HOLAP基本数据存放于RDBMS之中,聚合数据存放于多维数据库中。 (4).前端工具。主要包括各种报表工具、查询工具、数据分析工具、数据挖掘工具以及各种基于数据仓库或数据集市的应用开发工具。其中,数据分析工具主要针对OLAP服务器;报表工具、数据挖掘工具主要针对数据仓库。 2、数据仓库的作用 数据仓库究竟能帮我们干点什么?简单地说,假设你用自动柜员机取200元,当你等待柜员机交易确认时,银行可以查看一下你的账号,告诉你现金账上钱太多,应该换另一个账号,以便获得更多利息。如果银行这么对待你,作为消费者你肯定会觉得这是一个好银行。然而没有数据仓库,银行就做不到这一点。现在上网购物常常给人带来意外的惊喜。网站在你不知不觉中记录你的行踪,抓到你的喜好。如果你在网上点击一下衬衫,之后又看了一下书和裤子,网站就会记住你的点击顺序,记下你在每个产品上停留的时间以及你买了什么,没买什么。这些信息都由数据仓库保存整理。假如你买了裤子,没买衬衫,下次你上网时,数据仓库会跟你说,“欢迎再次光顾,上次您买了裤子,现在我们有一件衬衫可以优惠卖给你。你感兴趣吗?”顾客遇到这种情况,一定是又惊又喜。这就是数据仓库的魅力。 数据仓库及管理软件的市场潜力十分巨大。用一句话说,新经济的基础是用互联网武装各种类型的公司,并使之自我发展,这个过程中产生许多数据。如果没有数据仓库软件,这些数据就根本没有用处。有了数据仓库,就可以了解客户是谁,他需要什么,怎样提供更好的服务给他,并以此创造更多利润。 (二)、数据挖掘与知识发现 1、数据挖掘与知识发现 数据挖掘(DMDataM川ng)和数据库知识发现(KDDKwowledgeDiscoveryinDatebase)是随着数据库技术人工智能拄术和网络技术的发展而提名的。尤其是随着电子商务的开展.信 万方数据电孑商务息总量不断增加.更迫切地需要有效的信息分析工具以便能发现大量商业数据问隐藏的依赖关系.从而抽取有用的信息或知识指导商业决策【5】。过去只有简单的数据统计技术,还未达到成为智…能数据分析工具。因此.在数据生成和数据理解之间还存在很大的差距。DM和KDD就是种新型的数据分折技术.旨在从大型数、据库中提取隐藏的 预测性信息构建高校的数据仓库,发掘数据问潜在的模式以便于用理解和观察的形式反映给用户,从而为企业做出前瞻的.基于知识的决策参考意见。【6】DM与KDD需要解决的问题有:超大规模数据库和高维数据.数据丢失:变化中的数据和知识.模式的易懂性非标准格式数据,多媒体数据以及面向对象数据的处理.与其他系统的集成.网络与分布式环境下的KDD问题等。DM与KDD的区别是.KDD是一个综合的过程包括实验记录叠代求解用户交互以及许多定制要求和决策设计等而DM只是KDD中的一个具体但又是关键的步骤.,当然.它们都对数据仓库进行有效利用的技术手段。 2、数据挖掘实际应用 DM(KDD)工具和软件已在各个部门得到很好的应用,并收到明显的效益。 [1]金融方面:银行信用卡和保险行业,预测存/贷款趋势,优化存/贷款策略,用DM将市场分成有意义的群组和部门,从而协助市场经理和业务执行人员更好地集中于有促进作用的活动和设计新的市场运动。 [2]在客户关系管理方面:DM能找出产品使用模式或协助了解客户行为,从而可以改进通道管理(如银行分支和ATM等)。又如正确时间销售(RightTimeMarKeting)就是基于顾客生活周期模型来实施的。 [3]在零售业/市场营销方面:是数据挖掘技术应用最早也是最重要的领域,DM用于顾客购货篮的分析可以协助货架布置,促销活动时间,促销商品组合以及了解滞销和畅销商品状况等商业活动。通过对一种厂家商品在各连锁店的市场共享分析,客户统计以及历史状况的分析,可以确定销售和广告业务的有效性。 [4]在过程控制/质量监督保证方面:DM协助管理大数量变量之间的相互作用,DM能自动发现出某些不正常的数据分布,暴露制造和装配操作过程中变化情况和各种因素,从而协助质量工程师很快地注意到问题发生范围和采取改正措施。 [5]在远程通讯部门:基于DM的分析协助组织策略变更以适应外部世界的变化,确定市场变化模式以指导销售计划.在网络容量利用方面,DM能提供对客户组类服务使用的结构和模式的了解,从而指导容量计划人员对网络设施作出最佳投资决策。 [6]化学/制药行业:从各种文献资料总自动抽取有关化学反应的信息,发现新的有用化学成分。在遥感领域针对每天从卫星上及其它方面来的巨额数据,对气象预报,臭氧层监测等能起很大作用。 [7]军事方面:使用DM进行军事信息系统中的目标特征提取、态势关联规则挖掘等。总之,DM可广泛应用于银行金融、零售与批发、制造、保险、公共设施、政府、教育、远程通讯、软件开发、运输等各个企事业单位及国防科研上。据报导,DM的投资回报率有达400%甚至10倍的事例。 (三)、生物认证技术 目前,许多磁卡、存单大都是用密码进行安全保障的。一旦密码泄露,也就不安全了。在电子商务中,电子货币将得到急速的发展。对安全水平的要求也相应提高。从而带动了人工智能的一个分支领域——生物认证技术的研究与开发。 生物认证技术是指利用人体某一具有特征的部位。或个人的习惯,如指纹、掌纹、手形、网膜、虹膜、脸型、声纹及笔记等来识别人们的身份的技术。这种识别技术与磁卡式的靠持有物认证的方法和密码式的靠只是认证的方法相比,具有极大的优越性。它不会丢失,被盗和伪造。 生物认证技术作为一种准确、快速和高效的身份认证方法,正应用于如银行、海关、医疗保险、重要通道控制、信息网络安全等领域。这是一项集现代化生物科技与计算机科学相结合 的高科技实用项目。微软公司宣布把生物认证技术添加到自己的视窗操作系统中。这对这项新技术的发展将起到促进作用。 (四)、智能数据库信息检索 在电子商务平台应用实践中,如何根据用户的意图,兴趣和特点自适应地和智能地从现有的客户信息、商品库信息等大量数据信息中对信息进行相关性排列,调整匹配机制,以获得用户满意的检索输出,成为电子商务今后;应用所面临的一个技术问题。 六、结论 本文从人工智能技术和电子商务技术的发展,人工智能技术在电子商务中的应用实例,以及数据挖掘技术和数据仓库技术的实际应用进行概括的论述。随着电子商务的不断发展和人工智能的不断完善,两者在各个领域、各个层次的相互融合将更加密切。 总而言之,作为一种商务活动过程,人工智能在电子商务中的应用将带来一场史无前例的革命,其对社会经济的影响会远远超过商务本身。除了上述这些影响之外,他还将对就业、法律制度以及文化教育等带来巨大的影响。 参考文献 【1】王万良。人工智能及其应用(10、一日无书,百事荒废。——陈寿 11、书是人类进步的阶梯。 12、一日不读口生,一日不写手生。 13、我扑在书上,就像饥饿的人扑在面包上。——高尔基 14、书到用时方恨少、事非经过不知难。——陆游 15、读一本好书,就如同和一个高尚的人在交谈——歌德 16、读一切好书,就是和许多高尚的人谈话。——笛卡儿 17、学习永远不晚。——高尔基 18、少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。——刘向 19、学而不思则惘,思而不学则殆。——孔子 20、读书给人以快乐、给人以光彩、给人以才干。——培根第二篇:人工智能与专家系统感想
第三篇:人工智能专家系统实验
第四篇:人工智能课程设计(五子棋)解读
第五篇:人工智能与电子商务解读