当前位置: 首页 > article >正文

割平面法的理解

割平面法的理解

1. 简介

割平面法(Cutting Plane Method)用于求解整数规划问题,通过逐步添加线性约束(割平面)逼近整数解。本文以Gomory割平面法为例,结合简单示例拆解核心步骤。


2. 示例详解

问题描述

考虑整数规划问题:
max ⁡ 3 x 1 + 2 x 2 s.t. 2 x 1 + x 2 ≤ 6 2 x 1 + 3 x 2 ≤ 9 x 1 , x 2 ≥ 0 , 且为整数 \begin{align*} \max \quad & 3x_1 + 2x_2 \\ \text{s.t.} \quad & 2x_1 + x_2 \leq 6 \\ & 2x_1 + 3x_2 \leq 9 \\ & x_1, x_2 \geq 0, \text{且为整数} \end{align*} maxs.t.3x1+2x22x1+x262x1+3x29x1,x20,且为整数

步骤1:求解松弛问题

引入松弛变量 x 3 , x 4 ≥ 0 x_3, x_4 \geq 0 x3,x40,转化为标准LP问题:
max ⁡ 3 x 1 + 2 x 2 s.t. 2 x 1 + x 2 + x 3 = 6 2 x 1 + 3 x 2 + x 4 = 9 x 1 , x 2 , x 3 , x 4 ≥ 0 \begin{align*} \max \quad & 3x_1 + 2x_2 \\ \text{s.t.} \quad & 2x_1 + x_2 + x_3 = 6 \\ & 2x_1 + 3x_2 + x_4 = 9 \\ & x_1, x_2, x_3, x_4 \geq 0 \end{align*} maxs.t.3x1+2x22x1+x2+x3=62x1+3x2+x4=9x1,x2,x3,x40
用单纯形法求解得: x 1 = 1.5 , x 2 = 2 , x 3 = 0 , x 4 = 0 x_1=1.5, x_2=2, x_3=0, x_4=0 x1=1.5,x2=2,x3=0,x4=0,目标值8.5。

步骤2:选择非整数基变量

  • 基变量 x 1 , x 2 x_1, x_2 x1,x2(非整数解)。
  • 约束方程:选择非整数基变量(如 x 1 x_1 x1)对应的约束方程。
    单纯形表中, x 1 x_1 x1 的约束方程为:
    x 1 + 0.5 x 3 − 0.5 x 4 = 1.5 (来自行变换后的约束1,由非基变量表示基变量的变换而得) x_1 + 0.5x_3 - 0.5x_4 = 1.5 \quad \text{(来自行变换后的约束1,由非基变量表示基变量的变换而得)} x1+0.5x30.5x4=1.5(来自行变换后的约束1,由非基变量表示基变量的变换而得)

步骤3:构造割平面

  1. 分解系数和常数项

    将系数和常数项分解为整数部分(向下取整)和小数部分(小数部分 f ∈ [ 0 , 1 ) f \in [0,1) f[0,1)):
    0.5 = 0 + 0.5 (系数  x 3 ) − 0.5 = − 1 + 0.5 (系数  x 4 ) 1.5 = 1 + 0.5 (常数项) \begin{align*} 0.5 &= 0 + 0.5 \quad &\text{(系数}~x_3\text{)} \\ -0.5 &= -1 + 0.5 \quad &\text{(系数}~x_4\text{)} \\ 1.5 &= 1 + 0.5 \quad &\text{(常数项)} \end{align*} 0.50.51.5=0+0.5=1+0.5=1+0.5(系数 x3)(系数 x4)(常数项)

  2. 分离整数与小数部分
    原方程改写为:
    x 1 − x 4 − 1 ⏟ 整数部分 + 0.5 x 3 + 0.5 x 4 = 0.5 ⏟ 小数部分 \underbrace{x_1 - x_4 - 1}_{\text{整数部分}} + \underbrace{0.5x_3 + 0.5x_4 = 0.5}_{\text{小数部分}} 整数部分 x1x41+小数部分 0.5x3+0.5x4=0.5

  3. 生成割平面约束
    由于左边小数部分必须补偿右边的0.5,且变量非负:
    0.5 x 3 + 0.5 x 4 ≥ 0.5 ⇒ x 3 + x 4 ≥ 1 0.5x_3 + 0.5x_4 \geq 0.5 \quad \Rightarrow \quad x_3 + x_4 \geq 1 0.5x3+0.5x40.5x3+x41

    • 每个系数的小数部分 < 1 <1 <1,导致它们的线性组合可以 ≥1,不过并不影响上述不等式的成立。

