【管理运筹学】第 5 章 | 整数规划 (1,问题提出与分支定界法)

文章目录

  • 引言
  • 一、整数规划问题的提出
    • 1.1 整数规划的数学模型
    • 1.2 整数规划问题的求解
  • 二、分支定界法
    • 2.1 分支与定界
    • 2.2 基本求解步骤
      • (一)初始化
      • (二)分支与分支树
      • (三)定界与剪枝
      • (四)搜索迭代
    • 2.3 分支定界法的应用
  • 写在最后


引言

整数规划是数学规划的一个重要分支,在实际中有非常广泛的应用背景,例如著名的指派问题、背包问题和旅行商问题。同时,它又是最难求解的问题之一,所以整数规划领域一直都比较活跃。


一、整数规划问题的提出

1.1 整数规划的数学模型

线性规划的一个重要假设是决策变量可取非整数的连续值,然而这一假设在很多情况下是不满足的。一般称对决策变量有整数要求的数学规划问题为整数规划问题(Integer Programming,可简称 IP )。

根据变量取值的限制形式,整数规划又分为三种:

  1. 纯整数规划(IP):所有决策变量都取整数值。
  2. 混合整数规划(MIP):部分决策变量取整数值。
  3. 0-1 整数规划(BIP):整数变量只能取 0 或 1 。其又可分为纯 0-1 和混合 0-1 整数规划。

显然,如果把整数限制去掉,整数规划就成为了线性规划,此线性规划问题称为整数规划的线性规划松弛问题

1.2 整数规划问题的求解

既然整数规划问题只是加了一个整数约束,那可不可以先求松弛问题的最优解出来,让最优解取整,就得到整数规划的最优解呢?

答案是否定的,如果只是对最优解进行取整,有可能与最优整数解相差甚远,而且有可能取整后不满足约束条件,不可行。
在这里插入图片描述

但是我们可以得到如下整数规划的最优解和松弛问题的最优解之间的关系:

对于求 m a x max max 问题,松弛问题的最优目标函数值 ≥ \geq 整数规划问题的最优目标函数值。

这也很好理解,松弛问题的可行解包含了整数规划的所有可行解,自然最优目标函数值不会小于整数规划问题的最优值。

如果线性规划松弛问题的可行域有界的话,整数规划的解是有限的。理论上讲,可以通过穷举法,把每个点都算出来比较大小。不过对于整数变量较多的问题,计算时间相当大,无法派上实际用场。

目前比较成熟的求解方法是分支定界法和割平面法,下面依次来介绍一下。


二、分支定界法

2.1 分支与定界

通过之前的讨论,我们可以发现如下几个事实:

  1. 如果求解一个整数规划的线性规划松弛问题,恰好得到最优解都取整数,那么,这个解也一定是相应整数规划问题的最优解。
  2. 如果松弛问题的最优解不是整数,那么,整数规划问题的最优解一定不会比它好。也就是说,对于求最大的问题,线性规划松弛问题的最优解值是整数规划问题解值的上界
  3. 如果求解过程中已经出现一个整数解,那么,整数规划问题的最优解值一定不会比它差。也就是说,求出的一个整数解值是整数规划问题解值的一个下界

如果用 z 0 z_0 z0 表示线性规划松弛问题的最优解值,用 z i z_i zi 表示找到的某个整数解值, z ∗ z^* z 为最优整数解值, z ‾ \underline{z} z 表示下界, z ‾ \overline{z} z 表示上界,则极大化整数规划问题的最优整数解 z ∗ z^* z 满足如下关系: z ‾ = z i ≤ z ∗ ≤ z 0 = z ‾ \underline{z}=z_i \leq z^* \leq z_0 = \overline{z} z=zizz0=z
如果能找到一种方法,不断降低上界,提高下界,最后使得上界等于下界,就可以搜索到最优整数解。分支定界法就是按照这一原理设计的。它从求解线性规划松弛问题开始,将松弛问题分成许多小的子域,这一过程称为分支;通过分支和找到更好的整数解来不断修改问题的上下界,这一过程称为定界,这就是分支定界法名称由来。

2.2 基本求解步骤

(一)初始化

对给定的整数规划问题,放松整数约束,求解它的线性松弛问题。如果得到的解是整数,该解即为整数规划的最优解。否则,所得到的线性规划松弛解作为整数规划问题最优解的初始上界。初始下界一般可设为负无穷。

(二)分支与分支树

