




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于遗传算法的 0 1 背包问题的求解 摘要 一 前言一 前言 组合优化问题的求解方法研究已经成为了当前众多科学关注的焦点 这不 仅在于其内在的复杂性有着重要的理论价值 同时也在于它们能在现实生活中 广泛的应用 比如资源分配 投资决策 装载设计 公交车调度等一系列的问 题都可以归结到组合优化问题中来 但是 往往由于问题的计算量远远超出了 计算机在有效时间内的计算能力 使问题的求解变为异常的困难 尤其对于NP 完全问题 如何求解其最优解或是近似最优解便成为科学的焦点之一 遗传算法已经成为组合优化问题的近似最优解的一把钥匙 它是一种模拟 生物进化过程的计算模型 作为一种新的全局优化搜索算法 它以其简单 鲁 棒性强 适应并行处理以及应用范围广等特点 奠定了作为21世纪关键智能计 算的地位 背包问题是一个典型的组合优化问题 在计算理论中属于NP 完全问题 其计算复杂度为 传统上采用动态规划来求解 设w i 是经营活动 i 所 2 O n 需要的资源消耗 M是所能提供的资源总量 p i 是人们经营活动i得到的利润 或收益 则背包问题就是在资源有限的条件下 追求总的最大收益的资源有效 分配问题 二 问题描述 背包问题 Knapsack Problem 的一般提法是 已知n个物品的重量 weight 及其价值 或收益profit 分别为和 背包的容量0 i w0 i p contain 假设设为 如何选择哪些物品装入背包可以使得在背包的容0 i c 量约束限制之内所装物品的价值最大 该问题的模型可以表示为下述0 1整数规划模型 目标函数 n i iin xcxxxf 1 21 max 2 1 1 0 t s 1 nix pxw i n i iii 式中为 0 1 决策变量 时表示将物品 装入背包中 时则表示不将 i x1 i xi0 i x 其装入背包中 三 求解背包问题的一般方法 解决背包问题一般是采取动态规划 递归回溯法和贪心方法 动态规划可 以把困难得多阶段决策变换为一系列相互联系比较容易的单阶段问题 对于背 包问题可以对子过程用枚举法求解 而且约束条件越多 决策的搜索范围越小 求解也越容易 它的主要缺点是用数值方法求解时会随着状态变量的个数呈指 数级的增长 往往对于求解背包问题的实际问题是不现实的 使用递归回溯法解决背包问题的优点在于它算法思想简单 而且它能完全 遍历搜索空间 肯定能找到问题的最优解 但是由于此问题解的总组合数有 个 因此 随着物件数 n 的增大 其解的空间将以级增长 当 n 大到一 n 2 n 2 定程度上 用此算法解决背包问题将是不现实的 使用贪心方法求解时计算的复杂度降低了很多 但是往往难以得到最优解 有时所得解与最优解相差甚远 因此 我们可以探索使用遗传算法解决物件数 较大的背包问题 四 遗传算法简介 遗传算法 Genetic Algorithms GA 是在1975 年首次由美国密西根大学的 D J Holland 教授和他的同事们借鉴生物界达尔文的自然选择法则和孟德尔 的遗传进化机制基础之上提出的 经过近30年的研究 应用 遗传算法已被广 泛地应用于函数优化 机器人系统 神经网络学习过程 模式识别 图象处理 工业优化控制等领域 遗传算法是将问题的每一个可能性解看作是群体中的一个个体 染色体 并将每一个染色体编码成串的形式 再根据预定的目标函数对每个个体进行评 价 给出一个适应值 算法将根据适应度值进行它的寻优过程 遗传算法的寻 优过程是通过选择 杂交和变异三个遗传算子来具体实现的 它的搜索能力由 选择算子和杂交算子决定 变异算子则保证了算法能够搜索到问题空间的尽可 能多的点 从而使其具有搜索全局最优的能力 遗传算法的高效性和强壮性可 由Holland提出的模式定理 Schema Therem 和隐式并行性得以解释 在遗传算 法中 定义长度较短 低阶且适应值超过平均适应值的模式在群体中数目的期 望值按指数递增 这个结论称为遗传算法的基本定理 遗传算法是通过定义长 度短 确定位数少 适应度值高的模式的反复抽样 组合来寻找最佳点 称这 些使遗传算法有效工作的模式为积木块 是遗传算法构造答案的基本材料 但 归根到底 要使遗传算法有效工作必须按照遗传算法的模式定理 或积木块假设 根据具体问题设计合理的编码方案 在运行遗传算法程序时 需要对一些参数作事先选择 它们包括种群的大 小 染色体长 交叉率 变异率 最大进化代数等 这些参数对GA 的性能都 有很重要的影响 在试验中参数一般选取如下 种群大小N 20 100 交叉概 率 0 4 0 9 变异概率 0 001 0 1 最大进化代数maxgen c p m p 100 500 遗传算法是具有 生成 检测 的迭代过程的搜索算法 它的基本处理流程 如图 1 所示 初始化种群 评估种群中个体适应度 选 择 编 码 交 叉 变 异 演 化 图1 遗传算法的基本流程 遗传算法的基本流程描述如下 1 编码 将解空间的解数据进行二进制编码 表达为遗传空间的基因型串 即染色体 结构数据 如将数据9编码为 1001 2 初始化种群 定义整数 pop size 作为染色体的个数 并且随机产生 pop size 个染色体作为初始种群 3 评估种群中个体适应度 评价函数对种群中的每个染色体 chromosome 求得其个体适应度 fitnessfi 4 选择 选择把当前群体中适应度较高的个体按某种规则或者模型遗传到 下一代种群中 这里所用的规则是 染色体在种群中被选择的可能性与 其个体的适应度的大小成正比 5 交叉 定义参数作为交叉操作的概率 由 4 选择得到的两个个体 c p 以概率交换各自的部分染色体 得到新的两个个体 c p 6 变异 定义参数作为变异操作的概率 由 5 得到每个个体中的每 m p 个基因值都以概率进行变异 m p 7 演化 经过选择 交叉和变异操作 得到一个新的种群 对上述步骤经 过给定的循环次数 maxgen 的种群演化 遗传算法终止 五 背包问题的遗传算法求解描述 基于背包问题的模型 我们设计了针对于背包问题的染色体编码方 法 将待求解的各量表示成长为的二进制字符串 j 1 2 n Xn j x 表示物体 j 不放入背包内 表示物体 j 放入背包内 例如 0 j x 1 j x 111001100 100111 代表一个解 它表示将第 1 2 3 6 7 n 2 n 1 n 号 物体放入背包中 其它的物体则不放入 根据遗传算法的基本流程 我们确定了求解背包问题的遗传算法 步骤步骤 1 初始化过程 初始化过程 1 1确定种群规模 popsize 杂交概率 变异概率 染色体长度 c p m p lchrom 及最大进化代数 maxgen 1 2读入背包问题的相关信息 如每个物体的重量 weight j 每个物体的收 益 profit j 和背包的容量 contain 其中 1 lchrom 1 0j 1 3取 其中表示 0 1 整数的均匀1 lchrom 1 0j 1 0 u j x 1 0 u 分布函数 即随机地生成数 0 或 1 生成的串即可看为一个染色体个体 j x 若不满足模型 的约束条件 则拒绝接受 由 1 2 重新生成一个新 的染色体个体 chrom 如果产生的染色体可行 则接受它作为种群的一名成员 经过有限次的 1 2 抽样后 得到 popsize 个可行的染色体 chrom 形成新的种 群 1 4 置种群的代数 gen 0 步骤步骤 2 计算种群中个体适应度以及统计种群适应度情况 计算种群中个体适应度以及统计种群适应度情况 2 1 按照下列公式计算种群中个体适应度 1 1lchrom 0j j chrom j weightweight 2 containifweight containweight alpha j chrom j profit containifweight j chrom j profit fitness 1lchrom 0j 1lchrom 0j 公式 2 的下半部分即为适应度的惩罚函数 其中参数 1 0alpha 2 2 按公式 3 计算种群的总体适应度 3 i fitnesssumfitness 1popsize 0i 并且按照排序的方法统计出种群中的最大 最小适应度的染色体个体 分别 标记为 maxpop minpop 步骤步骤 3 选择操作 选择操作 3 1生成一个随机数 rand Number 要求 1 0 Nuberrand 3 2按照赌轮法选择个体 赌轮法的算法描述如下 int selection i 0 个体的编号 sum 0 部分个体适应度的累加和 根据随机数和群体的总适应度确定赌轮的位置 wheel pos rand Number sufitness while sum wheel pos sum sum fitness i fitness 为第 i 个个体的适应度 return i 1 选择了个体 i 1 3 3 重复两次操作 3 1 3 2 生成两个个体作为交叉操作的父代 步骤四 交叉操作步骤四 交叉操作 4 1 根据事先定义好的交叉概率 为了确定是否进行交叉操作 则生成 c p 0 1 的随机数 pp 若 则进行 4 2 交叉操作 否则将两个父代保留 c ppp 为下一代的两个个体 4 2 随机生成的整数作为交叉点 对两个父代个体交叉生成新 1lchrom 0 的两个个体 4 3 重复 pop size 2 次 4 1 4 2 便可生成 pop size 个个体组成新的种群 步骤五 步骤五 变异操作变异操作 5 1 根据事先定义好的变异概率 为了确定新种群上的每个个体上的每 m p 个基因是否进行变异操作 则生成 0 1 的随机数 pp 若 则进行 m ppp 5 2 变异操作 否则基因不变异 5 2 基因变异操作为原基因若为 1 则新基因则变异为 0 若原基因为 0 则 新基因变异为 0 步骤步骤 6 演化演化 6 1 按步骤 2 的方法计算新种群的个体适应度和总体适应度情况 尤其是找 出新种群中最大适应度的个体和最小适应度的个体 6 2 若旧种群的最大个体适应度 新种群的最大个体适应度 把旧种群的最 大适应度的个体代替新种群中的最小适应度的个体 否则进行 6 3 6 3 种群的代数 gen genm 1 若 gen Maxgen 则结束种群的演化 否则 转到步骤 2 六 遗传算法求解的实现 1 遗传算法的主要参数 define popsize 80 种群的规模 define pc 0 7 杂交概率 define pm 0 1 变异概率 define lchrom 50 染色体长度 define maxgen 5000 最大进化代数 double alpha 计算适应度时使用的 惩罚函数系数 2 数据结构 1 背包信息 背包问题中物体重量 收益 背包容量 int weight lchrom profit lchrom contain 2 种群个体结构体 struct population unsigned int chrom lchrom 染色体 double fitness 适应度 unsigned int parent1 parent2 cross 双亲 交叉点 3 父代种群和新生代种群 父代种群 新生代种群 struct population oldpop popsize newpop popsize pop size 为种群大小 4 适应度信息 种群的总适应度 最小 最大适应度 double sumfitness minfitness maxfitness 一个种群中最大和最小适应度的个体编号 int minpop maxpop 3 主要函数说明 1 int read infor 功能 从文件 knapsack txt 中读出背包信息 物体重量 收益 背包容量 参数 无 返回值 返回读取文件信息是否正确 流程图 见图 2 获取文件指 针成功 返回 是 否 打开文件 读出物体重量信息 读出物体收益信息 读出背包容量信息 图 2 read infor 流程图 2 double cal fit unsigned int chr 功能 种群中个体适应度计算 参数 unsigned int chr 是染色体个体的指针 根据指针所指向的染色体计算个 体的适应度 返回值 染色体个体适应度的大小 流程图 见图 3 适应度和总重量置 0 累加计算个体适应度 和背包的总重量 总重量 背包 容量 使用惩罚函数对个体 适应度进行处理 是 返回个体适应度 图 3 函数 cal fit 的流程图 3 void statistics struct population pop 功能 群体适应度的最大最小值以及其他信息 参数 struct population pop 是种群指针 根据指针所指向的种群信息统计群体 适应度的信息 返回值 无 流程图 见图 4 4 void report struct population pop int gen 功能 报告种群的适应度信息 尤其是最大个体适应度 最大适应度个体的染 色体信息 参数 struct population pop 是种群指针 根据指针所指向的种群报告群体适应 度的信息 gen 是表示此种群所在的演化代数 返回值 无 流程图 见图 5 最大最小总适应度都 置为首个体的适应度 计数器 i 1 置最大适应度的编 号为 i 总适应度 总适应度 个体 i 的适应度 i lchrom 1 是 I 的适应度 最大适应度 置最小适应度的编 号为 i I 的适应度 最小适应度 i i 1 返回 图 4 函数 statistics 的流程图 输出种群的代数 gen 输出最大适应度个体的 染色体信息 chrom 输出最大个体适应度 maxfitness 图 5 函数 report 的流程图 适应度和总重量置 0 累加计算个体适应度 和背包的总重量 总重量 背包 容量 使用惩罚函数对个体 适应度进行处理 是 返回个体适应度 5 void initpop 功能 生成初始种群 参数 无 返回值 无 流程图 见图 6 个体计数器 i 0 随机生成个体 i 染色体 计算生成个体的适应度 若背包不超重 接受个体 i i 1 i pop size 是 是 否 否 返回 图 6 函数 initpop 流程图 6 int execise double probability 功能 概率选择试验 以概率 probability 做随机试验 判断是否进行交叉或变 异操作 参数 double probability 为交叉概率或变异概率 返回值 试验是否成功 0 代表不试验成功 将不做交叉或者变异操作 1 代表 试验成功 即进行交叉或者变异操作 流程图 见图 7 生成 0 1 之间的 小数 pp 若 pp probability 返回实验成功 1返回实验不成功 0 是否 图 7 函数 execise 的流程图 7 int selection int pop 功能 在父代种群中选择个体 规则为适应度越大的个体被选择的概率越大 参数 int pop 为父代种群 返回值 父体中被选择的个体 i 流程图 见图 8 个体编号 i 0 部分适应 度之和 partsum 0 产生随机数 rand Number 计算赌轮所在位置 wheel pos partsum wheel pos 染色体 double weight 背包重量 double fitness 适应度 unsigned int parent1 parent2 cross 双亲 交叉点 新生代种群 父代种群 struct population oldpop popsize newpop popsize 背包问题中物体重量 收益 背包容量 int weight lchrom profit lchrom contain 种群的总适应度 最小 最大 平均适应度 double sumfitness minfitness 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 j lchrom j fscanf fp d 读入物体重量信息 for j 0 j lchrom j fscanf fp d 读入背包容量 fscanf fp d fclose fp 根据计算的个体重量 判断此个体是否该留在群体中 double cal weight unsigned int chr int j double pop weight 背包重量 pop weight 0 for j 0 j lchrom j pop weight pop weight chr weight j chr return pop weight 种群中个体适应度计算 double cal fit unsigned int chr int j double pop profit 适应度 pop profit 0 pop weight 0 for j 0 j lchrom j pop profit pop profit chr profit j pop weight pop weight chr weight j chr return pop profit 群体适应度的最大最小值以及其他信息 void statistics struct population pop int i double tmp fit sumfitness pop 0 fitness minfitness pop 0 fitness minpop 0 maxfitness pop 0 fitness maxpop 0 for i 1 imaxfitness maxpop i 选择种群中最小适应度的个体 if tmp fit minfitness minfitness pop i fitness minpop i 计算平均适应度 avgfitness sumfitness float popsize printf nthe max pop d maxpop printf nthe min pop d minpop printf nthe sumfitness f n sumfitness 报告种群信息 void report struct population pop int gen int j int pop weight 0 printf the generation is d n gen 输出种群的代数 输出种群中最大适应度个体的染色体信息 printf The population s chrom is n for j 0 j lchrom j if j 5 0 printf printf 1d pop maxpop chrom j 输出群体中最大适应度 printf nThe population s max fitness is d int pop maxpop fitness printf nThe knapsack weight is d n n int pop maxpop weight 生成初始种群 void initpop int i j ispop double tmpWeight 变量用于判断是否为满足条件的个体 ispop false 生成 popsize 个种群个体 for i 0 i popsize i while ispop for j 0 j lchrom j oldpop i chrom j rand 2 随机生成个体的染色体 oldpop i parent1 0 双亲 oldpop i parent2 0 oldpop i cross 0 交叉点 选择重量小于背包容量的个体 即满足条件 tmpWeight cal weight oldpop i chrom if tmpWeight contain oldpop i fitness cal fit oldpop i chrom oldpop i weight tmpWeight oldpop i parent1 0 oldpop i parent2 0 oldpop i cross 0 ispop true 此个体可以加入到种群中 ispop false 遗传操作 概率选择试验 int execise double probability double pp 如果生成随机数大于相应的概率则返回真 否则试验不成功 pp double rand 20001 20000 0 if pp probability return 1 return 0 选择进行交叉操作的个体 int selection int pop double wheel pos rand Number partsum int parent 赌轮法选择 rand Number rand 2001 2000 0 wheel pos rand Number sumfitness 赌轮大小 partsum 0 parent 0 do partsum partsum oldpop parent fitness parent parent 1 while partsum wheel pos return parent 1 交叉操作 int crossover unsigned int parent1 unsigned int parent2 int i int j cross pos if execise pc 生成交叉位置 0 1 lchrom 2 cross pos rand lchrom 1 else cross pos lchrom 1 for j 0 j cross pos j 保留复制 包括在概率选择不成功时 父体完全保留 newpop i chrom j parent1 j for j cross pos 1 j lchrom 1 j 从交叉点开始交叉 newpop i chrom j parent2 j 记录交叉位置 newpop i cross cross pos return 1 变异操作 int mutation unsigned int alleles if execise pm if alleles allel
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石大学前儿童保育学课件6-4生活制度
- 2025年家政服务职业技能竞赛试题
- 智能家居系统在社区安全中的应用-洞察阐释
- 高中美术鉴赏《没有什么不可能》教学设计
- 重庆食品钙生产线项目可行性研究报告(模板范文)
- 香料企业经营管理方案
- 2025至2030年中国玩具模型机床行业投资前景及策略咨询报告
- 2025至2030年中国牛筋索行业投资前景及策略咨询报告
- 2025至2030年中国火炎烧入钢行业投资前景及策略咨询报告
- 2025至2030年中国液压管件接头行业投资前景及策略咨询报告
- 不寐的中医护理常规
- 天津市两学校2025届生物七下期末达标检测试题含解析
- 创新设计思维
- 2024年新疆维吾尔自治区、新疆生产建设兵团中考语文试卷(含答案与解析)
- 客诉处理培训课件
- 人工智能在数据治理中的应用-洞察阐释
- 保育师(高级)职业技能鉴定参考试题(附答案)
- 古代武举考试试题及答案
- 《社会保险政策解读》课件
- 儿童言语康复试题及答案
- 2025-2030中国蓝莓市场销售策略分析与发展前景研究研究报告
评论
0/150
提交评论