線性規劃 單純形法

2021-08-01 21:30:05 字數 1727 閱讀 5328

線性規劃是求乙個線性多項式的最值。

線性規劃有兩種形式:

1.標準型 不等式型

2.鬆弛型 除了非負約束,其他都是等式

變數名稱:

在res=x+y+z中。

1.基本變數,基本變數是res。

2.非基本變數,如x,y,z。

單純形法:

適用於鬆弛型。

單純形法是不斷通過迭代來增大最大值。達到無法更新時,就是最大值。

這就是實現的簡單的過程。

然而細節又很多(演算法導論上有詳細的描述),這裡只是簡單的概述。

1.沒有非負約束。

對於任意乙個x沒有非負約束。

則我們將x拆成y-z,y>=0,z>=0。

2.標準型轉為鬆弛型。

我們假設x>=z,

那麼我們可以假設乙個res=x-z,res>=0。來進行替換。

這是兩個最常見的問題。

現在,我們來談一談迭代背後的主要思想。

每一輪迭代,我們從目標函式中找到非負的那乙個變數。

然後將任意乙個方程式進行替換。將乙個基本變數與乙個非基本變數進行交換。

然後將它帶入每乙個方程式(包括目標式)中進行替換原來的基本變數。

這樣會增大目標值(演算法導論上有證明)。

這就是主要的思想。

uoj–線性規劃

#include

#include

#define for(aa,bb,cc) for(int aa=(bb);aa<=(int)(cc);++aa)

using

namespace

std;

const

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

const

int maxn=21;

int n,m,t,flag;

double ans[maxn],a[maxn][maxn];

int id[maxn+maxn];

template

void read(t &x)

inline

void pivot(int line,int col)

}}inline

void init_******x()

pivot(line,col);

}}inline

void ******x()

if(!col) break;

res=inf;

for(i,1,m)

if(a[i][col]>eps && a[i][0]/a[i][col]0]/a[i][col],line=i;

if(!line)

pivot(line,col);

}}int main()

init_******x();

if(!flag) return

0; ******x();

if(!flag) return

0; printf("%.10f\n",-a[0][0]);

if(!t) return

0; for(i,1,m) ans[id[i+n]]=a[i][0];

for(i,1,n) printf("%.10f ",ans[i]);

puts("");

return

0;}

線性規劃 單純形法

單純形法 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 ...

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

很早以前學過理論,3個月前又學了一遍寫了一點筆記,現在覺得以 已 前 經 寫 完 的 全 太 忘 醜 記 於是重寫一遍 1.演算法導論 2.2016國家集訓隊 maximize quad sum limits c jx j satisfy quad constraint sum limits a x...