lingo-lindo简介

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

Lingo、lindo简介
一、软件概述 (1)
二、快速入门 (4)
三、Mathematica函数大全--运算符及特殊符号 (11)
参见网址: /
一、软件概述
(一)简介
LINGO软件是由美国LINDO系统公司研发的主要产品。

LINGO是Linear Interactive and General Optimizer的缩写,即交互式的线性和通用优化求解器。

LINGO可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解等,功能十分强大,是求解优化模型的最佳选择。

其特色在于
内置建模语言,提供十几个内部函数,可以允许决策变量是整数(即整数规划,包括 0-1 整数规划),方便灵活,而且执行速度非常快。

能方便与EXCEL,数据库等其他软件交换数据。

LINGO实际上还是最优化问题的一种建模语言,包括许多常用的函数可供使用者建立优化模型时调用,并提供与其他数据文件(如文本文件、Excel 电子表格文件、数据库文件等)的接口,易于方便地输入、求解和分析大规模最优化问题。

(二)LINGO的主要特点:
Lingo 是使建立和求解线性、非线性和整数最佳化模型更快更简单更
有效率的综合工具。

Lingo 提供强大的语言和快速的求解引擎来阐述和求
解最佳化模型。

1 简单的模型表示
LINGO 可以将线性、非线性和整数问题迅速得予以公式表示,并且容易阅读、了解和修改。

LINGO的建模语言允许您使用汇总和下标变量以一种易懂的直观的方式来表达模型,非常类似您在使用纸和笔。

模型更加容易构建,更容易理解,因此也更容易维护。

2 方便的数据输入和输出选择
LINGO 建立的模型可以直接从数据库或工作表获
取资料。

同样地,LINGO 可以将求解结果直接输出到数据库或工作表。

使得您能够在您选择的应用程序中生成报告。

3 强大的求解器
LINGO拥有一整套快速的,内建的求解器用来求解线性的,非线性的(球面&非球面的),二次的,二次约束的,和整数优化问题。

您甚至不需要指定或启动特定的求解器,因为LINGO会读取您的方程式并自动选择合适的求解器。

4交互式模型或创建Turn-key应用程序
您能够在LINGO内创建和求解模型,或您能够从您自己编写的应用程序中直接调用LINGO。

对于开发交互式模型,LINGO提供了一整套建模环境来构建,求解和分析您的模型。

对于构建turn-key解决方案,LINGO提供的可调用的DLL 和OLE界面能够从用户自己写的程序中被调用。

LINGO也能够从Excel宏或数据库应用程序中被直接调用。

5 广泛的文件和HELP功能
LINGO附带您需要快速开始使用LINGO的所有工具。

LINGO用户手册包含对Lingo所有命令和特征的深度说明。

这是一本综合教科书,讨论了所有主要的线性,整数和非线性优化问题分类。

LINGO同时还带有许多基于真实世界的实例。

(三)LINGO的应用
LINGO 是最优化问题的一种建模语言,包括许多常用的函数可供使用者建立优化模型时调用,并提供与其他数据文件(如txt、Excel电子表格文件、数据库文件等)的接口,易于方便地输入、求解和分析大规模最优化问题。

由于这些特点,Lindo系统公司的线性、非线性和整数规划求解程序已经被全世界数千万的公司用来做最大化利润和最小化成本的分析。

LINGO 的主要应用范围包含:生产线规划、运输、财务金融、投资分配、资本预算、混合排程、库存管理、资源配置等等。

LINGO 软件作为著名的专业优化软件,其功能比较强、计算效果比较好,与那些包含部分优化功能的非专业软件相比,通常具有明显的优势。

此外,LINGO 软件使用起来非常简便,很容易学会,在优化软件(尤其是运行于个人电脑上的优化软件)市场占有很大份额,在国外运筹学类的教科书中也被广泛用做教学软件。

(四)步骤
一般地,使用LINGO 求解运筹学问题可以分为以下两个步骤来完成:
1)根据实际问题,建立数学模型,即使用数学建模的方法建立优化模型;
2)根据优化模型,利用LINGO 来求解模型。

主要是根据LINGO 软件,把数学模型转译成计算机语言,借助于计算机来求解。

