matlab、lingo程序代码23-线性规划问题及灵敏度分析.doc
《matlab、lingo程序代码23-线性规划问题及灵敏度分析.doc》由会员分享,可在线阅读,更多相关《matlab、lingo程序代码23-线性规划问题及灵敏度分析.doc(5页珍藏版)》请在冰点文库上搜索。
![matlab、lingo程序代码23-线性规划问题及灵敏度分析.doc](https://file1.bingdoc.com/fileroot1/2023-5/11/4b739339-b005-4aad-9189-867d07eb10fb/4b739339-b005-4aad-9189-867d07eb10fb1.gif)
线性规划问题及灵敏度分析在LINGO软件中的实现
(龙少波李东阳罗添元)
一、问题的提出:
某公司饲养实验用的动物以出售给动物研究所,已知这些动物的生长对饲料中3种营养成分(蛋白质、矿物质和维生素)特别敏感,每个动物每周至少需要蛋白质60g,矿物质3g,维生素8mg,该公司能买到5种不同的饲料,每种饲料1kg所含各种营养成分和成本如下表所示,如果每个小动物每周食用饲料不超过52kg,才能满足动物生长需要。
A1
A2
A3
A4
A5
营养最低
要求
蛋白质(g)
0.3
2
1
0.6
1.8
60
矿物质(g)
0.1
0.05
0.02
0.2
0.05
3
维生素(mg)
0.05
0.1
0.02
0.2
0.08
8
成本(元/kg)
0.2
0.7
0.4
0.3
0.5
问题:
1.求使得总成本最低的饲料配方?
2.如果另一个动物研究对蛋白质的营养要求变为59单位,但是要求动物的价格比现在的价格便宜0.3元,问该养殖所值不值得接受?
3.由于市场因素的影响,X2的价格降为0.6元每千克,问是否要改变饲料配方?
二、建立线性规划数学模型
解答:
(1)设需要饲料A1,A2,A3,A4分别为X1,X2,X3,X4kg,则建立线性规划数学模型如下:
目标函数:
MinS=0.2X1+0.7X2+0.4X3+0.3X4+0.5X5
约束条件:
0.3X1+2X2+X3+0.6X4+1.8X5>=60
0.1X1+0.05X2+0.02X3+0.2X4+0.05X5>=3
005X1+0.1X2+0.02X3+0.2X4+0.08X5>=8
X1+X2+X3+X4+X5<=52
X1,X2,X3,X4,X5>=0
三、在LINGO软件中的求解
在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;
end
操作:
选菜单Lingo|Solve(或按Ctrl+S),或用鼠标点击“求解”按纽,如果模型有语法错误,则弹出一个标题为“LINGOErrorMessage”(错误信息)的窗口,指出在哪一行有怎样的错误,每一种错误都有一个编号(具体含义可查阅相关文献或LINGO的Help).改正错误以后再求解,如果语法通过,LINGO用内部所带的求解程序求出模型的解,然后弹出一个标题为“LINGOSolverStatus”(求解状态)的窗口,其内容为变量个数、约束条件个数、优化状态、耗费内存、所花时间等信息,点击Close关闭窗口,屏幕上出现标题为“SolutionReport”(解的报告)的信息窗口,显示优化计算(线性规划中换基迭代)的步数、优化后的目标函数值、列出各变量的计算结果.
输出结果如下:
Globaloptimalsolutionfoundatiteration:
4
Objectivevalue:
22.40000
VariableValueReducedCost
X10.0000000.7000000
X212.000000.000000
X30.0000000.6166667
X430.000000.000000
X510.000000.000000
RowSlackorSurplusDualPrice
122.40000-1.000000
20.000000-0.5833333
34.1000000.000000
40.000000-4.166667
50.0000000.8833333
四、结果分析:
(一)一般分析
1.因此,每周每个动物的配料为饲料A2、A4、A5分别为12、30和10kg,合计为52KG,可使得饲养成本达到最小,最小成本为22.4元;
2.“ReducedCost”表示当变量有微小变动时,目标函数的变化率。
其中基变量的reducedcost值应为0,对于非基变量Xj,相应的reducedcost值表示当某个变量Xj增加一个单位时目标函数增加的量。
变量X1对应的reducedcost值为0.7,表示当非基变量x1的值从0变为1时(此时假定其他非基变量保持不变,但为了满足约束条件,基变量显然会发生变化),最优的目标函数值=22.4+0.7=23.1。
3.“SlackorSurplus”给出松驰变量的值:
可以看出,蛋白质和维生素刚达到最低标准,矿物质超过最低标准4.1g;
4.“DUALPRICE”(对偶价格)表示当对应约束有微小变动时,目标函数的变化率。
输出结果中对应于每一个约束有一个对偶价格。
若其数值为p,表示对应约束中不等式右端项若增加1个单位,目标函数将增加p个单位(max型问题)。
显然,如果在最优解处约束正好取等号(也就是“紧约束”,也称为有效约束或起作用约束),对偶价格值才可能不是0.从“DualPrice”可以得到:
1.降低标准蛋白质1单位可使饲养成本降低0.583元,(第二个问题答案)
2.降低标准维生素1单位可使饲养成本降低4.167元,
3.降低矿物质的标准不会降低饲养成本,
4.如果动物的进食量减少,就必须选取精一些的饲料但要增加成本,大约进食量降低1kg可使得饲养成本增加0.88元.
(二)灵敏度分析
对于目标函数系数和约束条件右端常数项的灵敏度分析,可以通过LINGO软件求解的灵敏度分析给出.如果要看灵敏度分析结果,必须激活灵敏度计算功能才会在求解时给出灵敏度分析结果,默认情况下这项功能是关闭的.想要激活它,必须运行LINGO|Options…命令,选择GengralSolver,在DualComputation列表框中,选择PricesandRanges选项并确定.
Rangesinwhichthebasisisunchanged:
ObjectiveCoefficientRanges
CurrentAllowableAllowable
VariableCoefficientIncreaseDecrease
X10.2000000INFINITY0.7000000
X20.7000000INFINITY0.1358974
X30.4000000INFINITY0.6166667
X40.30000001.4000001.000000
X50.50000000.1247059INFINITY
RighthandSideRanges
RowCurrentAllowableAllowable
RHSIncreaseDecrease
260.000004.8000004.800000
33.0000004.100000INFINITY
48.0000000.34285710.48000004
552.000001.8461541.411765
(1)系数价格变化的分析:
目标函数中X1原来的费用系数为0.2,允许增加(AllowableIncrease)到无穷大、或者允许减少(AllowableDecrease)=0.7,说明当它在[0,+∞]范围变化时,最优基保持不变。
由于此时约束没有变化(只是目标函数中某个费用系数发生变化),所以最优基保持不变的意思也就是最优解不变(当然,由于目标函数中费用系数发生了变化,所以最优值会变化)。
对于X2来说,目标函数中原来的费用系数为0.7,允许增加(AllowableIncrease)到无穷大、或者允许减少(AllowableDecrease)=0.136,说明当它在[0.7-0.136,+∞]=[0.564,+∞]范围变化时,最优基保持不变。
(第三个问题答案)
(2)约束中右端项变化的分析:
第2行约束中右端项(RightHandSide,简写为RHS)原来为60,当它在[60-4.8,60+4.8]=[55.2,64.8]范围变化时,最优基保持不变。
第3、4、5行可以类似解释。
不过由于此时约束发生变化,最优基即使不变,最优解、最优值也会发生变化。