實驗1 用lingo求解線性規劃問題
lingo使用簡介
lingo軟體是美國的lindo系統公司(lindo system inc)開發的一套用於求解最優化問題的軟體包.lingo除了能用於求解線性規劃和二次規劃外,還可以用於非線性規劃求解以及一些線性和非線性方程(組)的求解.lingo軟體的最大特色在於它允許優化模型中的決策變數為整數,而且執行速度快.
lingo內建了一種建立最優化模型的語言,可以簡便地表達大規模問題,利用lingo高效的求解器可快速求解並分析結果,這裡簡單介紹lingo的使用方法.
lingo可以求解線性規劃、二次規劃、非線性規劃、整數規劃、圖論及網路優化和排隊論模型中的最優化問題等.
乙個lingo程式一般會包含集合段、資料輸入段、優化目標和約束段、初始段和資料預處理段等部分,每一部分有其獨特的作用和語法規則,讀者可以通過查閱相關的參考書或者lingo的help檔案詳細了解,這裡就不展開介紹了.
lingo的主要功能特色為:既能求解線性規劃問題,也有較強的求解非線性規劃問題的能力;輸入模型簡練直觀;運算速度快、計算能力強;內建建模語言,提供幾十個內部函式,從而能以較少語句,較直觀的方式描述大規模的優化模型;將集合的概念引入程式語言,很容易將實際問題轉換為lingo模型;並且能方便地與excel、資料庫等其他軟體交換資料.
lingo的語法規定:
(1)求目標函式的最大值或最小值分別用max=…或min=…來表示;(2)每個語句必須以分號「;」結束,每行可以有許多語句,語句可以跨行;(3)變數名稱必須以字母(a~z)開頭,由字母、數字(0~9)和下劃線所組成,長度不超過32個字元,不區分大小寫;
(4)可以給語句加上標號,例如[obj] max=200*x1+300*x2;(5)以驚嘆號「!」開頭,以分號「;」結束的語句是注釋語句;
(6)如果對變數的取值範圍沒有作特殊說明,則預設所有決策變數都非負;
(7)lingo模型以語句「model:」開頭,以「end」結束,對於比較簡單的模型,這兩個語句可以省略.
實驗目的
1.對於給定的實際應用問題,正確的建立線性規劃問題數學模型,並用lingo求解;2.掌握靈敏度分析以及資源的影子**的相關分析方法.
實驗資料與內容
問題1.1某工廠在計畫期內要安排生產a、b兩種產品,已知生產單位產品所需裝置台時及對甲、乙兩種原材料的消耗,有關資料如表1.1.
問:應如何安排生產計畫,使工廠獲利最大?1資源
1 28台時裝置
4 016公斤甲
0 412公斤乙
單位利潤2元3元
建立線性規劃問題的數學模型,用lingo求出最優解並做相應的分析.
問題1.2某公司飼養實驗用的動物以供**,已知這些動物的生長對飼料中3種營養成分(蛋白質、礦物質和維生素)特別敏感,每個動物每週至少需要蛋白質60g,礦物質3g,維生素8mg,該公司能買到5種不同的飼料,每種飼料1kg所含各種營養成分和成本如表1.2所示,如果每個小動物每週食用飼料不超過52kg,求既能滿足動物生長需要,又使總成本最低的飼料配方.
表1.2配料(食譜)問題的資料飼料
營養蛋白質(g)礦物質(g)維生素(mg)
營養最低要求
0.3 210.61.860
表1.1資源配置問題的資料產品
a b可利用資源
a1a2a3a4a5
0.1 0.050.020.20.050.05 0.10.02 0.20.08
380.5成本(元/kg)0.2 0.7 0.4 0.3
實驗指導
問題1.1設計畫生產a,b兩種產品分別為x1,x2,則建立線性規劃問題數學模型
maxs=2x1+3x2x1+2x2≤8
4x≤4x2≤12x1,x2≥0
在lingo的model視窗內輸入如下模型:model:
max=2*x1+3*x2;x1+2*x2<=8;4*x1<=16;4*x2<=12;end
選選單lingo|solve(或按ctrl+s),或用滑鼠點選「求解」按紐,如果模型有語法錯誤,則彈出乙個標題為「lingo error message」(錯誤資訊)的視窗,指出在哪一行有怎樣的錯誤,每一種錯誤都有乙個編號(具體含義可查閱相關文獻或lingo的help).改正錯誤以後再求解,如果語法通過,lingo用內部所帶的求解程式求出模型的解,然後彈出乙個標題為「lingo solver status」(求解狀態)的視窗,其內容為變數個數、約束條件個數、優化狀態、耗費記憶體、所花時間等資訊,點選close關閉視窗,螢幕上出現標題為「solution report」(解的報告)的資訊視窗,顯示優化計算(線性規劃中換基迭代)的步數、優化後的目標函式值、列出各變數的計算結果.求解結果:
2global optimal solution found at iteration:5objectivevalue: 14.00000
variablevaluereduced costx14.0000000.000000x22.
0000000.000000row slackorsurplus dualprice114.000001.
00000020.0000001.50000030.
0000000.125000044.0000000.
000000
該報告說明:執行5步找到全域性最優解,目標函式值為14,變數值分別為x1=4,x2=2.「reduced cost」的含義是需縮減成本係數或需增加利潤係數(最優解中取值非零的決策變數的reduced cost值等於零).
「row」是輸入模型中的行號,目標函式是第一行;「slack orsurplus」的意思是鬆弛或剩餘,即約束條件左邊與右邊的差值,對於「≤」的不等式,右邊減左邊的差值為slack(鬆弛),對於「≥」的不等式,左邊減右邊的差值為surplus(剩餘),當約束條件兩邊相等時,鬆弛或剩餘的值等於零.「dual price」的意思是對偶**(或稱為影子**),上述報告中row2的鬆弛值為0,表明生產甲產品4單位、乙產品2單位,所需裝置8台時已經飽和,對偶**1.5的含義是:
如果裝置增加1台時,能使目標函式值增加1.5.報告中row4的鬆弛值為4,表明生產甲產品4單位、乙產品2單位,所需原材料乙8公斤還剩餘4公斤,因此增加原材料乙不會使目標函式值增加,所以對偶**為0.
問題1.2設需要飼料a1,a2,a3,a4,a5分別為x1,x2,x3,x4,x5kg,則建立線性規劃數學模型:
mins=0.2x1+0.7x2+0.4x3+0.3x4+0.5x50.3x1+2x2+x3+0.6x4+1.8x5≥60
0.1x+0.05x+0.02x+0.2x+0.05x≥3
12345
2345
1x1,x2,x3,x4,x5≥0
在lingo的model視窗內輸入如下模型:
min=0.2*x1+0.7*x2+0.4*x3+0.3*x4+0.5*x5;
0.3*x1+2*x2+x3+0.6*x4+1.8*x5>60;
0.1*x1+0.05*x2+0.
02*x3+0.2*x4+0.05*x5>3;0.
05*x1+0.1*x2+0.02*x3+0.
2*x4+0.08*x5>8;x1+x2+x3+x4+x5<52;求解輸出結果如下:
global optimal solution found at iteration:4objectivevalue: 22.40000
variablevaluereduced costx10.0000000.7000000x212.
000000.000000x30.0000000.
6166667x430.000000.000000x510.
000000.000000
3row slackorsurplus dualprice122.40000-1.00000020.
000000-0.583333334.1000000.
00000040.000000-4.16666750.
0000000.8833333
因此,每週每個動物的配料為飼料a2、a4、a5分別為12kg、30kg和10kg,合計為
52kg,可使得飼養成本達到最小,最小成本為22.4元;不選用飼料a1和a3的原因是因為這兩種飼料的**太高了,沒有競爭力.「reduced cost」分別等於0.
7和0.617,說明當這不僅選用這兩種飼料而且使得飼養成本降兩種飼料的**分別降低0.7元和0.
62元以上時,
低.從「slack or surplus」可以看出,蛋白質和維生素剛達到最低標準,礦物質超過最低標準
4.1g;從「dual price」可以得到降低標準蛋白質1單位可使飼養成本降低0.583元,降低標準維生素1單位可使飼養成本降低4.
167元,但降低礦物質的標準不會降低飼養成本,如果動物的進食量減少,就必須選取精一些的飼料但要增加成本,大約進食量降低1kg可使得飼養成本增加0.88元.
對於目標函式係數和約束條件右端常數項的靈敏度分析,可以通過lingo軟體求解的靈敏度分析給出.如果要看靈敏度分析結果,必須啟用靈敏度計算功能才會在求解時給出靈必須執行lingo|options…命令,敏度分析結果,預設情況下這項功能是關閉的.想要啟用它,選擇gengral solver,在dual computation列表框中,選擇prices and ranges選項並確定.
對於例1.1問題進行靈敏度分析,結果如下:
以下是靈敏度分析的結果
ranges in which the basis is unchanged:
objective coefficient ranges
current allowable allowable
variable coefficient increase decrea***12.000000infinity0.5000000x2 3.
000000 1.000000 3.000000
righthand side ranges
row current allowable allowable
rhsincrease decrease
2 8.000000 2.000000 4.
0000003 16.00000 16.00000 8.
000000412.00000infinity4.000000
對於例1.2問題進行靈敏度分析,結果如下:ranges in which the basis is unchanged:objective coefficient ranges
current allowable allowable
variable coefficient increasedecrea***10.2000000infinity0.7000000x20.
7000000infinity0.1358974x30.4000000infinity0.
6166667x4 0.3000000 1.400000 1.
000000x5 0.5000000 0.1247059 infinityrighthand side ranges
row current allowable allowable
rhs increase decrease
2 60.00000 4.800000 4.
80000033.0000004.100000infinity4 8.
000000 0.3428571 0.4800000
45 52.00000 1.846154 1.411765
思考題某投資公司擬制定今後5年的投資計畫,初步考慮下面四個投資專案:
專案a:從第1年到第4年每年年初可以投資,於次年年末收回成本,並可獲利潤15%;專案b:第3年年初可以投資,到第5年年末可以收回成本,並獲得利潤25%,但為了保證足夠的資金流動,規定該項目的投資金額上限為不超過總金額的40%;
專案c:第2年年初可以投資,到第5年年末可以收回成本,並獲得利潤40%,但公司規定該項目的最大投資金額不超過總金額的30%;
專案d:5年內每年年初可以購買公債,於當年年末可以歸還本金,並獲利息6%.該公司現有投資金額100萬元,請幫助該公司制定這些專案每年的投資計畫,使公司到第5年年末核算這5年投資的收益率達到最大.
建立線性規劃問題的數學模型,並用lingo求解.5
用matlab求解線性規劃問題
實驗四用matlab求解線性規劃問題 一 實驗目的 了解matlab的優化工具箱,能利用matlab求解線性規劃問題。二 實驗內容 線性規劃的數學模型有各種不同的形式,其一般形式可以寫為 目標函式 約束條件 這裡稱為目標函式,稱為價值係數,稱為價值向量,為求解的變數,由係數組成的矩陣 稱為不等式約束...
利用Matlab求解線性規劃問題
15.利用matlab求解線性規劃問題 線性規劃是一種優化方法,matlab優化工具箱中有現成函式linprog對如下式描述的lp問題求解 min f x s.t 約束條件 ax b 等式約束條件 aeqx beq lb x ub linprog函式的呼叫格式如下 x linprog f,a,b x...
線性規劃問題建模與求解
一 實驗目的 1 掌握線性規劃問題建模基本方法。2 熟練應用excel 規劃求解 功能對線性規劃問題進行建模與求解。3 掌握線性規劃問題的對偶理論和靈敏度分析。二 實驗裝置 硬體 pc機。軟體 microsoft excel。三 實驗內容 1 建立線性規劃問題的數學模型。2 利用excel 規劃求解...