例题:在线性规划中的应用
max Z =5 X1+3 X2+6X3,
s.t. X1 +2 X2 + X3 ≤18
2 X1 + X2 +
3 X3 =16
X1 + X2 + X3 =10
X1 ,X2 ≥0 , X3 为自由变量
应用LINGO 来求解该模型,只需要在 lingo窗口中输入以下信息即可:max=5•x1 +3•x2 +6•x3 ;
x1 +2•x2 + x3 <=18 ;
2•x1 + x2+3•x3 =16 ;
x1 + x2 + x3 =10 ;
@free( x3) ;
然后按运行按钮,得到模型最优解,具体如下:
Objective value: 46.00000
Variable Value Reduced Cost
x1 14.00000 0.000000
x2 0.000000 1.000000
x3 -4 .000000 0.000000
由此可知,当 x1 =14 , x2 =0 , x3 =-4 时,模型得到最优值,且最优值为 46。

说明:在利用LINGO求解线性规划时,如自变量都为非负的话,在LINGO 中输入的信息和模型基本相同;如自变量为自由变量,可以使用函数 @free
来把系统默认的非负变量定义自由变量,如实例一中的 x3。

二、快速入门
LINDO是一种专门用于求解数学规划问题的软件包。

由于LINDO执行速度很快、易于方便输入、求解和分析数学规划问题。

因此在数学、科研和工业界得到广泛应用。

LINDO主要用于解线性规划、二次规划和整数规划等问题。

也可以用于一些非线性和线性方程组的求解以及代数方程求根等。

LINDO中包含了一种建模语言和许多常用的数学函数(包括大量概论函数),可供使用者建立规划问题时调用。

一般用LINDO(Linear Interactive and Discrete Optimizer)解决线性规划(LP—Linear Programming)、整数规划(IP—Integer Programming)问题。

其中LINDO 6 .1 学生版至多可求解多达300个变量和150个约束的规划问题。

其正式版(标准版)则可求解的变量和约束在1量级以上。

LINGO则用于求解非线性规划(NLP—NON—LINEAR PROGRAMMING)和二次规则(QP—QUARATIC PROGRAMING)。

其中LINGO 6.0学生版最多可版最多达300个变量和150个约束的规则问题,其标准版的求解能力亦在10^4量级以上。

虽然LINDO和LINGO不能直接求解目标规划问题,但用序贯式算法可分解成一个个LINDO和LINGO能解决的规划问题。

要学好用这两个软件最好的办法就是学习他们自带的HELP文件。

下面拟举数例以说明这两个软件的最基本用法。

例1汽油混合问题,线性规划问题
一种汽油的特性可用两个指标描述:其点火性用“辛烷数”描述,其挥发性用“蒸汽压力”描述。

某炼油厂有四种标准汽油,设其标号分别为1,2,3,4,其特性及库存量列于下表1中,将上述标准汽油适量混合,可得两种飞机汽油,某标号为1,2,这两种飞机汽油的性能指标及产量需求列于表2中。

问应如何根据库存情况适量混合各种标准汽油,使既满足飞机汽油的性能指标,而产量又为最高。

