线性规划 - 用单纯形法解决LP问题 - (Matlab、Lingo建模)
????線性規(guī)劃研究時(shí)間較早,在實(shí)際應(yīng)用中也比較成熟,它是一種輔助人們進(jìn)行科學(xué)管理的數(shù)學(xué)方法,為合理地利用有限的人力、物力、財(cái)力等資源作出的最優(yōu)決策,提供科學(xué)的依據(jù)。
課題名稱:配貨問題,使運(yùn)費(fèi)收入最大
? ?現(xiàn)有一艘輪船,分前中后三個(gè)艙位,相應(yīng)的容積與最大允許載重量如表1所示。現(xiàn)有一批A,B,C三種貨物待運(yùn),已知相關(guān)數(shù)據(jù)如表2所示。
表1?? 各船艙的容積和最大載重量
| 前艙 | 中艙 | 后艙 | |
| 容積/m | 4000 | 5400 | 1500 |
| 最大載重量/t | 2000 | 3000 | 1500 |
表2??? 三種貨物的相關(guān)數(shù)據(jù)
| 貨物 | 數(shù)量/件 | 體積/(m/件) | 重量/(t/件) | 運(yùn)價(jià)/(元/件) |
| A | 600 | 10 | 8 | 1000 |
| B | 1000 | 5 | 6 | 700 |
| C | 800 | 7 | 5 | 600 |
為了保證航運(yùn)安全,要求前中后艙在實(shí)際載重量上大體保持各船艙最大允許載重量的比例要求,具體要求:前后艙分別與中艙之間載重量比例上偏差不超過15%,前后艙之間不超過10%,問題是:在保證航運(yùn)安全要求的條件下,輪船應(yīng)裝載A,B,C三種貨物各多少件,使運(yùn)費(fèi)收入最大。
?
解法一:matlab解法
解:設(shè)輪船前艙應(yīng)裝載A,B,C三種貨物各x11,x21,x31件;輪船中艙應(yīng)裝載A,B,C三種貨物各x12,x22,x32件;輪船后艙應(yīng)裝載A,B,C三種貨物各x13,x23,x33件;則有:
max ?z=1000*(x(11)+x(12)+x(13))+700*(x(21)+x(22)+x(23))+600*(x(31) +x(32)+x(33))
st.
轉(zhuǎn)化為求最小問題:
min ??w= - 1000*(x(11)+x(12)+x(13))-700*(x(21)+x(22)+x(23))-600*(x(31)+x(32)+x(33))
st.
Matlab程序:
c=[-1000,-1000,-1000,-700,-700,-700,-600,-600,-600]; A=[10,0,0,5,0,0,7,0,0; 0,10,0,0,5,0,0,7,0; 0,0,10,0,0,5,0,0,7; 8,0,0,6,0,0,5,0,0; 0,8,0,0,6,0,0,5,0; 0,0,8,0,0,6,0,0,5; 9.2,-8,0,6.9,-6,0,5.75,-5,0; -8, 9.2,0, -6, 6.9,0, -5, 5.75,0; 0,-8, 9.2,0, -6, 6.9,0, -5, 5.75; 0,9.2,-8,0,6.9,-6,0,5.75,-5; -8,0,8.8,-6,0,6.6,-5,0,5.5; 8.8,0,-8,6,0,-6.6,5.5,0,-5; 1,1,1,0,0,0,0,0,0; 0,0,0,1,1,1,0,0,0; 0,0,0,0,0,0,1,1,1;]; b=[4000,5400,1500,2000,3000,1500,0,0,0,0,0,0,600,1000,800]; Aeq=[]; beq=[]; lb=[0,0,0,0,0,0,0,0,0]; ub=[]; [x,w]=linprog(c,A,b,Aeq,beq,lb,ub) Optimization terminated.Matlab運(yùn)行結(jié)果:
x =206.7722318.227875.000000.0000000.000000150.000069.1646090.835400.000000 w =-801000方案:
????因?yàn)?#xff1a;z=-w,所以z=801000,即輪船前艙應(yīng)裝載A,B,C三種貨物各207,0,69件;輪船中艙應(yīng)裝載A,B,C三種貨物各318,0,91件;輪船后艙應(yīng)裝載A,B,C三種貨物各75,150,0件,才能使運(yùn)費(fèi)收入最大且滿足其他條件。
解法二:用lingo求解:
lingo程序:
model: sets: row/1..3/; arrange/1..3/; link(row,arrange):x; endsets max=1000*(x(1,1)+x(1,2)+x(1,3))+700*(x(2,1)+x(2,2)+x(2,3))+600*(x(3,1)+x(3,2)+x(3,3)); 10*x(1,1)+5*x(2,1)+7*x(3,1)<=4000; 10*x(1,2)+5*x(2,2)+7*x(3,2)<=5400; 10*x(1,3)+5*x(2,3)+7*x(3,3)<=1500; 8*x(1,1)+6*x(2,1)+5*x(3,1)<=2000; 8*x(1,2)+6*x(2,2)+5*x(3,2)<=3000; 8*x(1,3)+6*x(2,3)+5*x(3,3)<=1500; (8*x(1,1)+6*x(2,1)+5*x(3,1))*1.15-(8*x(1,2)+6*x(2,2)+5*x(3,2))<=0; (8*x(1,2)+6*x(2,2)+5*x(3,2))*1.15-(8*x(1,1)+6*x(2,1)+5*x(3,1))<=0; (8*x(1,3)+6*x(2,3)+5*x(3,3))*1.15-(8*x(1,2)+6*x(2,2)+5*x(3,2))<=0; (8*x(1,2)+6*x(2,2)+5*x(3,2))*1.15-(8*x(1,3)+6*x(2,3)+5*x(3,3))<=0; (8*x(1,3)+6*x(2,3)+5*x(3,3))*1.10-(8*x(1,1)+6*x(2,1)+5*x(3,1))<=0; (8*x(1,1)+6*x(2,1)+5*x(3,1))*1.10-(8*x(1,3)+6*x(2,3)+5*x(3,3))<=0; x(1,1)+x(1,2)+x(1,3)<=600; x(2,1)+x(2,2)+x(2,3)<=1000; x(3,1)+x(3,2)+x(3,3)<=800; endlingo運(yùn)行結(jié)果:
Global optimal solution found.Objective value: 801000.0Infeasibilities: 0.000000Total solver iterations: 9Variable Value Reduced CostX( 1, 1) 206.7722 0.000000X( 1, 2) 318.2278 0.000000X( 1, 3) 75.00000 0.000000X( 2, 1) 0.000000 0.000000X( 2, 2) 0.000000 0.000000X( 2, 3) 150.0000 0.000000X( 3, 1) 69.16460 0.000000X( 3, 2) 90.83540 0.000000X( 3, 3) 0.000000 0.000000Row Slack or Surplus Dual Price1 801000.0 1.0000002 4000.000 0.0000003 5400.000 0.0000004 1500.000 0.0000005 2000.000 0.0000006 3000.000 0.0000007 1500.000 0.0000008 0.000000 938.70269 0.000000 924.958810 0.000000 954.508011 600.0000 0.00000012 1000.000 0.00000013 800.0000 0.000000所得方案與matlab一致,即輪船前艙應(yīng)裝載A,B,C三種貨物各207,0,69件;輪船中艙應(yīng)裝載A,B,C三種貨物各318,0,91件;輪船后艙應(yīng)裝載A,B,C三種貨物各75,150,0件,才能使運(yùn)費(fèi)收入最大且滿足其他條件。
相對(duì)于matlab,Lingo在LP問題上有著極其突出的優(yōu)勢(shì),操作簡單,不易出錯(cuò)!
總結(jié)
以上是生活随笔為你收集整理的线性规划 - 用单纯形法解决LP问题 - (Matlab、Lingo建模)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AcWing之二维数组的查找
- 下一篇: python编程入门课_程序设计入门—P