單純形法與線性規劃 學習筆記

2021-09-07 09:44:16 字數 3161 閱讀 7953

很早以前學過理論,3個月前又學了一遍寫了一點筆記,現在覺得以(已)前(經)寫(完)的(全)太(忘)醜(記)於是重寫一遍

1.演算法導論

2.2016國家集訓隊**

$maximize\quad \sum\limits_^ c_jx_j$

$satisfy\quad constraint:$

$\sum\limits_^ a_x_j \le b_i,\ i=1,2,...,m$

$x_j \ge 0,\ j=1,2,...,n$

$n$個變數,$m+n$個約束

構造$m*n$的矩陣$a$,$m$維向量$b$,$n$維向量$c$

鬆弛變數$x_$

$ \sum\limits_^ a_x_j \le b_i\  \rightarrow\  $

$x_=b_i - \sum\limits_^ a_x_j,\ x_ \ge 0$

等式左側為基本變數,右側為非基本變數

每個約束定義了$n$維空間中的乙個半空間(超平面),交集形成的可行域是乙個凸區域稱為單純型

目標函式是乙個超平面,最優解在凸區域定點處取得

基本解:非基本變數值為$0$,基本變數為右側的常數

基本可行解:所有$b_i \ge 0$

通過不斷的轉軸操作,在$n$維凸區域的頂點上不斷移動(轉軸),使得基本解的目標值不斷變大,最終達到最優解

選取乙個非基本變數$x_e$為替入變數,基本變數$x_l$為替出變數,將其互換

為了防止迴圈,根據$bland$規則,選擇下標最小的變數

演算法導論上有乙個輔助線性規劃的做法

但我發現好多人都用了隨機初始化的黑科技

在所有$b_i < 0$的約束中隨機選乙個作為$x_l$,再隨機選乙個$a_ < 0$的作為$x_e$,然後$pivot(l,e)$後$b_i$就變正了...

直接用乙個$a$來儲存目標函式和約束

$pivot$裡的各種操作推導一下很清楚,用了兩個$trick$避免了一些判斷

$id$用來儲存基本變數和非基本變數集合

針對全么模矩陣可以進行提取非零係數的優化

uoj#179. 線性規劃

#include#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int n=25

;const

double eps=1e-8,inf=1e15;

inline

intread()

while(c>='

0'&&c<='9')

return x*f;

}int

n,m,type;

double

a[n][n],ans[n];

int id[n<<1

];int

q[n];

void pivot(int l,inte)}

bool

init()

pivot(l,e);

}return

true;}

bool

******x()

if(!e) break

;

for(int i=1;i<=m;i++) if(a[i][e]>eps && a[i][0]/a[i][e]

mn=a[i][0]/a[i][e],l=i;

if(!l)

pivot(l,e);

}return

true;}

intmain()

for(int i=1;i<=n;i++) id[i]=i;

if(init() &&******x())}}

view code

最短路最大流

最小費用最大流

多商品流(目前沒寫過)

$\ \quad $

最大化與最小化互換,常數與目標函式互換,改變不等號,變數與約束對應

最大流與最小割

二分圖最大權匹配與最小頂標和

最小頂標和:乙個帶權二分圖,兩個頂點的頂標之和不小於連線它們的邊的邊權,求最小頂標和

所有邊權為$1$,就是最大匹配和最小點覆蓋

$d_$表示$u,v$是否匹配

$max\quad \sum\limits_c_d_$

$sat$

$\sum\limits_d_ \le 1 \quad \quad u \in x$

$\sum\limits_d_ \le 1 \quad \quad v \in y$

$d_\in \$

令$p_u,p_v$為兩類約束對偶之後的變數

$min\quad \sum\limits_p_u + \sum\limits_p_v$

$sat$

$p_u+p_v \ge c_ \quad \quad u \in x,v \in y$

$p_u,p_v \ge 0$

充分條件:

1.僅有$-1,0,1$構成

2.每列至多兩個非零數

3.行可分為兩個集合:

一列包含兩個同號非零數,兩行不在同乙個集合

一列包含兩個異號非零數,兩行在同乙個集合

線性規劃中$a$為全么模矩陣,則單純形法過程中所有係數$\in$

可以去除係數為$0$的項進行優化!

任何最大流、最小費用最大流的線性規劃都是全么模矩陣

線性規劃 單純形法

線性規劃是求乙個線性多項式的最值。線性規劃有兩種形式 1.標準型 不等式型 2.鬆弛型 除了非負約束,其他都是等式變數名稱 在res x y z中。1.基本變數,基本變數是res。2.非基本變數,如x,y,z。單純形法 適用於鬆弛型。單純形法是不斷通過迭代來增大最大值。達到無法更新時,就是最大值。這...

線性規劃 單純形法

單純形法 x method 單純形法的思路總結 其它情況 參考文獻 目標函式是線性的,約束條件是線性等式或不等式,每個變數都取實數值.minimize ct xsubject to ax bx 0 begin text c x text a x b x geq 0 end minimize subj...

單純形法(求解線性規劃)模板

原理 我也懶得去了解了,反正不怎麼用到 學習 推薦看部落格 使用形態 下面模板的輸入 max x1 14 x2 6 x3 s t x1 x2 x3 4 x1 2 x3 3 3 x2 x3 6 x1,x2,x3 0 我們可以得到其鬆弛形式 max x1 14 x2 6 x3 s.t.x1 x2 x3 ...