(又使2号汽油满足需求,并使得1号汽油产量最高?)
目标函数:max z=x1+x2+x3+x4
约束条件:x5+x6+x7+x8>=250000
x1+x5<=380000
x2+x6<=265200
x3+x7<=408100
x4+x8<=130100
2.85x1-1.42x2+4.27x3-18.49x4>=0
2.85x5-1.42x6+4.27x7-18.49x8>=0
16.5x1+2.0x2-4.0x3+17x4>=0
7.5x5-7.0x6-13.0x7+8.0x8>=0
xj>=0(j=1,2 (8)
下面我们就用LINDO来解这一优化问题。

输入语句:
max(不区分大小写) x1+x2+x3+x4
ST(大写或写subject to)
x5+x6+x7+x8>=250000
x1+x5<=380000
x2+x6<=265200
x3+x7<=408100
x4+x8<=130100
2.85x1-1.42x2+4.27x3-18.49x4>=0
2.85x5-1.42x6+4.27x7-18.49x8>=0
16.5x1+2.0x2-4.0x3+17x4>=0
7.5x5-7.0x6-13.0x7+8.0x8>=0
End
然后再按运算符键即可得结果。

LINDO是规定Xj非负的,我们可发现输入方式与我们的数学书写的形式基本一致,运算后,计算机会问您是否需要灵敏度分析,我们选择是,结果如下:
Global optimal solution found.
Objective value: 933400.0
Total solver iterations: 7
Variable Value Reduced Cost
X1 264937.9 0.000000
X2 135702.1 0.000000
X3 408100.0 0.000000
X4 124660.0 0.000000
X5 115062.1 0.000000
X6 129497.9 0.000000
X7 0.000000 0.000000
X8 5440.011 0.000000
Row Slack or Surplus Dual Price
1 933400.0 1.000000
2 0.000000 -1.000000
3 0.000000 1.000000
4 0.000000 1.000000
5 0.000000 1.000000
6 0.000000 1.000000
7 0.000000 0.000000
8 43454.00 0.000000
9 5129700. 0.000000
10 0.000000 0.000000
Ranges in which the basis is unchanged:
Objective Coefficient Ranges
Current Allowable Allowable Variable Coefficient Increase Decrease X1 1.000000 0.0 0.0
X2 1.000000 0.0 0.0
X3 1.000000 INFINITY 0.0
X4 1.000000 15.13186 0.0
X5 0.0 0.0 0.0
X6 0.0 0.0 0.0
X7 0.0 0.0 INFINITY
X8 0.0 0.0 1.162101
Righthand Side Ranges
Row Current Allowable Allowable RHS Increase Decrease
2 250000.0 261836.
3 182249.1
3 380000.0 41014.33 15247.02
4 265200.0 30601.41 82317.48
5 408100.0 27374.90 10176.58
6 130100.0 2350.135 6321.840
7 0.0 43454.00 116890.8
8 0.0 43454.00 INFINITY
9 0.0 5129700. INFINITY
10 0.0 1890676. 396936.1
下面给出其结果的一般解释:
“LP OPTIMUM FOUND AT STEP 7”表示LINDO在(用单纯形法)7次迭代或旋转后得到最优解。

“OBJECTIVE FUNCTION VALUE 1)933400.0”表示最优目标值为933400。

“VALUE”给出最优解中各变量的值。

“SLACK OR SURPLUS”给出松弛变量的值。

上例中SLK 2= 第二行松弛变量=0(模型第一行表示目标函数,所以第二行对应第一个约束)
“REDUCE COST”列出最优单纯形表中判别数所在行的变量的系数,表示当变量有微小变动时,目标函数的变化率,其中基变量的reduce cost 值应为0,对于非基变量Xj相应的reduce cost值表示Xj增加一个单位(此时假定其他非基变量保持不变)时目标函数减小的量(max 型问题)。

上例中:X1 对应的 reduce cost 值为0,表示当X1=1 时,目标函数值不变。

“DUAL PRICE”(对偶价格)列出最优单纯形表中判别数所在行的松弛变量的系数,表示当对应约束有微小变动时,目标函数的变化率,输出结果中对应每一个约束有一个对偶价格。

若其数值为X,表示对应约束中不等式右端项若增加一个单位,目标函数将增加X个单位(max 型问题)。

上例中:第二行对应的对偶价格值应为-1表示当约束2)X5 + X6 + X7 + X8>250000变为2)X5 + X6 + X7 + X8>250001时,
目标函数值=933400-1=933399
当REDUCE COST 或DUAL PRICE 的值为0。

表示当微小扰动不影响目标函数。

有时,通过分析DUAL PRICE,也可对产生不可行问题的原因有所了解。

灵敏度分析:如果做敏感性分析,则系统报告当目标函数的费用系数和约束右端项在什么范围变化(此时假定其他系数保持不变)时,最优基保持不变。

报告中INFINITY表示正无穷,如上例:目标函数中X1的变量系数为1,当它在[1-1.154137,1-0]=
[-0.154137,1] 变化时,最优基保持不变。

