用遗传算法求解多维背包问题.docx

上传人:b****4 文档编号:4125179 上传时间:2022-11-28 格式:DOCX 页数:10 大小:106.27KB
下载 相关 举报
用遗传算法求解多维背包问题.docx_第1页
第1页 / 共10页
用遗传算法求解多维背包问题.docx_第2页
第2页 / 共10页
用遗传算法求解多维背包问题.docx_第3页
第3页 / 共10页
用遗传算法求解多维背包问题.docx_第4页
第4页 / 共10页
用遗传算法求解多维背包问题.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

用遗传算法求解多维背包问题.docx

《用遗传算法求解多维背包问题.docx》由会员分享,可在线阅读,更多相关《用遗传算法求解多维背包问题.docx(10页珍藏版)》请在冰豆网上搜索。

用遗传算法求解多维背包问题.docx

用遗传算法求解多维背包问题

 

智能所“暑期学校”科研实习报告

 

 

题目:

用遗传算法求解多维背包问题

姓名:

吴逊专业:

智能科学与技术

指导老师姓名、职务:

尚荣华副教授

日期:

二零一一年八月

 

摘要

首先简单介绍了基本的遗传算法。

然后将贪婪算法与简单遗传法相结合构成一种混合遗传算法,用该混合遗传算法求解背包问题。

通过对标准测试集中的27个问题进行测试,发现用这种方法求解大规模背包问题,其解的质量和求解性能较简单遗传算法和贪婪算法都有所改善。

关键词:

遗传算法,多维背包问题

 

绪论

遗传算法是模拟生物界自然进化过程的一种计算模型,其思想主要来源于达尔文进化论、孟德尔遗传学说及现代生物学对生命遗传过程的研究。

对它的研究起源于20世纪70年代,由美国Michigan大学的J.Holland教授于1975年正式提出。

GA的主要特点是群体搜索策略和群体中个体之间的信息交换,搜索不依赖于梯度信息。

尤其适用于处理传统搜索方法难于解决的复杂和非线性问题,可广泛用于组合优化、机器学习、自适应控制等领域。

本文将先就遗传算法介绍其思想来源及基本思路,并提出GA应用的5个关键点。

接着对一类典型的组合优化问题——0-1背包问题分别进行简单遗传算法与混合遗传算法的求解,并将结果与贪婪算法进行对比。

第一章遗传算法概述

2.1达尔文进化论与孟德尔学说

19世纪中叶,达尔文创立了科学的生物进化学说,它第一次对整个生物界的发生、发展,作出了唯物的、规律性的解释,使生物学发生了一次革命性的变革。

达尔文进化论认为生物不是静止的,而是进化的。

物种不断变异,旧物种消失,新物种产生。

而且生物的进化是连续和逐渐,不会发生突变。

生物之间存在一定的亲缘关系,他们具有共同的祖先;而另一方面,由于生物过渡繁殖,但是它们的生存空间和食物有限,从而面临生存斗争,包括:

种内、种间以及生物与环境的斗争。

总结起来为两部分内容:

遗传变异与自然选择。

其中自然选择是达尔文进化论的核心。

1857年,孟德尔通过对植物进行一系列仔细的实验。

揭示了遗传学的两条基本定律:

分离定律和独立分配定律,统称为孟德尔遗传定律。

分离定律是指基因作为独特的独立单位而代代相传。

细胞中有成对的基本遗传单位,在杂交的生殖细胞中,一个来自雄性亲本,一个来自雌性亲本.独立分配定律则指出在一对染色体上的基因对中的等位基因能够独立遗传。

孟德尔的这两条遗传基本定律就是新遗传学的起点,孟德尔也因此被后人称为现代遗传学的奠基人。

将达尔文进化论和孟德尔-摩根基因相结合,成为现被广泛接受的新达尔文主义。

新达尔文主义认为,只用种群上和物种内的少量统计过程就可以充分地解释大多数生命历史,这些过程就是繁殖、变异、竞争、选择。

繁殖是所有生命的共同特性;变异保证了任何生命系统能在正熵世界中连续繁殖自己;对于限制在有限区域中的不断膨胀的种群来说,竞争和选择是不可避免的结论。

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:

依据上述贪婪算法将物品重新排序.

Step2:

依据上述贪婪选择机制依次修复每个个体。

本实验中其它算子的选择如下:

(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

2

2

2

2

5

5

5

5

5

5

5

5

5

5

28

28

28

105

105

30

30

40

40

50

50

60

60

70

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

5567

6339

5643

6954

7486

9580

7698

Weish22

Weish24

Weish26

Weish27

Weish30

PB1

PB2

PB4

PB5

PB6

sento1

sento2

5

5

5

5

5

4

4

2

10

30

30

30

80

80

90

90

90

27

34

29

20

40

60

60

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

8836

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

(注:

可编辑下载,若有不当之处,请指正,谢谢!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1