分支限界法解01背包问题.pdfVIP

  • 18
  • 0
  • 约1.26万字
  • 约 11页
  • 2021-11-12 发布于湖北
  • 举报
分支限界法解 01 背包问题 学院:网研院 姓名: XXX 学号: 2013XXXXXX 一、 分支限界法原理 分支限界法类似于回溯法, 也是在问题的解空间上搜索问题解的算法。一 般情况下, 分支限界法与回溯法的求解目标不同。 回溯法的求解目标是找出解空 间中满足约束条件的所有解; 而分支限界法的求解目标则是找出满足约束条件的 一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解, 即在某种意义下的最优解。 由于求解目标不同, 导致分支限界法与回溯法对解空间的搜索方式也不相同。 回溯法以深度优先的方式搜索解空间, 而分支限界法则以广度优先或以最小耗费 优先的方式搜索解空间。 分支限界法的搜索策略是, 在扩展结点处, 先生成其所有的儿子结点 ( 分支 ) , 然后再从当前的活结点表中选择下一扩展结点。为了有效地选择下一扩展结点, 加速搜索的进程,在每一个活结点处,计算一个函数值 ( 限界 ) ,并根据函数值, 从当前活结点表中选择一个最有利的结点作为扩展结点, 使搜索朝着解空间上有 最优解的分支推进,以便尽快地找出一个最优解。 常见的分支限界法有如下两种: 队列式 (FIFO)分支限界法:按照先进先出原则选取下一个节点为扩展节点。 活结点表是先进先出队列。 FIFO分支限界法搜索策略: 一开始,根结点是唯一的活结点,根结点入队。 从活结点队中取出根结点后,作为当前扩展结点。 对当前扩展结点,先从左到右地产生它的所有儿子,用约束条件检查, 把所有满足约束函数的儿子加入活结点队列中。 再从活结点表中取出队首结点 (队中最先进来的结点)为当前扩展结点, 重复上述过程,直到找到一个解或活结点队列为空为止。 LC (least cost )分支限界法(优先队列式分支限界法):按照优先队列中 规定的优先级选取优先级最高的节点成为当前扩展节点。 活结点表是优先权队列, LC分支限界法将选取具有最高优先级的活结点出队列,成为新的扩展节点。优 先队列式分支限界法搜索策略: 对每一活结点计算一个优先级(某些信息的函数值); 根据这些优先级从当前活结点表中优先选择一个优先级最高(最有利) 的结点作为扩展结点,使搜索朝着解空间树上有最优解的分支推进,以 便尽快地找出一个最优解。 再从活结点表中下一个优先级别最高的结点为当前扩展结点,重复上述 过程,直到找到一个解或活结点队列为空为止。 二、 01 背包问题简介 01 背包问题假设有一个容量为 c 的背包,有 n 件物品,每件物品有重量 w 和价值 v ,求解怎样往背包里装物品能够在不超出背包容量 c 的情况下获得最大 价值 (本实验中物品的 w 和 v 都是大于 0 的实数,可以是整数也可以是浮点数) 。 三、 FIFO分支限界法解 01 背包问题 1. 算法 输入背包容量 capacity 、物品数量 count 、物品的重量数组 weights 和物品的价值数组 values ,根据物品单位价值( value/weight )从 大到小构造一个新数组,数组元素 (OriginNode) 有 weight 、value 和 valuePerWeight 属性,根据该排序数组构造问题的解空间树(完 全二叉树)

文档评论(0)

1亿VIP精品文档

相关文档