步骤4:添加割平面并重新求解

将新约束转换为等式(引入松弛变量 x 5 ≥ 0 x_5 \geq 0 x50):
x 3 + x 4 − x 5 = 1 x_3 + x_4 - x_5 = 1 x3+x4x5=1
重新求解LP,得到整数解: x 1 = 1 , x 2 = 2 x_1=1, x_2=2 x1=1,x2=2,目标值7。


3. 泛化公式

对任意整数规划问题,假设松弛问题最优解中某基变量 x i x_i xi 非整数,其约束方程为:
x i + ∑ j ∈ N a ˉ i j x j = b ˉ i x_i + \sum_{j \in N} \bar{a}_{ij}x_j = \bar{b}_i xi+jNaˉijxj=bˉi
其中 N N N 为非基变量集合, b ˉ i \bar{b}_i bˉi 非整数。

割平面构造流程

  1. 分解系数
    a ˉ i j = ⌊ a ˉ i j ⌋ + f i j , b ˉ i = ⌊ b ˉ i ⌋ + f i \bar{a}_{ij} = \lfloor \bar{a}_{ij} \rfloor + f_{ij}, \quad \bar{b}_i = \lfloor \bar{b}_i \rfloor + f_i aˉij=aˉij+fij,bˉi=bˉi+fi
    其中 0 ≤ f i j < 1 0 \leq f_{ij} < 1 0fij<1 0 < f i < 1 0 < f_i < 1 0<fi<1

  2. 分离方程
    x i + ∑ j ∈ N ⌊ a ˉ i j ⌋ x j − ⌊ b ˉ i ⌋ ⏟ 整数部分 + ∑ j ∈ N f i j x j − f i = 0 ⏟ 小数部分 \underbrace{x_i + \sum_{j \in N} \lfloor \bar{a}_{ij} \rfloor x_j - \lfloor \bar{b}_i \rfloor}_{\text{整数部分}} + \underbrace{\sum_{j \in N} f_{ij}x_j - f_i = 0}_{\text{小数部分}} 整数部分 xi+jNaˉijxjbˉi+小数部分 jNfijxjfi=0

  3. 生成割平面
    由于小数部分必须非负:
    ∑ j ∈ N f i j x j ≥ f i \sum_{j \in N} f_{ij}x_j \geq f_i jNfijxjfi


4. 关键细节

为什么割平面不切割整数解?

对任意整数可行解 x j x_j xj(包括松弛变量):

  1. 变量非负性 x j ≥ 0 x_j \geq 0 xj0 且为整数。
  2. 系数分解规则 f i j ∈ [ 0 , 1 ) f_{ij} \in [0,1) fij[0,1) f i ∈ ( 0 , 1 ) f_i \in (0,1) fi(0,1)

假设存在整数解不满足割平面约束:
∑ f i j x j < f i \sum f_{ij}x_j < f_i fijxj<fi
根据原约束方程分解形式:
整数部分 + ∑ f i j x j = f i \text{整数部分} + \sum f_{ij}x_j = f_i 整数部分+fijxj=fi
左边整数部分必须为整数,右边 f i ∈ ( 0 , 1 ) f_i \in (0,1) fi(0,1)。若 ∑ f i j x j < f i \sum f_{ij}x_j < f_i fijxj<fi,则:
∑ f i j x j = f i − k ( k 为正整数 ) \sum f_{ij}x_j = f_i - k \quad (k \text{为正整数}) fijxj=fik(k为正整数)
又因为 f i ∈ ( 0 , 1 ) f_i \in (0,1) fi(0,1)
∑ f i j x j = f i − k < 0 \sum f_{ij}x_j = f_i - k < 0 fijxj=fik<0
x j ≥ 0 x_j \geq 0 xj0 f i j ≥ 0 f_{ij} \geq 0 fij0 矛盾!因此,任何整数解必须满足:
∑ f i j x j ≥ f i \sum f_{ij}x_j \geq f_i fijxjfi

