遗传算法的01背包问题(c语言)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于遗传算法得0-1背包问题得求解

摘要:

一、前言

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

其计算复杂度为

)2(O n ,传统上采用动态规划来求解。设w[i]就是经营活动 i 所需要得资源消耗,M 就是所能提供得资源总量,p[i]就是人们经营活动i 得到得利润或收益,则背包问题就就是在资源有限得条件下, 追求总得最大收益得资源有效分配问题。二、问题描述

背包问题( Knapsack Problem)得一般提法就是:已知n 个物品得重量(weight)及其价值(或收益profit)分别为0>i w 与0>i p ,背包得容量(contain)假设设为0>i c ,如何选择哪些物品装入背包可以使得在背包得容量约束限制之内所装物品得价值最大?该问题得模型可以表示为下述0/1整数规划模型:

目标函数:∑==n

i i i n x c x x x f 121),,(max

⎪⎩⎪⎨⎧=∈≤∑=)

,2,1(}1,0{t .s 1n i x p x w i n i i i i (*) 式中i x 为0-1决策变量,1=i x 时表示将物品i 装入背包中,0=i x 时则表示不将其装入背包中。

三、求解背包问题得一般方法

解决背包问题一般就是采取动态规划、递归回溯法与贪心方法。动态规划可以把困难得多阶段决策变换为一系列相互联系比较容易得单阶段问题。对于背包问题可以对子过程用枚举法求解,而且约束条件越多,决策得搜索范围越小,求解也越容易。它得主要缺点就是用数值方法求解时会随着状态变量得个数呈指数级得增长,往往对于求解背包问题得实际问题就是不现实得。使用递归回溯法解决背包问题得优点在于它算法思想简单, 而且它能完全遍历搜索空间,肯定能找到问题得最优解;但就是由于此问题解得总组合数有n 2个,因此,随着物件数 n 得增大,其解得空间将以n

2级增长,当 n 大到一定程度上,用此算法解决背包问题将就是不现实得。使用贪心方法求解时计算得复杂度降低了很多,但就是往往难以得到最优解,有时所得解与最优解相差甚远。因此, 我们可以探索使用遗传算法解决物件数较大得背包问题。四、遗传算法简介

遗传算法( Genetic Algorithms,GA) 就是在1975 年首次由美国密西根大学得D 。J 。Holland 教授与她得同事们借鉴生物界达尔文得自然选择法则与孟德尔得遗传进化机制基础之上提出得。经过近30年得研究、应用,遗传算法已被广泛地应用于函数优化、机器人系统、神经网络学习过程、模式识别、图象处理、工业优化控制等领域。遗传算法就是将问题得每一个可能性解瞧作就是群体中得一个个体(染色

体),并将每一个染色体编码成串得形式,再根据预定得目标函数对每个个体进行评价,给出一个适应值。算法将根据适应度值进行它得寻优过程,遗传算法得寻优过程就是通过选择、杂交与变异三个遗传算子来具体实现得。它得搜索能力由选

择算子与杂交算子决定,变异算子则保证了算法能够搜索到问题空间得尽可能多得点,从而使其具有搜索全局最优得能力。遗传算法得高效性与强壮性可由Holland提出得模式定理( Schema Therem) 与隐式并行性得以解释。在遗传算法中,定义长度较短、低阶且适应值超过平均适应值得模式在群体中数目得期望值按指数递增,这个结论称为遗传算法得基本定理。遗传算法就是通过定义长度短、确定位数少、适应度值高得模式得反复抽样、组合来寻找最佳点,称这些使遗传算法有效工作得模式为积木块,就是遗传算法构造答案得基本材料。但归根到底,要使遗传算法有效工作必须按照遗传算法得模式定理(或积木块假设) 根据具体问题设计合理得编码方案。

在运行遗传算法程序时,需要对一些参数作事先选择,它们包括种群得大小、染色体长、交叉率、变异率、最大进化代数等,这些参数对GA 得性能都有很重要

p = 0、4 得影响。在试验中参数一般选取如下:种群大小N= 20~100 ,交叉概率

c

p = 0、001~0、1 ,最大进化代数maxgen = 100~500。

~0、9 ,变异概率

m

遗传算法就是具有“生成+检测”得迭代过程得搜索算法。它得基本处理流程如图1所示。

图1、遗传算法得基本流程

遗传算法得基本流程描述如下:

(1)编码:将解空间得解数据进行二进制编码,表达为遗传空间得基因型串(即

染色体)结构数据,如将数据9编码为“1001”;(2)初始化种群:定义整数pop_size 作为染色体得个数,并且随机产生

pop_size 个染色体作为初始种群;(3)评估种群中个体适应度:评价函数对种群中得每个染色体(chromosome)求

得其个体适应度)(fitness f i ;

(4)选择:选择把当前群体中适应度较高得个体按某种规则或者模型遗传到下

一代种群中,这里所用得规则就是:染色体在种群中被选择得可能性与其个体得适应度得大小成正比;(5)交叉:定义参数c p 作为交叉操作得概率,由(4)选择得到得两个个体以概率

c p 交换各自得部分染色体,得到新得两个个体;(6)变异:定义参数m p 作为变异操作得概率,由(5)得到每个个体中得每个基因

值都以概率m p 进行变异;

(7)演化:经过选择、交叉与变异操作,得到一个新得种群,对上述步骤经过给定

得循环次数(maxgen)得种群演化,遗传算法终止。五、背包问题得遗传算法求解描述

基于背包问题得模型(*),我们设计了针对于背包问题得染色体编码方法:将待求解得各量X 表示成长为n 得二进制字符串]j [x ,j=1,2, …,n 。0]j [x =表示物体j 不放入背包内,1]j [x =表示物体j 放入背包内。例如:111001100…000111代表一个解,它表示将第1、2、3、6、7…n-2,n-1,n 号物体放入背包中,其它得物体则不放入。根据遗传算法得基本流程,我们确定了求解背包问题得遗传算法:

步骤1、初始化过程

确定种群规模popsize 、杂交概率c p 、变异概率m p 、染色体长度lchrom

相关文档
最新文档