混合整数规划(Mixed Integer Programming)

2023-11-04

混合整数规划(Mixed Integer Programming)

混合整数规划问题是运筹优化中经常遇到的一类问题。在这类问题中自变量的类型可能是整数也可能不是整数。相比于连续优化,混合整数规划很多时候会更难求解。在学术界混合整数规划一直是一个活跃的研究领域。

Branch and Bound(分支定界法)

分支定界法是求解整数规划和混合整数规划类问题的一种经典算法。其中包含了分支(branch)和定界(bound)两个部分。分支部分作用是将问题分解为子问题,定界部分作用是寻找一个松弛过后的最优解,进而判断能否将某分支进行修剪。

我们以一个简单的背包问题为例:

在这里插入图片描述

我们需要在给定背包容量的约束下最大化背包里装的物品的价值。上面这个问题中有三种物品可以选择。对于物品而言,只有0和1两种选择。但假如我们要放入的是巧克力呢,那么我们就可以将大巧克力分成小巧克力使得背包恰好被装满。在这种情况下,我们需要将单位价值更高的巧克力先放到背包里,这样才能够保证包里装的东西价值最高。当物品是巧克力时,我们相当于将原本的整数变量进行了松弛,以达到最优。

我们也可以在混合整数规划中参照上面的思路,我们可以在定界的时候对原本限制为整数的变量松弛,得到松弛过后的最优解。实际的最优解是没有松弛过后的最优解好的,即松弛过后的最优解是实际的最优解的上界(在背包问题中,目标函数需要最大化)。假如在某一分支松弛过后的最优解仍然没有当前的最优好,代表这一分支可以被舍弃。经过松弛,我们可以更好地进行剪枝,加速分支定界法的算法执行。

Cutting Planes(割平面法)

割平面法也是在混合整数规划中经常会用到的方法,其中怎么割平面有很多种方法,在这里主要介绍Gomory cuts。在割平面法中,线性规划起到了很大的作用
在这里插入图片描述

假设有上述问题,我们首先对整数变量进行松弛。松弛过后原本的整数规划问题可以看作是一个线性规划问题。对于线性规划问题我们可以使用单纯形法这个经典的算法进行多项式时间内的求解(大部分情况)。对原问题进行松弛过后进行线性规划求解得到的解不一定为原问题的解,因为求出来的解可能不是整数。

在这里插入图片描述

这时我们需要对解空间进行切割,切割需要满足两个条件

  • 切割过后的解空间中不包含上一次线性规划求出来的解

  • 切割没有将可行解切割掉

切割过后继续使用线性松弛,重复上面的步骤,最终得出最优解。

初看割平面法可能有些懵,在这里介绍一下Gomory Cut。还是以上面的这个问题为例子。

在这里插入图片描述

我们首先使用单纯形法,求得线性规划的最优解。我们可以求得以下的结果

在这里插入图片描述

从图中我们可以看出,求出来的解x2为分整数,我们需要进行第一次Gomory cut。分别将等式两边的小数部分取出来,我们可得到

1 4 x 3 + 1 4 x 4 ≥ 1 2 \frac{1}{4}x_3+\frac{1}{4}x_4 \geq \frac{1}{2} 41x3+41x421

可能有人会对这个不等式的由来有些疑问,其实是这样的。

在这里插入图片描述
在这里插入图片描述

当我们切了之后相当于原本的优化问题又添加了一个不等式。接着我们需要使用对偶单纯型法进行求解。注意,s1是新引入的松弛变量。

在这里插入图片描述

反复重复上面的过程,最终我们能够求出问题的最优解。

参考资料:

  • coursera discrete optimization
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

混合整数规划(Mixed Integer Programming) 的相关文章

  • R语言学习笔记:从零开始?数据结构和基础知识

    R语言是一种数学编程语言 主要用于统计分析 绘图 数据挖掘 其在生物信息大数据分析处理过程中扮演着重要角色 笔者从今天开始分享R语言学习笔记 环境安装 Windows 官方地址 https cloud r project org bin w
  • Linux下socket多路复用应用--select函数

    Linux下socket多路复用应用 select函数 Select系统调用是用来让我们的程序监视多个文件描述符 file descriptor 的状态变化的 程序会停在select这里等待 直到被监视的文件描述符有某一个或多个发生了状态改

