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

1.概述 

對於全國大學生數學建模競賽,大家可以去網上搜索相關內容、簡介。那麼,在這篇博文中,我來爲大家介紹一下數學建模中的一個方法——線性規劃!!! 對於線性規劃問題,我們在初中、高中的時候都接觸過類似的問題,在這裏,我們相對來說會更加詳細的理解線性規劃這個概念!!!

問:什麼是數學規劃?

答:數學規劃是運籌學的一個分支,是對現有資源進行統一分配、合理安排、合理調度和最優設計,以取得最大經濟效果的方法。數學規劃所要研究的是:在所給定的條件下,如何按某一衡量指標來尋求計劃管理工作中的最優方案。

其中,①給定的條件——約束條件;②衡量指標——目標函數,簡而言之,數學規劃就是求目標函數在一定約束條件下的極值問題。

線性規劃是數學規劃中的一種,那麼在數學規劃中,還有非線性規劃、整數規劃、無約束規劃等,它和我們的生活是密切相關的,可以說,在我們的日常生活中,有很多事情是離不開規劃的,比如:每一天的健康作息時間表、職業生涯規劃、學習目標規劃等等。

數學規劃的一般形式如下:
基本模型:
Opt    fj(X)
s.t.   g(X){≥ 或者 = 或者 ≤}b,

Opt:優化(最大化或最小化),函數fj(X)稱爲目標函數,小標j指出優化目標可以是一個或多個函數。
     向量X的各分量稱爲決策變量,目標是找到向量X0,使目標函數取得最優值。 
s.t.:代表約束條件。

2.數學規劃的分類

①線性規劃(LP):其全稱是:Linear Programming,它的目標函數和約束條件都是線性的。線性規劃是最簡單、應用最廣泛的一種規劃方法。

②非線性規劃(NP):其全稱是:Nonlinear Programming,它的目標函數與約束條件至少有一個是非線性的。非線性規劃的背景更具有普遍性。

③整數規劃(IP):其全稱是:Integer Programming,它的決策變量全部都是整數,其要求比較苛刻,同時求解也相對更加複雜。目前解決整數規劃的主要方法就是分支界定法和割平面法。

④無約束規劃:無約束優化問題的標準型爲Min  F(x),x∈Rn。無約束優化方法是研究尋求多元函數F(x)在整個實n維空間Rn中局部極小值點的數值方法。它在非線性規劃的研究中佔有很重要的位置,除了本身的意義與應用外,它也是許多帶約束優化方法的基礎。那麼一般我們採用迭代法求解無約束優化問題,所用到的算法大致可分爲:線搜索方法、信賴域方法、最小二乘問題的Gauss-Newton法、L-M方法。

3.線性規劃的基本概念

實際問題中的優化模型
Min(或Max) z=f(x),x=(x1,x2,...,xn)T
s.t. gi(x)≤0,i=1,2,...,m

其中,x~決策變量 , f(x)~目標函數 , gi(x)≤0~約束條件。
決策變量的個數n和約束條件的個數m較大,而最優解一般是在可行域的邊界上取得。
重點在於模型的建立和結果的分析。

線性規劃主要研究的問題如下:

①在一項任務確定後,如何以最低成本(如人力、物力、資金和時間等)去完成這一任務。

②如何在現有資源的條件下進行組織和安排,以產生最大收益。

在這其中,建模過程如下:

①理解要解決的問題,即:搞清楚在什麼條件下追求什麼目標。

②定義決策變量,即:用決策變量來表示要解決問題的某一方案。

③確定目標函數,即:按實際問題的不同,用決策變量的線性函數最大化或最小化形式寫出要追求的目標。

④列出約束條件,即:用決策變量的線性等式或不等式來表示在解決問題過程中所必須遵循的約束條件。 

下面,我們來介紹幾個例子,來更好的理解和應用線性規劃這個方法!!!👇👇👇

Example 1:(配料問題)

題:某鑄造廠生產鑄件,每件需要20kg鉛、24kg銅和30kg鐵。現有四種礦石可供選購,它們每10kg含有成分的質量(kg)和價格(元)如下圖所示。