第一个约束右端项为250000,当它在
[250000-234752.984375,250000+186222.0625]=[15247.015625,436222.0625] 范围变化时,最优基保持不变。

当您要判断表达式输入是否有错误时,也可以使用菜单“Reports”的“Picture”选项。

若想获得灵敏度分析,可用“Reports“的”Rang“选项。

若需显示单纯形表,可执行“Reports“的”Tab lean“选项。

注意事项:
1)目标函数及各约束条件之间一定要有“Subject to (ST) ”分开。

2)变量名不能超过8个字符。

3)变量与其系数间可以有空格,但不能有任何运算符号(如乘号“*”等)。

4)要输入<=或>=约束,相应以<或>代替即可。

5)一般LINDO中不能接受括号“()“和逗号“,“,例:400(X1+X2) 需写成400X1+400X2;10,000需写成10000。

6)表达式应当已经过简化。

不能出现 2 X1+3 X2-4 X1,而应写成-2X1+3 X2。

例2.有四个工人,要分别指派他们完成四项不同的工作,每个人做各项工作所消耗的时间如表。

问应该如何指派,才能使总的消耗时间为最小?
A B C D
工作
所耗时间
工人
甲 15 18 21 24
乙 19 23 22 18
丙 26 17 16 19
丁 19 21 23 17
注意到每人只能做一项工作。

每项工作一人做。

我们得到目标函数为约束条件:min
15x11+19x21+26x31+19x41+18x12+23x22+17x32+21x42+24x13+22x23+16x33+23x 43+24x14+18x24+19x34+17x44
ST
x11+x12+x13+x14=1
x21+x22+x23+x24=1
x31+x32+x33+x34=1
x41+x42+x43+x44=1
x11+x21+x31+x41=1
x12+x22+x32+x42=1
x13+x23+x33+x43=1
x14+x24+x34+x44=1
end
int 16
运行后我们可得到最优目标值为70
当做事时候为1 ,其余为0时。

(具体的Reports 我们略去)
在用LINDO解整数规划(IP)问题时,只要在END后加上标识即可,其中解0/1规划的用命令。

INT name 或 INT n (n 指前n 个变量标识为0/1型)解混合型整数规划则用GIN 来标识。

LINDO解整数规划对变量的限制为50个。

(指LINDO 6.1学生版)。

所以说,尽管LINDO对整数规划问题是很有威力。

要有效地使用还是需要一定技术的。

这是因为,人们很容易将一个本质上很简单的问题列成一个输入模型。

从而有可能会导致一个冗长的分支定界计算。

例3. 用LINDO解目标规划
由于LINDO不能直接求解目标规划问题,这是否就意味着LINDO失去了效力呢?不是的。

由求解目标规划问题的有效算法——序贯式算法可知其实目标规划我们常采取分解成前面二种办法而已。

例如算:min a=((d1_+d1),(2d2+d3))
G1:x1-10x2+d1_-d1=50
G2:3x1+5x2+d2_-d2=20
G3:8x1+6x2+d3_-d3=100
xi(i=1,2),dj_,dj(j=1,2,3)>=0
先求目标函数的最优值
min d1_+d1
ST
x1-10x2+d1_-d1=50
3x1+5x2+d2_-d2=20
end
求得D1_+D1 的最优值为0
然后再求
min 2d2+d3
ST
x1-10x2+d1_-d1=50
3x1+5x2+d2_-d2=20
8x1+6x2+d3_-d3=100
d1_+d1=0
end
即可算得第二级最优值2d2+d3
例4. LINDO虽亦可求解二次规划问题。

