线性规划
Introduction
线性规划,粗糙地看来就是对于线性的约束(等、不等)和线性的目标求极值。
可以写成以下形式:
-
标准形
∀i,∑jai,jxj≤bi∀i,xi≥0max∑icixi
亦(向量形式)
AX≤BX≥0maxCTX
-
松弛形
AX=BX≥0maxCTX
关于标准形与松弛形的转化:
对于小于号,添加一个系数为负的自变量,
大于号则系数为正。
∑jai,jxj≤bi⇔∑jai,jxj+xnew=bixnew≥0
-
单纯形
∀i∈[1,m],xn+i=bi−n∑j=1ai,jxj∀i∈[1,n+m],xi≥0maxn∑j=1cixi
我们称x1~xn为非基本变量,xn+1到xn+m为基本变量
事实上是松弛形的另一种写法
单纯形法
若∀i,bi>0
我们对于非基本变量全部取0是一个可行解,
当此时∀i,ci≤0时达到最优,
如果并非最优,我们要更换一组基本变量,
xn+l=bl−n∑j=1,j≠eal,jxj−al,exe⇒xe=1al,e(bl−n∑j=1,j≠eal,jxj−xn+l)
方法是选出ce最大的非基变量xe,
用al,e>0且blal,e最小的xn+l替换,
这样可以保证变化后bi≥0,
同时使目标变化最大(ceblal,e)
上述操作成为转轴
若初始时bi<0,找到一个负的ai,j对其转轴,
不知道为什么一定会停下来。
对偶
我们有一组线性规划互为对偶:
AX≤BX≥0maxCTX
ATY≥CY≥0minBTY
则
maxCTX=minBTY
大概长成这样:
|
x1 |
x2 |
⋯ |
xn |
|
y1 |
a1,1 |
a1,2 |
⋯ |
a1,n |
b1 |
y2 |
a2,1 |
a2,2 |
⋯ |
a2,n |
b2 |
⋯ |
⋯ |
⋯ |
⋯ |
⋯ |
⋯ |
ym |
am,1 |
am,2 |
⋯ |
am,n |
bm |
|
c1 |
c2 |
⋯ |
cn |
z |
网络流模型
网络流本质也是一类线性规划问题,有部分线性规划问题可以通过网络流解决
流量守恒
对于线性规划问题我们写成松弛形式,
再通过线性变换使得每个变量只出现两次,符号相反,
那么我们将这些变量视为弧,将限制视为点,根据流量守恒构图。
对于区间类问题来说通常有变量连续出现的情况,
那么我们将相邻两个限制相减,
最后新添一条最后限制取反的限制,开头限制不变,
通常可以得到美妙的结果。
对偶
对于费用流,流量为fu,v,最大流量为cu,v,代价为wu,v,每个点的流出减去流入≤bu,我们有:
∀u,∑vfv,u−∑vfu,v≥−bu∀u,v,−fu,v≥−cu,v∀u,v,fu,v≥0min∑u,vfu,vwu,v
令对于边的对偶变量为zu,v,对于点的为pu,对偶得到
∀u,v,pv−pu−zu,v≤wu,v∀u,v,zu,v≥0∀u,pu≥0max∑u−pubu−∑u,vzu,vcu,v
因为cu,v≥0,且zu,v只有一条限制,我们令其取下界,得zu,v=max(0,pv−pu−wu,v)
max∑u−pubu−∑u,vcu,vmax(0,pv−pu−wu,v)⇔−min∑upubu+∑u,vcu,vmax(0,pv−pu−wu,v)
对于一个线性规划问题,若能化为上述形式,则必定可以通过费用流解决(只是方案难搞...
我们可以通过在目标式中添加若干∞的项来做到加入限制
参考资料
单纯形法学习笔记 by p_b_p_b
《再探线性规划对偶在信息学竞赛中的应用》 - 学习笔记 by p_b_p_b
2021国家集训队论文
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具