目录

  • 一、回顾整数规划的求解
  • 二、分支定界法介绍
    • 1.  是什么
    • 2.  求解思想
    • 3.  求解步骤
  • 三、python实现求解
  • 参考资料

一、回顾整数规划的求解

整数规划可以使用单纯形法进行求解(可以参考上篇博客,传送门),求解的结果可能并不是整数。但是在实际问题中,往往很多结果需要的是整数解,比如排班问题,生产车间问题等,因此整数规划也需要我们掌握求解方法。

二、分支定界法介绍

1.  是什么

分枝定界法是由学者查理德·卡普(Richard M.Karp)在20世纪60年代发明,该方法把问题的可行解展开如树的分枝,再经由各个分枝中寻找最佳解。
       分枝定界法也能够使用在混合整数规划问题上,其为一种系统化的解法,一般用单纯形法解出线性规划最佳解后,将非整数值的决策变量分割成最接近的两个整数,加入原问题中,形成两个子问题(或分枝)分别求解,如此便可求得目标函数的上限(上界)或下限(下界),从而寻得最佳解。

2.  求解思想

在每次分支后,对凡是超出定义域的那些子集不再做进一步分支。这样,解的许多子集(即搜索树上的许多结点)就可以不予考虑了,从而缩小了搜索范围。一直重复分支的过程直到找出可行解为止,该可行解的值不大于任何子集的界限。具体的求解思路可以参考下图。

3.  求解步骤

分枝定界法求解步骤如下所述:

  • (1) 如果问题的目标为最小化,则设定最优解的值Z=∞;
  • (2) 根据分枝法则(Branching rule),从尚未被遍历(Fathomed)且需要变为整数的节点(局部解)中选择一个节点,并在此节点的下一阶层中分为几个新的分支。一般分为两个新的分支,分别是对该节点的其中一个决策变量进行向上取整和向下取整;
  • (3) 对每一个新分枝出来的节点验证是否满足定义域,若满足,则可以继续进行分支,否则不再考虑该分支,计算每一个新分枝出来的节点的下限值(Lower bound,LB);
  • (4) 判断当前分支的下限值是否小于Z值,若前者较小,则需更新Z值,以此分支为可行解的值,否则此节点不可能包含最优解;
  • (5) 判断是否仍有尚未被遍历且需要变为整数的节点,如果有,则进行步骤(2),如果没有,则算法停止,并得到最优解。

分支定界算法可以求得最优解、平均速度快。但是要存储很多叶子结点的限界和对应的耗费矩阵,花费很多内存空间。

三、python实现求解

上述的手写求解步骤其实可以进行程序化,代码附在这里显得很冗长,可以参考github上的代码版本-传送门。

参考资料

  1. 熊伟.运筹学(第3版).北京:机械工业出版社,2014:81
  2. 司守奎, 孙兆亮..数学建模算法与应用.第2版:国防工业出版社,2015

分支定界法求解整数规划相关推荐

  1. MATLAB实现分支定界法求解整数规划

    利用MATLAB实现分支定界法求解整数规划 classdef Model < matlab.mixin.CopyablepropertiesintconlbubsolverAineqbineqA ...

  2. 数学建模 分支限界算法求解整数规划原理以及编程实现

    引入 线性规划问题(松弛问题) 图解法: 使用图解法求出最优解,再使用四舍五入求出的整数解不满足条件 完全枚举法(穷举法):找出集合内所有满足条件的整数点,再带入不等式中,看是否有最优解 分支限界法 ...

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

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

  4. 数学建模 割平面算法求解整数规划基本原理与编程实现

    基本思想 松弛问题:线性规划 割掉一块全部都是小数的区域(这一部分取不到整数) 案例 1)横坐标x1,纵坐标x2 2)蓝色小三角形的区域:x2:(1,7/4) x1:(0,3/4) 这块区域,x1与x ...

  5. matlab割平面方法程序,用割平面法求解整数规划问题max z=x1 x2, s.t.-x1 x2

    用lingo求解0-1整数规划的程序? min=x1+x2+x3;x1+x2>1;x2+x3>1;@bin(x1);@bin(x2);@bin(x3); Lingo求解0-1规划的问题 l ...

  6. 拉格朗日松弛求解整数规划浅析(附Python代码实例)

    运筹优化博士,只做原创博文.更多关于运筹学,优化理论,数据科学领域的内容,欢迎关注我的知乎账号:https://www.zhihu.com/people/wen-yu-zhi-37 拉格朗日松弛是一种 ...

  7. SCIP求解整数规划实例

    SCIP求解整数规划实例 使用开源的求解器scip 以python接口求解整数规划问题demo 整数规划问题: minZ=5x1+6x2+23x3+5x4+24x5+6x6+23x7+5x8{2∗x1 ...

  8. 数学建模学习笔记(十六)lingo求解整数规划

    之前没用过lingo,这次遇到一个线性整数规划的问题,尝试用了lingo求解,发现上手还是很容易的.将题目和求解放置在此,以便查阅~ 问题: 使用lingo求解,输入以下代码 model: min=1 ...

  9. 数学建模 匈牙利算法求解整数规划基本原理与编程实现

    投资问题(0-1规划) 匈牙利算法求解0-1规划问题 解答: 项目之间是互斥关系,所以使用x1+x2+x3=1; 项目5是以项目1为先验条件,所以x5<=x1,意味着x1=1时,x5=1或0 , ...

  10. 割平面算法求解整数规划

    文章目录 引入 基本步骤 算法流程图 例题 参考资料 引入 基本步骤 算法流程图 例题 注:直接调算法,套模板即可 参考资料 公众号"科研交流"

最新文章

  1. k8s mysql operator_将 MySQL 通过 presslabs/mysql-operator 部署到 k8s 内部
  2. 清华90后女学霸范楚楚将加入MIT任助理教授,面试宝典分享!
  3. [转[c++]从int转换成string
  4. [elixir! #0037] Agent 小传
  5. boost::mp11::mp_all相关用法的测试程序
  6. Dragonboard 410c fastboot刷入android
  7. 组合商品和商品套餐(套装)的设计
  8. 想做DBA,多租户管理你一定要知道这些
  9. 如何理解java反射_如何理解java反射?
  10. 构建幸福婚姻需明白四件事
  11. 使用 Python 批量下载喜马拉雅有声书音频
  12. winserver2012安装语言包
  13. 服务器怎么用iso文件装系统,ISO镜像文件能直接安装吗 怎么使用iso镜像文件安装系统...
  14. Linux安装mariaDB以及修改Mariadb存储路径
  15. GF1_WFV(高分一号宽幅)GF6_WFV(高分六号宽幅)GF4(高分四号)CB04(中巴04星)免费下载方式简介
  16. 显卡,就是一个男人对自己的交待
  17. 电影渲染 cinematic 3d rendering
  18. 如何从Linux下载一个文件到本地
  19. 分享:Java 开发精美艺术二维码
  20. CobaltStrike(钓鱼攻击工具)

热门文章

  1. 设置linux开机自动运行某条命令或程序和安装jdk(jar)
  2. 单片机课设中期报告_毕业论文--中期检查情况报告(40页)详解.doc
  3. Windows XP下用Modem发送传真(ZZ)
  4. solidworks装配体改为柔性_SolidWorks零件改名后与工程图关联教程
  5. SQL Server 2008 R2每天自动备份数据库
  6. SqlServer2008创建用户及授予权限
  7. 关于Jabber客户端
  8. 《网络协议从入门到底层原理》学习笔记
  9. 耐福-NTP8849音频功放芯片有哪些功能?
  10. FileSplit简单使用