(但我认为它在输入对不如用LINGO方便,用LINDO输入时要先作偏导数计算不如LINGO哪样可直接输入。

(选自《运筹学基础》P190.习题4.10
min f(x)=(x1-1)^2+(x2-2)^2
x2-x1=1
x1+x2<=2
x1>=0,x2>=0
先来说一说如何使用LINGO
一般来说LINGO多用于解决大规模数学规划。

用时要注意以下几点:
(1)每条语句后必须使用分号“;”结束。

问题模型必须由MODEL命令开始,END结束。

(2)用MODEL命令来作为输入问题模型的开始,格式为MODEL:statement (语句)。

(3)目标函数必须由“min =”或“max =”开头。

则上面的例子的输入就为
modul:
min=(x1-1)^2+(x2-2)^2;
x2-1=1;
x1+x2<=2;
end
我们即可得到最优值0.5。

当X1=0.5,X2=1.5,及灵敏度分析。

我们还可得作图分析。

对于大规模规划求解请参见LINGO的HELP文件。

三、Mathematica函数大全--运算符及特殊符号
1、运算符及特殊符号
Line1; 执行Line,不显示结果
Line1,line2 顺次执行Line1,2,并显示结果
?name 关于系统变量name的信息
??name 关于系统变量name的全部信息
!command 执行Dos命令
n! N的阶乘
!!filename 显示文件内容
<<filename 读入文件并执行
Expr>> filename 打开文件写
Expr>>>filename 打开文件从文件末写
() 结合率
[] 函数
{} 一个表
<*Math Fun*> 在c语言中使用math的函数
(*Note*) 程序的注释
#n 第n个参数
## 所有参数
rule& 把rule作用于后面的式子
% 前一次的输出
%% 倒数第二次的输出
%n 第n个输出
var::note 变量var的注释
"Astring " 字符串
Context ` 上下文
a+b 加
a-b 减
a*b或a b 乘
a/b 除
a^b 乘方
base^^num 以base为进位的数
lhs&&rhs 且
lhs||rhs 或
!lha 非
++,-- 自加1,自减1
+=,-=,*=,/= 同C语言
>,<,>=,<=,==,!= 逻辑判断(同c)
lhs=rhs 立即赋值
lhs:=rhs 建立动态赋值
lhs:>rhs 建立替换规则
lhs->rhs 建立替换规则
expr//funname 相当于filename[expr]
expr/.rule 将规则rule应用于expr
expr//.rule 将规则rule不断应用于expr知道不变为止
param_ 名为param的一个任意表达式(形式变量)
param__ 名为param的任意多个任意表达式(形式变量)2、系统常数
Pi 3.1415....的无限精度数值
E 2.17828...的无限精度数值
Catalan 0.915966..卡塔兰常数
EulerGamma 0.5772....高斯常数
GoldenRatio 1.61803...黄金分割数
Degree Pi/180角度弧度换算
I 复数单位
Infinity 无穷大
-Infinity 负无穷大
ComplexInfinity 复无穷大
Indeterminate 不定式
3、代数计算
Expand[expr] 展开表达式
Factor[expr] 展开表达式
Simplify[expr] 化简表达式
FullSimplify[expr] 将特殊函数等也进行化简
PowerExpand[expr] 展开所有的幂次形式
ComplexExpand[expr,{x1,x2...}] 按复数实部虚部展开
FunctionExpand[expr] 化简expr中的特殊函数
Collect[expr, x] 合并同次项
Collect[expr, {x1,x2,...}] 合并x1,x2,...的同次项
Together[expr] 通分
Apart[expr] 部分分式展开
Apart[expr, var] 对var的部分分式展开
Cancel[expr] 约分
ExpandAll[expr] 展开表达式
ExpandAll[expr, patt] 展开表达式
FactorTerms[poly] 提出共有的数字因子
FactorTerms[poly, x] 提出与x无关的数字因子
FactorTerms[poly, {x1,x2...}] 提出与xi无关的数字因子
Coefficient[expr, form] 多项式expr中form的系数
Coefficient[expr, form, n] 多项式expr中form^n的系数
Exponent[expr, form] 表达式expr中form的最高指数
Numerator[expr] 表达式expr的分子
Denominator[expr] 表达式expr的分母
ExpandNumerator[expr] 展开expr的分子部分
ExpandDenominator[expr] 展开expr的分母部分
TrigExpand[expr] 展开表达式中的三角函数
TrigFactor[expr] 给出表达式中的三角函数因子
TrigFactorList[expr] 给出表达式中的三角函数因子的表
TrigReduce[expr] 对表达式中的三角函数化简
TrigToExp[expr] 三角到指数的转化
ExpToTrig[expr] 指数到三角的转化
RootReduce[expr]
ToRadicals[expr]。

相关文档
最新文档