版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、遗传算法解决01背包问题2015 2016 学年 第 二 学期学 生 姓 名专 业 学 号2016年 6 月 9目录一:问题描述.3二:遗传算法原理及特点.3三:背包问题的遗传算法求解.31.文字描述.32.遗传算法中的抽象概念在背包问题的具体化.33.算法求解的基本步骤.4四:算法实现.41.数据结构.42.部分代码.5五:结论.8六:参考文献.8一、问题描述0-1背包问题属于组合优化问题的一个例子,求解0-1背包问题的过程可以被视作在很多可行解当中求解一个最优解。01背包问题的一般描述如下:给定n个物品和一个背包,物品i的重量为Wi,其价值为Vi,背包的容量为C。问应如何选择合适的物品装入
2、背包,使得背包中装入的物品的总价值最大。注意的一点是,背包内的物品的重量之和不能大于背包的容量C。在选择装入背包的物品时,对每种物品i只有两种选择:即装入背包或者不装入背包,不能讲物品i装入背包多次,也不能只装入部分的物品,称此类问题为0/1背包问题。二、遗传算法原理及特点遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。遗传算法有着鲜明的优点:(1)遗传算法的操作对象是一组可行解,而非单个可行解;搜索轨道有多条,而非单条,因而具有良好的并行性.(2)遗传算法只需利用目标的取值信息,而
3、无需递度等高价值信息,因而适用于任何规模,高度非线形的不连续多峰函数的优化以及无解析表达式的目标函数的优化,具有很强的通用性.(3)遗传算法择优机制是一种“软”选择,加上良好的并行性,使它具有良好的全局优化性和稳健性.(4)遗传算法操作的可行解集是经过编码化的(通常采用二进制编码),目标函数解释为编码化个体(可行解)的适应值,因而具有良好的可操作性与简单性.三、背包问题的遗传算法求解1、文字描述0-1背包问题传统的解决方法有动态规划法、分支界限法、回溯法等等。传统的方法不能有效地解决0-1背包问题。在物品不是很多的时候用这些算法来处理背包问题效率上还是可以接受的,一旦物品过多(如50件物品)这
4、些算法的效率就大打折扣了,因此采用一些智能的启发式搜索算法来处理就显得很有必要,遗传算法(GeneticAlgorithms)则是一种适合于在大量的可行解中搜索最优(或次优)解的有效算法。2、遗传算法中的抽象概念在背包问题的具体化(1)基因:0或1,代表相应的商品选还是不选。(2)染色体:本实验中固定有50个商品,所以染色体就是50个基因序列,也就是40个0、1串,代表了一种往包里装商品的组合。一个染色体例:0111101101011011110101110101010101011110。(3)群体:一定数量的基因个体组成了群体(population),群体中个体的数量叫做群体大小。本实验的背
5、包问题中,种群大小为100,代表100个往包里装商品的组合。(4)适应度:各个个体对环境的适应程度叫做适应度。本实验的背包问题中,每染色体个体的适应度为选入包中的商品的价值和。3、算法求解的基本步骤(1)种群的初始化:确定种群大小M、交叉概率pc、变异概率pm、染色体长度N及最大进化代数T.随机初始化染色体,给出物品体积、物品价值和背包容量C.以8个待分配的物件为例:随机产生n个长度为8的二进制串,即种群中个体的染色体编码的每一位按等概率在0与1中选择.n指的是种群规模,即种群中的个体数目。(2)产生遗传编码:采用二进制n维矢量解X作为解空间参数的遗传编码,串的长度等于n,xi=1表示该物件装
6、入背包,xi=0表示该物件没有被装入背包确定染色编码方式,它根据不同的问题模型使用不同编码方式,有二进制编码也有整数编码和浮点数编码,对于01背包问题,采用二进制编码。因为物品只有选中与不选中两种状态,例如7个物品,用七个01组成的编码来表示,这是染色体长度就是7,x=0,1,0,1,0,0,1)表示第2、4、7这三个物品被选入背包中。而其他的没有被选中。也就是说,现在这个背包里只有2、4、7这三个物件。这个遗传编码也需要随机地产生,随机地产生数字0或l,就构成一个染色体串,也就是一个遗传编码。每产生一个染色体,就对它进行一次检验,如果不满足约束条件,则拒绝接受。重新产生一个新的染色体;如果产
7、生的染色体满足条件,则接受它作为种群的一名成员,经过有限次抽样后,得到M个可行的染色体。(3) 适应度函数的构造:根据题意可构造出适应度函数如下:其中Xi=1或0(i=1,2,n).(4)选择操作:根据选择概率选择染色体,将上述的个体作为第1代,这里采用以正比于适应度的赌轮随机选择方式。评价函数,01背包问题的评价函数很简单,就是选中的物品的价值之和,如:11100的评价值就是前三个选中物品的价值之和,当然还有前三个物品体积不能超过背包容量这个约束条件,一旦超出容量那么它的评价值就是0了。交叉操作:采用一点交叉方式,交叉概率为pc,具体操作是在个体串中随机设定一个交叉点.6)变异操作:染色体变
8、异采用位点变异的方式.对种群依次进行选择、交叉、变异后就检验得到的新个体,当某代得到的结果满足要求或当前代数等于结束代数时算法结束得到结果,否则重复选择、交叉、变异操作,直到得到满意的结果为止.四、算法实现1、数据结构(1)重要参数:#define zhongqun_size 100/种群的规模#define pc 0.8/杂交概率#define pm 0.08/变异概率#define chrom_length 50/染色体长度#define max_daishu 1000/最大进化代数(2)染色个体:struct populationunsigned int chromchrom_lengt
9、h;/染色体double weight;/背包重量double fitness;/适应度unsigned int parent1,parent2,cross;/双亲、交叉点;(3)种群:/新生代种群、父代种群struct population oldpopzhongqun_size,newpopzhongqun_size;2、部分代码#define zhongqun_size 100/种群的规模#define pc 0.8/杂交概率#define pm 0.08/变异概率#define chrom_length 50/染色体长度#define max_daishu 1000/最大进化代数str
10、uct populationunsigned int chromchrom_length;/染色体double weight;/背包重量double fitness;/适应度unsigned int parent1,parent2,cross;/双亲、交叉点;/新生代种群、父代种群struct population oldpopzhongqun_size,newpopzhongqun_size;/背包问题中物体重量、收益、背包容量int weightchrom_length,profitchrom_length,bagweight;/种群的总适应度、最小、最大、平均适应度double sumf
11、itness,minfitness,maxfitness,avgfitness;/计算适应度时使用的惩罚函数系数double alpha;/一个种群中最大和最小适应度的个体int minpop,maxpop;void read_infor()FILE*fp;int j;/获取背包问题信息文件if(fp=fopen(data.txt,r)=NULL)/读取文件失败/AfxMessageBox(The file is not found,MB_OK,NULL);return;/读入物体收益信息for(j=0;jchrom_length;j+)fscanf(fp,%d,&profitj);/读入物体
12、重量信息for(j=0;jchrom_length;j+)fscanf(fp,%d,&weightj);/读入背包容量fscanf(fp,%d,&bagweight);fclose(fp);/根据计算的个体重量,判断此个体是否该留在群体中double cal_weight(unsigned int*chr)int j;double pop_weight;/背包重量pop_weight=0;for(j=0;jchrom_length;j+)pop_weight=pop_weight+(*chr)*weightj;chr+;return pop_weight;double cal_fit(unsi
13、gned int*chr)int j;double pop_profit;/适应度pop_profit=0;/pop_weight=0;for(j=0;jchrom_length;j+)pop_profit=pop_profit+(*chr)*profitj;/pop_weight=pop_weight+(*chr)*weightj;chr+;return pop_profit;void generation()unsigned int i,j,mate1,mate2;double tmpWeight;int ispop;/记录是否是符合条件的个体i=0;while(izhongqun_siz
14、e)ispop=false;while(!ispop)/选择mate1=selection(i);mate2=selection(i+1);/交叉crossover(oldpopmate1.chrom,oldpopmate2.chrom,i);/变异for(j=0;jchrom_length;j+)newpopi.chromj=mutation(newpopi.chromj);/选择重量小于背包容量的个体,即满足条件tmpWeight=cal_weight(newpopi.chrom);if(tmpWeight=bagweight)newpopi.fitness=cal_fit(newpopi
15、.chrom);newpopi.weight=tmpWeight;newpopi.parent1=mate1;newpopi.parent2=mate2;ispop=true;/此个体可以加入到种群中i=i+1;void main(int argc,char*argv)int gen,oldmaxpop,k;double oldmax;read_infor();/读入背包信息gen=0;srand(unsigned)time(NULL);/置随机种子initpop();memcpy(&newpop,&oldpop,zhongqun_size*sizeof(struct population);
16、statistics(newpop);/统计新生种群的信息report(newpop,gen);while(genmax_daishu)gen=gen+1;if(gen0=0)srand(unsigned)time(NULL);/置随机种子oldmax=maxfitness;oldmaxpop=maxpop;generation();statistics(newpop);/统计新生代种群信息/如果新生代种群中个体的最大适应度小于老一代种群/个体的最大适应度,则保存老一代种群个体的最大适应度/否则报告新生代的最大适应度if(maxfitnessoldmax)for(k=0;koldmax)report(newpop,gen);/保存新生代种群的信息到老一代种群信息空间memcpy(&oldpop,&newpop,zhongqun_size*sizeof(struct population);printf(It is over.);getch();五、结论遗传算法在处理背包问题时借助了大自然的演化过程,采用的是种群和随机搜索机制,它是一种多线索而非单线索的全局优化方法,能克服传统优化方法的缺
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理课题申报的流程与要点
- 医院感染预防的持续改进工具
- 基于无人机的物流配送技术研究与应用
- 基于环保理念的绿色产品设计思路和实施方法
- 廉政风险防控体系建设规范
- 零售业店长岗位技能与职责解析
- 基于区块链技术的互联网医院财务管理模式
- 基于虚拟现实的远程教育技术应用
- 六年级上册英语导学案-Module7 Unit2 pandas love bamboo|外研社(三起)(无答案)
- 旅游行业景区开发面试要点分析
- 电商视觉设计课件 第2章 商品图片精修与视觉合成
- 2024-年全国医学博士外语统一入学考试英语试题
- 中医适宜技术-中药热奄包
- JB-T 13101-2017 机床 高速回转油缸
- YYT 0473-2004 外科植入物 聚交醋共聚物和共混物 体外降解试验
- DL∕T 1848-2018 220kV和110kV变压器中性点过电压保护技术规范
- 涉企行政执法自查报告市场监管
- 大型商业综合体项目工程管理实施规划编制指引
- 5G通信中的射频微波集成电路设计
- (3.6)-新民主主义革命的道路
- 英语书法欣赏课件
评论
0/150
提交评论