問:對每個鑄件來說,每種礦石各應該選購多少,可以使總費用最少?試建立數學模型。

 

對於這個問題,我們需要分析和建立數學模型。

①確定決策變量:設xi(i=1,2,3,4)爲第 i 種礦石選取的數量(單位10kg)。即:x1表示B1礦石的數量,x2表示B2礦石的數量,x3表示B3礦石的數量,x4表示B4礦石的數量。

②確定目標函數:題目要求我們總費用最少,由圖中每種礦石對應的價格,即:f=10x1+15x2+30x3+25x4,達到最小。

③確定約束條件:選定的四種礦石的數量應該滿足鑄件對三種成分(鉛、銅、鐵)的需求量,並且礦石數量均爲非負,即:

對於成分鉛:x1 + 2x2 + 0.5x3 + 0.25x4 ≥ 20

對於成分銅:3x1 + x2 + 2x3 + 0.5x4 ≥ 24

對於成分鐵:3x1 + x2 + 2x3 + 4x4 ≥ 30

並且 xi≥0 (i=1,2,3,4)

每一個鑄件都需要20kg鉛、24kg銅以及30kg鐵,所以對每種成分的需求量相應的必須大於20,24,30來可以完成鑄件。

根據我們上面的分析,得到配料問題的數學模型如下:
min f = 10x1 + 15x2 + 30x3 + 25x4
s.t. 1. x1 + 2x2 + 0.5x3 + 0.25x4 ≥ 20
     2. 3x1 + x2 + 2x3 + 0.5x4 ≥ 24
     3. 3x1 + x2 + 2x3 + 4x4 ≥ 30
     4. xi≥0 (i=1,2,3,4)

我們觀察上面的數學模型,可以發現它具有如下特性:

①目標函數是決策變量xi(i=1,2,3,4)的線性函數。

②約束條件是決策變量xi(i=1,2,3,4)的線性等式或線性不等式。這就完全符合線性規劃的標準!!!

我們發現,在這個線性規劃的數學模型中,由於目標函數既可以是實現最大化,也可以是實現最小化,約束條件可以是等式,也可以是不等式,決策變量爲非負或者不受限制,這麼複雜的情況,對於我們求解線性規劃模型非常不利。所以此時,我們就需要將線性規劃的一般模型給轉換爲標準模型!!!標準形式的特點如下:👇👇👇

如果所建的模型不符合標準形式,我們可以使用適當的方法化爲標準形式,主要爲以下方法:

①如果目標函數爲最小化問題,則將目標函數兩邊乘以" -1 "。(最小→最大,最大→最小)

②如果約束方程右端爲負,在該方程兩端同時乘以" -1 "。

③如果約束爲" ≥ ",我們都知道在標準形式中,要將" ≥ "、" ≤ "給轉換爲" = ",既然這裏是大於等於,就說明你比標準多了一點點,此時可以增加一個變量xs,在方程左端減去xs,這種變量稱爲剩餘變量。

④如果約束爲" ≤ ",就說明你比標準少了一點點,此時可以增加一個變量xs,在方程左端加上xs,這種變量稱爲鬆弛變量。

⑤如果某決策變量xk無符號限制,則將每個xk換成 xk' - xk''(xk'、xk'' ≥ 0)。

在介紹完上述標準形式的轉換規則之後,我們來看下面這個例子:👇👇👇

我們首先在目標函數的兩端同時乘以" -1 ",在第一個約束方程左端加上一個鬆弛變量x4,在第二個約束方程得左端減去一個剩餘變量x5,對於x3無符號限制,則修改爲 x3=x3'-x3'',滿足 x3' ≥ 0,x3'' ≥ 0。如下:👇👇👇