从任何一个问题或子问题的不满足整数要求的变量中,选出一个进行处理的过程称为分支。分支通过加入一对互斥的约束将一个(子)问题分解为两个受到进一步约束的子问题,并强迫不为整数的变量进一步逼近整数值。

举个例子,比如松弛问题最优解为 x 1 = 4.81 , x 2 = 1.82 x_1=4.81,x_2=1.82 x1=4.81,x2=1.82 。可以先选中变量 x 1 x_1 x1 ,其整数部分为 4 4 4 ,则可以添加一个约束为 x 1 ≤ 4 x_1 \leq 4 x14 ,作为一个子问题。添加约束 x 1 ≥ 5 x_1 \geq 5 x15 作为新的子问题。利用第 4 章的内容,添加新约束条件可以不重新计算,分别求出两个子问题的最优解。

分支砍掉了 4 4 4 5 5 5 之间的非整数域,缩小了搜索的区域。

子问题若不满足整数要求,还可继续向下进行分支,分支可以形成一个倒置的分支树。树的根节点是线性规划松弛解,它有两个后续子节点,每个子节点又会有两个子节点,分支可继续进行下去,直到找到一个整数节点或该节点不可行时为止。
在这里插入图片描述

为方便起见,我们称前导节点称为父节点,后续节点为子节点。分支树上的每一个节点都代表一个子问题,如果该子问题还没有求解过,称该节点为打开节点,已求解过的节点称为关闭节点。

(三)定界与剪枝

通过不断地分支和求解各个子问题,分支定界发不断修正其上下界的过程称为定界。上界通常由各打开节点中最大的目标函数值来确定。,下界则由已经找到的最好的整数解来确定。求解任何一个子问题都有以下三种可能结果:

  1. 子问题无可行解。此时无需继续往下分支,该节点因为不可行而关闭。因为往下分支的子问题是添加了约束条件的,肯定同样不可行。
  2. 得到一个整数解,则不必往下分支,该节点因为有一个整数解也被关闭。如果该整数解是目前最好的整数解,则被记录下来,并且它的值作为新的下界。
  3. 得到一个非整数解时才有可能进一步向下分支,是否向下分支取决于该节点的目标函数值是否优于下界(目前最好整数解值)。分支树的一个重要特点是各节点的目标函数严格有序,即子节点的目标函数值一定不会大于父节点的目标函数值。所以只有当该节点的目标函数值大于下界时,才有必要向下分支,因为后续节点才有可能有更好的整数解。因此存在以下两种情况:
    a)目标函数值大于下界,继续向下分支。
    b)目标函数值小于等于下界,因剪枝而关闭。

(四)搜索迭代

每完成一次分支过程即完成一次搜索。在搜索的过程中,每当下界被修改后,都应检查所有打开的节点中,那些目标函数值小于新下界的节点。这些节点是要被剪掉的,因此而关闭。所有节点关闭表明搜索已经完成。如果此时没有找到任何整数解,则该问题没有整数解;否则搜索过程中得到的最好整数解就是该问题的最优解。

2.3 分支定界法的应用

光有文字这样干说有点抽象,下面结合一个具体例子来说明分支定界法的具体使用。

在这里插入图片描述
解: 先不考虑整数限制,利用单纯形法求解松弛问题 B B B,其最优单纯形表为:

在这里插入图片描述

得到最优解为: x 1 = 4.81 , x 2 = 1.82 , z 0 = 356 x_1=4.81,x_2=1.82,z_0=356 x1=4.81,x2=1.82,z0=356 显然,两个决策变量均不符合整数约束条件。此时可记 z 0 z_0 z0 为最优目标函数值的上界 z ‾ \overline{z} z 。当 x 1 = x 2 = 0 x_1=x_2=0 x1=x2=0 时,符合整数要求,此时 z = 0 z=0 z=0 ,可作为下界,因此整数规划问题 A A A 的最优解 z ∗ z^* z 满足 0 ≤ z ∗ ≤ 356 0 \leq z^* \leq 356 0z356

对问题 B B B 增加一个约束条件 x 1 ≤ 4 x_1 \leq 4 x14 ,构成问题 B 1 B_1 B1 。增加约束条件 x 1 ≥ 5 x_1 \geq 5 x15 ,构成问题 B 2 B_2 B2 。将约束条件化为等式后补加到最优单纯形表中,令新增加的松弛变量为基变量,继续求解。可得到两个子问题的最优解如下表所示。

在这里插入图片描述

