數學建模學習——整數規劃方法介紹

1.整數規劃 

在上一篇博文中,我爲大家介紹了線性規劃方法的一些相關內容,以及使用MATLAB軟件來求解線性規劃問題。

那麼,在這篇博文中,我爲大家介紹另一種重要的規劃問題——整數規劃!!!

首先,我們來看下面這樣一個汽車生產計劃的例子。👇👇👇

 

在這個問題中,我們可以參照之前線性規劃(LP)問題的求解思路,來進行一個大致的計算求解。

我們設每月生產小、中、大型汽車的數量分別是 x1、x2、x3!!!

1.1 先來求解問題1:制定月生產計劃,使工廠的利潤最大,那麼所建立的數學模型如下:

max z = 2x1 + 3x2 + 4x3
s.t. 1.5x1 + 3x2 + 5x3 ≤ 600
     280x1 + 250x2 + 400x3 ≤ 60000
     x1,x2,x3 ≥ 0

我們把以上建立的數學模型在MATLAB軟件中,輸入相應的命令求解,因爲這裏要求的是利潤的最大值max,所以需要在目標函數的兩端同乘以-1,並且對最終的結果乘以-1,即得到了下圖的結果:👇👇👇

>> c=[2 3 4];
>> A=[1.5 3 5
      280 250 400];
>> b=[600;60000];
>> Aeq=[];
>> beq=[];
>> VLB=zeros(3,1);
>> VUB=[];
>> [x,fval]=linprog(c,A,b,Aeq,beq,VLB,VUB)

 

我們觀察一下這個結果,發現全部都是小數,但是根據常識,生產多少輛汽車,這個數值肯定是一個整數啊,小數顯然不符合我們日常生活中的這個思路。那麼,我們應該怎麼辦呢?

答案其實很簡單,我們在上面那段代碼中,增加並修改一小部分內容就可以了,程序代碼和計算結果如下:👇👇👇

>> c=[-2 -3 -4]; %目標函數的係數矩陣
>> intcon=[1,2,3]; %整數約束變量的位置,這裏有三個,所以就是[1,2,3]
>> A=[1.5 3 5
      280 250 400]; %不等式約束的係數矩陣
>> b=[600;60000]; %不等書約束的常數項
>> Aeq=[]; %無等式約束,係數矩陣定義爲空
>> beq=[]; %無等式約束,常數項定義爲空
>> VLB=zeros(3,1); %生成一個3行1列的全部值爲0的矩陣,表示決策變量的下界≥0
>> VUB=[]; %決策變量無上界,定義爲空
>> [x,fval]=intlinprog(c,intcon,A,b,Aeq,beq,VLB,VUB) %使用intlinprog(...)求整數規劃問題

對於上圖這個計算結果,我們可以看到全部都變成了整數,它表示生產小型汽車64輛、中型汽車168輛、大型汽車不生產,在此背景下,獲取到的最大利潤爲632萬元。

1.2 再來求解問題2:如果生產某一類型汽車,則至少要生產80輛,最優的生產計劃是什麼?

這裏,目標函數並沒有發生改變,仍然是求最大生產利潤,只是約束條件中多了一點,至少生產80輛,也就是說,無論小中大型的汽車,你要麼一輛都不生產,要麼生產了,就要多於80輛。所以對應的數學模型可以改寫爲:👇👇👇

max z = 2x1 + 3x2 + 4x3
s.t. 1.5x1 + 3x2 + 5x3 ≤ 600
     280x1 + 250x2 + 400x3 ≤ 60000
     x1,x2,x3 = 0 或 ≥ 80 

我們都知道,三種類型的汽車數量x1、x2、x3,進行全排列共有3!=8種情況。 

 

第三種情況代入數據之後,顯然不符合約束條件中的第一個,故排除。

第七種情況,代入數據之後,顯然不符合約束條件中的前兩個,故排除。

最後一種情況,雖然滿足前三個約束條件,但是工廠要利潤最大,你一輛汽車都不生產,何來利潤呢?所以也將其排除。

那麼,就剩下了五種情況。我們依次代入計算,可以得到第五種情況,可以獲得最大利潤,具體代碼和結果如下:👇👇👇

>> c=[-2 -3 -4];
>> intcon=[1,2,3]; %對應決策變量的位置
>> A=[1.5 3 5
      280 250 400];
>> b=[600;60000];
>> Aeq=[];
>> beq=[];
>> VLB=[80;80;0]; %表示x1、x2的下界爲80,x3的下界爲0
>> VUB=[]; %三個決策變量無上界約束,定義爲空
>> [x,fval]=intlinprog(c,intcon,A,b,Aeq,beq,VLB,VUB)

這個結果表示:在工廠要求:如果生產某一類型汽車,則至少要生產80輛的情況下,我們選擇生產80輛小型汽車、150輛中型汽車、不生產大型汽車,即可獲得最大生產利潤爲610萬元!!!

當然,對於這個問題,我們也可以採用引入0-1變量來求解,具體的就不詳細說了,附上一張圖供大家理解:👇👇👇

 

 

2.整數規劃問題求解的基本思想

 

 

對於分支定界法,是整數規劃問題中的一個十分重要的方法,我們來看下面這樣一個例子:👇👇👇

我們拋開“且爲整數”這個約束條件,首先使用線性規劃的思想來求解,具體的MATLAB命令和運行結果如下:👇👇👇

>> c=[-40 -90];
>> A=[9 7
      7 20];
>> b=[56;70];
>> Aeq=[];
>> beq=[];
>> VLB=zeros(2,1);
>> VUB=[];
>> [x,fval]=linprog(c,A,b,Aeq,beq,VLB,VUB)

 

對於上圖的計算結果,我們對其進行分支定界的過程如下:👇👇👇

 

紅色框中所得結果即爲目標函數的最大值,對於這道題,我們主要是爲大家介紹一下分支定界法的思想和應用,也可以直接使用整數規劃( intlinprog(...) )的方法來解決。

 

3.0-1整數規劃 

 

 

 

對於左邊的等式約束:x11+x12+x13+x14=1,因爲這四個人各有能力去完成四項任務中的任一項,也就是說甲去完成任務A了話,此時就無法去完成後面三個任務,即x11=1、x12=0、x13=0、x14=0,所以它們相加之和等於1。後面的等式類似。

對於右邊的等式約束:x11+x21+x31+x41=1,因爲每一項任務必須要有一個人來完成,也就是說如果甲去完成任務A,那麼,乙、丙、丁就沒必要再來完成任務A了,因爲它已經被甲完成了,即x11=1、x21=0、x31=0、x41=0,所以它們之和等於1。後面的等式類似。

故我們可以建立如下的數學模型:👇👇👇

 

0-1整數規劃問題還有很多,在這裏就不一一列舉了,它的主要思想就是上面圖片中所闡述的,大家可以仔細理解一下。


那麼,以上就是我總結的有關數學建模中整數規劃方法的相關內容,以及使用MATLAB軟件來求解部分整數規劃問題,希望對大家學習數學建模有所幫助!!! 😁😁😁

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章