人工智能作业1

时间:2019-05-15 04:02:47下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《人工智能作业1》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《人工智能作业1》。

第一篇:人工智能作业1

通过学习《高中信息技术“人工智能初步”模块教学研究》课程,分析您教学中学生的专家系统作品(或课程学习的参考资料的学生作品),就学生作品中存在的问题,谈谈自己在教学中如何更好地开展人工智能的教学。

通过学习《高中信息技术“人工智能初步”模块教学研究》课程,谈谈您在实施该模块教学过程中遇到的问题及解决方法,未实施过该模块教学的教师可谈谈开展人工智能模块教学的设想。

按教材的顺序,应该先讲人工智能的基本概念,然后讲解知识及其表示的理论知识,再讲解推理与专家系统和人工智能语言。但是这种传统教学方法对于中学生来说太晦涩难懂了,教师还没把理论知识讲完,学生已对人工智能彻底失去兴趣了。所以我们在讲理论知识的过程中,要加入有趣的实例。所以我们要打破常规的教学顺序,对教材进行重组。尽量减少概念和纯理论知识的讲解时间,通过让学生制作一个有实用价值的个性化的简易专家系统来带动人工智能的理论知识学习。在“做”的过程中,掌握知识的表达及推理机制等理论知识。让学生在完成一个简单专家系统作品的过程中,不知不觉中学习了相应的理论知识。我们要做到通过人工智能教学,能够吸引更多的学生能投身于人工智能的研究中。

通过对学生作品—疾病诊断治疗专家系统的分析,我觉得在以后的人工智能教学中,要做到以下几个方面:

(1)教师要以平等友好的心态,微笑温和的话语与学生交流,尊重、理解每个学生的权利、价值观和感觉,保全学生的面子,杜绝直接的批评、奚落、嘲弄、讽刺,保证学生在课堂上的情绪安全感。

(2)尽量减少概念和纯理论知识的讲解时间,通过让学生制作一个有实用价值的个性化的简易专家系统来带动人工智能的理论知识学习。在“做”的过程中,掌握知识的表达及推理机制等理论知识。让学生在完成一个简单专家系统作品的过程中,不知不觉中学习了相应的理论知识。

(3)展人工智能的教学,重点要放在让学生能够体验,老师最好能以现实中的例子来给学生做讲演,有直观的印象,学起来更容易现解。

(4)在教学中要利用好因特网这个大资源库,并以小组合作学习的形式,相互交流,相互帮助,老师再及时指导与评价。

第二篇:人工智能心得体会大作业

我眼中的人工智能

人,没有熊一样的力量,却能把熊关进笼子,这笼子的钥匙,叫智慧。人类一直在思考如何让自然界的其它事物为自己所用,而不是只想着如何获取食物来填饱肚子,人类之所以会凌驾于食物链顶端,就在于对于资源的使用。为了减轻胃的消化负担,人类开始学会使用火,让蛋白质在进入胃之前就变质而变得更好消化易于吸收。经历了漫长的手工制造业历程,为了提高生产效率,也为了减轻工人手工劳作的负担,人们开始了工业革命,无数的机器流水线取代了效率低下的廉价劳动力,也正是从此刻起,人类使用资源的能力有了质的发展,由使用已有资源,到创造新的资源。第一台计算机应运而生,人类开启了无限创造的时代。时至今日,计算机技术几乎延伸到了生活的每个领域,甚至成了人们的生活必需品。计算机能帮助人们完成人类不可能完成的计算,但一直致力于创造的人们当然不会停止对计算机的要求。人们不光需要计算机做人类做不了的计算,还渐渐开始要求计算机做人类能做的事,这便催生了人工智能。人类就是这样一步步用自己的智慧让自己过上傻瓜一样的生活。

人工智能目前还没有在人们生活中普及,但是已经出现萌芽。最典型是的一些语音识别系统,如苹果公司的Siri可能是目前人们接触最多的基于人工智能和云计算技术的产品,相信这种人机交互系统的雏形经过时间的磨练会在未来形成一套完善的从界面到内核的智能体系。在社会生活方面,与数字图像处理技术紧密结合的人工智能已经开始应用于摄像头的图像捕捉和识别,而模式识别技术的发展则使得人工智能在更广阔的领域得以实现成为了可能。一些大公司在人工智能领域的投入和研究对于推动人工智能的发展起到了很大的作用,最值得一提的就是谷歌。谷歌的免费搜索表面上是为了方便人们的查询,但这款搜索引擎推出的初衷,就是为了帮助人工智能的深度学习,通过上亿的用户一次又一次地查询,来锻炼人工智能的学习能力,由于我的水平还很低,对于深度学习还不敢妄自拽测。但是,近年来谷歌公司在人工智能方面的突破一项接着一项,为人们熟知的便是智能汽车。不得不说,人工智能想要进一步发展,必须依靠这些大公司的研究和不断推广,由经济促创新。

纵览时间长河,很多新生的技术在一开始都是举步维艰的,人工智能也不例外,但幸运的是,人们接受和学会使用新技术所需要的时间越来越短,对于人工智能产品的投入市场是有益的。因此,在我看来,将已开发出来但还需完善的人工智能产品投放市场,使其进入人们的生活只是时间的问题,但要想真正掌握人工智能,开发出完全符合研发人想法的智能产品还需各方面的努力。至于现在讨论热烈的“人工智能统治人类”的问题,我的看法是,人工智能的开发和应用是需要监管的,但并不能阻止人工智能即将影响世界的趋势。

由于我对于人工智能的理解还只是皮毛,对于文中出现的纰漏和错误还希望老师指正!

第三篇:江苏大学 人工智能作业

课学生姓学专业班指导教

计算机科学与通信工程学院

人工智能

级 师

人工智能技术发展历程及应用前景

摘要: “人工智能”(Artificial Intelligence)一词最初是在1956年的达特茅斯学会上提出的。人工智能又名机器智能,智能模拟,在日本叫做FGCS。它是一门通过计算过程力图理解和模仿只能行为的学科(Schalkoff,1990)。可实现判断、推理、证明、识别、感知、理解、通信、设计、思考、规划、学习和问题求解等思维活动的自动化。(Bellman,1978)。现如今时代发展,人类社会中的许多问题越来越难以使用常规的计算机系统解决问题。人工智能企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。目前能够用来研究人工智能的主要物质手段以及能够实现人工智能技术的机器就是计算机,人工智能的发展历史是和计算机科学与技术的发展史联系在一起的。