问题 B 1 B_1 B1 目标函数值较好,可更新上界 z ‾ = z 1 = 349 \overline{z}=z_1=349 z=z1=349 ,由于未出现整数解,因此下界仍为 0 。因此整数规划问题 A A A 的最优解 z ∗ z^* z 满足 0 ≤ z ∗ ≤ 349 0 \leq z^* \leq 349 0z349

子问题 B 1 B_1 B1 的目标函数值较大,故先将其进行分支,添加约束条件 x 2 ≤ 2 x_2 \leq 2 x22 ,得到子问题 B 3 B_3 B3 ,添加约束条件 x 2 ≥ 3 x_2 \geq 3 x23 ,得到子问题 B 4 B_4 B4 。分别进行求解,可得到如下结果。

在这里插入图片描述

可知, B 3 B_3 B3 已经满足整数要求,不必继续分支,且为第一个整数解,故直接可更新下界为 z ‾ = z 3 = 340 \underline{z}=z_3=340 z=z3=340 。问题 B 4 B_4 B4 由于最优解值小于下界,故直接关闭。问题 B 2 B_2 B2 的最优解值大于下界,可继续进行,并更新上界为 z ‾ = z 2 = 341 \overline{z}=z_2=341 z=z2=341 。因此整数规划问题 A A A 的最优解 z ∗ z^* z 满足 340 ≤ z ∗ ≤ 341 340 \leq z^* \leq 341 340z341

对问题 B 2 B_2 B2 分别添加约束条件 x 2 ≤ 1 x_2 \leq 1 x21 x 2 ≥ 2 x_2 \geq 2 x22 ,分别构成问题 B 5 B_5 B5 B 6 B_6 B6 。进行求解,得到如下结果。

在这里插入图片描述
z 5 z_5 z5 由于小于下界,故问题 B 5 B_5 B5 关闭。问题 B 6 B_6 B6 因不可行而关闭。

至此,所有节点均已关闭,其分支过程如下图所示。
在这里插入图片描述
得到最优整数解为 x 1 = 4 , x 2 = 2 , z ∗ = 340 x_1=4,x_2=2,z^*=340 x1=4,x2=2,z=340 ,即为原问题 A A A 的最优解。


写在最后

分支定界法可求解纯整数规划和混合整数规划问题,计算量比穷举法小,更为优越。

整数规划求解方法还有割平面法,我们下一篇文章再来介绍。另外,0-1 型整数规划求解法也将会放在第 5 章中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/39074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot之HandlerInterceptor拦截器的使用

😀前言 本篇博文是关于拦截器-HandlerInterceptor的使用,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动…

Linux 多进程

目录 0x01 linux中特殊的进程 0x02 进程的标识 0x03 创建子进程 0x01 linux中特殊的进程 0号进程:idle进程,系统启动加载的进程1号进程:systemd进程,系统初始化,是所有进程的祖先进程 init2号进程:kthre…

YOLOv5白皮书-第Y6周:模型改进

📌本周任务:模型改进📌 注:对yolov5l.yaml文件中的backbone模块和head模块进行改进。 任务结构图: YOLOv5s网络结构图: 原始模型代码: # YOLOv5 v6.0 backbone backbone:# [from, number, module, args]…

每日汇评:黄金在 200 日移动平均线附近似乎很脆弱,关注美国零售销售

1、金价预计将巩固其近期跌势,至 6 月初以来的最低水平; 2、对美联储再次加息的押注继续限制了贵金属的上涨; 3、金融市场现在期待美国零售销售报告带来一些有意义的推动; 周二金价难以获得任何有意义的牵引力,并在…

Mac RN环境搭建

IOS RN ios android原生环境搭建有时候是真恶心,电脑环境不一样配置也有差异。 我已经安装官网的文档配置了ios环境 执行 npx react-nativelatest init AwesomeProject 报错 然后自己百度查呀执行 gem update --system 说是没有权限,执行失败。因…

POSTGRESQL 关于安装中自动启动的问题 详解

开头还是介绍一下群,如果感兴趣Polardb ,mongodb ,MySQL ,Postgresql ,redis ,SQL SERVER ,ORACLE,Oceanbase 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加 liuaustin3微信号 &…

OpenSSH 远程升级到 9.4p1

OpenSSH 远程升级到 9.4p1 文章目录 OpenSSH 远程升级到 9.4p1背景升级前提1. 升级 OpenSSL2. 安装并启用Telnet 升级OpenSSH 背景 最近的护网行动,被查出来了好几个关于OpenSSH 的漏洞。这是因为服务器系统安装后,直接使用了系统自带版本的OpenSSH &am…