随机推荐

  • Qt打包发布程序,打包安装程序和打包为单个exe可执行程序,图文教程

    Qt打包发布程序 打包安装程序和打包为单个exe可执行程序 图文教程 1 前言 当我们用Qt制作好软件后 要将程序拷贝到别人的电脑上使用 如果直接拷贝exe是无法运行的 本教程将介绍如何将制作好的Qt软件打包发布 2 将Qt程序生成rele
  • 二、Cesium加载影像,地形、设置视角

    一 影像 1 启动api服务 在下载的Cesium解压根目录下的 Build Documentation下执行 hs p 8082 然后访问http 192 168 1 155 8082 index 2 搜索viewer 可以看到创建vie
  • MySQL常见面试题(四)

    前言 在进行数据库设计和优化的过程中 我们不得不面对多样化的技术和方法来确保我们的系统可以高效 可靠地运行 为了深入了解和掌握这个领域 我们将讨论InnoDB存储引擎的多种索引类型 以及索引的不同方面和分类 我们还将深入探讨为什么通常推荐使
  • java断点_Java 断点调试总结

    为了准备调试 你需要在代码中设置一个断点先 以便让调试器暂停执行允许你调试 否则 程序会从头执行到尾 你就没有机会调试了 1 条件断点 断点大家都比较熟悉 在Eclipse Java 编辑区的行头双击就会得到一个断点 代码会运行到此处时停止
  • JavaScript学习(三)javaScript基础语法

    文章目录 基础知识 变量 if语句 函数定义 输出内容 alert消息对话框 confirm 消息对话框 prompt消息对话框 打开新窗口 关闭窗口 练习 基础知识 变量 申明 var 变量名 var 用来定义变量 这个用法在很多语言里都
  • gorm - database操作利器

    前言 ORM 即 Object Relational Mapping 全称 对象关系映射 程序中当需要对数据库进行操作时 势必需要通过连接数据库 调用sql语句 执行sql语句等操作 ORM将数据库中的表 字段 行于我们面向对象编程的类及其
  • C++——静态数据成员

    静态成员分为静态数据成员和静态成员函数 一 静态数据成员的概念 静态数据成员不是某个对象的的成员 而是同一个类所以对象共享的成员 其值对每个对象都是一样的 静态数据成员具有全局性 是类域中的全局变量 不具体属于哪一个对象 在运行之前 编译阶
  • QPainter::begin: Paint device returned engine == 0, type: 1

    QPainter begin Paint device returned engine 0 type 1 QPainter默认只能在paintEvent里面调用 但是 在其他事件中绘制窗体 提示信息如下 QPainter begin Pai
  • BCD码-8421码、5421码、2421码、余3码

    一 BCD码的转换原理 BCD码 使用 4 位二进制来表示 1 位十进制 即使用 4 个位来存储一个十进制的值 使二进制和十进制之间的转换以快捷的进行 比如 使用4位二进制 0000 表示 十进制 0 使用4位二进制 0001 表示 十进制
  • 如何实现html上传文件并被Django后台处理

    如何实现html上传文件并被Django后台处理 1 html前端代码编写 先看代码 代码如下
  • CString类常用方法----Left(),Mid(),Right()……

    CStringLeft intnCount const 从左边1开始获取前 nCount个字符 CStringMid intnFirst const 从左边第 nCount 1个字符开始 获取后面所有的字符 CStringMid intnF
  • 二进制方式部署k8s集群1.21版本-域名形式

    二进制方式部署k8s 1 21版本 域名形式 说明 系统参数 主机名称 IP地址 部署节点 部署组件 m1 192 168 11 187 k8s1 masterk8s2 master k8s1 etcd apiserver controll
  • 爬虫(五):python中的POST的四种请求方式(编码格式)

    POST请求主要包含json格式 xml格式 文件上传 form data 及默认传递的urlencoded HTTP的报文结构 1 请求行 请求方法 请求URL HTTP协议版本三个部分 2 请求头 从第二行开始到倒数第二行都是我们的请求
  • Clang之语法抽象树AST

    语法分析器的任务是确定某个单词流是否能够与源语言的语法适配 即设定一个称之为上下文无关语言 context free language 的语言集合 语法分析器建立一颗与 词法分析出的 输入单词流对应的正确语法树 语法分析树的建立过程主要有两
  • Nacos与Eureka的异同

    1 架构设计 Eureka采用CS架构 由服务注册中心Eureka Server和服务提供者 消费者Eureka Client组成 Nacos采用高可用的P2P设计 无主节点 所有的server节点都是同等作用 支持AP和CP两种模式 2
  • Android 自动获取经纬度,计算距离、经纬度、方位角

    最近做一个项目需要通过GPS获取经纬度 通过计算算出两点之间的距离 通过对Google和百度的疯狂轰炸 终于找到了解决的办法 首先声明权限 android name android permission ACCESS FINE LOCATI
  • Scrcpy视频同步源码分析

    什么是Scrcpy https github com Genymobile scrcpy Scrcpy是genymobile开源的一款手机镜像软件 通过对手机音视频的采集和同步 可以实现在PC平台上控制手机的功能 官方解释 此应用程序镜像通
  • PHP Drupal个人博客

    PHP Drupal个人博客 官网 Prerequisite PHP Composer 快速安装 composer create project drupal recommended project drupal cd drupal php
  • lucene 总体架构

    本文转载至 http www cnblogs com forfuture1978 archive 2009 12 14 1623596 html Lucene概述 一个高效的 可扩展的 全文检索库 全部用Java实现 无须配置 仅支持纯文本
  • 混合整数规划(Mixed Integer Programming)

    混合整数规划 Mixed Integer Programming 混合整数规划问题是运筹优化中经常遇到的一类问题 在这类问题中自变量的类型可能是整数也可能不是整数 相比于连续优化 混合整数规划很多时候会更难求解 在学术界混合整数规划一直是一