线性规划小记

线性规划小记

线性规划问题(LP 问题)

n 个变量 x1,x2,,xn
存在若干个线性的限制,形如 iaixiv,其中 ai,v 均为常数
求最大化目标线性函数 maxibixi
这里变量的取值范围为实数
对于取值范围为整数的问题称为 ILP 问题,其为 NPC 问题

标准型

最大化:icixi
满足约束:jai,jxjbi,i[1,m]xj0,j[1,n]

能简单的用矩阵的语言描述它

松弛型

最大化:j=1ncjxj
满足约束:xi+n=bij=1nai,jxj,i[1,m]xj0,j[1,n+m]

全幺模矩阵

这样的矩阵做 LP 问题,中间的所有结果一定是整数

在矩阵的行、列中均选取一个大小为 k 的子集
构成的大小为 k×k 的方阵的行列式为 1,0,1

网络流问题对应 LP 问题的矩阵均是全幺模矩阵

单纯形算法

单纯形法的基本思想是,通过变量的代换,实现在解空间内沿着边界朝目标函数增大的方向移动

其核心操作是转轴(pivot)操作

基变量:在松弛型不等式左边的所有变量
非基变量:在松弛型不等式右边的所有变量

线性规划的一组基变量和非基变量就包含着一组基本解
即所有基变量的值取右侧的常数项,所有非基变量的值取 0,在单纯形算法中我们只考虑基本解

pivot

选择一个基变量 xB 和一个非基变量 xN,将他们互换(称 xB 为换入变量,xn 为换入变量 )
具体来说:

xB=bij=1nai,jxjxN=bixBjNai,jxjai,N

并且将目标函数即其他限制条件中的 xN 全部替换成上式,则做到了互换基变量与非基变量
值得一提的是我们当然应该保证 ai,N0
容易发现 pivot 操作的复杂度为 O(nm)

simplex

该过程也是单纯性算法的主过程,核心思想是从一个基本解出发,经过一系列的 pivot 操作,达到最优解
我们只要选择适当的换入变量与换出变量,使得每次 pivot 均使目标函数增大,就能逐渐达到最优解
注意到我们需要保证 bi0,我们首先讨论有这个条件怎样完成 simplex 操作

  1. 找到一个 e 满足 ce>0
    特别的,如果不存在这样的 e,那么 simplex 操作结束

  2. 找到下标 l 满足 al,e>0,并最小化 blal,e
    特别的,如果不存在这样的 l,那么该线性规划是无界的

  3. e,l 进行 pivot 操作

如果初始时 bi0,可以证明,在 pivot 操作后一定有 bi0
考虑我们如何解决开始时 bi<0 的情况,我们引入一个辅助线性规划:

最大化:x0
满足约束:xi+n=bi+x0j=1nai,jxj,i[1,m]xi0,i[0,n+m]

考虑如果原线性规划存在一个可行解 (x^1,x^2,,x^n+m),那么 (0,x^1,x^2,,x^n+m) 就是辅助线性规划的一组可行解
而由于我们需要最小化 x0,那么这个可行解就是辅助线性规划里的最优解
而由于 x0=0,我们得到这样的一组最优解后,可以直接将 x0 去掉,将目标函数替换为原目标函数,即能将 bi 变为非负数
我们容易构造出辅助线性规划的初始解,我们考虑将 x0 作为换入变量,找到 bi 最小值 bl,把 xl+n 作为换出变量执行转轴操作即可
容易发现 b 将非负,对辅助线性规划跑 simplex 即可
容易发现 simplex 的复杂度是指数的(,但实际运行情况很好(

过不去uoj板子,爬了

对偶

对于线性规划问题:

最小化:j=1ncjxj
约束:j=1nai,jxjbi,i[1,m]

其对偶问题为:

最大化:i=1mbiyi
约束:i=1mai,jyicj,j[1,n]

默认 xi,yi0

具体一点的理解是,原问题的限制变成了对偶问题的变量

  1. 弱对偶定理:对偶问题的解不大于原问题的解

  2. 强对偶定理:对偶问题的解等于原问题的解
    定理在有解情况下成立

  3. 如果原问题最优解中条件 i 没有取到等号,那么对偶问题里 yi=0

posted @   juju527  阅读(169)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)
点击右上角即可分享
微信分享提示