整数规划-割平面法

news2025/2/8 16:09:22

整数规划-割平面法

  • 割平面法思想
  • Gomory's割平面法原理
  • 实例

谨以此博客作为学习期间的记录。

割平面法思想

在之前,梳理了分支定界法的流程:分支定界法
除了分支定界法,割平面法也是求解整数规划的另一个利器。
我们已经知道,线性规划的可行域是一个凸集,而最优点将会在凸集的某个顶点处取到。而如果凸集的顶点都是整数点,那这样的话只要使用单纯形法即可求得整数最优解。

就像下图的凸包所示,在实际情况中,线性规划的可行域往往交点都不在整数点处,如果能找到整数点的一个凸包,那整数规划问题即可转化为普通的线性规划问题。但是想找到这样的一个凸包是非常困难的,只能使用某种方法去不断的逼近这个凸包。

这就是割平面法的思想:不断地向原问题中添加约束去逼近这个整数凸包,从而使得解出来的解为整数解。
在这里插入图片描述

Gomory’s割平面法原理

在上面提到了,通过不断添加约束去逼近一个整数凸包,那么该如何去添加约束呢?也就是如何确定割平面这是本部分的重点。
确定割平面的算法有很多,暂时先以较为基础的Gomory’s 分数割平面算法介绍,后续如果用到更多其他割平面再进行补充。
先看一个标准整数规划问题
m i n c T x s . t . { A x = b x ≥ 0 x ∈ Z n \begin{align*} min \quad & \mathbf{c}^T \mathbf{x} \\ s.t. \quad & \begin{cases} \mathbf{Ax} =\mathbf{b} \\ \mathbf{x} \geq \mathbf{0}\\ \mathbf{x} \in \mathbb{Z}^n \end{cases} \\ \end{align*} mins.t.cTx Ax=bx0xZn

当使用单纯形法求解整数规划问题时,可以将问题划分为基变量(Basic Variables)和非基变量(Non-Basic Variables)。在标准形式的整数规划问题中,可以进行如下的续写:
令基变量为 x B \mathbf{x}_B xB,非基变量为 x N \mathbf{x}_N xN。整数规划问题可以表示为:
min ⁡ c T x = c B T x B + c N T x N \min \mathbf{c}^T \mathbf{x} = \mathbf{c}_B^T \mathbf{x}_B + \mathbf{c}_N^T \mathbf{x}_N mincTx=cBTxB+cNTxN
约束条件:
B x B + N x N = b x B , x N ≥ 0 x ∈ Z n \begin{align*} \mathbf{B} \mathbf{x}_B + \mathbf{N} \mathbf{x}_N &= \mathbf{b} \\ \mathbf{x}_B, \mathbf{x}_N &\geq \mathbf{0} \\ \mathbf{x} &\in \mathbb{Z}^n \end{align*} BxB+NxNxB,xNx=b0Zn
其中:

  • c T = [ c B T , c N T ] \mathbf{c}^T = [\mathbf{c}_B^T, \mathbf{c}_N^T] cT=[cBT,cNT] 是目标函数的系数向量, c B \mathbf{c}_B cB 对应基变量的系数, c N \mathbf{c}_N cN 对应非基变量的系数。
  • B \mathbf{B} B N \mathbf{N} N 分别是基变量和非基变量对应的约束矩阵的子矩阵。
  • x B \mathbf{x}_B xB x N \mathbf{x}_N xN 分别是基变量和非基变量向量。

现在将整数约束松弛掉,使用单纯形法进行求解,多次迭代后模型收敛。收敛后的问题可以表述如下:

min ⁡ f 0 + c N T x N \min \quad f_0 + \mathbf{c}_N^T \mathbf{x}_N minf0+cNTxN
约束条件:
x B + B − 1 N x N = B − 1 b x B , x N ≥ 0 \begin{align*} \mathbf{x}_B + \mathbf{B}^{-1}\mathbf{N} \mathbf{x}_N &= \mathbf{B}^{-1}\mathbf{b} \\ \mathbf{x}_B, \mathbf{x}_N &\geq \mathbf{0} \\ \end{align*} xB+B1NxNxB,xN=B1b0
其中 f 0 = c B T x B f_0 = \mathbf{c}_B^T \mathbf{x}_B f0=cBTxB在求解之后为一个常数。
那么将上述约束变形即可得到 x B + ⌊ B − 1 N ⌋ x N ≤ ⌊ B − 1 b ⌋ \mathbf{x}_B + \lfloor\mathbf{B}^{-1}\mathbf{N} \rfloor \mathbf{x}_N \leq \lfloor \mathbf{B}^{-1}\mathbf{b} \rfloor xB+B1NxNB1b将其与原约束相减可以得到
( B − 1 N − ⌊ B − 1 N ⌋ ) x N ≥ B − 1 b − ⌊ B − 1 b ⌋ (\mathbf{B}^{-1}\mathbf{N} - \lfloor\mathbf{B}^{-1}\mathbf{N} \rfloor )\mathbf{x}_N \geq \mathbf{B}^{-1}\mathbf{b} - \lfloor \mathbf{B}^{-1}\mathbf{b} \rfloor (B1NB1N⌋)xNB1bB1b
这个约束可以割掉小数解得部分,原因如下。
如果最终解出来的仍为小数解,表示为[ x B , x N x_B,x_N xB,xN],其中 x B x_B xB为小数解, x N = 0 x_N = 0 xN=0,那么就有 B − 1 b \mathbf{B}^{-1}\mathbf{b} B1b也为小数,那么就有 B − 1 b − ⌊ B − 1 b ⌋ > 0 \mathbf{B}^{-1}\mathbf{b} - \lfloor \mathbf{B}^{-1}\mathbf{b} \rfloor > 0 B1bB1b>0,而 x N = 0 x_N = 0 xN=0就导致不等式右边大于0,不等式左边等于0.不等式不成立。因此为了使不等式成立,就需要满足最终的解为不能有小数解。

实例

m a x z = 4 x 1 − x 2 s . t . { 7 x 1 − 2 x 2 ≤ 14 x 2 ≤ 3 2 x 1 − 2 x 2 ≤ 3 x 1 , x 2 ≥ 0 x ∈ Z n (整数限制) \begin{align*} max \quad &z = 4x_1 - x_2 \\ s.t. \quad & \begin{cases} 7x_1-2x_2 \leq 14 \\ x_2 \leq 3\\ 2x_1-2x_2 \leq 3\\ x_1,x_2 \geq 0\\ \mathbf{x} \in \mathbb{Z}^n \quad \text{(整数限制)} \end{cases} \\ \end{align*} maxs.t.z=4x1x2 7x12x214x232x12x23x1,x20xZn(整数限制)
可行域如下
在这里插入图片描述
求解松弛子问题1

m a x z = 4 x 1 − x 2 s . t . { 7 x 1 − 2 x 2 + x 3 = 14 x 2 + x 4 = 3 2 x 1 − 2 x 2 + x 5 = 3 x 1 , x 2 , x 3 , x 4 , x 5 ≥ 0 \begin{align*} max \quad &z = 4x_1 - x_2 \\ s.t. \quad & \begin{cases} 7x_1-2x_2+x_3 = 14 \\ x_2 + x_4 = 3\\ 2x_1-2x_2 +x_5 = 3\\ x_1,x_2,x_3,x_4,x_5 \geq 0\\ \end{cases} \\ \end{align*} maxs.t.z=4x1x2 7x12x2+x3=14x2+x4=32x12x2+x5=3x1,x2,x3,x4,x50
求解得到

Optimal objective value: 8.428571428571429
x1: 2.857142857142857
x2: 3.0
x3: 0.0
x4: 0.0
x5: 3.2857142857142865

以x1,x2,x5作为基变量,对约束进行等价变换(把约束中基变量的系数矩阵变为单位阵),变换之后的问题如下
m a x z = 4 x 1 − x 2 s . t . { 1 x 1 + 0 x 2 + 1 7 x 3 + 2 7 x 4 + 0 x 5 = 20 7 0 x 1 + 1 x 2 + 0 x 3 + 1 x 4 + 0 x 5 = 3 0 x 1 + 0 x 2 − 2 7 x 3 + 10 7 x 4 + 1 x 5 = 23 7 x 1 , x 2 , x 3 , x 4 , x 5 ≥ 0 \begin{align*} max \quad &z = 4x_1 - x_2 \\ s.t. \quad & \begin{cases} 1x_1+0x_2+\frac{1}{7}x_3+\frac{2}{7}x_4+0x_5 = \frac{20}{7} \\ 0x_1+1x_2 +0x_3+ 1x_4+0x_5 = 3\\ 0x_1+0x_2 -\frac{2}{7}x_3+\frac{10}{7}x_4+1x_5 = \frac{23}{7}\\ x_1,x_2,x_3,x_4,x_5 \geq 0\\ \end{cases} \\ \end{align*} maxs.t.z=4x1x2 1x1+0x2+71x3+72x4+0x5=7200x1+1x2+0x3+1x4+0x5=30x1+0x272x3+710x4+1x5=723x1,x2,x3,x4,x50
选择第一个约束,构造得到割平面不等式 1 7 x 3 + 2 7 x 4 ≥ 6 7 \frac{1}{7}x_3+\frac{2}{7}x_4\geq\frac{6}{7} 71x3+72x476将这个约束化为标准形式 1 7 x 3 + 2 7 x 4 − s = 6 7 \frac{1}{7}x_3+\frac{2}{7}x_4-s = \frac{6}{7} 71x3+72x4s=76加入到原问题中得到子问题2。
m a x z = 4 x 1 − x 2 s . t . { 1 x 1 + 0 x 2 + 1 7 x 3 + 2 7 x 4 + 0 x 5 = 20 7 0 x 1 + 1 x 2 + 0 x 3 + 1 x 4 + 0 x 5 = 3 0 x 1 + 0 x 2 − 2 7 x 3 + 10 7 x 4 + 1 x 5 = 23 7 1 7 x 3 + 2 7 x 4 − s = 6 7 x 1 , x 2 , x 3 , x 4 , x 5 , s ≥ 0 \begin{align*} max \quad &z = 4x_1 - x_2 \\ s.t. \quad & \begin{cases} 1x_1+0x_2+\frac{1}{7}x_3+\frac{2}{7}x_4+0x_5 = \frac{20}{7} \\ 0x_1+1x_2 +0x_3+ 1x_4+0x_5 = 3\\ 0x_1+0x_2 -\frac{2}{7}x_3+\frac{10}{7}x_4+1x_5 = \frac{23}{7}\\ \frac{1}{7}x_3+\frac{2}{7}x_4-s = \frac{6}{7}\\ x_1,x_2,x_3,x_4,x_5,s \geq 0\\ \end{cases} \\ \end{align*} maxs.t.z=4x1x2 1x1+0x2+71x3+72x4+0x5=7200x1+1x2+0x3+1x4+0x5=30x1+0x272x3+710x4+1x5=72371x3+72x4s=76x1,x2,x3,x4,x5,s0
求解得到

Optimal objective value: 7.500000000000002
x1: 2.0000000000000004
x2: 0.5000000000000004
x3: 1.0000000000000004
x4: 2.4999999999999996
x5: 0.0
s: 0.0

选择x1,x2,x3,x4作为基变量,继续对约束进行等价变换。
变换之后的问题如下:

m a x z = 4 x 1 − x 2 s . t . { 1 x 1 + 0 x 2 + 0 x 3 + 0 x 4 + 0 x 5 + 1 s = 2 0 x 1 + 1 x 2 + 0 x 3 + 0 x 4 − 1 2 x 5 + 1 s = 1 2 0 x 1 + 0 x 2 + 1 x 3 + 0 x 4 − 1 x 5 − 5 s = 1 0 x 1 + 0 x 2 + 0 x 3 + 1 x 4 + 1 2 x 5 − 1 s = 5 2 x 1 , x 2 , x 3 , x 4 , x 5 , s ≥ 0 \begin{align*} max \quad &z = 4x_1 - x_2 \\ s.t. \quad & \begin{cases} 1x_1+0x_2+0x_3+0x_4+0x_5+1s = 2 \\ 0x_1+1x_2 +0x_3+ 0x_4-\frac{1}{2}x_5+1s = \frac{1}{2}\\ 0x_1+0x_2+1x_3+0x_4-1x_5-5s = 1\\ 0x_1+0x_2+0x_3+1x_4+\frac{1}{2}x_5-1s = \frac{5}{2}\\ x_1,x_2,x_3,x_4,x_5,s \geq 0\\ \end{cases} \\ \end{align*} maxs.t.z=4x1x2 1x1+0x2+0x3+0x4+0x5+1s=20x1+1x2+0x3+0x421x5+1s=210x1+0x2+1x3+0x41x55s=10x1+0x2+0x3+1x4+21x51s=25x1,x2,x3,x4,x5,s0
选择第二个继续构造不等式得到 1 2 x 5 ≥ 1 2 \frac{1}{2}x_5\geq\frac{1}{2} 21x521标准化之后为 1 2 x 5 − s 1 = 1 2 \frac{1}{2}x_5-s_1 = \frac{1}{2} 21x5s1=21加入到原问题中得到子问题3:
m a x z = 4 x 1 − x 2 s . t . { 1 x 1 + 0 x 2 + 0 x 3 + 0 x 4 + 0 x 5 + 1 s = 2 0 x 1 + 1 x 2 + 0 x 3 + 0 x 4 − 1 2 x 5 + 1 s = 1 2 0 x 1 + 0 x 2 + 1 x 3 + 0 x 4 − 1 x 5 − 5 s = 1 0 x 1 + 0 x 2 + 0 x 3 + 1 x 4 + 1 2 x 5 − 1 s = 5 2 1 2 x 5 − s 1 = 1 2 x 1 , x 2 , x 3 , x 4 , x 5 , s ≥ 0 \begin{align*} max \quad &z = 4x_1 - x_2 \\ s.t. \quad & \begin{cases} 1x_1+0x_2+0x_3+0x_4+0x_5+1s = 2 \\ 0x_1+1x_2 +0x_3+ 0x_4-\frac{1}{2}x_5+1s = \frac{1}{2}\\ 0x_1+0x_2+1x_3+0x_4-1x_5-5s = 1\\ 0x_1+0x_2+0x_3+1x_4+\frac{1}{2}x_5-1s = \frac{5}{2}\\ \frac{1}{2}x_5-s_1 = \frac{1}{2}\\ x_1,x_2,x_3,x_4,x_5,s \geq 0\\ \end{cases} \\ \end{align*} maxs.t.z=4x1x2 1x1+0x2+0x3+0x4+0x5+1s=20x1+1x2+0x3+0x421x5+1s=210x1+0x2+1x3+0x41x55s=10x1+0x2+0x3+1x4+21x51s=2521x5s1=21x1,x2,x3,x4,x5,s0
求解得到

Optimal objective value: 7.0
x1: 2.0
x2: 1.0
x3: 2.0
x4: 2.0
x5: 1.0
s: 0.0
s1: 0.0

得到了整数解。

博客中涉及到的代码

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

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

相关文章

XStream 反序列化漏洞 CVE-2021-39144 已亲自复现

XStream 反序列化漏洞 CVE-2021-39144 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建 修复建议总结 漏洞名称 漏洞描述 在Unmarshalling Time处包含用于重新创建前一对象的类型信息。XStream基于这些类型的信息创建新实例。攻击者可以控制输入流并替换或注入对象&am…

LeetCode-回文链表(234)

题目描述: 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 因为这一题是受到876题求链表中间节点的启发,所以在这里也加一下。 876.链表的中间结点…

机器视觉系统选型-避免畸变

在定位及高精度测量的系统中,镜头畸变的影响尤其重要 • 使用远心镜头 • 进行系统标定

二维码智慧门牌管理系统:提升社区管理智能化水平

文章目录 前言一、全方位信息录入与查询二、公安权限账户访问的公安大数据后台三、社区工作人员申请权限安装录入软件四、业主通过移动终端扫描标准地址二维码门牌自主申报录入五、系统的价值 前言 在数字化时代,社区管理面临着更新流动人口信息、准确录入六实相关…

119. 杨辉三角 II(Java)

给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1]示例 2: 输入: rowIndex 0 输出: [1]示例 3: 输入: rowIndex 1 输出: [1,1]提示…

xlua源码分析(四) lua访问C#的值类型

xlua源码分析(四) lua访问C#的值类型 上一节我们主要探讨了C#是如何使用interface和delegate访问lua层的table和function的,本节我们跟着Examples 05_NoGc,来看看xlua是如何实现lua层无gc访问C#的值类型的。 首先例子中用到的lua…

LH7904D 太阳能警示灯 0.4W×2

应用范围: 可安装在电线杆,路灯,围挡,交 通护栏及各种杆式固体等场所起警示作用。 产品特点: 采用进口PS材质; 光控无开关,白天不闪,昏暗环境自动闪烁,无需手动操作,省时省事; …

Hive04_DDL操作

Hive DDL操作 1 DDL 数据定义 1.1 创建数据库 CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_nameproperty_value, ...)];[IF NOT EXISTS] :判断是否存在 [COMMENT database_c…

冒泡排序(C语言)

void BubbleSort(int arr[], int len) {int i, j, temp;for (i 0; i < len; i){for (j len - 1; j > i; j--){if (arr[j] > arr[j 1]){temp arr[j];arr[j] arr[j 1];arr[j 1] temp;}}} } 优化&#xff1a; 设置标志位flag&#xff0c;如果发生了交换flag设置…

C语言学习day10:三目运算符

三目运算符&#xff1a; if语句&#xff1a; if (a>b) {printf("a大\n");}else {printf("b大\n");} 三目&#xff1a; 表达式1&#xff1f;表达式2&#xff1a;表达式3&#xff1a; 代码&#xff1a; int a 10; int b 20; int c; 解释如果a>b则…

YOLOv8改进 | 主干篇 | RevColV1可逆列网络(特征解耦助力小目标检测)

一、本文介绍 本文给大家带来的是主干网络RevColV1&#xff0c;翻译过来就是可逆列网络去发表于ICLR2022&#xff0c;其是一种新型的神经网络设计(和以前的网络结构的传播方式不太一样)&#xff0c;由多个子网络&#xff08;列&#xff09;通过多级可逆连接组成。这种设计允许…

W5500-EVB-Pico评估版介绍

文章目录 1 概述2 板载资源2.1 硬件规格2.2 硬件规格2.3 工作条件 3 参考资料3.2 原理图3.3 尺寸图 (单位 : mm)3.4 参考例程 4 硬件协议栈优势 1 概述 W5500-EVB-Pico是基于树莓派RP2040和完全硬连线TCP/IP控制器W5500的微控制器开发板-基本上与树莓派Pico板相同&#xff0c;但…

理解SpringMVC的工作流程

组件 前置控制器 DispatcherServlet。 映射控制器 HandlerMapping。 处理器 Controller。 模型和视图 ModelAndView。 视图解析器 ViewResolver。 工作流程 spring mvc 先将请求发送给 DispatcherServlet。 DispatcherServlet 查询一个或多个 HandlerMapping&#xff0c;找到…

【SD】IP-Adapter 进阶 - 垫图 【画风重绘-必看】

目录 关于SD1.5的画风迁移 修改动作-方法一&#xff1a;提示词 修改动作-方法二&#xff1a;openpose 关于SD1.5的画风迁移 1.5测试模型&#xff1a;flat2DAnimerge_v30_2.safetensors [b2c93e7a89] 测试图&#xff1a; 文生图&#xff1a;best quality,masterpiece, co…

【开源】基于Vue+SpringBoot的贫困地区人口信息管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 人口信息管理模块2.2 精准扶贫管理模块2.3 特殊群体管理模块2.4 案件信息管理模块2.5 物资补助模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 人口表3.2.2 扶贫表3.2.3 特殊群体表3.2.4 案件表3.2.5 物资补助表 四…

jmeter-set up先登录获取token,再测试

一、何为setup 一种特殊类型的线程组&#xff0c;可用于执行预测试操作&#xff1b;简单来讲就是执行测试线程组前&#xff0c;先执行setup 作用 例如前面&#xff0c;我们说到的&#xff0c;压测之前只用JMeter调用业务接口造数或者通过JDBC操作数据库造数&#xff0c;可以放…

re模块(正则)

【 一 】 re模块概述 在线测试工具 正则表达式在线测试 - 站长工具 随着正则表达式越来越普遍&#xff0c;Python 内置库 re 模块也支持对正则表达式使用 Python 提供了re模块可以支持正则表示表达式使用&#xff0c;re模块提供了9个常量、12个函数 使用方法&#xff1a; re…

学Java的第三天

一、自增自减运算符 &#xff0c;自增&#xff0c;变量的值加一 --&#xff0c;自减&#xff0c;变量的值减一 和-- 既可以放在变量的后边&#xff0c;也可以放在变量的前边。 单独使用的时候&#xff0c; 和 -- 放在变量的前边还是后边&#xff0c;结果是一样的。 参与操作…

探索 React Hooks 的世界:如何构建出色的组件(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

FXCM福汇官网:深入解析BOLL指标的喇叭口形态及含义

BOLL指标是一种通过布林线&#xff08;Bollinger Bands&#xff09;的上轨线、中轨线和下轨线的相互关系来判断市场趋势和波动性的技术分析工具。BOLL指标的喇叭口形态包括开口型、收口型和紧口型&#xff0c;它们各自具有独特的含义。 《FXCM福汇官网开户》 1. 开口型喇叭口…