max z = -2x1 - 3x2 + x3
s.t. 1. x1 - 2x2 + 3(x3'-x3'') + x4 = 20
     2. x1 + 3x2 - x5 = 10
     3. 2x1 - x2 + 2(x3'-x3'') = 8
     4. x1 ≥ 0 , x2 ≥ 0 , x3' ≥ 0 , x3'' ≥ 0 , x4 ≥ 0 , x5 ≥ 0

對於上面這個問題,我們可以採用圖解法來解決,即:在平面直角座標系中畫出可行域,進而找到最優解,在這裏就不再詳細講解了。

我們可以使用LINGO軟件和MATLAB軟件來解決上述問題。下面我主要介紹一下如何使用MATLAB軟件來求解線性規劃問題!!!

2.MATLAB軟件求解線性規劃問題 

任務分配問題:某車間有甲、乙兩臺機牀,可用於加工三種工件。假定這兩臺車牀的可用臺時數分別爲800和900,三種工件的數量分別爲400、600和500,且已知用三種不同車牀加工單位數量不同工件所需的臺時數和加工費用如下表。問怎樣分配車牀的加工任務,才能既滿足加工工件的要求,又使加工費用最低?

這裏,我們首先設6個決策變量,分別是:甲車牀生產工件1爲x1件,甲車牀生產工件2爲x2件,甲車牀生產工件3爲x3件,乙車牀生產工件1爲x4件,乙車牀生產工件2爲x5件,乙車牀生產工件3爲x6件。所以可以建立如下的線性規劃模型:

min z = 13x1 + 9x2 + 10x3 + 11x4 + 12x5 + 8x6
s.t. 1. x1 + x4 = 400
     2. x2 + x5 = 600
     3. x3 + x6 = 500
     4. 0.4x1 + 1.1x2 + x3 ≤ 800
     5. 0.5x4 + 1.2x5 + 1.3x6 ≤ 900
     6. xi ≥ 0 (i=1,2,3,4,5,6)

下面,我們來介紹一下用MATLAB優化工具箱求解線性規劃問題:👇👇👇

1.模型:min z=cX
       s.t. AX ≤ b
  命令:x=linprog(c,A,b)
2.模型:min z = cX
       s.t. AX ≤ b
            Aeq × X = beq
  命令:x=linprog(c,A,b,Aeq,beq)
  注意:若沒有不等式 AX ≤ b,則令A=[],B=[]
3.模型:min z = cX
       s.t. AX ≤ b
            Aeq × X = beq
            VLB ≤ X ≤ VUB
  命令:(1) x = linprog(c,A,b,Aeq,beq,VLB,VUB)
        (2) x = linprog(c,A,b,Aeq,beq,VLB,VUB,X0)
  注意:(1)若沒有等式約束:Aeq × X = beq,則令Aeq=[],beq=[]
        (2)其中X0表示初始點
4.命令:[x,fval]=linprog(...)
  返回最優解x及x處的目標函數值fval

所以,我們可以根據上面這幾種模型命令,把剛纔任務分配問題所建立的線性規劃模型,給改寫爲符合MATLAB命令的形式,如下:👇👇👇

改寫完成之後,我們將上述形式輸入到MATLAB軟件中,進行執行!!!

c表示的是:目標函數中 z=cX 的係數矩陣。

A表示的:是不等式約束中的係數矩陣。

b表示的是:不等式約束中的常數項。

Aeq表示的是:等式約束中的係數矩陣。

beq表示的是:等式約束中的常數項。

VLB表示的是:下界,決策變量從x1到x6都是大於等於0的。

VUB表示的是:上界,沒有任何上界,用空表示。具體命令以及輸出結果如下:👇👇👇

>> c=[13 9 10 11 12 8];
>> A=[0.4 1.1 1 0 0 0
      0 0 0 0.5 1.2 1.3];
>> b=[800;900];
>> Aeq=[1 0 0 1 0 0
        0 1 0 0 1 0
        0 0 1 0 0 1];
>> beq=[400;600;500];
>> VLB=zeros(6,1);
>> VUB=[];
>> [x,fval]=linprog(c,A,b,Aeq,beq,VLB,VUB)

 

上圖的結果所表達的含義是:在甲機牀上加工600個工件2,在乙機牀上加工400個工件1、500個工件3,可在滿足條件的情況下,使總加工費用達到最小,最小值爲13800。


那麼,以上就是我總結的在數學建模競賽的方法之一——線性規劃法的理解,以及使用MATLAB軟件來求解線性規劃問題的相關步驟,希望對大家學習這方面的內容有所幫助!!! 

 

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