數學建模之線性規劃問題(含整數規劃和0 1規劃)

2021-08-27 05:02:24 字數 3080 閱讀 1170

線性規劃是數學規劃中的一類最簡單規劃問題,常見的線性規劃是乙個有約束的,變數範圍為有理數的線性規劃。

如:

為了便於表達,將上面的式子寫成矩陣形式:

於是約束就表達為了乙個不等式。

求解matlab線性規劃時,最常用的函式是linprog函式

由於matlab中求解的是目標函式是最小值的問題,但如果我們的目標函式是求最大值,可以通過對目標函式中每一項中乘以-1,將求最大值問題轉化為求最小值問題;

a,b分別為不等式約束中的係數矩陣。aeq和beq分別為等式約束中的係數矩陣,lb,和ub分別為每個變數的上下區間;最後f為目標函式中各變數的係數矩陣。

f=[-7,-12];

a=[9 4;4 5;3 10];

b=[300;200;300];

lb=zeros(2,1);% 生成乙個2行1列的全0矩陣,很顯示,上面例子中的x,y的最小值為0

[x,fval]=linprog(f,a,b,,,lb,)

我們來解釋下linprog函式中每引數的意義,linprog中的乙個原型如下:

[x,fval,exitflag] = linprog(f,a,b,aeq,beq,lb,ub)

這7個引數的意義和上面f、a、b的意義是一樣的。f為目標函式的係數矩陣,a為線性規劃不等式約束的變數係數矩陣,b為不等式約束的資源數(如上面的[300;200;300]),這是乙個n行1列的矩陣,n為變數的個數。aeqbeq是相應等式約束的變數係數矩陣和資源數(很明顯,上面的例子中並沒有等式約束)。lbub分別為保變數的上下區間。在上面的例子中,x和y和最小值都為0但都無最大值約束。而linprog的返回值x為求得的各變數的值,這是乙個向量,fval為最優化的值,一般是乙個標量,exitflag意為函式的退出標誌。

上面所示的**[x,fval]=linprog(f,a,b,,,lb,)中,代表不存在或空,因為在上面的例子中不存在等式約束,所以aeqbeq的位置為。而ub也為空,是因為變數沒有最大值約束。

執行上面的程式,行到結果為:

x =20.0000

24.0000

fval = -428.0000

解釋為:

當x=20,y=24時,可以求得最優化的值,最大值為428(因為這裡的求目標最大值,但matlab只能求目標函式最小值,所以對目標函式進行了乘-1處理,所以也要對最後的結果乘以-1才是目標函式所求).

上面解決了簡單的線性規劃問題的求解,線性規範有兩種比較特殊的情況,即整數規劃和0-1整數規劃。

matlab提供了乙個比較新的、專用於求解整數規劃和0-1整數規劃的函式——intlinprog。

intlinprog的乙個原型為:

[x,fval,exitflag]= intlinprog(f,intcon,a,b,aeq,beq,lb,ub)

該函式的使用和linprog函式的使用十分相似,其僅僅在linprog函式的基礎上多了乙個引數——intcon。我們來通過下面的例子來學習該引數的意義。

在這裡例子中,變數的取值範圍不再是有理數集,而是整數集。

求解此規劃問題的matlab程式如下:

f_13=[-1,-1];

ic_13=[1,2];

a_13=[-4,2;4,2;0,-2];

b_13=[-1;11;-1];

lb_13=zeros(2,1);

[x_13,fval_13,flag_13]=intlinprog(f_13,ic_13,a_13,b_13,,,lb_13,)

在函式intlinprog中,intcon的意義為整數約束變數的位置。如上例中,因為x1和x2都要是整數,intcon引數位置ic_13的值為[1,2]。這個位置是按照目標函式和約束條件中變數位置來排列的。如果上式中僅有x2為整數約束,那麼ic_13的值應該為2。

我們解決了在matlab上求解一般的整數規劃問題,但要是遇到0-1整數規劃問題呢?到這裡,我們只要轉換一下思維,就可以利用matlab求解0-1整數規劃了,這裡先賣個關子,請大家看下面的例子是怎麼用matlab求解0-1整數規劃的。

matlab程式如下:

f_12=[7 5 9 6 3];

ic_12=[1,2,3,4,5];

a_12=[56,20,54,42,15;1,4,1,0,0;-1,-2,0,-1,-2];

b_12=[100;4;-2];

lb_12=zeros(5,1);

ub_12=ones(5,1);

[x_12,fval_12,flag_12]=intlinprog(f_12,ic_12,a_12,b_12,,,lb_12,ub_12)

與上面整數規劃不同的地方只有乙個,就是多了ub_12=ones(5,1),也就是說求解0-1整數規劃只要在求解整數規劃的基礎上加上乙個對變數最大值約束為1就可以。

[1]:

數學建模學習線性規劃問題

其中 c 和 x 為 n 維列向量,a aeq 為適當維數的矩陣,b beq 為適當維數的列向量。基本函式形式為 linprog c,a,b 它的返回值是向量 x 的值。還有其它的一些函式呼叫形 式 在 matlab 指令窗執行 help linprog 可以看到所有的函式呼叫形式 如 x,fval...

數學建模之非線性規劃

如果目標函式或約束條件中包含非線性函式,就稱這種規劃問題為非線性規劃問 題。非線性規劃目前還沒有適於各種問題的一般演算法,各個方法都有自己特定的適用範圍。一般形式 matlab 中非線性規劃的數學模型寫成以下形式 其中 f x 是標量函式,a,b,aeq,beq是相應維數的矩陣和向量,c x ceq...

數學建模 非線性規劃

2014年4月17日 規劃方法是建模中的常用手段。那麼顯然要人有我優了,非線性規劃就是乙個不錯的加分點。下面介紹幾種常用的非線性規劃技巧 這裡要說一下無約束法,規劃問題的困難在於求解,特別是約束比較奇怪的。於是在比賽中把有約束的規劃問題轉換成無約束的規劃問題就成了乙個大大的加分點。另外dfp之類的包...