关键词:人工智能 发展

一、人工智能的定义

“人工智能”(Artificial Intelligence)一词最初是在1956年的达特茅斯学会上提出的。人工智能又名机器智能,智能模拟,在日本叫做FGCS。它是一门通过计算过程力图理解和模仿只能行为的学科(Schalkoff,1990)。可实现判断、推理、证明、识别、感知、理解、通信、设计、思考、规划、学习和问题求解等思维活动的自动化。(Bellman,1978)。现如今时代发展,人类社会中的许多问题越来越难以使用常规的计算机系统解决问题。人工智能企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。目前能够用来研究人工智能的主要物质手段以及能够实现人工智能技术的机器就是计算机,人工智能的发展历史是和计算机科学与技术的发展史联系在一起的。人工智能理论进入21世纪,正酝酿着新的突破。人工智能的研究成果将能够创造出更多高级的智能产品,极大的方便我们的生活。并为发展国民经济和改善人类生活做出更大贡献。即将到来的信息时代绝非一般性地推广使用常规计算机,而是发展人工智能。

二、人工智能的发展阶段

第一阶段:孕育期

早在计算机出现之前,科学家们就已经希望能够制造出可以模拟人类思维的机器了。而在更加久远的神话中,也有自动机的记载。对这些东西我们已经无从考证,但他们还是反应了人们的期望。今天我们的计算机所使用的逻辑基础正是由数学家布尔与其他杰出的科学家们在计算机出现之前的那个年代通过研究一起奠定的。

毫无疑问,图灵的机器智能思想是人工智能的直接起源之一。在1937年他年仅24岁时就在一篇关于“理想计算机”的论文中提出了极好的设想,这就是为众人所熟知的图灵机。他于1950年发表了《计算机器与智能》。他在这篇论文中提出的“图灵测试”则指出,如果测试者在与被测试者)隔开的情况下,通过一些装置向被测试者随意提问,进行多次测试后,如果有超过30%的测试者不能确定出被测试者是人还是机器,那么这台机器就通过了测试,并被认为具有人工智能。

第二阶段:人工智能基础技术的研究与形成

1956年,在美国汉诺威的达特茅斯大学举办了一次暑期讨论会。在交流探讨中,与会者萌发了一个朴素的思想:设法使得电子计算机具有人的只能。他们大胆的预言,在25年之后这一设想将会初见成效。这次会议筹备者之一的达特茅斯大学数学系助教麦卡锡提出了人工智能(artificial intelligence)这一名称。从那时起,人工智能的名字才正式确立。这次会议在人工智能历史上不是巨大的成功,但是这次会议给人工智能奠基人相互交流的机会,并为未来人工智能的发展起了铺垫的作用。在此以后,人工智能的重点开始变为建立实用的能够自行解决问题的系统,并要求系统有自学习能力。

1957年,香农和另一些人又开发了一个程序称为General Problem Solver(GPS),它对Wiener的反馈理论有一个扩展,并能够解决一些比较普遍的问题。

纽厄尔、西蒙、啸鸟心理学小组的工作是这一时期的一个开创性工作。他们于1953年创立了证明数学定理的LT逻辑推理程序。机器以此证明了罗素、怀德海所著《数学原理》一书中的38个定理。基于相同的思想,他们在1960年又编制了可以解出十种不同性质课题的“通用问题求解机”程序。西蒙还发表了两篇著名的论文:理想选择的行为理论和问题求解的决策过程中环境的影响。他为此还获得了1978年的诺贝尔奖金。他们所做的开创性工作是人工智能向前发展的决定性步骤。

在这种环境下LISP应运而生。它是第一种声明式系内函数式程序设计语言。用具有智能的程序阐述了数学和数理逻辑相互作用的许多问题,为译码机打下了基础。

第三阶段:发展和实用化 DENDRAL化学质谱分析系统、MYCIN疾病诊断和治疗系统、PROSPECTIOR探矿系统、Hearsay-II语音理解系统等专家系统的研究和开发,将人工智能引向了实用化。并且,1969年成立了国际人工智能联合会议(International Joint Conferences on Artificial Intelligence即IJCAI)。

70年代之后,人们一方面继续进行机器翻译、模式识别等的开发工作,一边又着手进行定理证明、自然语言理解、专家系统等新领域的研究。科学家们还创办了《人工智能》杂志,这为开展协作研究重大核心问题、制定研究方向,推动其他国家的学者一起展开研究起到了积极作用。

1976年在美国的一次州国际象棋锦标赛中,由西北大学设计的弈棋程序在B级水平的较量中战胜了所有对手。在经过改进之后它于次年参加了第84届明尼苏达州国际象棋公开赛,挫败名手拔得头筹。从此机器弈棋名声大振,西北大学应西欧各国之邀巡回比赛,历时一个多月载誉而归。

虽然模式识别技术已经初步用于医疗诊断、遥感图像分析、信件分拣等方面,但正如人工智能专家尼尔·格雷厄姆(Neill Graham)所言,即使计算机称得上是一个基本称职的翻译,并且能在弈棋比赛中与人分庭抗礼,但在模式识别方面与人的差距仍旧十分遥远。在这一时间段,由于国家的需求,机器人的研究和开发获得了媚果国家宇航局等的大力支持。很快的第二代机器人得到批量生产,第三代机器人——可以一边工作一边拟定自己工作计划的智能机器人也进入了应用研究阶段。日本从70年代末起在这一领域突飞猛进,其拥有机器人的总数已经超越了美国。

70年代以来,Comad等人研究人工仿生系统中的自适应、进化和群体动力学,提出了不断完善的“人工世界”模型。80年代人工神经网络再度兴起,促进了人工生命的发展。其主要研究方法有信息模型法和工作原理法。其研究途径分为工程技术途径和生物科学途径。

1987年,美国召开第一次神经网络国际会议,宣告了这一新学科的诞生。此后,各国在神经网络方面的投资逐渐增加,神经网络迅速发展起来。