收敛性

  • 每次割平面至少切割当前非整数解,理论上有限步收敛,但实际中可能较慢,可嵌入分支定界法提升效率。

相关文章:

割平面法的理解

割平面法的理解 1. 简介 割平面法&#xff08;Cutting Plane Method&#xff09;用于求解整数规划问题&#xff0c;通过逐步添加线性约束&#xff08;割平面&#xff09;逼近整数解。本文以Gomory割平面法为例&#xff0c;结合简单示例拆解核心步骤。 2. 示例详解 问题描述 …...

[自动驾驶-传感器融合] 多激光雷达的外参标定

文章目录 引言外参标定原理ICP匹配示例参考文献 引言 多激光雷达系统通常用于自动驾驶或机器人&#xff0c;每个雷达的位置和姿态不同&#xff0c;需要将它们的数据统一到同一个坐标系下。多激光雷达外参标定的核心目标是通过计算不同雷达坐标系之间的刚性变换关系&#xff08…...

C++ 学习(八)(模板,可变参数模板,模板专业化(完整模板专业化,部分模板专业化),类型 Traits,SFINAE(替换失败不是错误),)

C 模板 C 中的模板是一项强大的功能&#xff0c;允许您编写通用代码&#xff0c;这意味着您可以编写可以处理不同数据类型的单个函数或类。这意味着您无需为要使用的每种数据类型编写单独的函数或类。 模板函数 要创建模板函数&#xff0c;请使用 关键字&#xff0c;后跟类型…...

AI---DevOps常备工具(‌AI-Integrated DevOps Essential Tools)

AI---DevOps常备工具 技术领域正在迅速发展&#xff0c;随着我们步入 2025 年&#xff0c;有一点是明确的&#xff1a;人工智能&#xff08;AI&#xff09;不再只是一个流行词&#xff0c;它是每个 DevOps 工程师都需要掌握的工具。随着云环境的复杂性增加、对更快部署的需求以…...

题目梳理2025[长期更新]

题目梳理 组合类题目(2025年3月5日) 组合总数1&#xff0c;组合总数2&#xff0c;组合总数3 -> 递归回溯的思想 组合总数4 -> 爬楼的思想&#xff0c;动态规划&#xff0c;确定递归边界&#xff0c;确定递归入口&#xff0c;最后一步怎么走的思想...

Maven 中 SNAPSHOT 版本与 RELEASE 版本的区别

Maven 仓库分为 Snapshot 快照仓库和 Release 发行仓库两种类型的仓库。Snapshot 快照仓库用于保存 SNAPSHOT 版本&#xff0c;Release 发行仓库用于保存 RELEASE 版本。 SNAPSHOT 是一种特殊的版本标识&#xff0c;主要用于表示项目的不稳定、正在开发中的版本&#xff0c;而…...

JavaScript 知识点整理

1. 什么是AST&#xff1f;它在前端有哪些应用场景&#xff1f; AST Abstract Syntax Tree抽象语法树&#xff0c;用于表达源码的树形结构 应用&#xff1a; Babel&#xff1a;一个广泛使用的 JS 编译器&#xff0c;将ES6 或 JSX 等现代语法转换为兼容性较好的 ES5 代码。Esl…...

迷你世界脚本出生点接口:Spawnport

出生点接口&#xff1a;Spawnport 彼得兔 更新时间: 2023-04-26 10:19:56 具体函数名及描述如下: 序号 函数名 函数描述 1 getSpawnPoint(...) 获取默认出生点 2 setSpawnPoint(...) 设置出生点位置 3 getChunkValidSpawnPos(...) 获取区块有效刷新点…...

鸿蒙与DeepSeek深度整合:构建下一代智能操作系统生态

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/north 目录 技术融合背景与价值鸿蒙分布式架构解析DeepSeek技术体系剖析核心整合架构设计智能调度系统实现…...

