《遗传算法的0-1背包问题(c语言)》由会员分享,可在线阅读,更多相关《遗传算法的0-1背包问题(c语言)(26页珍藏版)》请在人人文库网上搜索。

1、基于遗传算法的0-1背包问题的求解摘要:一、前言组合优化问题的求解方法研究已经成为了当前众多科学关注的焦点,这不仅在于其内在的复杂性有着重要的理论价值,同时也在于它们能在现实生活中广泛的应用。比如资源分配、投资决策、装载设计、公交车调度等一系列的问题都可以归结到组合优化问题中来。但是,往往由于问题的计算量远远超出了计算机在有效时间内的计算能力,使问题的求解变为异常的困难。尤其对于NP完全问题,如何求解其最优解或是近似最优解便成为科学的焦点之一。遗传算法已经成为组合优化问题的近似最优解的一把钥匙。它是一种模拟生物进化过程的计算模型,作为一种新的全局优化搜索算法,它以其简单、鲁棒性强、适应并行处理。

2、以及应用范围广等特点,奠定了作为21世纪关键智能计算的地位。背包问题是一个典型的组合优化问题,在计算理论中属于NP-完全问题, 其计算复杂度为,传统上采用动态规划来求解。设wi是经营活动 i 所需要的资源消耗,M是所能提供的资源总量,pi是人们经营活动i得到的利润或收益,则背包问题就是在资源有限的条件下, 追求总的最大收益的资源有效分配问题。二、问题描述背包问题( Knapsack Problem)的一般提法是:已知n个物品的重量(weight)及其价值(或收益profit)分别为和,背包的容量(contain)假设设为,如何选择哪些物品装入背包可以使得在背包的容量约束限制之内所装物品的价值最。

3、大?该问题的模型可以表示为下述0/1整数规划模型:目标函数:(*)式中为0-1决策变量,时表示将物品装入背包中,时则表示不将其装入背包中。三、求解背包问题的一般方法解决背包问题一般是采取动态规划、递归回溯法和贪心方法。动态规划可以把困难得多阶段决策变换为一系列相互联系比较容易的单阶段问题。对于背包问题可以对子过程用枚举法求解,而且约束条件越多,决策的搜索范围越小,求解也越容易。它的主要缺点是用数值方法求解时会随着状态变量的个数呈指数级的增长,往往对于求解背包问题的实际问题是不现实的。使用递归回溯法解决背包问题的优点在于它算法思想简单, 而且它能完全遍历搜索空间,肯定能找到问题的最优解;但是由于。

4、此问题解的总组合数有个,因此,随着物件数 n 的增大,其解的空间将以级增长,当 n 大到一定程度上,用此算法解决背包问题将是不现实的。使用贪心方法求解时计算的复杂度降低了很多,但是往往难以得到最优解,有时所得解与最优解相差甚远。因此, 我们可以探索使用遗传算法解决物件数较大的背包问题。四、遗传算法简介遗传算法( Genetic Algorithms,GA) 是在1975 年首次由美国密西根大学的D。J。Holland 教授和他的同事们借鉴生物界达尔文的自然选择法则和孟德尔的遗传进化机制基础之上提出的。经过近30年的研究、应用,遗传算法已被广泛地应用于函数优化、机器人系统、神经网络学习过程、模式。

5、识别、图象处理、工业优化控制等领域。遗传算法是将问题的每一个可能性解看作是群体中的一个个体(染色体),并将每一个染色体编码成串的形式,再根据预定的目标函数对每个个体进行评价,给出一个适应值。算法将根据适应度值进行它的寻优过程,遗传算法的寻优过程是通过选择、杂交和变异三个遗传算子来具体实现的。它的搜索能力由选择算子和杂交算子决定,变异算子则保证了算法能够搜索到问题空间的尽可能多的点,从而使其具有搜索全局最优的能力。遗传算法的高效性和强壮性可由Holland提出的模式定理( Schema Therem) 和隐式并行性得以解释。在遗传算法中,定义长度较短、低阶且适应值超过平均适应值的模式在群体中数目。

6、的期望值按指数递增,这个结论称为遗传算法的基本定理。遗传算法是通过定义长度短、确定位数少、适应度值高的模式的反复抽样、组合来寻找最佳点,称这些使遗传算法有效工作的模式为积木块,是遗传算法构造答案的基本材料。但归根到底,要使遗传算法有效工作必须按照遗传算法的模式定理(或积木块假设) 根据具体问题设计合理的编码方案。在运行遗传算法程序时,需要对一些参数作事先选择,它们包括种群的大小、染色体长、交叉率、变异率、最大进化代数等,这些参数对GA 的性能都有很重要的影响。在试验中参数一般选取如下:种群大小N= 20100 ,交叉概率 = 0.4 0.9 ,变异概率 = 0.0010.1 ,最大进化代数ma。