专家系统于九十年代兴起,其重点在于模拟对于人类专家的模拟和知识库的改进与归纳。在其诸多模型中,人工神经网络模型的应用最为广泛。由于Hopfield多层神经网络模型的提出,使人工神经网络研究与应用出现了欣欣向荣的景象。人工智能已深入到社会生活的各个领域。

随着计算机硬件和人工智能理论的发展,上世纪九十年代以来人工智能的研究出现了新的高潮。人工智能研究的三个热点是:智能接口、数据挖掘和主体及多主体系统。

智能接口技术研究如何使人们能够方便自然地与计算机交流。数据挖掘就是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。主体是具有信念、愿望、意图、能力、选择、承诺等心智状态的实体,比对象的粒度更大,智能性更高,而且具有一定自主性。多主体系统主要研究在逻辑上或物理上分离的多个主体之间进行协调智能行为,最终实现问题求解。多主体系统试图用主体来模拟人的理性行为,主要应用在对现实世界和社会的模拟、机器人以及智能机械等领域。

三、人工智能的发展前景

AI与各门学科不断的融合。其中信息技术的地位最为重要。其他方面,如心理学、语言学、认知科学,还有社会学、人类学、哲学以及系统科学也与AI进行着越来越频繁的交流。

AI应用问题需要开发复杂的软件系统,这将促进软件工程学科的发展。软件工程为一定类型的问题求解提供标准化程序;知识软件为AI问题求解提供有效的编程手段。AI系统的开发也将发展为一个完整的应用系统。

在当前的AI应用方法研究中,有几大前沿课题格外引人注目:即多种方法混合技术、多专家系统、机器学习(尤以神经网络学习和知识发现)方法、硬软件一体化以及并行分布处理技术等。其中对人脑机理和分布式AI(或MAS)的研究,将会确立新一代计算机的基础。

四、心得体会

在进入大学校园乃至于学习这门课程之前,人工智能对我来讲都更像是科幻电影中才会存在的事物。在那里人工智能往往都站在人类阵营的对立面,这令我对人工智能这一领域充满了敬畏和恐惧。但通过学习,我发现它其实并不会离我们的生活那么遥远。人工智能本身也不如想象中的那么可怕。人工智能的存在使现代生活变得更加便捷舒适,而且它也成为了人们茶余饭后的谈资。比如IBM的沃森在问答节目《危机边缘》中取得冠军,再比如谷歌的无人驾驶汽车和kiva的智能仓储系统。尽管与此同时它也为我们带来了一些麻烦。但毕竟过度的悲观和乐观都将会影响我们对于人工智能的正确判断,所以我觉得我们还是应该辩证的去看待这一问题。相信随着科技的发展,人工智能一定会克服那些问题从而更好的为人类服务。

通过对这门课程的学习,我了解到了一些新的前沿的领域,对自己所学习的专业有了进一步的认识,并且对已经学习的某些课程有了更加进一步的认识。同时这也让我在进一步深造的专业选择中有了更多的想法。

参考文献:

[1]赵赛坡.人工智能的过去和未来[J].互联网经济,2016.[2]是兆雄.人工智能:历史、现状及展望[J].自然杂志,1987.[3]渠川璐.人工智能的历史、现状和发展前景[J]河北大学学报(自然科学版),1984 [4]曾雪峰.论人工智能的研究与发展[J].现代商贸工业,2009,(13).[5]林尧瑞,魏宏森.人工智能研究的发展历史及若干问题的初步探讨[J].国外自动化,1981 [6]余妹兰,张永辉.人工智能的历史和未来[J]信息与电脑(理论版),2010

第四篇:人工智能大作业解读

实现遗传算法的0-1背包问题求解

目录

摘要.........................................................................................................2 一.问题描述..........................................................................................2 二.遗传算法特点介绍...........................................................................2 三.使用基本遗传算法解决0-1背包问题..............................................3 四.基本遗传算法解决0-1背包问题存在的不足...................................4 五.改进的遗传算法解决0-1背包问题..................................................6 六.心得体会..........................................................................................9 七.参考文献.........................................................................................10 八.程序代码.........................................................................................10

摘要:研究了遗传算法解决0-1背包问题中的几个问题:

1)

对于过程中不满足重量限制条件的个体的处理,通过代换上代最优解保持种群的进化性 2)对于交换率和变异率的理解和处理方法,采用逐个体和逐位判断的处理方法

3)对于早熟性问题,引入相似度衡量值并通过重新生成个体替换最差个体方式保持种群多样性。4)一种最优解只向更好进化方法的尝试。

通过实际计算比较表明,本文改进遗传算法在背包问题求解中具有很好的收敛性、稳定性和计算效率。通过实例计算,表明本文改进遗传算法优于简单遗传算法和普通改进的遗传算法。关键词:遗传算法;背包问题 ;优化

一、问题描述

0-1背包问题属于组合优化问题的一个例子,求解0-1背包问题的过程可以被视作在很多可行解当中求解一个最优解。01背包问题的一般描述如下:

给定n个物品和一个背包,物品i的重量为Wi,其价值为Vi,背包的容量为C。选择合适的物品装入背包,使得背包中装入的物品的总价值最大。注意的一点是,背包内的物品的重量之和不能大于背包的容量C。在选择装入背包的物品时,对每种物品i只有两种选择:装入背包或者不装入背包,即只能将物品i装入背包一次。称此类问题为0/1背包问题。其数学模型为:

0-1背包问题传统的解决方法有动态规划法、分支界限法、回溯法等等。传统的方法不能有效地解决0-1背包问题。遗传算法(Genetic Algorithms)则是一种适合于在大量的可行解中搜索最优(或次优)解的有效算法。

二、遗传算法特点介绍:

遗传算法(Genetic Algorithm, GA)是1962年Holland教授首次提出了GA算法的思想是近年来随着信息数据量激增,发展起来的一种崭新的全局优化算法,它借用了生物遗传学的观点,通过自然选择、遗传、变异等作用机制,实现各个个体的适应性的提高。基本遗传算法求解步骤:

Step 1 参数设置:在论域空间U上定义一个适应度函数f(x),给定种群规模N,交叉率Pc和变异率Pm,代数T;

