用LINGO求解線性規划的例子


附1:用LINGO求解線性規划的例子

 

一奶制品加工廠用牛奶生產A1、A2兩種奶制品,1桶牛奶可以在設備甲上用12小時加工成3公斤A1,或者在設備乙上用8小時加工成4公斤A2。根據市場需求,生產的A1、A2能全部售出,且每公斤A1獲利24元,每公斤A2獲利16元。現在加工廠每天能得到50桶牛奶的供應,每天正式工人總的勞動時間為480小時,並且設備甲每天至多能加工100公斤A1,設備乙的加工能力沒有限制。試為該廠制定一個生產計划,使每天獲利最大,並進一步討論以下3個附加問題:

1)若用35元可以購買到1桶牛奶,應否作這項投資?若投資,每天最多購買多少桶牛奶?

2)若可以聘用臨時工人以增加勞動時間,付給臨時工人的工資最多是每小時幾元?

3)由於市場需求變化,每公斤A1的獲利增加到30元,應否改變生產計划?

數學模型:設每天用x1桶牛奶生產A1 ,用x2桶牛奶生產A2

目標函數:設每天獲利為z元。 x1桶牛奶可生產3x1公斤A1,獲利24*3x1,x2桶牛奶可生產4*x2公斤A2,獲利16*4x2,故z=72x1+64x2

約束條件: 

原料供應:生產A1、A2的原料(牛奶)總量不超過每天的供應50桶,即

                x1+x2≤50

勞動時間:生產A1、A2的總加工時間不超過每天正式工人總的勞動時間480小時,即         

12x1+8x2≤480

設備能力:A1的產量不得超過設備甲每天的加工能力100小時,即

                3x1≤100

非負約束:x1、x2均不能為負值,即x1≥0,x2≥0

綜上所述可得

max z=72x1+64x2

s.t.

 x1+x2≤50

12x1+8x2≤480

3x1≤100

x1≥0,x2≥0

顯然,目標函數和約束條件都是線性的,這是一個線性規划(LP),求出的最優解將給出使凈利潤最大的生產計划,要討論的問題需要考慮參數的變化對最優解和影響,一般稱為敏感性(或靈敏度)分析。

LINGO求解線性規划

用LINGO求解線性規划時,首先在LINGO軟件的模型窗口輸入一個LP模型,模型以MAX或MIN開始,按線性規划問題的自然形式輸入(見下面例子所示)。

以下解加工奶制品的生產計划問題:

由於LINGO中已假設所有的變量都是非負的,所以非負約束條件不必輸入;LINGO也不區分變量中的大小寫字符(實際上任何小寫字符將被轉換為大寫字符);約束條件中的“〈=”及“〉=”可用“〈”及“〉”代替。在LINGO模型窗口輸入如下:

max=72*x1+64*x2;

x1+x2<=50;

12*x1+8*x2<=480;

3*x1<=100;

用鼠標單擊菜單中的求解命令(Solve)就可以得到解答,結果窗口顯示如下:

LP OPTIMUM FOUND AT STEP 2

OBJECTIVE FUNCTION VALUE

        1)             3360.000

        VARIABLE       VALUE          REDUCED COST

        X1            20.000000                0.000000

        X2            30.000000                0.000000

        ROW    SLACK OR SURPLUS    DUAL PRICES

        2)            0.000000              48.000000

        3)            0.000000              2.000000

        4)           40.000000              0.000000

 NO. ITERATIONS=       2

 

計算結果表明:

“LP OPTIMUM FOUND AT STEP2”表示單純形法在兩次迭代(旋轉)后得到最優解。

OBJECTIVE FUNCTION VALUE 1) 3360.000”表示最優目標值為3360.000(LINGO中將目標函數自動看作第1行,從第二行開始才是真正的約束條件)。

“VALUE”給出最優解中各變量(VARIABLE)的值:x1=20.000000,x2=30.000000。

“REDUCED COST”的含義是(對MAX型問題):基變量的REDUCED COST值為0,對於非基變量,相應的REDUCED COST值表示當非基變量增加一個單位時(其它非基變量保持不變)目標函數減少的量。本例中兩個變量都是基變量。

“SLACK OR SURPLUS”給出松弛(或剩余)變量的值,表示約束是否取等式約束;第2、第3行松弛變量均為0,說明對於最優解而言,兩個約束均取等式約束;第4行松弛變量為40.000000,說明對於最優解而言,這個約束取不等式約束。

“DUAL PRICES”給出約束的影子價格(也稱為對偶價格)的值:第2、第3、第4行(約束)對應的影子價格分別48.000000,2.000000,0.000000。

“NO. ITERATIONS=       2”表示用單純形法進行了兩次迭代(旋轉)。

靈敏度分析,則LINGO還會輸出以下結果:

RANGES IN WHICH THE BASIS IS UNCHANGED:

                           OBJCOEFFICIENTRANGES

 VARIABLE                        CURRENT                ALLOWABLE          ALLOWABLE

                     COEF           INCREASE         DECREASE

       X1           72.000000         24.000000            8.000000

       X2           64.000000          8.000000           16.000000

                           RIGHTHANDSIDERANGES

      ROW        CURRENT        ALLOWABLE       ALLOWABLE

                     RHS            INCREASE         DECREASE

        2            50.000000         10.000000          6.666667

        3          480.000000         53.333332          80.000000

        4          100.000000         INFINITY          40.000000

以上顯示的是當前最優基(矩陣)保持不變的充分條件(RANGES IN WHICH THE BASIS IS UNCHANGED),包括目標函數中決策變量應的系數的變化范圍(OBJ COEFFICIENT RANGES)和約束的右端項的變化范圍(RIGHTHAND SIDE RANGES)兩部分。

前一部分的輸出行

X1           72.000000         24.000000            8.000000

表示決策變量X1當前在目標函數中對應的系數為72,允許增加24和減少8。也就是說,當該系數在區間[64,96]上變化時(假設其它條件均不變),當前最優基矩陣保持不變。對X2對應的輸出行也可以類似地解釋。由於此時約束沒有任何改變,所以最優基矩陣保持不變意味着最優解不變(當然,由於目標函數中的系數發生變化,最優值還是會變的)。

后一部分的輸出行

2            50.000000         10.000000          6.666667

表示約束2當前右端項為50,允許增加10和減少6.666667。也就是說,當該系數在區間[43.333333,60]上變化時(假設其它條件均不變),當前最優基矩陣保持不變。對約束3、約束4對應的輸出行也可以類似地解釋。由於此時約束已經改變,雖然最優基矩陣保持不變,最優解和最優值還是會變的。但是,由於最優基矩陣保持不變,所以前面的“DUAL PRICES”給出的約束的影子價格此時仍然是有效的。

用LINGO求解加工奶制品的生產計划,結果如下:

20桶牛奶生產A1, 30桶生產A2,利潤3360元。

1)35元可買到1桶牛奶,要買嗎?

由於原料的影子價格為48,35 <48, 應該買!

2)聘用臨時工人付出的工資最多每小時幾元?

由於工時的影子價格為2,聘用臨時工人付出的工資最多每小時2元

3)A1獲利增加到 30元/千克,應否改變生產計划

由於要使最優解保持不變,X1系數的允許變化范圍為[64,96]。x1系數由24*3=72增加為30*3=90,在允許范圍內。所以不改變生產計划。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM