Lingo与线性规划

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Lingo 与线性规划

线性规划的标准形式是

1111111..0,1,2,,n n m mn n m i a x a x b s t a x a x b x i n

+≤⎧⎪⎪

+≤⎪⎪≥=⎩L M L L (1) 其中11n n z c x c x =++L 称为目标函数,自变量i x 称为决策变量,不等式组(1)称为约束条件.

满足不等式组(1)的所有1(,,)n x x L 的集合称为可行域,在可行域里面使得z

取最小值的**

1(,,)n x x L 称为最优解,最优解对应的函数值称为最优值。

求解优化模型的主要软件有Lingo 、Matlab 、Excel 等。其中Lingo 是一款专业求解优化模型的软件,有其他软件不可替代的方便功能。本文将简要介绍其在线性规划领域的应用。

一、基本规定

1、目标函数输入格式

max=函数解析式; 或者 min=函数解析式; 2、约束条件输入格式

利用:>、<、>=、<=等符号。但是>与>=没有区别。Lingo 软件默认所以自变量都大于等于0.

3、运算

加(+),减(-),乘(*),除(/),乘方(x^a),要注意乘号(*)不能省略。 4、变量名

不区分大小写字母,不超过32个字符,必须以字母开头。 5、标点符号

每个语句以分号“;”结束,感叹号“!”开始的是说明语句(说明语句也需要以分号“;”结束)。但是,model ,sets ,data 以“:”结尾。endsets ,enddata ,end 尾部不加任何符号。

6、命令不考虑先后次序

7、MODEL 语句

一般程序必须先输入MODEL :表示开始输入模型,以“END”结束。对简单的模型,这两个语句也可以省略。

8、改变变量的取值范围

@bin(变量名); 限制该变量为0或1. @bnd(a,变量名,b ); 限制该变量介于a,b 之间. @free(变量名); 允许该变量为负数. @gin(变量名); 限制该变量为整数. 例1 求目标函数1223z x x =+的最小值,约束条件为 输入Lingo 程序: min = 2*x1 + 3*x2; x1 + x2 >= 350; x1 >= 100; 2*x1 + x2 <= 600; 有两种运行方式:

1、点击工具条上的按钮 即可。

2、点击菜单:LINGO →Solve 运行结果如下: 下面对其各个部分进行说明:

Global optimal solution found :表示已找到全局最优解。

Objective value :表示最优值的大小。可见本题函数最小值min z =800。 Infeasibilities :矛盾约束的数目。

Total solver iterations:迭代次数。 Variable :变量。本题有两个变量。

Value :变量对应的最优解,即12250,100x x ==。

Reduced Cost :变量i x 在最优解的基础上增加一个单位,目标函数值的改变量。例如,一个变量的Reduced Cost 值为8,那么当该变量增加一个单位,在最大化(最小化)问题中目标函数值将减少(增大)8个单位。

Slack or Surplus :表示接近等于的程度,即约束离相等还差多少。在约束条件是<=中,表示松弛程度,在约束条件是>=中,不是过剩程度。如果约束条件是=,则Slack or Surplus 为0,该约束是个紧约束(或有效约束)。如果一个约束是矛盾的,即模型无可行解则Slack or surplus 的值是负数。

知道Slack or Surplus 的值,可以帮助我们发现优化模型中错误的约束条件。在上例中第2和第4行松弛变量均为0,说明对于最优解来讲,两个约束(第2和4行)均取等号,即都是紧约束,第3行为150,即最优解使得第3行过剩150. Dual Price :对偶价格的值,它表示约束条件中的常数,每增加一个单位,目标函数值改变的数量(在最大化问题中目标函数值是增加,在最小化问题中目标函数值是减少)。比如,在上一个Min 模型中第四行的1,表示2*x1 + x2 <= 600增加一个单位到2*x1 + x2 <= 601,可以使目标值增加-1(因为第一行是目标函数的Dual Price 是-1),即Objective value = 799; 如果增加-1个单位到599会使目标值增加到801。

例2求目标函数2221234212z x x x =-++的最小值,约束条件为 输入Lingo 程序:

min = 4*x1^2-x2^2+2*x3^2+12; 3*x1+2*x2+x3=9; x1+x2+x3=-1;

@free(x1); @free(x2); @free(x3); 运行结果:

即当1231,8,10x x x ===-时,min 152z =。

二、灵敏度分析

灵敏度分析是指:找出模型变量系数的一个变化范围,使得最优基(即最优解)保持不变。一般只对线性规划模型做灵敏度分析。

1、灵敏度分析操作步骤

第一步:菜单lingo-->options-->general solver-->dual computations:prices & ranges-->ok.

第二步:菜单lingo-->range

2、灵敏度报告中常见的词汇

Current coefficient:当前目标函数系数

Allowable increase:允许增加量

Allowable decrease:允许减少量

Current RHS:当前右边常数项

INFINITY:表示正无穷。

例1 求解下列模型:

max = 72*x1+64*x2;

x1+x2 <= 50;

12*x1+8*x2 <= 480;

3*x1 <= 100;

并做灵敏度分析。

求解报告:

灵敏度分析报告:

灵敏度分析报告的解读:

x1的系数变化范围是(72-8,72+24)=(64,96);x2的系数变化范围是(64-16,64+8)=(48,72)。注意:x1系数的允许范围需要x2系数64不变,反之亦然。由于目标函数的费用系数变化并不影响约束条件,因此此时最优基不变可以保证最优解也不变,但最优值变化。

右边常数项中,第2行原来为50,当它在[50-,50+10] = [,60]范围变化时,最优基保持不变。第3行可以类似解释。对第4行,原来为100,当它在[100-40,100+∞] = [60,+∞]范围变化时,最优基保持不变。不过由于此时约束发生变化,最优基即使不变,最优解、最优值也会发生变化。

三、数据输入

对于大型的优化问题,即自变量比较多的时候,还像上两节那样输入目标函

相关文档
最新文档