7、xgen = 100500。遗传算法是具有“生成+检测”的迭代过程的搜索算法。它的基本处理流程如图1所示。初始化种群评估种群中个体适应度选 择编 码交 叉变 异演 化图1、遗传算法的基本流程遗传算法的基本流程描述如下:(1)编码:将解空间的解数据进行二进制编码,表达为遗传空间的基因型串(即染色体)结构数据,如将数据9编码为“1001”;(2)初始化种群:定义整数pop_size作为染色体的个数,并且随机产生pop_size个染色体作为初始种群;(3)评估种群中个体适应度:评价函数对种群中的每个染色体(chromosome)求得其个体适应度;(4)选择:选择把当前群体中适应度较高的个体按某种规则。

8、或者模型遗传到下一代种群中,这里所用的规则是:染色体在种群中被选择的可能性与其个体的适应度的大小成正比;(5)交叉:定义参数作为交叉操作的概率,由(4)选择得到的两个个体以概率交换各自的部分染色体,得到新的两个个体;(6)变异:定义参数作为变异操作的概率,由(5)得到每个个体中的每个基因值都以概率进行变异;(7)演化:经过选择、交叉和变异操作,得到一个新的种群,对上述步骤经过给定的循环次数(maxgen)的种群演化,遗传算法终止。五、背包问题的遗传算法求解描述基于背包问题的模型(*),我们设计了针对于背包问题的染色体编码方法:将待求解的各量表示成长为的二进制字符串,j=1,2, ,n。表示物体。

9、j不放入背包内,表示物体j放入背包内。例如:111001100000111代表一个解,它表示将第1、2、3、6、7n-2,n-1,n号物体放入背包中,其它的物体则不放入。根据遗传算法的基本流程,我们确定了求解背包问题的遗传算法:步骤1、初始化过程1.1 确定种群规模popsize、杂交概率、变异概率 、染色体长度lchrom 及最大进化代数maxgen;1.2 读入背包问题的相关信息,如每个物体的重量weightj、每个物体的收益profitj和背包的容量contain,其中;1.3 取,其中表示0-1整数的均匀分布函数,即随机地生成数0或1,生成的串即可看为一个染色体个体。若不满足模型(*)。

10、的约束条件,则拒绝接受,由1.2重新生成一个新的染色体个体chrom;如果产生的染色体可行,则接受它作为种群的一名成员,经过有限次的1.2抽样后,得到popsize个可行的染色体chrom,形成新的种群。1.4 置种群的代数gen=0;步骤2、计算种群中个体适应度以及统计种群适应度情况2.1 按照下列公式计算种群中个体适应度:;公式(2)的下半部分即为适应度的惩罚函数,其中参数。2.2 按公式(3)计算种群的总体适应度, 并且按照排序的方法统计出种群中的最大、最小适应度的染色体个体,分别标记为maxpop、minpop;步骤3、选择操作3.1 生成一个随机数rand_Number,要求;3.2。

11、 按照赌轮法选择个体,赌轮法的算法描述如下:int selection( )i=0; /个体的编号sum=0; /部分个体适应度的累加和/根据随机数和群体的总适应度确定赌轮的位置wheel-pos=rand_Number*sufitness; while sum#include #include #include #include #include / 重要常量参数#define popsize 200 /种群的规模#define pc 0.618 /杂交概率#define pm 0.03 /变异概率#define lchrom 50 /染色体长度#define maxgen 1000 /最大。

12、进化代数struct populationunsigned int chromlchrom; /染色体double weight; /背包重量double fitness; /适应度unsigned int parent1,parent2,cross; /双亲、交叉点;/新生代种群、父代种群struct population oldpoppopsize,newpoppopsize; /背包问题中物体重量、收益、背包容量int weightlchrom,profitlchrom,contain; /种群的总适应度、最小、最大、平均适应度 double sumfitness,minfitness,。

