当前位置:文档之家› 最优化方法(线性规划)——用Lingo对线性规划进行灵敏度分析

最优化方法(线性规划)——用Lingo对线性规划进行灵敏度分析

lingo 软件求解线性规划及灵敏度分析注:以目标函数最大化为例进行讨论,对求最小的问题,有类似的分析方法!所有程序运行环境为lingo10。

一、用lingo 软件求解线性规划例1:m a x 23..43103512,0z x ys t x y x y x y =++≤+≤≥在模型窗口输入:model:max=2*x+3*y;4*x+3*y<=10;3*x+5*y<12;! the optimal value is :7.454545 ;End如图所示:运行结果如下(点击 工具栏上的‘solve ’或点击菜单‘lingo ’下的‘solve ’即可):Global optimal solution found. Objective value: 7.454545(最优解函数值)Infeasibilities: 0.000000Total solver iterations: 2(迭代次数)Variable (最优解) Value Reduced CostX 1.272727 0.000000Y 1.636364 0.000000Row Slack or Surplus Dual Price1 7.454545 1.0000002 0.000000 0.9090909E-013 0.000000 0.5454545例2:12123124125m a x 54..39028045z x x s t x x x x x x x x x x =+++=++=++=≥在模型窗口输入:model:max=5*x1+4*x2;x1+3*x2+x3=90;2*x1+x2+x4=80;x1+x2+x5=45;end运行(solve )结果如下:Global optimal solution found.Objective value: 215.0000Infeasibilities: 0.000000Total solver iterations: 3Variable Value Reduced CostX1 35.00000 0.000000X2 10.00000 0.000000X3 25.00000 0.000000X4 0.000000 1.000000X5 0.000000 3.000000Row Slack or Surplus Dual Price1 215.0000 1.0000002 0.000000 0.0000003 0.000000 1.0000004 0.000000 3.000000例323123234235m in 2..22312z x x s t x x x x x x x x x x =-+-+=-+=-+=≥在模型窗口输入:model:min=-x2+2*x3;x1-2*x2+x3=2;x2-3*x3+x4=1;x2-x3+x5=2;end运行结果如下:Global optimal solution found.Objective value: -1.500000Infeasibilities: 0.000000Total solver iterations: 2Variable Value Reduced CostX2 2.500000 0.000000X3 0.5000000 0.000000X1 6.500000 0.000000X4 0.000000 0.5000000X5 0.000000 0.5000000Row Slack or Surplus Dual Price1 -1.500000 -1.0000002 0.000000 0.0000003 0.000000 0.50000004 0.000000 0.5000000例4:(非线性)m in ..124x y zs t x y x z +++≤+= 在模型窗口输入:model :min =@abs (x)+@abs (y)+@abs (z);x+y<=1;2*x+z=4;@free (x);@free (y);@free(z);End求解器状态如下:(可看出是非线性模型!)运行结果为:Linearization components added:Constraints: 12Variables: 12Integers: 3Global optimal solution found.Objective value:(最优解函数值) 3.000000Objective bound: 3.000000 Infeasibilities: 0.000000Extended solver steps: 0Total solver iterations: 3Variable(最优解) Value Reduced Cost X 2.000000 0.000000Y -1.000000 0.000000 Z 0.000000 0.000000Row Slack or Surplus Dual Price1 3.000000 -1.0000002 0.000000 1.0000003 0.000000 -1.000000二、用lingo软件进行灵敏度分析实例例5:m a x 603020864842 1.5202 1.50.585,,0S x y zx y z x y z x y z y x y z =++++≤++≤++≤≤≥ 在模型窗口输入:Lingo 模型:model:max=60*x+30*y+20*z;8*x+6*y+z<48;4*x+2*y+1.5*z<20;2*x+1.5*y+0.5*z<8;y<5;end(一)求解报告(solution report )通过菜单Lingo →Solve 可以得到求解报告(solution report )如下:Global optimal solution found at iteration: 0Infeasibilities: 0.000000Objective value: 280.0000Total solver iterations: 2Variable Value Reduced CostX 2.000000 0.000000Y 0.000000 5.000000Z 8.000000 0.000000Row Slack or Surplus Dual Price1 280.0000 1.0000002 24.00000 0.0000003 0.000000 10.000004 0.000000 10.000005 5.000000 0.000000分析Value,Reduced Cost ,Slack or Surplus ,Dual Price 的意义如下:1、最优解和基变量的确定Value 所在列给出了问题的最优解。

由于基变量取值非零,因此Value 所在列取值非零的决策变量x,z 是基变量。

2、差额成本Reduced Cost (或opportunity cost )所在列的三个数值表示当决策变量取值增加一个单位时,目标函数值的减少量。

例如:第2个数5表示当变量y 增加一个单位时,最优目标函数值减少的量。

例如:当y=1时,最优目标函数值为280-5=275。

可通过如下模型可检验:model:max=60*x+30*y+20*z;8*x+6*y+z<48;4*x+2*y+1.5*z<20;2*x+1.5*y+0.5*z<8;y<5;y=1;end注:(1)换一个角度说,就是目标函数中变量y的系数至少增加5,那么生产y才会有利!(2)基变量的Reduced Cost值为0,只有非基变量的Reduced Cost值才可能不为0;故由value,和Reduced Cost值分析可知y为非基变量。

3、松弛变量取值Slack or Surplus所在列的各数表示各行的松弛变量的取值。

目标函数行的Slack or Surplus 值没啥意义,不用考虑。

可通过如下模型检验:model:max=60*x+30*y+20*z;8*x+6*y+z+s1=48;4*x+2*y+1.5*z+s2=20;2*x+1.5*y+0.5*z+s3=8;y+s4=5;end4、对偶价格(影子价格)Dual Price所在列的各数表示相应约束条件的右端常数增加一个单位时,最优目标函数值的增加量。

注,只有紧约束行的Dual Price值不为0。

例如:要检验第三行约束,可通过如下模型:model:max=60*x+30*y+20*z;8*x+6*y+z<48;4*x+2*y+1.5*z<21;2*x+1.5*y+0.5*z<8;y<5;end(二)灵敏度分析报告首先设置:Lingo→Options→General solver→Dual computations→Prices and Range。

当求解完成后,最小化求解报告窗口,然后点击菜单Lingo→Range,可得灵敏度分析报告:Ranges in which the basis is unchanged:Objective Coefficient RangesCurrent Allowable Allowable Variable Coefficient Increase DecreaseX 60.00000 20.00000 4.000000 Y 30.00000 5.000000 INFINITY Z 20.00000 2.500000 5.000000Righthand Side RangesRow Current Allowable AllowableRHS Increase Decrease2 48.00000 INFINITY 24.000003 20.00000 4.000000 4.0000004 8.000000 2.000000 1.3333335 5.000000 INFINITY 5.000000分析Objective Coefficient Ranges ,Righthand Side Ranges 的意义如下:(不必控制变量,可以同时改变多个值)1、目标函数中系数的变化对最优基的影响Objective Coefficient Ranges 表示目标函数行各系数在某个范围内变化时,最优基保持不变。

以变量x 的系数为例:当x 的系数在()6046020-+(开区间)内取值时,最优基保持不变。

此时,最优解不变,最优目标函数值变了。

例如:可通过如下模型检验:model:max=56.0001*x+30*y+20*z;8*x+6*y+z<48;4*x+2*y+1.5*z<20;2*x+1.5*y+0.5*z<8;y<5;end2、约束条件右端常数变化对最优基的影响Righthand Side Ranges 表示约束右端项各数在某个范围内变化时,最优基保持不变。

相关主题