利用行波展开法测量横观各向同性生物组织的生物力学特性|文献速递-医学影像人工智能进展

Title 题目 Measurement of biomechanical properties of transversely isotropic biological tissue using traveling wave expansion 利用行波展开法测量横观各向同性生物组织的生物力学特性 01 文献速递介绍 纤维嵌入结构在自然界中普遍存在。从脑白质&#xff08;罗曼…...

AR配置静态IP双链路负载分担示例

AR配置静态IP双链路负载分担示例 适用于大部分企业网络出口 业务需求&#xff1a; 运营商1分配的接口IP为100.100.1.2&#xff0c;子网掩码为255.255.255.252&#xff0c;网关IP为100.100.1.1。 运营商2分配的接口IP为200.200.1.2&#xff0c;子网掩码为255.255.255.248&am…...

文件操作(详细讲解)(1/2)

你好这里是我说风俗&#xff0c;希望各位客官点点赞&#xff0c;收收藏&#xff0c;关关注&#xff0c;各位对我的支持是我持续更新的动力&#xff01;&#xff01;&#xff01;&#xff01;第二期会马上更的关注我获得最新消息哦&#xff01;&#xff01;&#xff01;&#xf…...

[AI]从零开始的so-vits-svc歌声推理及混音教程

一、前言 在之前的教程中已经为大家讲解了如何安装so-vits-svc以及使用现有的模型进行文本转语音。可能有的小伙伴就要问了&#xff0c;那么我们应该怎么使用so-vits-svc来进行角色歌曲的创作呢&#xff1f;其实歌曲的创作会相对麻烦一些&#xff0c;会使用到好几个软件&#x…...

华为OD机试-停车场最大距离(Java 2024 E卷 100分)

题目描述 停车场有一排车位,用 0 表示空位,1 表示已停车。至少有一辆车停在车位上,也至少有一个空位。为了防剐蹭,需要找到一个空位,使得该空位与最近的车辆之间的距离最大。返回这个最大距离。 输入描述 一个用半角逗号分隔的停车标识字符串,停车标识为 0 或 1,0 表示…...

SpringMVC控制器定义:@Controller注解详解

文章目录 引言一、Controller注解基础二、RequestMapping与请求映射三、参数绑定与数据校验四、RestController与RESTful API五、控制器建议与全局处理六、控制器测试策略总结 引言 在SpringMVC框架中&#xff0c;控制器(Controller)是整个Web应用的核心组件&#xff0c;负责处…...

免费分享一个软件SKUA-GOCAD-2022版本

若有需要&#xff0c;可以下载。 下载地址 通过网盘分享的文件&#xff1a;Paradigm SKUA-GOCAD 22 build 2022.06.20 (x64).rar 链接: https://pan.baidu.com/s/10plenNcMDftzq3V-ClWpBg 提取码: tm3b 安装教程 Paradigm SKUA-GOCAD 2022版本v2022.06.20安装和破解教程-CS…...

学习threejs,使用LineBasicMaterial基础线材质

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.LineBasicMaterial1.…...

python保留字及作用

在 Python 中&#xff0c;保留字&#xff08;Reserved Keywords&#xff09;是具有特殊意义和用途的单词&#xff0c;不能用作变量名、函数名或标识符。以下是 Python 的保留字及其作用&#xff1a; Python 保留字列表 保留字作用False布尔值&#xff0c;表示假。None表示空值…...

java面试题(一)基础部分

1.【String】StringBuffer和StringBuilder区别&#xff1f; String对象是final修饰的不可变的。对String对象的任何操作只会生成新对象&#xff0c;不会对原有对象进行操作。 StringBuilder和StringBuffer是可变的。 其中StringBuilder线程不安全&#xff0c;但开销小。 St…...

Mac mini M4安装nvm 和node

先要安装Homebrew&#xff08;如果尚未安装&#xff09;。在终端中输入以下命令&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 根据提示操作完成Homebrew的安装。 安装nvm。在终端中输入以下命令&#xf…...

