分枝定界法解0/1背包问题

关键词:分支定界、0-1背包

分枝定界法简介

分枝定界法按照树形结构来组织解空间,展开节点后,有两种策略:

策略一、把节点加入 FIFO 队列当中;

策略二、把节点加入到堆中,按照最小消耗或者最大消耗来选择下一个展开节点

感悟

分枝定界法是一类能确保搜索到全部可行解的解空间的一类方法。得到全部的解以后,再由后续程序自行觉得。

分枝定界法与回溯法的区别

分枝定界法 回溯法
搜索解空间的方法是 BFS(广度优先) 搜索解空间的方法是 DFS(深度优先)
算法搜索的解空间大,消耗的内存多 算法搜索的解空间大,消耗的内存少

0/1背包问题

有背包问题形式化描述如下:
\[ n = 3 \\ weights = [20, 15, 15] \\ values = [40, 25, 25] \\ constraint = 30 \]
用分枝定界法,代码实现如下:

# -*- coding:utf8 -*-
import copy
from collections import deque# 用分枝定界法解决0/1背包问题
def brunch_bound(w, p, c):plan = list()buffer = deque([[copy.copy(w), [], []]])  # [waiting, explored, values]while len(buffer):cur = buffer.popleft()for i in range(0, len(cur[0])):weight = cur[0][i]n = copy.deepcopy(cur)n[0].remove(weight)n[1].append(weight)n[2].append(p[i])if sum(n[1]) > c:continue  # overloadedbuffer.append(copy.deepcopy(n))plan.append(cur)return planif __name__ == '__main__':w = [20, 15, 15]p = [40, 25, 25]c = 30plan = brunch_bound(w,p,c)l = sorted(plan, key=lambda x:sum(x[2]), reverse=True)  # l[0] is the most value planfor e in l:print(e)

输出:

[[20], [15, 15], [25, 25]]  #显然,这是最优方案
[[20], [15, 15], [25, 25]]
[[15, 15], [20], [40]]
[[20, 15], [15], [25]]
[[20, 15], [15], [25]]
[[20, 15, 15], [], []]

解释

copy.copy 是浅拷贝,子对象不会被拷贝

copy.deepcopy 是深拷贝

转载于:https://www.cnblogs.com/fengyubo/p/9609537.html

分枝定界法解0/1背包问题相关推荐

  1. Python整数规划—分枝定界法

    分枝定界法可用于解纯整数或混合的整数规划问题.在本世纪六十年代初由 Land Doig 和 Dakin 等人提出的.由于这方法灵活且便于用计算机求解,所以现在它已是解 整数规划的重要方法.目前已成功地 ...

  2. Python 实现整数线性规划:分枝定界法(Branch and Bound)

    今天做作业,要实现整数线性规划的分枝定界法算法.找了一些网上的博客,发现都很屎,感觉自己写的这个比较清楚.规范,所以在此记录.如有错误,请指正. from scipy.optimize import ...

  3. python混合整数线性规划_Python 实现整数线性规划:分枝定界法(Branch and Bound)...

    今天做作业,要实现整数线性规划的分枝定界法算法.找了一些网上的博客,发现都很屎,感觉自己写的这个比较清楚.规范,所以在此记录.如有错误,请指正. from scipy.optimize import ...

  4. 分枝定界法求哈密尔登回路问题的由表及里

    刻苦努力的奋斗,终于有了学习成果,虽然写出的仅仅是非常拙略,功能单一的,简单的小程序代码,但不失为在代码学习的进步.总算是有了含有自己智慧在其中的结晶.其实这段代码能够顺利完成,虽然是独立完成,但终究 ...

  5. 分枝定界法的一般步骤

    分枝定界法的一般步骤 设有最大化的整数规划问题A ,与它相对应的松弛问题为 B. (1)先不考虑原问题的整数约束,求解相应的松弛问题.用图解法或单纯形法求得最优解,记为 . (2)若求得的最优解 刚好 ...

  6. 【数学建模入门】整数规划求最优解|分枝定界法求最优解

    文章目录 整数规划 分枝定届法 `intprog` `branchbound` 整数规划 intprog() function [x,fval,status] = intprog(f,A,B,I,Ae ...

  7. 分支定界 matlab,使用MATLAB实现分枝定界法求解整数规划的详细资料说明

    分支定界法是一种求解离散最优化问题的计算分析方法.它是由Land Doig和Dakin等人在20世纪60年代初提出的.分支定界法可求纯整数或混合整数线性规划问题,求解方法由分支和定界组成." ...

  8. 整数规划之分枝定界法

    整数规划之分枝界定法 引子: 题目分析: 这个整数规划问题相当于是在简单的线性规划问题上增加了决策变量为整数的限制条件.如果没有这个限制条件,那我们用linprog函数很容易解决如下 >> ...

  9. 算法分支定界法C语言程序,常用算法大全-分枝定界

    任何美好的事情都有结束的时候.现在我们学习的是本书的最后一章.幸运的是,本章用到的大部分概念在前面各章中已作了介绍.类似于回溯法,分枝定界法在搜索解空间时,也经常使用树形结构来组织解空间(常用的树结构 ...

最新文章

  1. LeetCode简单题之重塑矩阵
  2. SQL Server各种日期计算方法
  3. Lookup Relationship与Master-Detail Relationship的关系 || formula的特性|| picklist在代码编写时的注意事项
  4. OpenGL 渲染管线理论
  5. 设备树语法和多任务处理
  6. 解决“终端服务器超过了最大允许连接数”
  7. 评分卡模型开发(八)--主标尺设计及模型验证
  8. 面向对象组件开发一个弹窗
  9. golang高级部分
  10. 三维空间中点到点、点到直线、点到平面的距离计算
  11. 【jszip3.2.1 解压文件乱码】
  12. js图片压缩工具img-compressor的使用
  13. Eclipse 下Struts 2.1.6+ 和spring 2.5.5 整合
  14. 一加8T安装的EdXposed插件导致手机无限重启的解决办法
  15. 活动图求最少时间和松弛时间
  16. 项目管理~基于禅道敏捷开发的详细流程图,关键节点及描述,诠释敏捷开发实施细节
  17. matlab离散点数字微分,MATLAB数值积分与微分
  18. PDF Search for Mac(PDF文件搜索工具)
  19. NetBIOS、WINS、DNS的联系和区别
  20. 激活 window10 操作系统

热门文章

  1. 32位linux时间戳,32位unix时间戳哪一年用尽
  2. Web前端工程师,互联网行业,炙手可热的翘楚!
  3. 前端都该懂的浏览器工作原理,你懂了吗?
  4. JSTL中的Core标签库
  5. python建立sqlite数据库_5分钟快速入门,用Python做SQLite数据库开发,附代码适合初学...
  6. clock函数返回精度都是上万的_Excel常用函数每日一讲 VLOOKUP函数
  7. df 和 ll 等命令无响应处理
  8. Linux学习笔记---使用MfgTool工具烧写自己的系统(二)
  9. FPGA学习笔记---Verilog HDL 可综合语句和不可综合语句汇总
  10. FPGA学习笔记---利用连续赋值语句延时功能实现按键消抖