Step 2 初始种群:随机产生U中的N个染色体s1, s2, …, sN,组成初始种群S={s1, s2, …, sN},置代数计数器t=1;

Step 3 计算适应度:S中每个染色体的适应度f();

Step 4 判断:若终止条件满足,则取S中适应度最大的染色体作为所求结果,算法结束。Step 5 选择-复制:按选择概率P(xi)所决定的选中机会,每次从S中随机选定1个染色体并将其复制,共做N次,然后将复制所得的N个染色体组成群体S1;

Step 6 交叉:按交叉率Pc所决定的参加交叉的染色体数c,从S1中随机确定c个染色体,配对进行交叉操作,并用产生的新染色体代替原染色体,得群体S2;

Step 7 变异:按变异率Pm所决定的变异次数m,从S2中随机确定m个染色体,分别进行变异操作,并用产生的新染色体代替原染色体,得群体S3;

Step 8 更新:将群体S3作为新一代种群,即用S3代替S,t=t+1,转步3;

遗传算法是一种仿生算法, 即模拟生命演化的算法,它从一个代表问题初始解的初始种群出发, 不断重复执行选择, 杂交和变异的过程, 使种群进化越来越接近某一目标既最优解,如果视种群为超空间的一组点, 选择、杂交和变异的过程即是在超空间中进行点集之间的某种变换, 通过信息交换使种群不断变化,遗传算法通过模拟达尔文“优胜劣汰, 适者生存”的原理激励好的结构, 同时寻找更好的结构, 作为一种随机的优化与搜索方法, 遗传算法有着其鲜明的特点。

—遗传算法一般是直接在解空间搜索, 而不像图搜索那样一般是在问题空间搜索, 最后才找到解(如果搜索成功的话)。

—遗传算法的搜索随机地始于搜索空间的一个点集, 而不像图搜索那样固定地始于搜索空间的初始节点或终止节点, 所以遗传算法是一种随机搜索算法。

—遗传算法总是在寻找优解(最优解或次优解), 而不像图搜索那样并非总是要求优解, 而一般是设法尽快找到解(当然包括优解), 所以遗传算法又是一种优化搜索算法。

—遗传算法的搜索过程是从空间的一个点集(种群)到另一个点集(种群)的搜索,而不像图搜索那样一般是从空间的一个点到另一个点地搜索。因而它实际是一种并行搜索, 适合大规模并行计算, 而且这种种群到种群的搜索有能力跳出局部最优解。

—遗传算法的适应性强, 除需知适应度函数外, 几乎不需要其他的先验知识。

—遗传算法长于全局搜索, 它不受搜索空间的限制性假设的约束,不要求连续性, 能以很大的概率从离散的、多极值的、含有噪声的高维问题中找到全局最优解。

三、使用基本遗传算法解决0-1背包问题:

1: 打开数据文件

2: 设置程序运行主界面 3: 调用初始化种群模块

3-1: 按照一定的种群规模和染色体长度以基因为单位用随机产生的0-1对个体赋值 3-2: 调用计算适应度函数

4: 以最大进化代数为循环终止条件开始进行循环 4-1: 调用产生新一代个体的函数 4-1-1: 调用选择函数 4-1-2: 调用交叉函数 4-1-3: 调用变异函数

4-1-4: 调用计算适应度函数

5: 调用计算新一代种群统计数据函数 6: 调用输出新一代统计数据函数 7: 返回到第四步, 直至循环结束

四、基本遗传算法解决0-1背包问题存在的不足:

1.对于过程中不满足重量限制条件的个体的处理

在用基本遗传算法解决0-1背包问题的时候,在初始化或者交叉变异后可能会产生不满足重量约束条件的伪解,而对于这些伪解,基本遗传算法没有给出一个很好的处理方法,而只是又随机生成了一个满足约束条件的解作为新的个体从而替换掉原来的个体。根据遗传算

法的根本思想“优胜劣汰,适者生存”的原则,可以将不满足条件的个体用已有的最优个体来进行替换,这样,既使得种群中所有的个体均满足重量的约束条件,又保留了较优解,符合遗传算法的思想。具体做法为:

在程序中加入一个变量保存每代的最优解,当前代在进行选择、复制、交叉、变异后如果有不满足约束条件的个体,则在种群更新时采用这个最优值作为替代。

具体做法为:在每代遗传后通过函数FindBestandWorstIndividual()找到当前最优值并保存bestindividual中,在计算适应度函数CalculateFitnessValue()中加入:

if(w>KW)X[i]=bestindividual;

//如果不是解,找最好的一个解代之

其中w为当前个体的总重量,KW为背包最大承重量,X[i]表示种群中第i个个体,bestindividual为保存的个体最优解。

2.对于交换率和变异率的理解和处理方法

根据遗传算法的基本步骤的交叉和变异操作

Step 6 交叉:按交叉率Pc所决定的参加交叉的染色体数c,从S1中随机确定c个染色体,配对进行交叉操作,并用产生的新染色体代替原染色体,得群体S2;

Step 7 变异:按变异率Pm所决定的变异次数m,从S2中随机确定m个染色体,分别进行变异操作,并用产生的 新染色体代替原染色体,得群体S3; 可以有两种处理方法:

其一,采用先确定数目在随机选取的方法,步骤如下:

对于交叉操作: 对于变异操作:

1,根据交叉率确定应该交叉的个体数目1,根据变异率确定应该变异的染色体数n 目n 2,在种群中进行n次循环 2,在种群中进行n次循环 2-1随机选中种群中的一个个体a 2-1随机选中种群中的一个个体的染2-2随机选中种群中异于a的一个个色体a 体b

2-2随机选中染色体a的某位基因

2-3随机确定交叉位数 2-4进行交叉

2-3对进行0-1互换变异

其二,采用对每个操作单元分别进行特定概率下处理的方法,步骤如下:

对于交叉操作:

1,在种群中进行S次循环,其中S代表种群中个体的数量

2,对于每一个个体X[i](X为种群数组)做如下操作

2-1生成随机数p[0,1],判断p与的大小关系 2-2如果p说明X[i]需要交换

对于变异操作:

