- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
lw4-基于遗传算法解决01背包问题.doc-邵阳学院
基于遗传算法解决01背包问题
邵阳学院,刘俊,刘希信息工程系:遗传算法【】属于进化算法( Evolutionary Algorithms) 的一种,它通过模仿自然界的选择与遗传的机理来寻找最优解. 遗传算法具有与问题领域无关切快速随机的搜索能力。搜索从群体出发,具有潜在的并行性,可以进行多个个体的同时比较搜索使用评价函数启发,过程简单使用概率机制进行迭代,具有随机性具有可扩展性,容易与其他算法结合。本文基本01背包问题。评价函数问题描述
1.问题描述
01背包问题是一类基础的背包问题,可以具体描叙为一个体积为volume的背包和n个物体,对于物体i,其体积为vi,价值为wi,01背包问题就是要在不超过背包体积的情况下,使装入背包的物体的价值量最大。问题的解的遗传表示【】
因为对于一件物品只有放进与不放进两种选择,所以只用两种状态就可以表示,于是采用二进制编码。当xi=0时,表示物体i不放入背包,当xi=1时表示物体i放入背包,则0-1背包问题的数学模型为,n个物体的背包问题的解可以表示为二进制串。
评价函数根据个体适应值对其进行优劣判定采用经典的赌轮选择算法【】,函数的功能是从群体中选择一个基因组,选中的几率正比于基因组的适应性分数。
SGenome backpack::RouletteWheelSelection(){
srand(time(0));
double fSlice = RandFloat() * m_dTotalFitnessScore;
double cfTotal = 0.0;
int SelectedGenome = 0;
for (int i=0; im_iPopSize; ++i){
cfTotal += m_vecGenomes[i].dFitness;
if (cfTotal fSlice) {
SelectedGenome = i;
break;
} }
return m_vecGenomes[SelectedGenome];
}
2.遗传算子用来改变繁殖过程中产生的子个体遗传组成
杂交算子【】,要求两个染色体在同一随机位置上断裂,然后将它们在断开点以后的部分进行互换,以形成两个新的染色体(子代)。
void backpack::Crossover( const vectorint mum,const vectorint dad,
vectorint baby1,vectorint baby2) {
if ( (RandFloat() m_dCrossoverRate) || (mum == dad)) {
baby1 = mum;
baby2 = dad;
return;
}
int cp = RandInt(0, m_iChromoLength - 1);
for (int i=0; icp; ++i){
baby1.push_back(mum[i]);
baby2.push_back(dad[i]);
}
for (int i=cp; imum.size(); ++i){
baby1.push_back(dad[i]);
baby2.push_back(mum[i]);
}
}
变异算子【9】,沿着染色体长度,位进行考察,并按m_dMutationRate给定的几率,将其中某些位进行翻转。
void backpack::Mutate(vectorint vecBits){
for (int curBit=0; curBitvecBits.size(); curBit++){
if (RandFloat() m_dMutationRate){
vecBits[curBit] = !vecBits[curBit];
} }}
可以设置适应性函数,为更好的解设置更高的分数,但这样容易造成数值分布的广度不够,使种群中最好和最差染色体的分数差别不大。我们可以记下每一代中的最差的价值,然后对种群中每一个解得出的价值减去这个最差的价值,这样相对差异变大,接下来使用轮盘选择法就会更有效可有效地从种群中移去最差的染色体,因为最差的适应性分数为0 【】。不同的变异算子【1】散播变异随机地选择一对位置,将其间的基因进行任意的移动。代码如下:
void backpack::MutateSM(vectorint chromo){
if (RandFloat() m_dMutationRate) return;
const int MinSpanSize = 3;
int beg, end;
ChooseSection(beg, end, chromo.size()-1,
您可能关注的文档
- FL1D-K2BM型选型样本-Idec.PDF
- EZ-2000安装操作手册(繁).PDF
- FPGA嵌入式智能设计-世纪电源网.doc
- FPC的基本结构.ppt
- Forsensorsandactuators传感器执行机构分配器.PDF
- FZF793负载分配器中文说明书-大同市欧特讯动力控制有限公司.PDF
- FITDocument(Z盛友广告报纸设计组SYDY2014年-浙江农资集团.PDF
- Fe-Co-Ni合金纳米粒子镶嵌的碳纳米纤维的简单制备及-无机化学学报.PDF
- GaPV3+自旋允许谱的精细结构的研究-四川师范大学学报(自然科学版).PDF
- G703E1-UG703-FE1安装操作手册-CTCUnion.PDF
最近下载
- 山东省烟台市蓬莱实验初级中学2024-2025学年度第一学期9年级道德与法治素养形成期中测试(图片版,含答案).docx VIP
- 全国2025年10月自考00185《商品流通概论》真题及答案.docx VIP
- 2023年4月 自考 06056 心理学史 试题.pdf VIP
- 涉案财物管理系统V2.0T-用户使用说明书.pdf VIP
- 2025年网络安全等级测评师(中级)考核试题与答案.pdf VIP
- 电梯学徒安全培训记录课件.pptx VIP
- 公务员制度专题二.ppt VIP
- tc官网软件资源中文产品手册voicetone.pdf VIP
- 路灯售后服务方案及措施.docx VIP
- 河北省部分高中2024-2025学年高一上学期11月阶段性测试语文试卷(含答案).docx VIP
原创力文档


文档评论(0)