2023-08-15 linux mipi 屏幕调试:有一个屏幕开机时候不显示,开机后按power 按键休眠唤醒就可以显示。原因是reset gpio 被复用

一、现象:今天更新了一个新版本的buildroot linux sdk ,调试两个mipi 屏幕,这两个屏幕之前在其他的sdk都调好了的,所有直接把配置搬过来。但是有一个屏幕可以正常显示,有一个屏幕开机时候不显示,开机后按po…

CentOS防火墙操作:开启端口、开启、关闭、配置

一、基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用 : systemctl disable firewalld 开机启用 : systemctl enable firewalld systemctl是…

C语言,结构体,结构体大小,

1、结构体: 用于存储不同数据类型的多个相关变量,从而形成一个具有独立性的组合数据类型。 结构体的声明: struct 结构体类型名{ 数据类型 成员1; 数据类型 成员2; 数据类型 成员3; ……… }&#xff1…

转行软件测试四个月学习,第一次面试经过分享

我是去年上半年从销售行业转行到测试的,从销售公司辞职之后选择去培训班培训软件测试,经历了四个月左右的培训,在培训班结课前两周就开始投简历了,在结课的时候顺利拿到了offer。在新的公司从事软件测试工作已经将近半年有余&…

深信服数据中心管理系统 XXE漏洞复现

0x01 产品简介 深信服数据中心管理系统DC为AC的外置数据中心,主要用于海量日志数据的异地扩展备份管理,多条件组合的高效查询,统计和趋势报表生成,设备运行状态监控等功能。 0x02 漏洞概述 深信服数据中心管理系统DC存在XML外部实…

WPS-0DAY-20230809的分析和利用复现

WPS-0DAY-20230809的分析和初步复现 一、漏洞学习1、本地复现环境过程 2、代码解析1.htmlexp.py 3、通过修改shellcode拿shell曲折的学习msf生成sc 二、疑点1、问题2、我的测试测试方法测试结果 一、漏洞学习 强调:以下内容仅供学习和测试,一切行为均在…

Keil开发STM32单片机项目的三种方式

STM32单片机相比51单片机,内部结构复杂很多,因此直接对底层寄存器编码,相对复杂,这个需要我们了解芯片手册,对于复杂项目,这些操作可能需要反复编写,因此出现了标准库的方式,对寄存器…

ES中倒排索引机制

在ES的倒排索引机制中有四个重要的名词:Term、Term Dictionary、Term Index、Posting List。 Term(词条):词条是索引里面最小的存储和查询单元。一段文本经过分析器分析以后就会输出一串词条。一般来说英文语境中词条是一个单词&a…

Docker容器与虚拟化技术:Docker资源控制、数据管理

目录 一、理论 1.资源控制 2.Docker数据管理 二、实验 1.Docker资源控制 2.Docker数据管理 三、问题 1.docker容器故障导致大量日志集满,造成磁盘空间满 2、当日志占满之后如何处理 四、总结 一、理论 1.资源控制 (1) CPU 资源控制 cgroups&#xff0…

Java Vue Uniapp MES生产执行管理系统

本MES系统是一款B/S结构、通用的生产执行管理系统,功能强大! 系统基于多年离散智造行业的业务经验组建,主要目的是为国内离散制造业的中小企业提供一个专业化、通用性、低成本的MES系统解决方案。 联系作者获取

Linux(进程控制)

进程控制 进程创建fork函数初识fork函数返回值写时拷贝fork常规用法fork调用失败的原因 进程终止进程退出码进程常见退出方法 进程等待进程等待必要性获取子进程status进程等待的方法 阻塞等待与非阻塞等待阻塞等待非阻塞等待 进程替换替换原理替换函数函数解释命名理解 做一个…

re学习(32)【绿城杯2021】babyvxworks(浅谈花指令)

链接:https://pan.baidu.com/s/1msA5EY_7hoYGBEema7nWwA 提取码:b9xf wp:首先找不到main函数,然后寻找特殊字符串, 交叉引用 反汇编 主函数在sub_3D9当中,但是IDA分析错了 分析错误后,删除函数 创建函数 操…

【Linux】多线程1——线程概念与线程控制

文章目录 1. 线程概念什么是线程Linux中的线程线程的优点线程的缺点线程的独立资源和共享资源 2. 线程控制Linux的pthread库用户级线程 📝 个人主页 :超人不会飞)📑 本文收录专栏:《Linux》💭 如果本文对您有帮助&…