1,在种群中进行S次循环,其中S代表种群中个体的数量

2,对每一个个体X[i]做N次循环,其中N为染色体位数

2-1对染色体的每一位

3-1生成随机数q[0,1],判断q与 的大小关系

说明需要进行0-1互换说明不需要变

2-2-1 随机在种群中找到异于X[i]的另一个体进行交换 2-3如果p 说明X[i]不需要交换

3-2如果q

变异2-3如果q分析这两种处理方法可知:方法一没有很好地体现随机机会均等的思想,因为在步骤1中确

定的需要操作的数目n后,总体上是保证了交叉或者变异的数目,但不是对于每一个个体而言的,因而会出现有的个体被选择交叉或者变异多次而有的没有机会交叉或者变异的情况,而如果采用方法二,就体现了机会的均等性,即要求对每一个单元操作目标进行概率的验证,以确定是否变异或者交叉。在程序中具体的实现方法体现在交叉和变异函数中:

void CrossoverOperator(void)//交叉操作 for(i=0;i

q=rand()%S;}while(p==q);

int w=1+rand()%N;//[1,N]交换的位数

double p=(rand()%1001)/1000.0;if(p<=Pc)

for(j=0;j

void MutationOperator(void)//变异操作

for(i=0;i

for(j=0;j

q=(rand()%1001)/1000.0;//产生q[0,1] if(q

if(X[i].chromsome[j]==1)X[i].chromsome[j]=0;else X[i].chromsome[j]=1;1.对于算法早熟性的分析及解决方法

遗传算法中种群中的个体由初始化时的具有多样性,可能会由于在进化过程中一些超常个体限制其它个体的进化——这个个体的适应度大大优于种群内的其它值,由于适者生存原则这个个体被不断复制从而充满了整个种群,使得种群的多样应大大降低,进化停滞,从而出现算法收敛于局部最优解的现象,称为早熟现象。早熟现象的可能解法:

1)通过提高变异率来增加种群的多样性,以期更优解的出现,这也是最简单基本遗传算法中不添加相关操作的情况下唯一的一种方法,然而这种方法有明显的弊端:在提高变异率获得多样性种群的同时,个体变异的机会增加,使得较优解发生变异,从而遗传算法丧失了其优于其它算法的优越性,所以这种方法不是很好地解决方法。2)引入多样性衡量和处理

基本思路:在出现进化停滞现象时要引入新的个体来增强种群的多样性。做法:1,判断是否达到早熟现象

对于种群中S个个体,判断等位基因的相等程度,即引入一个参数值same,如果same达到一定的 理论值大小就可以认为达到了早熟现象。

2,早熟现象的处理,即引入新的个体。

处理过程中应该不违反适者生存的原则,所以应该保留较好的个体,所以首先选中适应度最小的 个体执行删除操作,然后随机生成一个新的符合重量限制且打破早熟现象的新个体。

具体实现见函数:void checkalike(void)

//相似度校验 for(i=0;i

for(j=0;j

if(temp!=X[k].chromsome[j])

break;if(j==N)same++;if(same>N*0.5)//大于50%作为判定为早熟

//确定最小

int minindex=0;for(intn=0;n

if(X[n].fitness

bool m=(rand()%10<5)?0:1;X[minindex].chromsome[j]=m;X[minindex].weight+=m*weight[j];//个体的总重量

X[minindex].fitness+=m*value[j];

//个体的总价值

2.一种最优解只向更好进化方法的尝试

基本思路为:每一组的最优解是一个独特的个体,我们求解的问题最终的最优解或者近似解都产生于这个特殊的个体,最优解只向更好进化方法中规定:每代中选出一个最优解并做好相应的记录或者标记,最优解参与交叉和变异,只是在交叉或者变异时对最优解进行前后适应度的比较,如果发现交叉或者变异后适应度大于操作前适应度,则保存操作后的结果,如果发现交叉或者变异后适应度小于操作前适应度,则禁止最优解的操作,而不禁止与最优解进行交叉的个体的变化。这样,每一代中的最优解的特性可以通过交叉传递给同代中的其它个体,而保证种群一定会向更好的方向进化。做法在交叉后和变异后调用以下函数判断:

int comp(individual bestindividual,individual temp)//比较函数 {

} int fit=0,w=0;//第一种不变:操作后不满足重量函数,第二种:操作后适应度小于操作前 for(int i=0;iKW)return-1;return(bestindividual.fitness>fit?-1:1);//如果小于原来值或者不满足重量函数,则返回-1

五、改进的遗传算法解决0-1背包问题:

1、参数设置:

#define S

500 #define Pc

0.8 #define Pm

0.01 #define KW

878 #define N

#define T

1000

//种群的规模

//交叉概率

//突变概率

//背包最大载重

//物体总数

//最大换代数

2个体的表示和染色体编码

用变量i代表物件, i = 1, 2, ,n 定义变量xi,其含义为: xi= 1表示:第i个物件被选入背包, xi = 0表示第i个物件没有被选入背包。考虑n 个物件的选择与否, 就可以得到一个长度为n的0, 1序列。由此可见遗传算法应用于上述背包问题时,采用简单二进制编码较为适宜1 每一组编码即为某一个个体的基因表示, 称其为染色体, 染色体长度取决于待分配的物件的个数n.在编码形式的表示方法中,形如二进制编码 10010101 表示为一个待分配的物件的个数为8(编码长度)的一个背包问题的一个解, 则该个体对应于选择了物件1, 4, 6, 8,即第1, 4, 6, 8个物品被放入了背包。用数据格式表示为:

struct individual

{ bool chromsome[N];double fitness;

double weight;};

//个体结构体

//染色体编码

//适应度//即本问题中的个体所得价值 //总重量

2产生初始种群

n个待分配的物件随机产生S个长度为n的二进制串, 即种群中个体的染色体编码的每一位按等概率在0与1中选择S 指的是种群规模, 即种群中的个体数目.void GenerateInitialPopulation(void);//初始种群 3适应度函数

背包内物件的总重量为a1x1 + a2x2 + ,anxn, 物件的总价值为c1x1 + c2x2 + , + cn xn 0-1背包问题中采用每个个体的总价值作为适应度,在满足背包容量的条件下,价值越大,适应度越高。所以适应度求解方法为:

f i = c1x1 + c2x2 + , + cnxn(当t a1x1 + a2x 2 + , + anxn < = c,xj = 0, 1)考虑到会有不不满足容量条件的个体则:

f i = 0(当a1x1 + a2x2 + , + anxn > c,xj = 0, 1)

上述适应度函数基于一个考虑违背约束条件的惩罚处理,根据上述具体问题适应度函数值不可能为零, 所以当随机产生的某个个体违背约束条件时, 通过把其适应度函数值罚为0而达到淘汰该个体的目的。4选择-复制操作

参照适应度函数值和约束条件用赌轮选择法进行模拟,具体为: 

(1)根据适应度函数值和约束条件, 罚掉部分个体(前述不满足容量条件的个体)

(2)对于满足约束条件的个体, 根据适应度函数值计算个体被选中的概率,称为选择概率:

公式为:

P =

p()称为染色体xi(i=1, 2, …, n)的选择概率

(3)根据轮盘赌累计公式为:

iqP(xj)

i

j1

称为染色体xi(i=1, 2, …, n)的积累概率

(4)对已得到的累计概率作如下处理,完成选择操作:

1)在[0, 1]区间内产生一个均匀分布的伪随机数r。2)若r≤q1,则染色体x1被选中。

3)若qk-1