Ubuntu20.04双系统安装及软件安装(四):国内版火狐浏览器

Ubuntu20.04双系统安装及软件安装&#xff08;四&#xff09;&#xff1a;国内版火狐浏览器 Ubuntu系统会自带火狐浏览器&#xff0c;但该浏览器不是国内版的&#xff0c;如果平常有记录书签、浏览记录、并且经常使用浏览器插件的习惯&#xff0c;建议重装火狐浏览器为国内版的…...

数据库的乐观锁和悲观锁

乐观锁&#xff08;Optimistic Locking&#xff09; 乐观锁是一种假设数据库操作不会发生冲突的锁定机制。在执行数据更新操作时&#xff0c;它并不会立刻加锁&#xff0c;而是先允许所有事务继续执行&#xff0c;并在提交时检查数据是否发生了变化。如果数据在读取后被其他事…...

react中如何使用使用react-redux进行数据管理

以上就是react-redux的使用过程&#xff0c;下面我们开始优化部分&#xff1a;当一个组件只有一个render生命周期&#xff0c;那么我们可以改写成一个无状态组件&#xff08;UI组件到无状态组件&#xff0c;性能提升更好&#xff09;...

Dify 开源大语言模型应用开发平台使用(二)

文章目录 说明Dify 使用报告1. 应用创建——专业的锂电池相关知识解答1.1 平台简介1.2 创建应用 2. 知识库、工作流、变量、节点与编排节点详解2.1 知识库管理2.2 工作流配置2.3 变量管理2.4 节点与编排节点 3. 测试和调试3.1 单元测试3.2 日志与监控3.3 实时调试3.4 性能测试 …...

DeepSeek使用手册分享-附PDF下载连接

本次主要分享DeepSeek从技术原理到使用技巧内容&#xff0c;这里展示一些基本内容&#xff0c;后面附上详细PDF下载链接。 DeepSeek基本介绍 DeepSeek公司和模型的基本简介&#xff0c;以及DeepSeek高性能低成本获得业界的高度认可的原因。 DeepSeek技术路线解析 DeepSeek V3…...

5.训练策略:优化深度学习训练过程的实践指南——大模型开发深度学习理论基础

在实际开发中&#xff0c;训练策略对神经网络的表现起着至关重要的作用。通过合理的训练策略&#xff0c;我们可以有效避免过拟合和欠拟合&#xff0c;加速模型收敛&#xff0c;并提升最终性能。本文将从实际开发角度详细介绍几种关键的训练策略&#xff0c;包括 Early Stoppin…...

新品速递 | 多通道可编程衰减器+矩阵系统,如何破解复杂通信测试难题?

在无线通信技术快速迭代的今天&#xff0c;多通道可编程数字射频衰减器和衰减矩阵已成为测试领域不可或缺的核心工具。它们凭借高精度、灵活配置和强大的多通道协同能力&#xff0c;为5G、物联网、卫星通信等前沿技术的研发与验证提供了关键支持。从基站性能测试到终端设备校准…...

Data truncation: Out of range value for column ‘allow_invite‘ at row 1

由于前端传递的数值超过了mysql数据库中tinyint类型的取值范围&#xff0c;所以就会报错。 Caused by: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column allow_invite at row 1at com.mysql.cj.jdbc.exceptions.SQLExcept…...

HCIA—IP路由静态

一、概念及作用 1、概念&#xff1a;IP路由是指在IP网络中&#xff0c;数据从源节点到目的节点所经过的路径选择和数据转发的过程。 2、作用 ①实现网络互联&#xff1a;使不同网段的设备能够相互通信&#xff0c;构建大规模的互联网络 ②优化网络拓扑&#xff1a;根据网络…...

Hz的DP总结

前言&#xff1a; 鉴于本人是一个DP低手&#xff0c;以后每写一道DP都会在本篇博客下进行更新&#xff0c;包括解题思路&#xff0c;方法&#xff0c;尽量做到分类明确&#xff0c;其中的题目来自包括但并不限于牛客&#xff0c;洛谷&#xff0c;CodeForces&#xff0c;AtCode…...