0-1背包问题设计说明书.doc

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
0-1背包问题设计说明书

摘 要 0-1背包问题在实际中有广泛的应用,本课程设计采用遗传算法中Prim算法解决0-1背包问题,遗传算法主要特点是直接对结构对象进行操作,不存在求导和函数连续性的限定;具有内在的隐并行性和更好的全局寻优能力;采用概率化的寻优方法,能自动获取和指导优化的有哪些信誉好的足球投注网站空间,自适应地调整有哪些信誉好的足球投注网站方向,不需要确定的规则。遗传算法不是对所有问题都能得到整体最优解,但对范围相当广的许多问题它能产生整体最优解。通过分析用遗传算法解决0-1背包问题能得到问题的最优解。 根据算法的设计结果,采用C语言实现算法,通过测试分析,程序运行结果正确,运行效率较高。 关键词:0-1背包问题,遗传算法,Prim算法 目 录 1 问题描述 1 2 问题分析 2 3 建立数学模型 3 4 算法设计 4 5 算法实现 5 6 测试分析 6 结 论 7 参考文献 8 1 问题描述2 问题分析#includeiostream #includeiomanip #includecstdlib #includecmath #includectime using namespace std; //定义问题的最大规模 #define max 100 //为题规模,即共有多少个包 int packageNum; //每个包的重量 int packageWeight[max]; //每个包的价值 int packageValue[max]; //约束,背包的最大容量 int limitWeight; //群体的规模 int colonySize; /*colonyState[i][k] 表示一个染色体*/ /*colonyState[1...conlonySize][0|1] 表示一个群体*/ int colonyState[max][2][max]; /* currAge 表示当前代的编号*/ /* (currAge+1)%2 表示下一代的编号*/ int currAge = 0; /* 个体评价*/ typedef struct tagIndivdualMsg { int index; int value; }IndivdualMsg; IndivdualMsg indivdualMsg[max]; /*函数声明*/ void printColonyState(int nextAge); /*初始化群体,初始种群产生,并计算每个适应度值和其对应的约束条件值(即为在染色体中选取的物品的重量) ,比较初始种群中各个个体的适应度。选择最大者所对应的个体作为第一代最优个体,并记录该个体以及它的适应度和约束条件值。*/ void colonyInit() { int i, j; int w; for(i=0; icolonySize; i++) { //保证找到一个符合约束的染色体 w = limitWeight +1; while(w limitWeight) { w = 0; for(j=0; jpackageNumw=limitWeight; j++) { colonyState[i][currAge][j] = rand()%2; w += packageWeight[j] * colonyState[i][currAge][j];} } } } /*对个体进行评价*/ int cmp(const void *a, const void *b) { IndivdualMsg *x = (IndivdualMsg *)a; IndivdualMsg *y = (IndivdualMsg *)b; return y-value - x-value; } void indivdualEstimate() { int i, j; for(i=0; icolonySize; i++) { indivdualMsg[i].index = i; indivdualMsg[i].value = 0; for(j=0; jpackageNum; j++) indivdualMsg[i].value += packageValue[j]*colonyState[i][currAge][j];} qsort(indivdualMsg, colonySize, sizeof(IndivdualMsg), cmp); } /*终止循环的条件,给定一个最大进化步数*/ bool stopFlag() { //进行n代进行后停止 static int n = 50; if(n-- = 0) return false; else return true; } /*赌轮选择*/ int g

文档评论(0)

2017meng + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档