(1)随机产生一个交叉点的位置

(2)随机选取当前代中的两个个体作为父个体

(3)根据交叉点的位置, 做单点交叉 6变异操作: 根据变异率Pm

(1)随机产生变异点的位置

(2)在变异点位置作0-1翻转

8、算法终止

程序中定义了一个最优值,stop=

一般情况下这个最优值达不到,一旦程序在执行过程中达到此最优值,也就没有必要在执行下去,因为这必定是最好的解,所以保存最优值和最优解,结束。

如果程序的最优值达不到理想情况下的stop,那么根据最大换代次数来结束程序,在结束后的种群中找到一个最好的解作为本问题的最优解,程序结束。

4算例

1.小规模问题的算例:

算例1-1:设定物品价值value={50,30,60,80,20}重量weight{35,40,40,20,15}背包的最大承重量为100 遗传算法中参数:群体大小S=5,交叉率Pc=0.8,变异率Pm=0.05,最大换代次数T=20, 通过多次试验比较本文改进后遗传算法和其他得到结果如下表所示:

本文改进的遗传算法: 实验总次数:30 达到全局最优解次数:27 未达到全局最优解:3

由实验结果可知在小规模算例中,本文改进的遗传算法优于前两者。2.较大规模问题求解算例: 遗传算法中参数:

群体大小S=5,交叉率Pc=0.8,变异率Pm=0.05,最大换代次数T=800,相似度取5% 实例1:

价值value:{ 92,4,43,83,84,68,92,82,6,44,32,18,56,83,25,96,70,48,14,58} 重量weight:{ {44,46,90,72,91,40,75,35,8,54,78,40,77,15,61,17,75,29,75,63}} 背包的最大承重量:878 实例2:

价值value: {220,208,198,192,180,180,165,162,160,158,155,130,125,122,120,118,115,110,105,101,100,100,98,96,95,90,88, 82,80,77,75,73,72,70,69,66,65,63,60,58,56,50,30,20,15,10,8,5,3,1};

重量weight: {80,82,85,70,72,70,66,50,55,25,50,55,40,48,50,32,22,60,30,32,40,38,35,32,25,28,30,22,25,30,45,30,60,50,20,65, 20,25,30,10,20,25,15,10,10,10,4,4,2,1};

背包最大承重量:1000

本文改进遗传算法实验结果:

实例1:

实例2:

由此得出结论:遗传算法优于前两种。

六.心得体会:

遗传算法是一种模拟生物进化在解中求解最优值的方法,实现起来方便,适于处理大宗数据,然而基于简单基本遗传算法在求解不同问题时应该具体问题具体分析,找的结合所解问题的优化方法,例如本文分析的遗传算法解决0-1背包问题,虽然简单基本遗传算法可以求出一个比较好的解出来,但是分析可知,结果并不令人满意,在对问题进行细致的分析、查阅相关资料和深入思考后,我提出了自己认为比较好的改进方法并通过实践结合具体的算例把改进后的遗传算法和与原来的简单遗传算法和参考文献中的一种改进方法进行了比较,结果显示本文改进的遗传算法无论在小规模数据处理还是较大规模数据处理方面均优于前两者,这一点很令人高兴。通过本次实践,我也深刻体会到对于算法分析和改进的重要性,往往一个算法经过认真地分析和合理的改进后会获得性能上的提高时间复杂度或者空间复杂度的降低,而且能够获得更好的解。

七.参考文献:

《用基本遗传算法解决0-1背包问题》

八.程序实现:

已通过vc6.0编译后运行 #include #include #include #include /*小规模*********************************************************************** #define S

//种群的规模 #define N

//物体总数 #define Pc

0.8

//交叉概率 #define Pm

0.05 //突变概率 #define KW

//背包最大载重 #define T

//最大换代数 #define ALIKE

0.05 //判定相似度 int stop=0;

//初始化函数中初始化为所有价值之和 int t=0;

//目前的代数 int weight[]={35,40,40,20,15};

//物体重量 int value[]={50,30,60,80,20};

//物体价值

