线性规划是一类最优化问题,例如:
min x1+2x2s.t. x1+x2≤3x2≤2x1≥0x2≥0
(s.t. 是 subject to 的缩写)
简单来说,对于一系列变量,我们在一系列线性约束的范围内找到一个线性函数的最值。
下文称 x∈Rn≥0 为 x 的各个分量 ≥0。
标准形式#
注意到对于所有线性规划问题,我们都能把它变换到如下标准形式:
minx∈RncTxs.t. Ax=b,∀i,xi≥0that A∈Rm×n,b∈Rm,c∈Rn
- 对于变量 x≥c,用 x′=x−c≥0 替代。
- 对于变量 x≤c,用 x′=c−x≥0 替代。
- 对于变量 x 无约束,考虑两个非负变量 x1,x2≥0,令 x=x1−x2。
至此所有变量 x 都满足非负性,接下来处理不等式:
对于不等式 ∑aixi≤c,考虑新建一个松弛变量 s≥0,则有 ∑aixi+s=c。反方向不等式同理。
注意到线性规划中我们一般不会碰到严格不等关系:如果我们将这些关系换成不严格的,那么要么存在满足严格条件的最优解,要么我们可以无穷接近最优解。
单纯形法#
以后再说,暂时用不到XD
对偶问题#
考虑一个标准形式的线性规划问题
p∗=minx∈RncTxs.t. Ax=b,x≥0
引入拉格朗日乘子 λ∈Rn,相当于要求:
f(x,λ)=cTx+λT(Ax−b)h∗=minxmaxλ f(x,λ)s.t. x≥0
证明:
如果 Ax≠b,那么在内层的 max 中我们可以取 λ→±∞ 使得内层 maxλf(x,λ) 趋向于正无穷,不会计入答案。
这同时也告诉我们如果 D∗→+∞ 则原问题无解。
考虑对偶问题:以 x 为主元,我们可以证明,对任意 λ,minxf(x,λ) 是 h∗ 的一个下界。
证明:
对于一个特定的 λ1 和任意的 x1,我们有
minxf(x,λ1)≤f(x1,λ1)≤maxλf(x1,λ)⇒∀λ1,minxf(x,λ1)≤minxmaxλf(x,λ)=h∗
取最紧的下界
p∗=maxλminx f(x,λ)=maxλminx cTx+λT(Ax−b)=maxλminx (cT+λTA)x−λTb(x≥0)
注意到若 (cT+λTA)i<0,则令 xi→+∞,xj=0(i≠j),有 f(x,λ)→−∞,故必然有 cT+λTA≥0,此时必然有 x=0,故
d∗=maxλ−λTbs.t. cT+λTA≥0
记 w=−λ,有
d∗=maxwwTbs.t. ATλ≤c
同样是一个线性规划问题,称为 P∗ 的对偶问题。
总结一下:
p∗=minxcTxs.t. Ax=b,x≥0 dual⟺ d∗=maxwbTws.t. ATw≤c
又或者考虑一个更加对称的形式:
p∗=minxcTxs.t. Ax≥b,x≥0 dual⟺ d∗=maxwbTws.t. ATw≤c,w≥0
强对偶定理#
由上文的论述我们知道必然有 d∗≤p∗ 称为弱对偶定理。事实上,线性规划满足强对偶定理:
对于互为对偶的线性规划问题 d∗,p∗,必然满足以下三种情况中的一个:
- d∗,p∗ 都不存在可行解。
- d∗,p∗ 一个不存在可行解,一个最优解无界。
- d∗,p∗ 皆有有界最优解,此时必然有两者的解相同。
证明:
情况一和二易见,对于情况三,记 x0 是 p∗ 的最优解,由前面叙述的单纯形算法中的结论,我们有 x0=[xB0],c=[cB0],A=[B0],其中 xB,cB∈Rm,B∈Rm×m,则有 xB=B−1b,p∗=cTBB−1b,取 wT0=cTBB−1,由前面单纯形算法的结论我们有 r=cT−cTBB−1A≥0,故 w0 是 b∗ 的一个可行解,且 bTw=cTx,结合弱对偶定理 d∗≤p∗,即得 d∗=p∗。
互补松弛定理#
考虑如下线性规划问题
p∗=minxcTxs.t. Ax=b,x≥0
其对偶形式为
d∗=maxwbTws.t. ATw≤c
若 x,w 是原问题和对偶问题的可行解,则有 x,w 是原问题和对偶问题的最优解等价于 cTx=bTw,记 r=cT−wTA,则有 rx=cTx−wTb,于是有互补松弛定理:
x,w 是原问题和对偶问题的可行解,x,w 是最优解 ⟺∀i,xi=0 or (Ax)i=bi。
一个应用见 CF1307G。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!