用遗传算法求解多维背包问题文档格式.docx
《用遗传算法求解多维背包问题文档格式.docx》由会员分享,可在线阅读,更多相关《用遗传算法求解多维背包问题文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
将达尔文进化论和孟德尔-摩根基因相结合,成为现被广泛接受的新达尔文主义。
新达尔文主义认为,只用种群上和物种内的少量统计过程就可以充分地解释大多数生命历史,这些过程就是繁殖、变异、竞争、选择。
繁殖是所有生命的共同特性;
变异保证了任何生命系统能在正熵世界中连续繁殖自己;
对于限制在有限区域中的不断膨胀的种群来说,竞争和选择是不可避免的结论。
2.2生物学中的遗传概念
在生物细胞中,控制并决定生物遗传特性的物质是脱氧核糖核酸,简称DNA。
染色体是其载体。
DNA是由四种碱基按一定规则排列组成的长链。
四种碱基不同的排列决定了生物不同的表现性状。
例如,改变DNA长链中的特定一段(称为基因),即可改变人体的身高。
细胞在分裂时,DNA通过复制而转移到新产生的细胞中,新的细胞就继承了上一代细胞的基因。
有性生殖生物在繁殖下一代时,两个同元染色体之间通过交叉而重组,亦即在两个染色体的某一相同位置处DNA被切断,其前后两串分别交叉形成两个新的染色体。
在细胞进行复制时可能以很小的概率产生某些复制差错,从而使DNA发生某种变异,产生新的染色体。
这些新的染色体将决定新的个体(后代)的新的性状。
在一个群体中,并不是所有的个体都能得到相同的繁殖机会,对生存环境适应度高的个体将获得更多的繁殖机会;
对生存环境适应度较低的个体,其繁殖机会相对较少,即所谓自然选择。
而生存下来的个体组成的群体,其品质不断得以改良,称为进化。
生物的进化是经过无数次有利的进化积累而成的,不同的环境保留了不同的变异后代。
2.3遗传算法的基本思想
首先实现从性状到基因得映射,即编码工作,然后从代表问题可能潜在解集得一个种群开始进行进化求解。
初代种群(编码集合)产生后,按照优胜劣汰的原则,根据个体适应度大小挑选(选择)个体,进行复制、交叉、变异,产生出代表新的解集的群体,再对其进行挑选以及一系列遗传操作,如此往复,逐代演化产生出越来越好的近似解。
选择是指通过适应度的计算,淘汰不合理的个体。
类似于自然界的物竞天择
。
复制指编码的拷贝,类似于细胞分裂中染色体的复制。
交叉即编码的交叉重组,类似于染色体的交叉重组。
变异是指编码按小概率扰动产生的变化,类似于基因的突变
这个过程将导致种群像自然进化一样,后代种群比前代更加适应环境,末代种群中得最优个体经过解码(从基因到性状的映射),可以作为问题近似最优解。
遗传算法的基本框架如下:
2.4遗传算法需解决的5个问题
基本的遗传算法可定义为一个八元组:
GA=(C,E,
M,Φ,Γ,Ψ,T)
式中:
C—个体的编码方式;
E—个体的适应度函数;
—初始种群;
M—种群大小;
Φ—选择算子;
Γ—交叉算子;
Ψ—变异算子;
T—算法终止条件。
基于以上认识,总结之,认为完成一个遗传算法主要需解决以下五个问题:
1编码
选择合适的编码方式会使原问题映射到基因空间后变得简单明了、易于解决。
编码需考虑染色体的可行性、合法性(通过解码是否为问题的一个解)以及映射的唯一性。
有二进制编码、实数编码、整数排列编码等。
2群体初始化
通常有两种方法,一种是完全随即产生;
一种是根据某些先验知识产生一组必须满足的要求,在满足这些要求的解中随机选取样本。
经证明,在二进制编码的前提下,若个体长度为L,则种群规模的最优值为
(即全解)。
但这个数字通常情况下都很大,所以一般取20-100。
3个体评价
适应度函数的选取直接影响遗传算法的收敛速度及能否找到最优解,对一般优化问题,通常直接选取其目标函数作为适应度函数。
在计算适应度时,对不可行解的处理常用的方法有修正法和罚函数法,实验证明修正法要优于罚函数法。
4遗传算子(全局:
选择;
局部:
交叉、变异)
选择:
其基础是适者生存理论,指导GA搜索在整个搜索空间中朝最有利的区域发展。
确定合适的选择压力对其很重要,在进化之初保持低压可以保留种群多样性,而在进化后期选择高压可以加快收敛速度。
常用的选择机制有轮盘赌,确定性选择,混合选择等。
交叉、变异:
分别模拟生物界的有性生殖过程和基因突变现象,常用的有单点交叉,多点交叉,随机、插入及交换变异等方法。
5参数选择;
对于一般的问题,通常需要确定的主要参数有:
迭代次数;
种群大小;
交叉、变异概率。
这几种参数的变化对算法性能的影响非常明显,需针对不同问题具体分析。
2.5遗传算法的特点
遗传算法的主要特点是群体搜索策略和群体中个体之间的信息交换,具体而言,它有以下不同于传统算法的优点:
从许多点开始并行计算,计算速度快,避免收敛于局部最优解;
通过目标函数计算匹配度,对问题的依赖性小;
在解空间进行高效的启发式搜索,而非盲目穷举;
应用范围广;
计算简单,功能强,适合解决大规模复杂问题。
第二章0-1背包问题
问题描述:
给定背包的m种资源,如大小、承重等,其中第j种资源取值
j=1,2,...,m;
另给定n件物品,其中第i件物品的价值为
,对应资源j的占用量为
i=1,2...n。
受背包条件限制,若只能挑选一部分物品装入背包,那么如何选择物品使背包装入物品的价值最大,数学描述为:
f(x)表示装入背包物品的总价值;
参数
>
0,
0,0<
<
;
x=(
...
)表示一组物品的选择策略,
=i表示物品j被选中放入背包,
=0表示物品i没有被选中。
当m取值为1时,问题即变为简单0-1背包问题。
背包问题属典型的组合优化问题,并且是NP难问题。
已有的求解方法可分为精确算法,如枚举法,动态规划法,分支定界法,图论法等指数级方法以及近似算法,如贪婪算法,遗传算法,免疫算法等两大类。
背包问题的研究对于解决复杂组合优化问题有重要的意义。
第三章用遗传算法求解多维0-1背包问题
4.1算法描述
本章将采用一种将贪婪算法与遗传算法相结合的混合遗传算法来求解多维背包问题,并将此算法与简单遗传算法和贪婪算法进行对比,以提供一种利用遗传算法求解问题的新思路。
传统的贪婪算法是基于价值密度的,例如物品单位体积价值或单位质量价值。
这在一维背包问题中很适合,但是对于多维背包问题就需要做一下修改,因为包的限制条件有多个(如体积、质量等),无法只用上述简单的价值密度来解决。
为此,我们提出了“综合价值密度”的概念,所谓“综合价值密度”就是对各种单一价值密度的综合,用
来表示,具体定义如下:
=
其中
,
表示第i种物品占用“总资源”的加权量。
的意义是包的对第j种资源限制的相对大小,
越大说明包对对第j种资源限制的越小,所以在该种资源在
中占的比例就越小。
用贪婪算法求解多维0-1背包问题的步骤如下:
Step1:
求解各物品的价值密度ρ;
Step2:
将物体按ρ由大到小的顺序排序。
不妨记新的排序为
Step3:
若对任意一种资源j,均有
则
=1,否则
=0.k=k+1;
Step4:
IFk=n+1stop;
ELSEreturnstep3.
贪婪算法简单直观,易于理解,但并不能保证能得到全局最优解。
在简单遗传算法中加入适当的局部搜索方式,利用启发式信息或与领域相关的知识,使得算法既具有遗传算法的整体优化等特性,又能加快算法的收敛速度,从而在求解各类应用问题中具有更大的优越性,这样的算法称为混合遗传算法。
遗传算法的几个步骤(编码,初始化,选择,交叉,变异等)已经有许多很好的方法,例如轮盘赌选择法、单点交叉等,这些方法简单,效果好,而且有通用性,我们可以直接用来解决各种问题。
解决多维背包问题的关键在于包的限制条件的处理,遗传算法中经过交叉、变异的个体是随机的,很可能不满足包的限制条件,所以要用合理的修复算法修复每个个体使其满足限制条件。
基于对以上分析,可以利用在简单遗传算法中加入用基于上述贪婪算法的修复算法,这样既能将不可行解改造成可行解,又能使个体趋于较好的解。
具体步骤如下:
Step1:
依据上述贪婪算法将物品重新排序.
依据上述贪婪选择机制依次修复每个个体。
本实验中其它算子的选择如下:
(1)编码:
采用二进制编码,即直接使用原问题描述中的x表示个体。
(2)评价函数:
取目标函数f(x)。
(3)初始化种群:
随机产生,种群规模为100。
(4)选择:
轮盘赌算法。
(5)交叉:
单点交叉,交叉概率为pc=0.5.
(6)变异:
单点变异,变异概率为pm=0.01.
(7)终止条件:
设置一定的迭代次数。
本实验中取100次。
4.2实验与分析
本实验共选取了标准测试集中的27个问题,对每个问题进行了5次实验,统计结果如下:
问题
m
n
简单遗传算法
混合遗传算法
贪婪
算法
已知
最优解
Weing2
Weing1
Weing3
Weing7
Weing8
Weish01
Weish02
Weish06
Weish07
Weish10
Weish11
Weish14
Weish15
Weish18
Weish19
2
5
28
105
30
40
50
60
70
130314.0
140115.8
95642.8
994757.0
479457.8
4504.8
4420.0
5336.4
5330.4
5882.4
5142.2
6168.4
6804.8
8688.2
6499.2
102273.0
117071.5
71296.3
855858.1
310523.3
3423.7
3424.3
4194.6
4089.1
4144.7
3484.7
4393.5
4452.2
6523.5
4561.1
130687.0
141227.8
95677.0
1011575.3
616782.7
4554.0
4503.5
5351.6
5555.7
6304.7
5559.0
6875.0
7328.7
9349.0
7566.3
120317.8
129795.9
90744.8
858794.1
555688.9
4228.0
4182.1
4959.5
5014.6
5585.7
4956.6
5969.0
6604.3
8232.5
6600.5
121880
139278
93278
1088365
620060
4534
4483
5503
5567
6265
5550
6902
7199
9224
7051
130883
141278
95677
1095445
624319
4554
4536
5557
6339
5643
6954
7486
9580
7698
Weish22
Weish24
Weish26
Weish27
Weish30
PB1
PB2
PB4
PB5
PB6
sento1
sento2
4
10
80
90
27
34
29
20
7563.0
8836.0
7669.2
8152.0
9306.8
2975.6
2975.8
91132.8
2090.6
743.2
7327.4
8208.4
5518.4
6871.0
5528.2
5764.6
7082.0
2454.5
2320.9
69256.8
1625.6
447.5
5153.7
6854.9
8837.3
9826.7
9348.3
9656.0
10864
2977.0
3054.3
95168.0
2077.3
776.0
7669.0
8646.3
8836
8512.6
8207.4
8278.9
9376.9
2509.1
2620.5
84542.2
1776.9
681.6
7117.9
7808.0
9818
9278
9764
10819
2792
2825
90909
1925
723
7606
8709
8947
10220
9584
9819
11191
3090
3186
95168
2139
776
7772
8722
由以上实验数据可以看出:
当m、n较小时,SGA的结果要优于贪婪算法,而当数据量增大时,SGA将次于greedy,且差距很大。
如要提高其性能,必须相应的增大种群个数和迭代次数,而这是以时间为代价的。
在具有相同群体大小和迭代次数的条件下,GGA不论是从整体还是单独的一个问题上,其结果基本均优于SGA。
当数据量变大时,这种差距尤为明显;
与贪婪算法相比,GGA在整体上依然是相对较优的,当m、n增大时,如能适当增大其种群数量和迭代次数,相信结果会更优;
贪婪算法虽对每个问题都能获得比较好的解,但其很难得到准确的最优解。
在27组数据中,只有一组解与已知最优解相等。
而即使是在对5次实验求均值的情况下,混合遗传算法依然具有4组解与已知最优解相等。
4.3结论
简单遗传算法结构清晰,具有普遍适用性,可以用来解决各种不同的问题,但对于有些问题,直接使用简单遗传算法,效果不是特别好。
在这种情况下,如能将遗传算法与传统算法相结合,将原问题特有的一些先验知识加入到遗传算法中,构成具有针对性的混合遗传算法,效果可能会更好。
参考文献
公茂果,教学ppt,西安电子科技大学智能信息处理研究所,2011上
西电智能所,用遗传算法求解背包问题,《多媒体专业实验讲义》,2011上
侯冲,基于人工免疫算法的组合优化问题求解,西安电子科技大学硕士学位论文,2006.1
姚瑞枫,宋玉阶,多维0—1背包问题的混合遗传算法,武汉科技大学学报(自然科学版),2003.6
李娟,方平,周明,一种求解背包问题的混合遗传算法,南昌航空工业学院学报,1998
杜巍,李树茁,陈煜聪,一种求解多维背包问题的小世界算法,西安交通大学学报,2009.2
(注:
可编辑下载,若有不当之处,请指正,谢谢!
)