/*实例1*********************************************************************** #define S

//种群的规模 #define N

//物体总数 #define Pc

0.8

//交叉概率 #define Pm

0.05 //突变概率 #define KW

878

//背包最大载重 #define T

800

//最大换代数 #define ALIKE

0.05 //判定相似度 int stop=0;

//初始化函数中初始化为所有价值之和 int t=0;

//目前的代数

int weight[]={44,46,90,72,91,40,75,35,8,54,78,40,77,15,61,17,75,29,75,63};//物体重量 int value[]={92,4,43,83,84,68,92,82,6,44,32,18,56,83,25,96,70,48,14,58};//物体价值

/*实例2*********************************************************************** #define S

//种群的规模 #define Pc

0.8

//交叉概率 #define Pm

0.05 //突变概率 #define KW

1000

//背包最大载重1000 #define N

//物体总数 #define T

800

//最大换代数 #define ALIKE

0.05 //判定相似度 int

stop=0;

//初始化函数中初始化为所有价值之和 int

t=0;

//目前的代数 int vaue[]={ 220,208,198,192,180,180,165,162,160,158,155,130,125,122,120,118,115,110,105,101,100,100,98,96,95,90,88,82,80,77,75,73,72,70,69,66,65,63,60,58,56,50,30,20,15,10,8,5,3,1};int weight[]={ 80,82,85,70,72,70,66,50,55,25,50,55,40,48,50,32,22,60,30,32,40,38,35,32,25,28,30,22,25,30,45,30,60,50,20,65,20,25,30,10,20,25,15,10,10,10,4,4,2,1};/*实例3***********************************************************************/

#define S

//种群的规模 #define Pc

0.8

//交叉概率 #define Pm

0.05 //突变概率 #define KW

6718 //背包最大载重1000 #define N

//物体总数 #define T

800

//最大换代数 #define ALIKE

0.05 //判定相似度 int

stop=0;

//初始化函数中初始化为所有价值之和 int

t=0;

//目前的代数 int vaue[]={ 597,596,593,586,581,568,567,560,549,548,547,529,529,527,520,491,482,478,475,475,466,462,459,458,454,451,449,443,442,421,410,409,395,394,390,377,375,366,361,347,334,322,315,313,311,309,296,295,294,289,285,279,277,276,272,248,246,245,238,237,232,231,230,225,192,184,183,176,171,169,165,165,154,153,150,149,147,143,140,138,134,132,127,124,123,114,111,104,89,74,63,62,58,55,48,27,22,12,6,250};Int weight[]={ 54,183,106,82,30,58,71,166,117,190,90,191,205,128,110,89,63,6,140,86,30,91,156,31,70,199,142,98,178,16,140,31,24,197,101,73,16,73,2,159,71,102,144,151,27,131,209,164,177,177,129,146,17,53,64,146,43,170,180,171,130,183,5,113,207,57,13,163,20,63,12,24,9,42,6,109,170,108,46,69,43,175,81,5,34,146,148,114,160,174,156,82,47,126,102,83,58,34,21,14};/************************************************************************/ struct individual {

//个体结构体

bool chromsome[N];//染色体编码

double fitness;

//适应度//即本问题中的个体所得价值

double weight;

//总重量 };int best=0;int same=0;individual X[S],Y[S],bestindividual;// /************************************************************************/ int comp(individual bestindividual,individual temp);//比较函数 void checkalike(void);

//检查相似度函数 void GenerateInitialPopulation(void);

//初始种群 void CalculateFitnessValue(void);

//适应度 void SelectionOperator(void);

//选择 void CrossoverOperator(void);

//交叉 void MutationOperator(void);

//变异 void FindBestandWorstIndividual(void);

//寻找最优解 void srand(unsigned int seed);

//随机生成

/************************************************************************/ int comp(individual bestindividual,individual temp)//比较函数 { int fit=0,w=0;//第一种不变:操作后不满足重量函数,第二种:操作后适应度小于操作前

for(int i=0;iKW)return-1;return(bestindividual.fitness>fit?-1:1);//如果小于原来值或者不满足重量函数,则返回-1 } /************************************************************************/

void Checkalike(void){ int i=0,j=0;

for(i=0;i

if(temp!=X[k].chromsome[j])

break;} } if(j==N)same++;} if(same>N*ALIKE)//大于ALIKE作为判定为早熟 { int minindex=0;for(int n=0;n

if(X[n].fitness

X[minindex].weight+=m*weight[j];//个体的总重量

X[minindex].fitness+=m*value[j];//个体的总价值

}

} } /************************************************************************/ void GenerateInitialPopulation(void)//初始种群,保证每个值都在符合条件的解 { int i=0,j=0;bool k;

for(i=0;i

k=(rand()%10<5)?0:1;

X[i].chromsome[j]=k;

w+=k*weight[j];//个体的总重量

v+=k*value[j];//个体的总价值

} if(w>KW)i--;

//如果不是解,重新生成else

