0623金甜甜浙江师范大学本科毕业设计论文基于遗传算法求解背包问题Word文档下载推荐.docx
- 文档编号:18954266
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:39
- 大小:101.65KB
0623金甜甜浙江师范大学本科毕业设计论文基于遗传算法求解背包问题Word文档下载推荐.docx
《0623金甜甜浙江师范大学本科毕业设计论文基于遗传算法求解背包问题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《0623金甜甜浙江师范大学本科毕业设计论文基于遗传算法求解背包问题Word文档下载推荐.docx(39页珍藏版)》请在冰豆网上搜索。
2背包问题概述……………………………………………………………………2
2.1背包问题描述………………………………………………………………2
2.2研究背包问题的意义………………………………………………………2
3遗传算法概述……………………………………………………………………2
3.1遗传算法的特点……………………………………………………………3
3.2遗传算法的应用领域………………………………………………………3
4遗传算法的基本原理……………………………………………………………4
4.1基本流程……………………………………………………………………4
4.2编码…………………………………………………………………………5
4.3适应度函数…………………………………………………………………5
4.4遗传算子……………………………………………………………………6
4.4.1选择算子…………………………………………………………………6
4.4.2交叉算子…………………………………………………………………7
4.4.3变异算子…………………………………………………………………7
4.5参数控制……………………………………………………………………8
4.5.1群体规模………………………………………………………………8
4.5.2交叉概率………………………………………………………………8
4.5.3变异概率………………………………………………………………8
4.6算法结束条件控制…………………………………………………………9
5实现求解背包问题的遗传算法………………………………………………9
5.10_1背包问题中染色体的表示………………………………………………9
5.2遗传算法求解0_1背包问题时用到的参数………………………………9
5.3选择操作……………………………………………………………………9
5.4交叉操作……………………………………………………………………10
5.5精英策略……………………………………………………………………11
5.6变异操作……………………………………………………………………11
5.7代际更新……………………………………………………………………11
5.8算法终止……………………………………………………………………11
5.9仿真结果与测试……………………………………………………………12
5.9.1不同交叉概率下所得测试结果………………………………………13
5.9.2极端数据对结果的影响………………………………………………15
5.9.3仿真结果总结…………………………………………………………18
5.10问题总结……………………………………………………………………18
6展望………………………………………………………………………………18
致谢…………………………………………………………………………………19
参考文献……………………………………………………………………………20
附源程序……………………………………………………………………………21
基于遗传算法求解背包问题
数理与信息工程学院计算机科学与技术专业金甜甜(06220313)
指导老师:
邓大勇(副教授)
摘要
背包问题(Knapsackproblem)是一种组合优化的NP完全问题,本文首先介绍了基本遗传算法的基本原理、特点及其基本实现技术,接着针对背包问题,论述了遗传算法在编码表示和遗传算子(包括选择算子、交叉算子变异算子这三种算子)等方面的应用情况。
并且结合背包问题实例,给出了具体的编码方法,运行参数,群体大小,最大迭代次数,以及合适的遗传算子。
最后,简单说明了遗传算法在求解背包问题中的应用并对遗传算法解决背包问题的前景提出了展望。
关键词:
背包问题;
遗传算法;
遗传算子;
编码
GeneticAlgorithmforKP
JinTianTianDirector:
Prof.DaYongDeng
(CollegeofMathematicsPhysicsAndInformationEngineering,ZhejiangNormalUniversity)
Abstract:
KP(KnapsackProblem)isacombinatorialoptimizationofNP-completeproblem.Theprimaryknowledge,characteristicsandthebasictechniquesofGAareintroducedfirstly.Theencodingmodelandgeneticoperators(includingselectionoperation,crossoveroperationandmutationoperation)solvingKParediscussedsecondly.Combinedwithexamplesofknapsackproblem,wehavegiventhespecificencodingmethod,operatingparameters,popsize,maxgeneration,andsuitablegeneticoperator.Atlast,theapplicationofgeneticalgorithmissimplepresented,andtheprospectforthefutureofgeneticalgorithminsolvingKPhasbeengiven.
Keywords:
KP,geneticalgorithm,geneticoperators,encoding
1引言
现代科学理论研究与实践中存在着大量与优化、自适应相关的问题,但除了一些简单的情况之外,人们对于大型复杂系统的优化和自适应问题仍然无能为力。
然而,自然界中的生物却在这方面表现出了其优异的能力,它们能够以优胜劣汰、适者生存的自然进化规则生存和繁衍,并逐步产生出对其生存环境适应性很高的优良物种。
遗传算法正是借鉴生物的自然选择和遗传进化机制而开发出的一种全局优化自适应概率搜索算法。
遗传算法使用群体搜索技术,它通过对当前群体施加选择、交叉、变异等一系列遗传操作,从而产生出新一代的群体,并逐步使群体进化到包含或接近最优解的状态。
由于其具有思想简单、易于实现、应用效果明显等优点而被众多应用领域所接受,遗传算法就其本质来说,主要是解决复杂问题的一种鲁棒性强的启发式随机搜索算法。
背包问题(Knapsackproblem)是一种组合优化的NP完全问题,对这个问题的求解前人己经研究出了不少的经典的方法,例如解析法,穷举法等,但是这些传统的优化方法存在一些缺点,如算法复杂度太高。
与传统的优化算法相比,遗传算法具有以下优点:
在每一时刻,GA同时在多个子空间内进行搜索,对初始值不作要求;
基本不用搜索空间的知识或其他辅助信息,而仅用适应度来评估个体优劣;
具有很强的鲁棒性。
因此遗传算法在背包问题求解方面的应用研究,对于构造合适的遗传算法框架、建立有效的遗传作以及有效地解决背包问题等有着多方面的重要意义[5]。
2背包问题概述
2.1背包问题的描述
背包问题又称子集合问题,最早是由Dantzing于20世纪50年代首次提出的,已成为计算机学科中一个经典的NP问题,本文讨论的是0-1背包问题,问题描述如下:
指定给n件物品和一个背包,物品i的重量是wi,其价值为vi,背包的容量为C,求从这n件物品中选取一部分物品且对每件物品,或者选取,或者不选,每种物品只能装入背包一次,且要求满足放入背包中的物品总重量不超过背包容量。
求出装入背包中物品价值总和最大的方案。
注意:
在本题中,所有的重量值均为整数。
数学模型限制条件为:
所求表达式为:
其中,
表示物品放入背包,
表示物品未放入背包。
2.2研究背包问题的意义
背包问题是组合优化领域中的一个典型问题,涉及求多个变量的函数的最大值。
虽然它陈述起来很简单,但求解却很困难,并且已经被证明是NP完全问题。
至今尚未找到有效的求解方法,在理论上枚举法可以解这一问题,但是当n较大时,解题的时间消耗会使枚举法显得没有任何实际价值。
因此寻求一种求解时间短,能满足实际问题精度要求的解,成为解决该问题的主要途径[8]。
背包问题的求解,一直以来倍受人们的关注。
对于这样一个典型的、易于描述却难以处理的NP难题,有效地解决它在可计算理论上有着重要的理论价值。
并且,背包问题是诸多领域内出现的多种复杂问题的集中概括和简化形式。
背包问题也可描述为决定性问题,相似问题经常出现在商业、投资组合优化、组合数学,计算复杂性理论、密码学和应用数学等领域中,因此具有广泛的实际应用领域。
3遗传算法概述
遗传算法(GA)是一类借鉴生物界自然选择和自然遗传机制的随机化的搜索算法,也是一种抽象于生物进化过程的基于自然选择和生物遗传机制的优化技术。
它是在1975年首次由美国密西根大学的D.J.Holland教授和他的同事们借鉴生物界自然选择和进化机制基础之上提出的。
经过近30年的研究、应用,遗传算法已被广泛地应用于函数优化、机器人系统、神经网络学习过程、模式识别、图象处理、工业优化控制等领域。
其主要特点是群体搜索策略、群体中个体之间的信息交换和搜索不依赖于梯度信息[19]。
遗传算法是将问题的每一个可能性解看作是群体中的一个个体(染色体),并将每一个染色体编码成串的形式,再根据预定的目标函数对每个个体进行评价,给出一个适应度值。
算法将根据适应度值对它进行寻优的过程,遗传算法的寻优过程是通过选择、杂交和变异三个遗传算子来具体实现的,它的搜索能力由选择算子和杂交算子决定,变异算子则保证了算法能够搜索到问题空间的每一个点,从而使其具有搜索全局最优的能力。
遗传算法的高效性和强壮性可由Holland提出的模式定理(SchemaTheorem)和隐式并行性得以解释。
近年来,遗传算法从理论到实际都已经取得了许多重要成果。
由于它具有良好的全局搜索能力,是目前解决各种优化问题的最有效的方法,已经成为研究热点。
3.1遗传算法的特点
从整体上来讲,遗传算法是进化算法中产生最早、影响最大、应用也比较广泛的一个研究方向和领域,它不仅包含了进化算法的基本形式和全部优点,同时还具备若干独特的性能。
[16]
1)在求解问题时,遗传算法首先要选择编码方式,它直接处理的对象是参数的编码集而不是问题参数本身,搜索过程既不受优化函数连续性的约束,也没有优化函数倒数必须存在的要求。
通过优良染色体基因的重组,遗传算法可以有效地处理传统上非常复杂的优化函数求解过程;
2)若遗传算法在每一代对群体规模为n的个体进行操作,实际上处理了大约
个模式,具有很高的并行性,因而具有显著的搜索效率;
3)在所求解问题为非连续、多峰以及有噪声的情况下,能够以很大的概率收敛到最优解或满意解,因而具有较好的全局最优解求解能力;
4)对函数的性态无要求,针对某一问题的遗传算法经简单修改即可适应于其他问题,或者加入特定问题的领域知识,或者与已有算法相结合,能够较好地解决一类复杂问题,因而具有较好的普适性和易扩充性;
5)遗传算法的基本思想简单,运行方式和实现步骤规范,便于具体使用;
遗传算法的这些特点使得它一经提出即在理论上引起了高度重视,能够应用于一些到目前为止人们知之甚少的困难问题领域,产生大量的成功案例。
3.2遗传算法的应用领域
遗传算法的主要应用领域包括以下几个方面:
函数优化问题。
函数优化是遗传算法的经典应用领域,也是对遗传算法进行性能评价的常用例子。
很多人构造出了各种各样的复杂形式的测试函数来评价遗传算法的性能。
而且对于一些非线性、多模型、多目标的函数优化问题,用其他优化方法较难求解,而遗传算法却可以方便地得到较好的结果。
组合优化问题。
随着问题规模的增大,组合优化问题的搜索空间也急剧扩大,有时在目前的计算机上用枚举法很难或甚至不可能求出其精确最优解。
对这类复杂问题,人们己意识到应把主要精力放在寻求其满意解上,而遗传算法是寻求这种满意解的最佳工具之一。
实践证明,遗传算法对于求解组合优化问题非常有效。
遗传算法已经在求解旅行商问题、图形划分问题等方面得到成功的应用。
生产调度问题。
生产调度问题在很多情况下所建立起来的数学模型难以精确求解,即使经过一些简化之后可以求解,也会因简化太多而使求解结果与实际相差甚远。
由于可以采用字符编码,而且不必使用恰好的目标函数估值,遗传算法也成为解决复杂调度问题的有效工具。
在单件生产车间调度、流水线生产车间调度、生产规划、任务分配、虚拟企业中的伙伴选择方面遗传算法都得到了有效的应用。
自动控制。
在自动控制领域有很多与优化相关的问题需要求解,而且这些优化问题通常要么是通过积分表达的,要么是写不出明确而严格的解析表达式。
遗传算法在求解这类自动控制问题方面已显示出其独特的优点。
例如,用遗传算法进行航空控制系统的优化、用遗传算法优化设计透平机械、设计模糊控制器等,都取得了较好的效果。
机器学习。
学习能力是高级自适应系统所应具备的特征之一。
基于遗传算法的机器学习在很多方面都得到成功应用。
例如,遗传算法被用于学习模糊控制规则、确定模糊集的隶属函数、改进模糊系统的性能;
被用来调整人工神经网络的连接权及网络拓扑优化。
此外,遗传算法还被应用到反问题求解、机器人学习、生物计算、图像处理、人工智能以及遗传编程等领域。
4遗传算法的基本原理
遗传算法GA把问题的解表示成“染色体”,并且在执行遗传算法之前。
给出一群“染色体”,作为假设解,然后,把这些假设解置于问题的“环境”中,并按适者生存的原则,从中选择出较适应环境的“染色体”进行复制,再通过交叉和变异过程产生更适应环境的新一代“染色体”群。
这样,一代一代地进化,最后就会收敛到最适应环境的一个“染色体”上,它就是问题的最优解[9]。
4.1基本流程
遗传算法需要涉及五大要素:
编码、群体初始化、适应性函数的设定、遗传操作的设计和控制参数的设定。
具体步骤如下:
(l)编码,把问题的解转化成位串表示形式;
(2)定义适应性函数;
(3)确定遗传算法的各算子及参数,包括选择、交叉、变异方法,交叉率、变异率、群体容量、最大遗传代数等;
(4)随机初始化群体;
(5)计算群体中每一个染色体的适应值;
(6)按照遗传操作形成下一代群体;
①从当前群体中由事先设定好的选择方法选出两个染色体;
②根据给定的交叉率,对选出的两个染色体进行交叉操作;
③根据给定的变异率,对每个染色体进行变异操作;
④重复①、②、③步,直到新的一代群体被创建出来;
(7)判断新产生的群体是否能满足结束指标,如果满足,则算法结束,如果不满足,则返回步骤(6)。
4.2编码
按照遗传算法的工作流程,当用遗传算法求解问题时,必须在目标问题实际表示与遗传算法的染色体位串结构之间建立关系,即确定编码和解码运算。
编码就是将问题的解用一种码来表示,从而将问题的状态空间与GA的编码空间相对应,编码的选择是影响算法性能与效率的重要因素。
常用的编码方法有如下几种:
①二进制编码:
二进制编码将问题空间的参数表示为基于字符集{0,1}构成的染色体位串,是最常用的一种编码方式。
②大字符集编码:
除基于字符集{0,1}的二进制编码之外,可以结合实际问题的特征采用D进制数或字符集来表示长度为L的位串。
③序列编码:
用排列法进行编码显得更为自然、合理。
④实数编码:
实数编码具精度高、大空间搜索的优点。
⑤树编码:
树编码是一种非固定常用编码模式,其表示空间是开放的。
在搜索过程中树可以自由生长,但是不便于形成更具有结构化和层次性的问题解,实际应用中往往可以加以限制。
⑥自适应编码:
实现选择合适的固定编码方式对潜在的遗传算法用户来说是一个难题。
事实上,提出合适的编码同解决问题本身一样困难。
因此,许多用户认为既然要用遗传算法解决问题,为什么不让它同时调整编码呢?
一些专家就采用了自适应编码[11]。
4.3适应度函数
适应度评价是通过适应度函数对个体质量的一种测量,是进化过程中自然的唯一依据。
因此适应度函数的选择至关重要,直接影响到遗传算法的收敛速度以及能否找到最优解。
一般而言,适应度函数是由目标函数变换而成的。
对目标函数值域的某种映射变换称为适应度的尺度变换。
适应度函数的设计主要满足以下条件:
①单值、连续、非负、最大化:
这个条件是容易理解和实现的。
②合理、一致性:
要求适应度值反映对应解的优劣程度,这个条件的达成比较难以衡量。
③计算量小:
适应度函数设计应尽可能简单,这样可以减小计算时间和空间上的复杂性,降低成本。
④通用性强:
适应度函数对具体问题应尽可能具有通用性,最好无需使用者改变适应度函数中的参数。
适应度函数的尺度变换有线性变换法、幕函数变换法、指数变换法[10]。
4.4遗传算子
标准的遗传算子一般都包括选择、交叉和变异三种。
它们构成了遗传算法的核心,使得算法具有强大的搜索能力。
4.4.1选择算子
选择操作就是用来确定如何从父代种群中按照某种方法选取哪些个体遗传到下一代种群的遗传运算。
它是根据个体适应度函数值的大小正比于其被放入候选的概率的过程。
在备选集中按照一定的选择概率进行操作,这个概率取决于种群中个体的适应度及其分布。
其主要作用是避免了基因缺失,提高全局收敛性和计算效率。
选择算子可看作是种群空间到父体空间的随机映射,它按照某种准则或概率分布从当前种群中以高的概率选取那些好的个体组成不同的父体以供生成新的个体。
目前常用的选择策略有赌盘赌选择算子、排序选择算子、最优保存选择算子和锦标赛选择算子等[8]。
在遗传算法中,目前常用的选择机制有以下几种:
①适应度比例方法
适应度比例方法是目前遗传算法中最基本也是最常用的选择方法。
它也叫赌轮或蒙特卡罗选择。
在该方法中,各个个体的选择概率和其适应度值成比例。
设群体大小为n,其中个体i的适应度值为fi,则i被选择的概率psi为:
psi=fi/∑fi(4-1)
显然,概率psi反映了个体i的适应度在整个群体的个体适应度总和中所占的比例。
个体适应度越大,其被选择的概率就越高,反之则被选择的概率越低。
②最佳个体保存方法
最佳个体保留进化策略的基本思想是当前群体中适应度最高的个体不参与交叉运算和变异运算,而是用来替换掉本代群体中经过交叉、变异等遗传操作后所产生的适应度最低的个体。
具体操作过程是:
1)找出当前群体中适应度最高的个体和适应度最低的个体。
2)若当前群体中最佳个体的适应度比总的迄今为止的最好个体的适应度还要高,则以当前群体中的最佳个体作为新的迄今为止的最好个体。
3)用迄今为止的最好个体替换掉当前群体中的最差个体。
③期望值方法
在赌轮选择机制中,当个体数不太多时,依据产生的随机数有可能会出现不正确地反映个体适应度的选择,即存在统计误差。
也就是说,适应度高的个体也有可能被淘汰(当然,适应度低的个体也有可能被选择),为克服这种误差,期望值方法用了如下思想。
1)计算群体中每个个体在下一代生存的期望数目:
M=fi/
=fi/∑fi/n(4-2)
2)若某个体被选中并要参与配对和交叉,则它在下一代中的生存的期望值数目减去0.5;
若不参与配对和交叉,则该个体的生存期望数目减去1。
3)在2)的两种情况下,若一个个体的期望值小于0时,则该个体不参与选择。
④排序选择机制
排序选择方法的主要着眼点是个体适应度之间的大小关系,对个体适应度是否取正值或负值以及个体适应度之间的数值差异程度并无特别要求。
排序选择机制的主要思想是:
对群体中的所有个体按其适应度大小进行排序,基于这个排序来分配各个体被选中的概率。
其具体操作过程是:
1)对群体中的所有个体按其适应度大小进行降序排序。
2)根据具体求解问题,设计一个概率分配表,将各个概率值按上述排列次序分配给各个个体。
3)以各个个体所分配到的概率值作为其能够被遗传到下一代的概率,基于这些概率值用比例选择的方法来产生下一代群体。
是指在计算每个个体的适应度后,根据适应度大小顺序对群体中个体排序,然后把事先设计好的概率表按序分配给个体,作为各自的选择概率。
4.4.2交叉算子
交叉操作是遗传算法中最主要的遗传操作。
它是模仿自然界有性繁殖的基因重组过程,对两个父代个体进行基因操作,其作用在于把原有优良基因遗传到下一代种群中,并生成包含更复杂基因结构的新个体。
交叉算子可看作是父体空间到个体空间的随机映射,它通常的作用方式是:
随机地确定一个或多个分量位置为交叉点,由此将一对父体的两个个体分为有限个片断再以概率
(称为交叉概率)交换相应片断得到新的个体。
4.4.3变异算子
在生物种群中总是存在着变异,变异指的是子代和父代之间具有某些不相似的现象,即因为存在着变异现象,所以子代和父代之间中总是不完全相同的。
变异是生物进化过程中不可缺少的,它为生物的进化和发展创造了条件。
在遗传算法中,变异是指父代染色体中的某些基因片,以相对较小的概率发生随机改变的操作过程。
所谓变异运算,是指将个体染色体编码串中的某些基因座上的基因值用该基因座的其他等位基因来替换,从而形成一个新的个体。
在遗传算法中使用变异算子主要有以下两个目的:
①改善遗传算法的局部搜索能力。
遗传算法使用交叉算子已经从全局的角度出发找到了一些较好的个体编码结构,它们已接近或有助于接近问题的最优解。
但仅使用交叉算子无法对搜索空间的细节进行局部搜索。
这时若再使用变异算子来调整个体编码串中的部分基因值,就可以从局部的角度出发使个体更加逼近最优解,从而提高了遗传算法的局部搜索能力。
②维持群体的多样性,防止出现早熟现象。
变异算子用新的基因值替换原有基因值,从而可以改变个体编码串的结构,维持群体的多样性,这样就有利于防止出现早熟现象。
4.5参数控制
在遗传算法的运行过程中,存在着对其性能产生重大影响的一组参数。
这组参数在初始阶段或种群进化过程中需要合理地选择和控制。
主要包括种群规模n、交叉概率pc以及变异概率pm。
4.5.1群体规模
大种群含有较多模式,为遗传算法提供了足够的模式采样容量,可以改进GA搜索的质量,防止早熟前收敛。
但大种群增加了个体适应性评价的计算量,从而使收敛速度降低。
4.5.2交叉概率
交叉概率pc控制着交叉算子的应用频率,在每一代新的种群中,需要对个体的染色体结构进行交
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 0623 甜甜 浙江 师范大学 本科 毕业设计 论文 基于 遗传 算法 求解 背包 问题