高階演算法 單純形法求解線性規劃問題(C 實現)

2021-07-03 21:01:06 字數 2329 閱讀 1033

(1) 單純形法是解線性規劃問題的乙個重要方法。

其原理的基本框架為:

第一步:將lp線性規劃變標準型,確定乙個初始可行解(頂點)。

第二步:對初始基可行解最優性判別,若最優,停止;否則轉下一步。

第三步:從初始基可行解向相鄰的基可行解(頂點)轉換,且使目標值有所改善—目標函式值增加,重複第二和第三步直到找到最優解。

(2) 用程式進行運算前,要將目標函式及約束方程變成標準形式。

於非標準形式須作如下變換:

a) 目標函式為極小值min z=cx時,轉換為max z=-cx形式;

b) 在約束方程中有 「≤」時,在加上乙個鬆弛變數;

c) 在約束方程中有 「≥」時,採用減去乙個鬆弛變數,再加上乙個人工變數;

d) 在約束方程中有 「=」時,加上乙個人工變數;

e) 所有的人工變數,鬆弛變數的目標函式係數置為0。

(3) 對於標準形式的線性規劃問題。用單純形法計算步驟的框圖。

線性規劃問題如下:

// ******x.cpp : 定義控制台應用程式的入口點。

////

/*********************************

-----------------------------------

單純形法求解線性規劃問題(c++實現**)

-----------------------------------

author:牧之丶 date:2023年

email:[email protected]

**********************************/

#include "stdafx.h"

#include

#include

using

namespace

std;

#define m 10000 //全域性變數大m

float juzhen[11][31];//核心矩陣表

int m=0,n=0,t=0;//m:結構向量的個數 //n:約束不等式個數 //t:目標函式型別:-1代表求求最小值,1代表求最大值

void input() //輸入介面函式

for (i=1;i<=n;i++)

//讀入目標條件

cout

for(i=1;i<=m;i++)

cout

<

cout

<

cout

<

for (i=1;i<=m;i++)

cin>>juzhen [0][i];

cin>>t;

//矩陣調整

if(t==-1)

for(i=1;i<=m;i++)

juzhen [0][i]=(-1)*juzhen [0][i];

for(i=1;i<=n;i++)

} //演算法函式

void comput()

for(i=1;i<=n;i++)

else

te***[i]=m+i;

} for(i=1;i<=n;i++)

temp4[i]=juzhen [0][te***[i]];

//迴圈求解

do for(i=1;i<=m+n+n;i++)

} if(flag==1)

} //輸出結果

cout

<

cout

<

} else

} if(flag==-1)

for(i=1;i<=n;i++)

} }

if(temp2==1)

if(temp2==-1)

}

} while(1);

return ;

}int _tmain(int argc, _tchar* argv)

線性規劃 單純形法

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