线性规划小记
线性规划小记
线性规划问题(LP 问题)
有 个变量
存在若干个线性的限制,形如 ,其中 均为常数
求最大化目标线性函数
这里变量的取值范围为实数
对于取值范围为整数的问题称为 ILP 问题,其为 NPC 问题
标准型
最大化:
满足约束:
能简单的用矩阵的语言描述它
松弛型
最大化:
满足约束:
全幺模矩阵
这样的矩阵做 LP 问题,中间的所有结果一定是整数
在矩阵的行、列中均选取一个大小为 的子集
构成的大小为 的方阵的行列式为
网络流问题对应 LP 问题的矩阵均是全幺模矩阵
单纯形算法
单纯形法的基本思想是,通过变量的代换,实现在解空间内沿着边界朝目标函数增大的方向移动
其核心操作是转轴(pivot)操作
基变量:在松弛型不等式左边的所有变量
非基变量:在松弛型不等式右边的所有变量
线性规划的一组基变量和非基变量就包含着一组基本解:
即所有基变量的值取右侧的常数项,所有非基变量的值取 ,在单纯形算法中我们只考虑基本解
pivot
选择一个基变量 和一个非基变量 ,将他们互换(称 为换入变量, 为换入变量 )
具体来说:
并且将目标函数即其他限制条件中的 全部替换成上式,则做到了互换基变量与非基变量
值得一提的是我们当然应该保证
容易发现 pivot 操作的复杂度为
simplex
该过程也是单纯性算法的主过程,核心思想是从一个基本解出发,经过一系列的 pivot 操作,达到最优解
我们只要选择适当的换入变量与换出变量,使得每次 pivot 均使目标函数增大,就能逐渐达到最优解
注意到我们需要保证 ,我们首先讨论有这个条件怎样完成 simplex 操作
-
找到一个 满足
特别的,如果不存在这样的 ,那么 simplex 操作结束 -
找到下标 满足 ,并最小化
特别的,如果不存在这样的 ,那么该线性规划是无界的 -
对 进行 pivot 操作
如果初始时 ,可以证明,在 pivot 操作后一定有
考虑我们如何解决开始时 的情况,我们引入一个辅助线性规划:
最大化:
满足约束:
考虑如果原线性规划存在一个可行解 ,那么 就是辅助线性规划的一组可行解
而由于我们需要最小化 ,那么这个可行解就是辅助线性规划里的最优解
而由于 ,我们得到这样的一组最优解后,可以直接将 去掉,将目标函数替换为原目标函数,即能将 变为非负数
我们容易构造出辅助线性规划的初始解,我们考虑将 作为换入变量,找到 最小值 ,把 作为换出变量执行转轴操作即可
容易发现 将非负,对辅助线性规划跑 simplex 即可
容易发现 simplex 的复杂度是指数的(,但实际运行情况很好(
过不去uoj板子,爬了
对偶
对于线性规划问题:
最小化:
约束:
其对偶问题为:
最大化:
约束:
默认
具体一点的理解是,原问题的限制变成了对偶问题的变量
-
弱对偶定理:对偶问题的解不大于原问题的解
-
强对偶定理:对偶问题的解等于原问题的解
定理在有解情况下成立 -
如果原问题最优解中条件 没有取到等号,那么对偶问题里
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)