很早以前學過理論,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#includeview code#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())}}
最短路最大流
最小費用最大流
多商品流(目前沒寫過)
$\ \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 ...