{ X[i].fitness=v;X[i].weight=w;

if(v==stop){bestindividual=X[i];return;}//这种情况一般不会发生

} } } /************************************************************************/ void CalculateFitnessValue(){ int i=0,j=0;

for(i=0;i

int w=0,v=0;

for(j=0;j

{

w+=X[i].chromsome[j]*weight[j];//个体的总重量

v+=X[i].chromsome[j]*value[j];//个体的总价值

}

X[i].fitness=v;

X[i].weight=w;

if(v==stop){bestindividual=X[i];return;}//符合条件情况下最优解这种情况一般不会发生

if(w>KW)X[i]=bestindividual;

//如果不是解,找最好的一个解代之

} } /************************************************************************/ void SelectionOperator(void){ int i, index;double p, sum=0.0;double cfitness[S];//选择、累积概率

individual newX[S];for(i=0;i

for(i=0;i

for(i=1;i

for(i=0;i

p=(rand()%1001)/1000.0;//产生一个[0,1]之间的随机数

index=0;

while(p>cfitness[index])//轮盘赌进行选择

{

index++;

}

newX[i]=X[index];} for(i=0;i

void CrossoverOperator(void)//交叉操作 { int i=0, j=0,k=0;individual temp;

for(i=0;i

int p=0,q=0;

do

{

p=rand()%S;//产生两个[0,S]的随机数

q=rand()%S;

}while(p==q);

int w=1+rand()%N;//[1,N]表示交换的位数

double r=(rand()%1001)/1000.0;//[0,1]

if(r<=Pc)

{

for(j=0;j

{

temp.chromsome[j]=X[p].chromsome[j];//将要交换的位先放入临时空间

X[p].chromsome[j]=X[q].chromsome[j];

X[q].chromsome[j]=temp.chromsome[j];

}

}

if(p==best)

if(-1==comp(bestindividual,X[p]))//如果变异后适应度变小

X[p]=bestindividual;

if(q==best)

if(-1==comp(bestindividual,X[q]))//如果变异后适应度变小

X[q]=bestindividual;} } /************************************************************************/ void MutationOperator(void){ int i=0, j=0,k=0,q=0;double p=0;for(i=0;i

{

for(j=0;j

{

p=(rand()%1001)/1000.0;

if(p

{

if(X[i].chromsome[j]==1)X[i].chromsome[j]=0;

else X[i].chromsome[j]=1;

}

}

if(i==best)

if(-1==comp(bestindividual,X[i]))//如果变异后适应度变小

X[i]=bestindividual;} } /************************************************************************/ void FindBestandWorstIndividual(void){ int i;bestindividual=X[0];for(i=1;i

if(X[i].fitness>bestindividual.fitness)

{

bestindividual=X[i];

best=i;

} } } /*主函数*****************************************************************/ void main(void){

srand((unsigned)time(0));

t=0;

GenerateInitialPopulation();//初始群体包括产生个体和计算个体的初始值

while(t<=T)

{

FindBestandWorstIndividual();//保存当前最优解

SelectionOperator();

//选择

CrossoverOperator();

//交叉

MutationOperator();

//变异

Checkalike();

//检查相似度

CalculateFitnessValue();//计算新种群适应度

t++;

}

FindBestandWorstIndividual();

//找到最优解

cout<

<

for(int k=0;k

cout<

读书的好处

1、行万里路,读万卷书。

2、书山有路勤为径,学海无涯苦作舟。

3、读书破万卷,下笔如有神。

4、我所学到的任何有价值的知识都是由自学中得来的。——达尔文

5、少壮不努力,老大徒悲伤。

6、黑发不知勤学早,白首方悔读书迟。——颜真卿

7、宝剑锋从磨砺出,梅花香自苦寒来。

8、读书要三到:心到、眼到、口到

9、玉不琢、不成器,人不学、不知义。

10、一日无书,百事荒废。——陈寿

11、书是人类进步的阶梯。

12、一日不读口生,一日不写手生。

13、我扑在书上,就像饥饿的人扑在面包上。——高尔基

14、书到用时方恨少、事非经过不知难。——陆游

15、读一本好书,就如同和一个高尚的人在交谈——歌德

16、读一切好书,就是和许多高尚的人谈话。——笛卡儿

17、学习永远不晚。——高尔基

18、少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。——刘向

19、学而不思则惘,思而不学则殆。——孔子

20、读书给人以快乐、给人以光彩、给人以才干。——培根

第五篇:人工智能原理与应用大作业

人工智能原理与应用大作业

(1)简单函数优化的遗传算法C代码,把代码调通,计算出结果。

(2)编程实现第6章习题第13题(2个学生做)

(3)编程实现第6章习题第14题(2个学生做)

(4)写出调研报告“人工智能的发展历史”

(5)写出麦卡锡(J.McCarthy)的传记

(6)写出明斯基(M.Minsky)的传记

(7)写出调研符号主义学派的报告

(8)写出调研行为主义学派的报告

(9)写出调研联结主义学派的报告

(10)写出使用经典逻辑推理成功的人工智能案例

(11)写出使用搜索方法推理成功的人工智能案例

(12)写出使用遗传算法推理成功的人工智能案例

(13)写出使用神经网络推理成功的人工智能案例

(14)写出使用专家系统推理成功的人工智能案例

(15)写出除上面几种方法以外的人工智能方法的调研报告。

(16)编程实现P132例5.1梵塔问题,画图实现。(由王小高带2个学生做)

(17)编程实现P135例5.3九宫重排问题,采用广度搜索法。(由张延令带2个学生做)

(18)编程实现P133例5.2传教士和野人问题,采用广度搜索法。(由贾路宽带2个学生

做)

(19)写出退火算法的调研报告。

(20)写出蚁群算法的调研报告。

(21)写出人工智能在中国的发展的调研报告。

(22)写出中国人工智能协会的调研报告。

(23)写出机器学习的调研报告

(24)写出搜索引擎的调研报告

(25)写出模式识别的调研报告

(26)人工智能在农业方面的应用

(27)人工智能在工业方面的应用

(28)人工智能在军事方面的应用

(29)人工智能在机器人方面的应用

(30)人工智能在航空航天方面的应用

(31)人工智能在医疗方面的应用

(32)人工智能在商业方面的应用

(33)人工智能在电力业方面的应用

下载人工智能作业1word格式文档
下载人工智能作业1.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    马克思主义基本原理大作业-人工智能分析报告

    关于人工智能技术的专业调查报告 前言: 随着现代科学技术的飞速发展,先进的技术在各个领域都得到了广泛的应用,使得生产力获得了大幅度的提高,为改善人民生活水平作出了巨大贡......

    人工智能 影评

    On controller in A.I.There is no time without controller.God, the master of human beingsIt is said that God creates Adam and Eve, and punishes them for their ea......

    人工智能心得体会

    人工智能学习心得 今天是我学习人工智能的第一堂课,也是我上大学以来第一次接触人工智能这门课,通过老师的讲解,我对人工智能有了一些简单的感性认识,我知道了人工智能从诞生,发......

    人工智能观后感

    人工智能观后感 人工智能观后感1 人工智能——请预备好餐巾纸,不想深层归类什么科幻伦理灾难也不懂得或许更愿意相信这是真的或者再实际一点这是一个寓言。影片中的中男孩大......

    影评人工智能

    序号:94学号:20103725姓名:陈永新《人工智能》影评面对着科技日益进步的今天,各类电子产品相继问世,在近些年中,智能产品更是层出不穷。手机要智能的,空调要智能的,出局也要智能的等......

    人工智能实验

    《人工智能应用》课程实验教学大纲时间:2010-05-23 00:04来源:知行网 编辑:麦田守望者 点击:168次一、实验课程基本情况与说明 (一)课程中文名称:人工智能应用 (二)课程英文名称:A......

    人工智能学习心得

    人工智能学习心得 对人工智能的理解 通过这学期的学习,我对人工智能有了一定的感性认识,个人觉得人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和......

    人工智能感想

    爱与被爱 ——人类的爱是否永恒 当造物主要求被造者付出无条件的爱时,造物主对被造者有什么样的责任?在影片开头的公司作品会议上一位女工程师所问的:“当我们的机器人的程序被......