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

2021-09-22 08:21:59 字數 1791 閱讀 7929

原理:我也懶得去了解了,反正不怎麼用到

學習:推薦看部落格

使用形態:

下面模板的輸入:

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   + x4 = 4

x1               + x5 = 2

x3           + x6 = 3

3*x2   + x3               + x7 = 6

x1 , x2 , x3 , x4 , x5 , x6 , x7 ≥ 0

時間複雜度o(knm),k為常數,n為變數個數,m為關係數 

#include using namespace std;

vector> matrix;

double z;

setp;

size_t cn, bn;

bool pivot(pair&p)//返回0表示所有的非軸元素都小於0

for( size_t i = 0 ; i < c.size(); i++ )//在非軸元素中找最大的c

}if( cmax < 0 )

double bmin = int_max;

for( size_t i = 1 ; i < bn ; i++ )

}p = make_pair(x, y);

for( set::iterator it = p.begin() ; it != p.end() ; it++)

for( size_t i = 0 ; i < bn && i != x; i++ )}}

}void solve()

cout<::iterator it="p.begin();" p.end>

cout<>cn>>bn;

for( size_t i = 0 ; i < bn ; i++ )

matrix.push_back(vectmp);

}for( size_t i = 0 ; i < bn-1 ; i++ )

solve();

}//複雜度o(knm),k為常數,n為變數個數,m為關係數

///glpk input:

///* variables */

//var x1 >= 0;

//var x2 >= 0;

//var x3 >= 0;

///* object function */

//maximize z: x1 + 14*x2 + 6*x3;

///* constrains */

con1: x1 + x2 + x3 <= 4;

con2: x1 <= 2;

con3: x3 <= 3;

con4: 3*x2 + x3 <= 6;

//end;

///myinput:

/*8 5

1 14 6 0 0 0 0 0

1 1 1 1 0 0 0 4

1 0 0 0 1 0 0 2

0 0 1 0 0 1 0 3

0 3 1 0 0 0 1 6

*//

線性規劃 單純形法

線性規劃是求乙個線性多項式的最值。線性規劃有兩種形式 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...

從線性規劃到單純形法的求解

首先來看線性規劃的標準問題 mins.t ct xax b,xi 0 a rm n,x rn,c rn 且要求 ra nk a m a 是行滿秩矩陣 下面是一些基本概念的定義 設 b 為 a中任意非奇異的 m m 階子矩陣 b 0 則稱 b 為此規劃的乙個基,令 b pj1 p jm 下標 對應的記...