13、maxfitness,avgfitness;/计算适应度时使用的 惩罚函数系数double alpha;/一个种群中最大和最小适应度的个体int minpop,maxpop; /* 读入背包信息,并且计算惩罚函数系数 */void read_infor()FILE *fp;int j;/获取背包问题信息文件if (fp=fopen(knapsack.txt,r)=NULL) /读取文件失败AfxMessageBox(The file is not found,MB_OK,NULL);return;/读入物体收益信息for (j=0;jmaxfitness)&(int)(tmp_fit*10)%10=0)maxfitness=popi.fitness;maxpop=i;/选择种群中最小适应度的个体if (tmp_fitoldmax)report(newpop,gen);/保存新生代种群的信息到老一代种群信息空间memcpy(&oldpop,&newpop,popsize*sizeof(struct population);printf(It is over.);getch(。

01背包问题c语言,遗传算法的0-1背包问题(c语言)相关推荐

  1. C语言动态规划法解决0/1背包问题(详细解答)

    动态规划法解决0/1背包问题(详细解答) 首先让我们回顾一下动态规划法的使用规则: 一..动态规划法的实现思路: 1.划分子问题:将元问题分解为若干个子问题,每一个子问题对应一个决策,并且子问题之间具 ...

  2. r 语言ylim = c(0 1),小白R语言数据可视化进阶练习一

    原标题:小白R语言数据可视化进阶练习一 作者:路遥马亡R语言中文社区专栏作者 知乎ID: https://zhuanlan.zhihu.com/c_135409797 00 布局参数 先介绍一个布局参 ...

  3. c语言字符为0和1,//C语言:将一个由字符0和1组成的表示二进制数的字符串,转换成相应的十进制数返回。...

    //函数fun:将一个由字符0和1组成的表示二进制数的字符串,转换成相应的十进制数返回. #include #pragma warning (disable:4996) #define N 16 /* ...

  4. c语言自动输入0到1000,c语言实现输入一组数自动从大到小排列

    #include main() { int x; printf("请输入要排序数字个数:"); scanf("%d",&x); int i,j,k,a, ...

  5. c语言 vc++6.0 插入图片,C语言VC++6.0环境中如何插入图片

    getimage / putimage / loadimage / saveimage 这一组命令和 IMAGE 对象可以实现图像处理的相关功能,下面逐个介绍. (有点类似 tc 中的 imagesi ...

  6. C语言余数为0输出intact,C语言中的宏是怎么展开的?

    展开流程伪码:(自己总结的,不一定对) //loop: //将实参代入文本中 //if 在某个实参之前有符号"#"(字符串化)或"##"(连接)then // ...

  7. c语言如何输出0,怎么用c语言打印逆置整数,零不输出?

    MinRam 只是大概思路,代码并未作测试.存储后输出:按照整数来处理:int num,temp; scanf("%d",&num); if(num<0){      ...

  8. c语言sleep定时0.1,求助C语言Sleep延迟输入问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 printf(" ######################################\n"); for(i=0;i<= ...

  9. TDT2 多语言本文 4.0 版 TDT3 多语言本文 2.0 版

    http://tc2sc.mojolingo.xuite.net/m2m-0000/projects.ldc.upenn.edu/TIDES/index.html 转载于:https://www.cn ...

  10. 0/1背包问题——动态规划、回溯、分支限界法对比

    0/1背包问题--动态规划.回溯.分支限界法对比 2017.12.19 20:42:02 字数 3713 阅读 2820 目录 1.问题描述 1.1 问题描述 1.2 问题的数学表示(规划类问题,此种 ...

最新文章

  1. R语言使用ggpubr包的ggdotplot函数可视化水平棒棒糖图(自定义分组数据点色彩、自定义调色板、在两端添加点图的线段segments、整体排序从大到小、自定义数据点的大小、添加数值标签)
  2. 服务器网页500错误修复工具,HTTP500错误是什么?如何修复
  3. 什么是CPython
  4. VTK:图片之ImageExport
  5. 分布式数据库基础:分布式事务相关概念介绍
  6. 钻石2 D2 让你的diamond2待机2天,甚至2天以上的方法(绝对不是购买电池)
  7. 博客园电子月刊第三期出炉
  8. SpringBoot2.0 基础案例(11):配置AOP切面编程,解决日志记录业务
  9. Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy
  10. 【文本摘要】BottleSum——文本摘要论文系列解读
  11. JavaWeb图书管理系统.rar(毕业设计(论文)+毕业设计指导书+大学毕业设计任务书+图书管理系统+毕业论文答辩)
  12. 大文件编辑查看工具推荐:ultraedit、logviewer。文件太大notepad++等编辑工具无法打开解决办法
  13. 矩阵的Cholesky分解的Matlab简洁实现
  14. 骁龙cpu linux内核,高通骁龙888 SoC在Linux 5.12内核才被支持,以往怎么兼容的?
  15. linux查看本机ip地址
  16. 计算机与网络时间同步,电脑时间同步,教您怎么让电脑时间和网络时间同步
  17. 树莓派有线网络设置_树莓派的基本网络配置
  18. 实现1V1音视频实时互动直播系统 十二、第九节 直播客户端的实现
  19. 火车票报销凭证打印跑政通
  20. CSS-0813(重复性)线性/径向渐变-过渡属性transition-变形属性transform变形位移旋转缩放倾斜视域函数perspective变形原点三角形居中方法

热门文章

  1. 量子计算机预测未来,这台量子计算机能预测16种不同的未来!
  2. 易邮服务器com组件注册失败,com组件注册失败有什么办法可以解决
  3. 定时器 Corn时间表达式
  4. 中职计算机办公自动化教学,中职学校计算机办公自动化教学现状分析.pdf
  5. leetcode题目总结
  6. Java删除文件夹下所有文件
  7. verycd下载资源
  8. 一文讲透蓝牙、WiFi、ZigBee无线通信模块
  9. JavaScript制作简易的《飞机大战》
  10. 一张浓缩大学生活的顶级报(转载)