当前位置:文档之家› lingo操作介绍

lingo操作介绍

lingo操作介绍
lingo操作介绍

1.2 菜单介绍

1.2.1 File

1 New

新建一个窗口, 当你执行这个命令时, 会出现如下对话框:

你可以在对话框中选择你想要建立的类型. 类型如下:

1)扩展名为(*.lg4)

LG4格式是LINGO4.0的版本,是在Windows下最主要的储存文件格式, 这种格式支持字体格式, 自定义格式以及动态连接, LG4以二进制格式存储, 所以不能被其它的应用软件直接读取.

2)扩展名为(*.lng)

LNG是捷便的存储方式,是4.0版本前的标准文件格式,为了与前版本的兼容,所以还一直在用,LNG文件是以ASCII形式存储的,所以能被支持文本文件的应用程序读取.该格式不支持多种字体.

3)扩展名为(*.ltd)

LTD是数据文件, 可以从@FILE函数导入数据,@FILE函数只能读取文本文件,所以所有的LTD文件是以ASCII形式存储, 也不支持多种字体.

4)扩展名为(*.ltf)

LTF是LINGO的调试文件格式, 也是以ASCII格式存储,能直接被LINGO的File|Take command执行.

2 Log Output

输出文本文件,可以将随后原输出到报告窗口的内容输出到文本中. 该命令与Maple 中的writeto命令非常相似.

在Maple中输入如下:

> x:=sin(5.);

writeto("c://maple.txt");

y:=x+1:

print(x,y);

print(x);

> y;

> writeto(terminal);

> y;

执行菜单中的Edit|Excute|Worksheet, 按钮,窗口重新显示如下:

> x:=sin(5.);

writeto("c://maple.txt");

y:=x+1:

print(x,y);

print(x);

x:=-.9589242747

> y;

> writeto(terminal);

> y;

0.4010757253

而在C盘的maple.txt文件的内容为:

-.9589242747, .0410757253

-.9589242747

.0410757253

从中可以知道,用了writeto(filename)命令以后把结果输出到filename 中. 直到碰到writeto(terminal)命令时,才重新在工作窗口中显示.

当你点击菜单File|Log Output时,系统出现保存对话框,系统就会将命令窗口中的输出结果保存到指定的文件中.

3 Import LINDO File

该命令是用来导入LINDO软件保存的LINDO文件(*.LTX)格式. 只要在LINGO中导入LINDO文件格式, LINGO系统自动将该文件转化为LINGO可执行语句.

1.2.2 Edit

1 Paste Function

用该命令可以在当前点插入LINGO的内部函数,

2 Select Fonts

设置字体类型, 字体大小,字体颜色.

1.2.3 LINGO

1 Solve

用solve命令对当前窗口中的模型求解, 该命令只对report script窗口起作用, 不能对数据窗口求解.

当你对一个模型进行求解, LINGO首先检查该模型的语句格式是否正确, 如果LINGO 发现在语句中存在错误, 将会出现类似于如下的对话框:

在上图的Error Text框中, LINGO提示发生语句错误的行数及该行的内容. 在通常情况下, LINGO系统能很好的指出错误, 但是有时也会提供错误的信息.

如果在编译的过程中没有语法的错误, LINGO将调用适当的内部函数对模型进行优化求解. 假如我们在工作窗口输入如下内容:

点击菜单LINGO|SOLVE,或者点击工具栏,将会在屏幕上显示LINGO解的状态窗口(Solver Status Windows):

该状态窗口用于跟踪整个求解过程, 下面我们将详细的描写该窗口中的一些主要的内容.

1)按钮

在解的状态窗口提供了两个按钮, 一个为关闭按钮(Close), 另一个是打断(interrupt Solver)求解按钮,该按钮的作用是阻止LINGO求解下一个迭代. 在线性模型中,LINGO 一般能给出优化解(除整数规划时没有整数解),如果这线性模型被打断了,LINGO返回的将是无意义的, 应该被忽略的值.

注意:如果你按了interrupt solver这个按钮, 解的情况是这样的:

?毫无疑问这不是最优解;

?解可能不能全部满足约束条件;

?如果这个是线性模型,这个解毫无意义.

2)文本框

在该窗口中有一个文本框, 该文本框的作用是更新状态窗口的相隔时间, 单位为秒, 在默认时为2秒.

3)状态窗口(Solver Status Box)

状态窗口的详细的介绍如下:

其中

一旦LINGO处理完成该模型, 建立一个包括该模型解的报告(Solve Report)窗口. 你可以通过拉窗口的滚动条, 检查该窗口内部的内容. 该窗口如下:

第一:Solution Report告诉我们求该模型迭带的次数是0次;第二:该目标函数的最大值是1.285714;第三:取到最优值时变量X、Y分别为1.142857、0.1428571.

我们用数学软件Maple来验证该结果:

> with(simplex):

maximize( x+y, {4*x+3*y <= 5, 3*x+4*y <= 4 } );

> evalf(%);

比较LINGO与Maple所求的结果, 完全一致.

在Solution Report中还包括The Reduced Costs, Slack or Surplus, Dual Price栏.

Reduced Cost:

假设X的reduce cost值为10,则X系数加上10时,求优化模型变量取值不变. 例如下模型:

MAX = 4.0 * TOM + 3.0 * DICK +2.0 *HARRY;

2.5 * TOM +

3.1 *HARRY <= 5;

2.0 * TOM + 0.7 * DICK +0.4 *HARRY <= 1;

求解得到solution report如下:

Global optimal solution found at iteration: 0

Objective value: 10.57143

Variable Value Reduced Cost

TOM 2.000000 0.000000

DICK 0.8571429 0.000000

HARRY 0.000000 3.611429

Row Slack or Surplus Dual Price

1 10.57143 1.000000

2 0.000000 1.257143

3 0.000000 4.285714

该解中变量HARRY的Reduced Cost为3.611429,现在我们把HARRY前的系数加2,得到的新模型如下:

MAX = 4.0 * TOM + 3.0 * DICK +4.0 *HARRY;

2.5 * TOM +

3.1 *HARRY <= 5;

2.0 * TOM + 0.7 * DICK +0.4 *HARRY <= 1;

再求解得到solution report如下:

Global optimal solution found at iteration: 0

Objective value: 10.57143

Variable Value Reduced Cost

TOM 2.000000 0.000000

DICK 0.8571429 0.000000

HARRY 0.000000 1.611429

Row Slack or Surplus Dual Price

1 10.57143 1.000000

2 0.000000 1.257143

3 0.000000 4.285714

变量TOM、DICK的取值没有变化分别为 2.000000、0.8571429. 从变量HARRY的Reduced Cost中看到从原来得3.611429到现在得1.611429差为2. 如果如果系数变化在Reduced Cost内, 优化取值不变.

Slack or Surplus(小于:松弛,大于:过剩):

如果满足约束条件, 则该值是左右差的绝对值.

如果不满足约束条件, 则该值为负数.

如果该值为0, 说明两边相等.

例2 模型如下:

Max = 3 * X + 4 * Y;

X <= 40;

Y <= 60;

X + Y <= 80;

解该模型,得到的Solution Report 如下:

Global optimal solution found at iteration: 0

Objective value: 300.0000

Variable Value Reduced Cost

X 20.00000 0.000000

Y 60.00000 0.000000

Row Slack or Surplus Dual Price

1 300.0000 1.000000

2 20.00000 0.000000

3 0.000000 1.000000

4 0.000000 3.000000

把X=20.00000,Y=60.00000代入目标函数和约束条件:

1 Max=300; 300

2 20<=40; 20

3 60<=60; 0

4 20+60<=80; 0

Dual Price:

如果该行右边数值加1,就得到优化模型相应的加上该行的Dual Price或减去该行的Dual Price。举例如下:

在例2中第4行的Dual Price为3,现在我们在第4行的右边加上1等到如下模型:Max = 3 * X + 4 * Y;

X <= 40;

Y <= 60;

X + Y <= 81;(本来是80)

解该模型,得到的Solution Report 如下:

Global optimal solution found at iteration: 2

Objective value: 303.0000

Variable Value Reduced Cost

X 21.00000 0.000000

Y 60.00000 0.000000

Row Slack or Surplus Dual Price

1 303.0000 1.000000

2 19.00000 0.000000

3 0.000000 1.000000

4 0.000000 3.000000

Objective value值从300增加到303。

2 Range

点击Range命令在当前模型中会产生一个Range report 窗口,在该窗口中有两段分别是,Objective Coefficient Ranges(目标函数系数范围)和Righthand Side Ranges (约束条件右边的范围)在例2模型下,产生的range report 窗口内容如下:

Ranges in which the basis is unchanged:

Objective Coefficient Ranges

Current Allowable All owable

Variable Coefficient Increase De crease

X 3.000000 1.000000 3. 000000

Y 4.000000 INFINITY 1. 000000

Righthand Side Ranges

Row Current Allowable All owable

RHS Increase De crease

2 40.00000 INFINITY 20 .00000

3 60.00000 20.00000 20 .00000

4 80.00000 20.00000 20. 00000

Objective Coefficient Ranges:

在Objective Coefficient Ranges中的第一列为目标函数的变量名称,第二列为对应变量名的系数,第三列是系数可增加的最大范围,第四列是系数可减少的最大范围.

改变目标函数的变量系数(在给定的范围内),不改变优化求解中变量的取值.

Right-hand Side Ranges:

在Right-hand Side Ranges中的第一列为row的名称,第二列是常数项或者是右边的值. 第三列是该模型的右边最多可以加的量,第四列是该模型的右边最多可以减的量. 我们可以回想,在solution report中有Dual Price列,在右边加1(1必须不大于Righthand Side Ranges中,Allowable Increase对应的值),就得到优化模型相应的加上该行的Dual Price或减去该行的Dual Price.

3 Options

该菜单中包含绝大部分的LINGO参数,可设置的tabs内容如下:

?Interface,

?General Solver,

?Linear Solver,

?Nonlinear Solver,

?Integer Pre-Solver

?Integer Solver, and

?Global Solver.

在Interface的tabs面中可以控制LINGO系统的界面(包括是否显示工具栏, 界面的大小),输出形式(Terse Output)以及默认的文件格式. 其它的tabs内容可以参考帮助文件.

4 Model Statistics

统计该模型的信息,包括行数、变量数、约束条件数等等;在如下模型中:

model:

max=2* x1+3*x2;

x1+2*x2+x3=8;

4*x1+x4=16;

4*x2+x5=12;

end

执行LINGO|Model Statistics后得到如下:

Rows= 4 Vars= 2 No. integer vars= 0 ( all are linear)

Nonzeros= 9 Constraint nonz= 4( 1 are +- 1) Density= 0

Smallest and largest elements in abs value= 1.00000 16.0000

No. < : 3 No. =: 0 No. > : 0, Obj= MAX, GUBs <= 2

Single cols= 0

其中Single cols表示松弛变量;现在我们在上面模型中添加三个松弛变量,模型变为:model:

max=2*x1+3*x2+0*x3+0*x4+0*x5;

x1+2*x2+x3=8;

4*x1+x4=16;

4*x2+x5=12;

end

执行LINGO|Model Statistics后得到如下:

Rows= 4 Vars= 5 No. integer vars= 0 ( all are linear)

Nonzeros= 12 Constraint nonz= 7( 4 are +- 1) Density= 0 Smallest and largest elements in abs value= 1.00000 16.0000 No. < : 0 No. =: 3 No. > : 0, Obj= MAX, GUBs <= 2 Single cols= 3

Single cols 由原来的0变到3.

§1 LINGO快速入门

当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口:

外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。

例1.1如何在LINGO中求解如下的LP问题:

在模型窗口中输入如下代码:min=2*x1+3*x2;

x1+x2>=350;

x1>=100;

2*x1+x2<=600;

然后点击工具条上的按钮

即可。

例1.2使用LINGO软件计算6个发点8个收点的最小费用运输问题。产销单位运价如下表。

使用LINGO软件,编制程序如下:

model:

!6发点8收点运输问题;

sets:

warehouses/wh1..wh6/: capacity;

vendors/v1..v8/: demand;

links(warehouses,vendors): cost, volume; endsets

!目标函数;

min=@sum(links: cost*volume);

!需求约束;

@for(vendors(J):

@sum(warehouses(I): volume(I,J))=demand(J)); !产量约束;

@for(warehouses(I):

@sum(vendors(J): volume(I,J))<=capacity(I));

!这里是数据;

data:

capacity=60 55 51 43 41 52;

demand=35 37 22 32 41 32 43 38;

cost=6 2 6 7 4 2 9 5

4 9

5 3 8 5 8 2

5 2 1 9 7 4 3 3

7 6 7 3 9 2 7 1

2 3 9 5 7 2 6 5

5 5 2 2 8 1 4 3;

enddata

end

然后点击工具条上的按钮即可。

为了能够使用LINGO的强大功能,接着第二节的学习吧。

知识区录入:root 责任编辑:qiusir §2 LINGO中的集

对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。LINGO允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO建模语言的优势。

现在我们将深入介绍如何创建集,并用数据初始化集的属性。学完本节后,你对基于建模技术的集如何引入模型会有一个基本的理解。

2.1 为什么使用集

集是LINGO建模语言的基础,是程序设计最强有力的基本构件。借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。

2.2 什么是集

集是一群相联系的对象,这些对象也称为集的成员。一个集可能是一系列产品、卡车或雇员。每个集成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。属性值可以预先给定,也可以是未知的,有待于LINGO求解。例如,产品集中的每个产品可以有一个价格属性;卡车集中的每辆卡车可以有一个牵引力属性;雇员集中的每位雇员可以有一个薪水属性,也可以有一个生日属性等等。

LINGO有两种类型的集:原始集(primitive set)和派生集(derived set)。

一个原始集是由一些最基本的对象组成的。

一个派生集是用一个或多个其它集来定义的,也就是说,它的成员来自于其它已存在的集。

2.3 模型的集部分

集部分是LINGO模型的一个可选部分。在LINGO模型中使用集之前,必须在集部分事先定义。集部分以关键字“sets:”开始,以“endsets”结束。一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分。一个集部分可以放置于模型的任何地方,但是一个集及其属性在模型约束中被引用之前必须定义了它们。

2.3.1 定义原始集

为了定义一个原始集,必须详细声明:

·集的名字

·可选,集的成员

·可选,集成员的属性

定义一个原始集,用下面的语法:

setname[/member_list/][:attribute_list];

注意:用“[]”表示该部分内容可选。下同,不再赘述。

Setname是你选择的来标记集的名字,最好具有较强的可读性。集名字必须严格符合标准命名规则:以拉丁字母或下划线(_)为首字符,其后由拉丁字母(A—Z)、下划线、阿拉伯数字(0,1,…,9)组成的总长度不超过32个字符的字符串,且不区分大小写。

注意:该命名规则同样适用于集成员名和属性名等的命名。

Member_list是集成员列表。如果集成员放在集定义中,那么对它们可采取显式罗列和隐式罗列两种方式。如果集成员不放在集定义中,那么可以在随后的数据部分定义它们。

①当显式罗列成员时,必须为每个成员输入一个不同的名字,中间用空格或逗号搁开,允许混合使用。

例2.1可以定义一个名为students的原始集,它具有成员John、Jill、Rose和Mike,属性有sex和age:

sets:

students/John Jill, Rose Mike/: sex, age;

endsets

②当隐式罗列成员时,不必罗列出每个集成员。可采用如下语法:

setname/member1..memberN/[: attribute_list];

这里的member1是集的第一个成员名,memberN是集的最末一个成员名。LINGO将自动产生中间的所有成员名。LINGO也接受一些特定的首成员名和末成员名,用于创建一些特殊的集。列表如下:

③集成员不放在集定义中,而在随后的数据部分来定义。

例2.2

!集部分;

sets:

students:sex,age;

endsets

!数据部分;

data:

students,sex,age= John 1 16

Jill 0 14

Rose 0 17

Mike 1 13;

enddata

注意:开头用感叹号(!),末尾用分号(;)表示注释,可跨多行。

在集部分只定义了一个集students,并未指定成员。在数据部分罗列了集成员John、Jill、Rose和Mike,并对属性sex和age分别给出了值。

集成员无论用何种字符标记,它的索引都是从1开始连续计数。在attribute_ list 可以指定一个或多个集成员的属性,属性之间必须用逗号隔开。

可以把集、集成员和集属性同C语言中的结构体作个类比。如下图:

集←→结构体

集成员←→结构体的域

集属性←→结构体实例

LINGO内置的建模语言是一种描述性语言,用它可以描述现实世界中的一些问题,然后再借助于LINGO求解器求解。因此,集属性的值一旦在模型中被确定,就不可能再更改。在LINGO中,只有在初始部分中给出的集属性值在以后的求解中可更改。这与前面并不矛盾,初始部分是LINGO求解器的需要,并不是描述问题所必须的。

2.3.2 定义派生集

为了定义一个派生集,必须详细声明:

·集的名字

·父集的名字

·可选,集成员

·可选,集成员的属性

可用下面的语法定义一个派生集:

setname(parent_set_list)[/member_list/][:attribute_list];

setname是集的名字。parent_set_list是已定义的集的列表,多个时必须用逗号隔开。如果没有指定成员列表,那么LINGO会自动创建父集成员的所有组合作为派生集的成员。派生集的父集既可以是原始集,也可以是其它的派生集。

例2.3

sets:

product/A B/;

machine/M N/;

week/1..2/;

allowed(product,machine,week):x;

endsets

LINGO生成了三个父集的所有组合共八组作为allowed集的成员。列表如下:

编号成员

1 (A,M,1)

2(A,M,2)

3(A,N,1)

4(A,N,2)

5(B,M,1)

6(B,M,2)

7(B,N,1)

8(B,N,2)

成员列表被忽略时,派生集成员由父集成员所有的组合构成,这样的派生集成为稠密集。如果限制派生集的成员,使它成为父集成员所有组合构成的集合的一个子集,这样的派生集成为稀疏集。同原始集一样,派生集成员的声明也可以放在数据部分。一个派生集的成员列表有两种方式生成:①显式罗列;②设置成员资格过滤器。当采用方式①时,必须显式罗列出所有要包含在派生集中的成员,并且罗列的每个成员必须属于稠密集。使用前面的例子,显式罗列派生集的成员:

allowed(product,machine,week)/A M 1,A N 2,B N 1/;

LINGO软件简介

LINGO 软件简介 LINGO 软件是一个处理优化问题的专门软件,它尤其擅长求解线性规划、非线性规划、整 数规划等问题。 一个简单示例 有如下一个混合非线性规划问题: ?????≥≤≤+++---+为整数 213 212 13213 2 2212121,;0,,210022..15023.027798max x x x x x x x x x x t s x x x x x x x 。 LINGO 程序(模型): max =98*x1+277*x2-x1^*x1*x2-2*x2^2+150*x3; x1+2*x2+2*x3<=100; x1<=2*x2; @gin (x1);@gin (x2);! Lingo 默认变量非负 (注意:@bin(x)表示x 是0-1变量;@gin(x)表示x 是整数变量;@bnd(L,x,U)表示 限制LxU ;@free(x)表示取消对x 的符号限制,即可正、可负。) 结果: Global optimal solution found. Objective value: Extended solver steps: 0 Total solver iterations: 45 Variable Value Reduced Cost X1 X2 X3 Row Slack or Surplus Dual Price 1 2 3 ———————— 非常简单! 在LINGO 中使用集合 为了方便地表示大规模的规划问题,减少模型、数据表示的复杂程度,LINGO 引进了“集合”的用法,实现了变量、系数的数组化(下标)表示。 例如:对?? ? ??? ? ==-++-==≤++∑=.,,;10)0(;4,3,2,1),()())()1()(;4,3,2,1,20)(..)} (20)(450)(400{min 4 ,3,2,1均非负INV OP RP INV I I DEM I OP I RP I INV I INV I I RP t s I INV I OP I RP I 求解程序: model : sets : mark/1,2,3,4/:dem,rp,op,inv;!也可以vmark/1..4/:dem,rp,op,inv;

lingo入门

lingo入门教程之一--- 初识lingo ingo对于一些线性或者非线性的规划,优化问题非常有效 首先介绍一下,在lingo中运行程序时出现的页面(在工具栏点击类似靶子一样的图标便可运行) Solver status:求解器(求解程序)状态框 Model Class:当前模型的类型:LP,QP,ILP,IQP,PILP,PIQP,NLP,INLP,PINLP(以I开头表示IP,以PI 开头表示PIP) State:当前解的状态:"Global Optimum", "LocalOptimum", "Feasible", "Infeasible“(不可行), "Unbounded “(无界), "Interrupted“(中断), "Undetermined“(未确定) Object:解的目标函数值 Infeasibility:当前约束不满足的总量(不是不满足的约束的个数):实数(即使该值=0,当前解也可能不可行,因为这个量中没有考虑用上下界命令形式给出的约束) Iteration:目前为止的迭代次数 Extend solverstatus:扩展的求解器(求解程序)状态框 Solver type:使用的特殊求解程序: Bestobj :目前为止找到的可行解的最佳目标函数值 Objbound:目标函数值的界 Steps:特殊求解程序当前运行步数: Active:有效步数 Variables(变量数量): 变量总数(Total)、 非线性变量数(Nonlinear)、 整数变量数(Integer)。 Constraints(约束数量): 约束总数(Total)、

非线性约束个数(Nonlinear)。 Nonzeros(非零系数数量): 总数(Total)、 非线性项系数个数(Nonlinear)。 GeneratorMemory Used (K) (内存使用量) ElapsedRuntime (hh:mm:ss)(求解花费的时间) 运行之后页面介绍(这里的运行界面并不是与上面的运行过程中出现界面一致,即并非来自于同一个程序运行出现) 第一行表示在经过457次迭代后得到局部最优解 第二行给出该局部最优解的具体值 下面给出取局部最优值时,x1 x2的具体取值 这里求解的是局部最优解,如果想求出全局最优解,可以进行页面设置:lingo --> option --> global solver --> 勾选use global solver 对于运行结果也可以另存为,格式一般为ldt,因为有时候对于求解一个问题,或许需要运行很久才可以得出结果,所以没必要每次为了看结果都运行,而是运行成功一次后便把结果保存下来 注意事项 LINGO总是根据“MAX=”或“MIN=”寻找目标函数;

lingo教程 和MATLAB入门教程

LINGO 使用教程 LINGO 是用来求解线性和非线性优化问题的简易工具。LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。 §1 LINGO 快速入门 当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。 例1.1 如何在LINGO 中求解如下的LP 问题: ,6002100 350. .32min 21211 212 1≥≤+≥≥++x x x x x x x t s x x 在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮 即可。 例1.2 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。产销单位运价如

model: !6发点8收点运输问题; sets: warehouses/wh1..wh6/: capacity; vendors/v1..v8/: demand; links(warehouses,vendors): cost, volume; endsets !目标函数; min=@sum(links: cost*volume); !需求约束; @for(vendors(J): @sum(warehouses(I): volume(I,J))=demand(J)); !产量约束; @for(warehouses(I): @sum(vendors(J): volume(I,J))<=capacity(I)); !这里是数据; data: capacity=60 55 51 43 41 52; demand=35 37 22 32 41 32 43 38; cost=6 2 6 7 4 2 9 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata end 然后点击工具条上的按钮即可。 为了能够使用LINGO的强大功能,接着第二节的学习吧。 §2 LINGO中的集 对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。LINGO允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO建模语言的优势。 现在我们将深入介绍如何创建集,并用数据初始化集的属性。学完本节后,你对基于建模技术的集如何引入模型会有一个基本的理解。

lingo用法总结

ji例程1、 model: sets: quarters/1..4/:dem,rp,op,inv; endsets min=@sum(quarters:400*rp+450*op+20*inv); @for(quarters(i):rp<=40); @for(quarters(i)|i#gt#1: inv(i)=inv(i-1)+rp(i)+op(i)-dem(i);); inv(1)=10+rp(1)+op(1)-dem(1); data: dem=40 60 75 25; enddata end 例程2、 model: sets: quarters/1..4/:dem,rp,op,inv; endsets min=@sum(quarters:400*rp+450*op+20*inv); @for(quarters(i):rp<=40); @for(quarters(i)|i#gt#1: inv(i)=inv(i-1)+rp(i)+op(i)-dem(i);); inv(1)=a+rp(1)+op(1)-dem(1); data: dem=40 60 75 25; a=? enddata end ?LINGO总是根据“MAX=”或“MIN=”寻找目标函数,而除注释语句和TITLE语句外的其他语句都是约束条件,因此语句的顺序并不重要。 ?LINGO中函数一律需要以“@”开头 ?Lingo中的每个语句都以分号结尾 ?用LINGO解优化模型时已假定所有变量非负(除非用限定变量取值范围的函数@free或@sub或@slb另行说明)。 ?以感叹号开始的是说明语句(说明语句也需要以分号结束)) ?理解LINGO建模语言最重要的是理解集合(Set)及其属性(Attribute)的概念。 ?一般来说,LINGO中建立的优化模型可以由5个部分组成,或称为5“段” (SECTION): (1)集合段(SETS):以“ SETS:” 开始,“ENDSETS”结束,定义

LINGO软件简介

LINGO 软件简介 LINGO 软件是一个处理优化问题的专门软件,它尤其擅长求解线性规划、非线性规划、整数规划等问题。 一个简单示例 有如下一个混合非线性规划问题: ?????≥≤≤+++---+为整数 213 212 13213 2 2212121,;0,,210022..15023.027798max x x x x x x x x x x t s x x x x x x x 。 LINGO 程序(模型): max =98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2+150*x3; x1+2*x2+2*x3<=100; x1<=2*x2; @gin (x1);@gin (x2);! Lingo 默认变量非负 (注意:@bin(x)表示x 是0-1变量;@gin(x)表示x 是整数变量;@bnd(L,x,U)表示 限制L ≤x ≤U ;@free(x)表示取消对x 的符号限制,即可正、可负。) 结果: Global optimal solution found. Objective value: 9561.200 Extended solver steps: 0 Total solver iterations: 45 Variable Value Reduced Cost X1 6.000000 -76.70000 X2 31.00000 -151.2000 X3 16.00000 -150.0000 Row Slack or Surplus Dual Price 1 9561.200 1.000000 2 0.000000 0.000000 3 56.00000 0.000000 ———————— 非常简单! 在LINGO 中使用集合 为了方便地表示大规模的规划问题,减少模型、数据表示的复杂程度,LINGO 引进了“集合”的用法,实现了变量、系数的数组化(下标)表示。

LINGO11教程

LINGO 是用来求解线性和非线性优化问题的简易工具。LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。 §1 LINGO 快速入门 当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。 例1.1 如何在LINGO 中求解如下的LP 问题: ,6002100 350. .32min 21211 212 1≥≤+≥≥++x x x x x x x t s x x 在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮 即可。 例1.2 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。产销单位运价如

model: !6发点8收点运输问题; sets: warehouses/wh1..wh6/: capacity; vendors/v1..v8/: demand; links(warehouses,vendors): cost, volume; endsets !目标函数; min=@sum(links: cost*volume); !需求约束; @for(vendors(J): @sum(warehouses(I): volume(I,J))=demand(J)); !产量约束; @for(warehouses(I): @sum(vendors(J): volume(I,J))<=capacity(I)); !这里是数据; data: capacity=60 55 51 43 41 52; demand=35 37 22 32 41 32 43 38; cost=6 2 6 7 4 2 9 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata end 然后点击工具条上的按钮即可。 为了能够使用LINGO的强大功能,接着第二节的学习吧。 §2 LINGO中的集 对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。LINGO允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO建模语言的优势。 现在我们将深入介绍如何创建集,并用数据初始化集的属性。学完本节后,你对基于建模技术的集如何引入模型会有一个基本的理解。 2.1 为什么使用集 集是LINGO建模语言的基础,是程序设计最强有力的基本构件。借助于集,能够用一个

lingo操作介绍

1.2 菜单介绍 1.2.1 File 1 New 新建一个窗口, 当你执行这个命令时, 会出现如下对话框: 你可以在对话框中选择你想要建立的类型. 类型如下: 1)扩展名为(*.lg4) LG4格式是LINGO4.0的版本,是在Windows下最主要的储存文件格式, 这种格式支持字体格式, 自定义格式以及动态连接, LG4以二进制格式存储, 所以不能被其它的应用软件直接读取. 2)扩展名为(*.lng) LNG是捷便的存储方式,是4.0版本前的标准文件格式,为了与前版本的兼容,所以还一直在用,LNG文件是以ASCII形式存储的,所以能被支持文本文件的应用程序读取.该格式不支持多种字体. 3)扩展名为(*.ltd) LTD是数据文件, 可以从@FILE函数导入数据,@FILE函数只能读取文本文件,所以所有的LTD文件是以ASCII形式存储, 也不支持多种字体. 4)扩展名为(*.ltf) LTF是LINGO的调试文件格式, 也是以ASCII格式存储,能直接被LINGO的File|Take command执行. 2 Log Output 输出文本文件,可以将随后原输出到报告窗口的内容输出到文本中. 该命令与Maple 中的writeto命令非常相似. 在Maple中输入如下: > x:=sin(5.); writeto("c://maple.txt"); y:=x+1: print(x,y); print(x); > y; > writeto(terminal);

> y; 执行菜单中的Edit|Excute|Worksheet, 按钮,窗口重新显示如下: > x:=sin(5.); writeto("c://maple.txt"); y:=x+1: print(x,y); print(x); x:=-.9589242747 > y; > writeto(terminal); > y; 0.4010757253 而在C盘的maple.txt文件的内容为: -.9589242747, .0410757253 -.9589242747 .0410757253 从中可以知道,用了writeto(filename)命令以后把结果输出到filename 中. 直到碰到writeto(terminal)命令时,才重新在工作窗口中显示. 当你点击菜单File|Log Output时,系统出现保存对话框,系统就会将命令窗口中的输出结果保存到指定的文件中. 3 Import LINDO File 该命令是用来导入LINDO软件保存的LINDO文件(*.LTX)格式. 只要在LINGO中导入LINDO文件格式, LINGO系统自动将该文件转化为LINGO可执行语句. 1.2.2 Edit 1 Paste Function 用该命令可以在当前点插入LINGO的内部函数, 2 Select Fonts 设置字体类型, 字体大小,字体颜色. 1.2.3 LINGO 1 Solve 用solve命令对当前窗口中的模型求解, 该命令只对report script窗口起作用, 不能对数据窗口求解.

常见Lingo指令介绍

常见Lingo指令介绍 一、控制Sprite的常见指令 1.指令名称:sprite member 指令语法:the member of sprite 指令说明:sprite所代表的cast member。 例:精灵替换 set the member of sprite 1 to "yuan" 可改为:Sprite(1).member=”yuan” 点句表示法: ObjectName.[Property|function|Chunk that you want to specity] 2.指令名称:sprite memberNum 指令语法:the memberNum of sprite 指令说明:sprite所代表的cast member所在的位置。 例:循环播放 on exitFrame me if sprite (1). memberNum =10 then sprite (1). memberNum = 1 else sprite (1) .memberNum=sprite(1).memberNum+1 end if go to the frame end 3.旋转、倾斜、翻转精灵 指令说明:这些变换可以应用于位图、文本、矢量图形、GIF及Flash,但不能用于域,以及工具面板上的椭圆和矩形。 (1)旋转:正值代表顺时针,负值代表逆时针 sprite(1).rotation=30 set the rotation of sprite 1 to 30 例:指针调节 sprite(1).rotation=sprite(1).rotation+5 (2)倾斜:正值向右倾斜,负值向左倾斜,正常状态为0 sprite(1).skew=10 set the skew of sprite 1 to 10 例:图形变形 sprite(1).skew=sprite(1).skew+10 (3)翻转:左右(水平)翻转flipH,上下(垂直)翻转flipV,设置值为TRUE或FALSE (1或0) sprite(1).flipH=TURE sprite(1).flipV=1 例:翻转与恢复

LINGO使用说明比较简单

Lingo介绍 Lingo是美国LINDO系统公司(Lindo Symtem Inc)开发的求解数学规划系列软件中的一个(其他软件为LINGDO,GINO,What’s Best等),它的主要功能是求解大型线性、非线性和整数规划问题,目前的版本是lingo11.0。 lingo分为Demo、solve suite、hyper、industrial、extended等六类不同版本,只有Demo版本是免费的,其他版本需要向LINDO系统公司(在中国的代理商)购买,Lingo的不同版本对模型的变量总数、非线性变量个数、整型变量个数和约束条件的数量做出不同的限制(其中extended版本无限制)。 Lingo的主要功能特色为: (1)既能求解线性规划,也有较强的求解非线性规划的能力; (2)输入模型简练直观; (3)运行速度快、计算能力强; (4)内置建模语言,提供几十种内部函数,从而能以较少语句,较直观的方式描述较大规模的优化模型; (5)将集合的概念引入编程语言,很容易将实际问题转换为Lingo语言; (6)能方便地与excel、数据库等其他软件交换数据。 学校图书馆40本《lingo和excel在数学建模中的应用》,袁新生、邵大宏、郁时炼主编,科学出版社

Lingo 程序设计简要说明 在数学建模中会遇到如规划类的题型,在这种模型中总存在着一个目标,并希望这个目标的取值尽可能的大或小,同时与这个目标有关的一系列变量之间存在一些约束。在构造出目标函数和约束条件的表达式后,我们需要对求出这个最值和各变量的取值。一般我们用LINGO 来对模型进行求解,本文将通过举一个简单的例子,围绕这个例子逐步学习LINGO 的使用。LINGO 只是一个求解工具,我们主要的任务还是模型的建立! 当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。 示例:求解线性规划问题: max z=x1+x2+x3+x4+x5+x6+x7+x8 ???????????????≤≤≤≤≤≤269 + x88 + x72 + x66 + x55 + x47 + x38 + x28 + x1 6 15 6 + x8 7 + x7+ x65 + x54 + x44 + x34 + x25 + x15 444 + x86 + x77 + x68 + x58 + x45 + x32 + x27 + x14278 + x85 + x74 + x64 + x55 + x49 + x36 + x25 + x13389 + x84 + x75 + x62 + x57 + x46 + x35 + x28 + x1 2 154 + x8 3 + x79 + x66 + x55 + x45 + x3 4 + x27 + x1 求解这个模型的相应LINGO 程序代码如下: 程序一: max= x1+x2+x3+x4+x5+x6+x7+x8; x1 + 7*x2 + 4*x3 + 5*x4 + 5*x5 + 6*x6 + 9*x7 + 3*x8 + 415<=; 2*x1 + 8*x2 + 5*x3 + 6*x4 + 7*x5 + 2*x6 + 5*x7 + 4*x8 + 938<=; 3*x1 + 5*x2 + 6*x3 + 9*x4 + 5*x5 + 4*x6 + 4*x7 + 5*x8 + 827<=; 4*x1 + 7*x2 + 2*x3 + 5*x4 + 8*x5 + 8*x6 + 7*x7 + 6*x8 + 444<=; 5*x1 + 5*x2 + 4*x3 + 4*x4 + 4*x5 + 5*x6 + x7 + 7*x8 + 6 15<=; 6*x1 + 8*x2 + 8*x3 + 7*x4 + 5*x5 + 6*x6 + 2*x7 + 8*x8 + 926<=; 注:然后点击工具条上的按钮 即可。本模型的最优解为2.636364

lingo软件使用教程

lingo软件使用教程 一般来说,一个优化模型将由以下三部分组成: 1. 目标函数(Objective Function):要达到的目标。 2. 决策变量(Decision variables):每组决策变量的值代表一种方案。在优化模型中需要确定决策变量的最优值,优化的目标就是找到决策变量的最优值使得目标函数取得最优。 3. 约束条件(Constraints):对于决策变量的一些约束,它限定决策变量可以取的值。 在写数学模型时,一般第一行是目标函数,接下来是约束条件,再接着是一些非负限制等。在模型窗口输入如下代码: Max = 2*x1+3*x2; X1+2*x2<=8; 4*x1<16; 4*x2<12; 注意:1.每一个lingo表达式最后要跟一个分号; 2.多数电脑中没有符号,lingo中<=代替;为了方便可以用<代替小于等于,用>代替大于等于。 3.我们可以添加一些注释,增加程序的可读性。注释以一个!(叹号必须在英文状态下输入,它会自动变为绿色)开始,以;(分号)结束。 4.Lingo中不区分变量名的大小写。变量名必须以字母(A-Z)开头,后面的字符可以是字母、数字、下划线。变量名不能超过32个字符。 Lingo程序的一些规则: 1. 在Lingo中最开始都是“MAX=”或者“MIN=”开始表示求目标函数的最大或者最小值。 2. 变量和它前面的系数之间要用“*”连接,中间可以有空格。 3. 变量名不区分大小写,但必须以字母开始,不超过32个字符。 4. 数学表达式结束时要用分号“;”表示结束。表达式可以写在多行上,但是表达式中间不能用分号。 5. 在电脑系统中一般没有“小于等于”符号,在Lingo采用“<=”来表示“小于等于”,用“>=”表示“大于等于”。小于等于也可以用更简单的“<”表示,大于等于用“>”表示。 集合段: 在我们已经得到的程序里有一些量没有定义,如WAREHOUSES( I),DEMAND( J), LINKS( I, J)。这些量将在Lingo中的集合段定义。 集合段以SETS:表示开始,以ENDSETS表示结束。 如果一个集合的元素都已经定义过,就可以用一些循环函数(如@for). 注:1. 集合的属性相当于以集合的元素为下标的数组。Lingo中没有数组的概念,只有定义在集合上的属性的概念。 2 集合的定义语法: set_name[/set_member/:][attribute_list]; 集合的名称在左边,右边是这个集合上的属性,他们之间用冒号“:”分割开,最后由分号表示结束。如果在同一个集合上有多个属性时,不同的属性之间用逗号“,”隔开,如本例的cost和volume属性。如果要特别列出集合的元素时,在集合的名称后把元素写在两条斜线之间,如本例中的仓库可以写为 WAREHOUSES/WH1, WH2, WH3, WH4, WH5, WH6/: CAPACITY;

LINGO的使用方法说明大全

LINGO的使用简介 LINGO软件是美国的LINGO系统公司开发的一套专门用于求解最优化问题的软件包.LINGO除了能够用于求解线性规划和二次规划外,还可以用于非线性规划求解、以及一些线性和非线性方程(组)的求解等.LINGO软件的最大特色在于它允许优化模型中的决策变量为整数,即可以求解整数规划,而且执行速度快.LINGO是用来求解线性和非线性优化问题的简易工具.LINGO置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果.在这里仅简单介绍LINGO的使用方法. LINGO(Linear INteractive and General Optimizer )的基本含义是交互式的线性和通过优化求解器.它是美国芝加哥大学的 Linus Schrage 教授于1980年开发了一套用于求解最优化问题的工具包,后来经过完善成何扩充,并成立了LINDO系统公司.这套软件主要产品有:LINDO,LINGO,LINDO API和What’sBest.它们在求解最优化问题上,与同类软件相比有着绝对的优势.软件有演示版和正式版.正式版包括:求解包(solver suite)、高级版(super)、超级版(hyper)、工业版(industrial)、扩展版(extended).不同版本的LINGO对求解问题的规模有限制,如附表3-1所示. 附表3-1 不同版本LINGO对求解规模的限制 版本类型总变量数整数变量数非线性变量数约束数 演示版 300 30 30 150 求解包 500 50 50 250 高级版 2000 200 200 1000 超级版 8000 800 800 4000 工业版 32000 3200 32000 16000 扩展版无限无限无限无限 3.1 LINGO程序框架 LINGO可以求解线性规划、二次规划、非线性规划、整数规划、图论及网络最优化问题和最大最小求解问题,以及排队论模型中最优化等问题. 一个LINGO程序一般会包括以下几个部分: (1) 集合段:集部分是LINGO模型的一个可选部分.在LINGO模型中使用集之前,必须在集部分事先定义.集部分以关键字“sets:”开始,以“endsets”结束.一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分.一个集部分可以放置于模型的任何地方,但是一个集及其属性在模型约束中被引用之前必须先定义. (2) 数据段:在处理模型的数据时,需要为集部分定义的某些元素在LINGO求解模型之前为其指定

Lingo软件的使用

第十八章LINGO软件的使用 18.1 LINGO入门 18.1.1 LINGO软件的安装过程 点击LINGO9.0 for Windows安装文件,出现 点击“Next”按钮,出现 此时需要接受安装协议。系统安装时默认的目录是C:\LINGO9。安装完成前,会出现下图所示的对话框:

这个对话框询问你希望采用的默认的建模(即编程)语言,系统推荐的是采用LINGO语法,也就是选项“LINGO(recommended)”;你也可以选择“LINDO”将LINDO语法作为默认的设置。当然,安装后你也可以通过“LINGO|Options|File Format命令来修改默认的建模(即编程)语言。在上图中按下“OK”按钮,系统就会完成LINGO的安装过程。 18.1.2 LINGO基础知识 LINGO有两种命令格式:一种是常用的Windows模式,通过下拉式菜单命令驱动LINGO 运行,界面是图形式的,使用起来也比较方便;另一种是命令行(Command-Line)模式,仅在命令窗口(Command Window)下操作,通过输入行命令驱动LINGO运行。由于其使用字符方式输入,初学者往往不太容易掌握。在这里,我们主要介绍在菜单驱动模式下LINGO的使用方法。 LINGO 9.0软件比以前的版本有了很大的改进,功能大大增强,性能更加稳定,计算的结果更加可靠。LINGO软件不仅可用于求解非线性规划问题,还可以用以求解非线性整数规划问题;LINGO包含了内置的建模语言,模型中所需的数据可以以一定格式保存在独立的文件中;LINGO允许以简练、直观的方式描述较大规模的优化问题。 注:LIGDO公司目前已将LINDO软件从其产品中删除了。事实上,LINDO软件的所有功能(包括LINDO语法格式)都在LINGO中得到了支持。 当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。状态行最左边显示的是“Ready”表示“准备就绪”;右下角显示的是当前时间,时间前面是当前光标的位置“Ln1,Col1”(即1行1列)。将来,用户可以用选项命令(LINGO|Options菜单命令)决定是否需要显示工具栏和状态行。在LINGO 模型窗口中,选择菜单命令“File|Open(F3)”,可以看到下图所示的标准的“打开文件”对话框,我们看到有各种不同的“文件类型”:

LINGO软件简介

L I N G O软件简介 Document number:BGCG-0857-BTDO-0089-2022

LINGO 软件简介 LINGO 软件是一个处理优化问题的专门软件,它尤其擅长求解线性 规划、非线性规划、整数规划等问题。 一个简单示例 有如下一个混合非线性规划问题: ?????≥≤≤+++---+为整数 213 212 13213 2 2212121,;0,,210022..15023.027798max x x x x x x x x x x t s x x x x x x x 。 LINGO 程序(模型): max =98*x1+277*x2-x1^2-0.3*x1*x2- 2*x2^2+150*x3; x1+2*x2+2*x3<=100; x1<=2*x2; @gin (x1);@gin (x2);! Lingo 默认变量非负 (注意:@bin(x)表示x 是0-1变量;@gin(x)表示x 是整数变量;@bnd(L,x,U)表示限制L?x?U ;@free(x)表示取消对x 的符号限制,即可正、可负。) 结果: Global optimal solution found. Objective value: 9561.200 Extended solver steps: 0 Total solver iterations: 45

Variable Value Reduced Cost X1 6.000000 -76.70000 X2 31.00000 -151.2000 X3 16.00000 -150.0000 Row Slack or Surplus Dual Price 1 9561.200 1.000000 2 0.000000 0.000000 3 56.00000 0.000000 ————————非常简单! 在LINGO中使用集合 为了方便地表示大规模的规划问题,减少模型、数据表示的复杂程度,LINGO引进了“集合”的用法,实现了变量、系数的数组化(下标)表示。

lingo使用手册

LINGO快速入门 LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。 §1 LINGO快速入门 (2) §2 LINGO中的集 (3) 2.1 为什么使用集 (3) 2.2 什么是集 (4) 2.3 模型的集部分 (4) 2.3.1 定义原始集 (4) 2.3.2 定义派生集 (5) §3 模型的数据部分和初始部分 (7) 3.1 模型的数据部分 (7) 3.1.1 数据部分入门 (7) 3.1.2 参数 (8) 3.1.3 实时数据处理 (8) 3.1.4 指定属性为一个值 (9) 3.1.5 数据部分的未知数值 (9) 3.2 模型的初始部分 (10) §4 LINGO函数 (10) 4.1 基本运算符 (10) 4.1.1 算术运算符 (11) 4.1.2 逻辑运算符 (11) 4.1.3 关系运算符 (11) 4.2 数学函数 (12) 4.3 金融函数 (13) 4.4 概率函数 (13) 4.5 变量界定函数 (15) 4.6 集操作函数 (15) 4.7 集循环函数 (16) 4.8 输入和输出函数 (18) 4.9 辅助函数 (21) §5 LINGO WINDOWS命令 (22) 5.1 文件菜单(File Menu) (22) 5.2 编辑菜单(Edit Menu) (23) 5.3 LINGO菜单 (23) 5.4 窗口菜单(Windows Menu) (35) 5.5 帮助菜单(Help Menu) (37) §6 LINGO的命令行命令 (37) §7 综合举例 (41)

第1讲 Lingo软件入门(2014)

第1讲Lingo软件入门 司守奎 烟台市,海军航空工程学院数学教研室 Email:sishoukui@https://www.doczj.com/doc/32425405.html, 1 Lingo软件的基本语法 1.1 集合 集合部分的语法为 sets: 集合名称1/成员列表1/:属性1_1,属性1_2,…,属性1_n1; 集合名称2/成员列表2/:属性2_1,属性2_2,…,属性2_n2; 派生集合名称(集合名称1,集合名称2):属性3_1,…,属性3_n3; endsets 例26 sets: product/A B/; machine/M N/; week/1..2/; allowed(product,machine,week):x; endsets 1.2 数据 数据部分的语法为 data: 属性1=数据列表; 属性2=数据列表; enddata 1.3 计算 计算段部分不能含有变量,必须是已知数据的运算。 calc: b=0; a=a+1; endcalc 1.4 模型的目标函数和约束条件 这里就不具体给出了,下面通过具体例子给出。 1.5 子模型 在LINGO 9.0 及更早的版本中,在每个LINGO 模型窗口中只允许有一个优化模型,可以称为主模型(MAIN MODEL)。在LINGO 10.0 中,每个LINGO 模型窗口中除了主模型外,用户还可以定义子模型(SUBMODEL)。子模型可以在主模型的计算段中被调用,这就进一步增强了LINGO 的编程能力。 子模型必须包含在主模型之内,即必须位于以“MODEL:”开头、以“END”结束的模块内。同一个主模型中,允许定义多个子模型,所以每个子模型本身必须命名,其基本语法是: SUBMODEL mymodel: 可执行语句(约束+目标函数); ENDSUBMODEL 其中mymodel 是该子模型的名字,可执行语句一般是一些约束语句,也可能包含目标函数,但不可以有自身单独的集合段、数据段、初始段和计算段。也就是说,同一个主模型内的变量都是全局变量,这些变量对主模型和所有子模型同样有效。 如果已经定义了子模型mymodel,则在计算段中可以用语句“@SOLVE( mymodel);”求解这个子模型。 2 Lingo函数 2.1 算术运算符

Lingo的基本应用

第十五章Lingo的基本应用1、LINDO和LINGO软件能求解的模型: 2、Lingo初级语法: 语句分行书写,顺序与数学模型一致; 每一条语句都要以“;”结尾; 语句不区分大小写,书写方式与代数函数相近; 目标函数以“min=”或者“max=”表示; 注释语句用“!”开头; “>”和“>=”以及“<”和“<=”没有区别; 如果不写明决策变量的取值范围,则默认为非负实数。 3、线性规划案例:生产计划 每天:50桶牛奶时间480小时至多加工100公斤A1 要求:制订生产计划,使每天获利最大 1)奶制品生产的Lingo模型 2)Lingo求解 2)Lingo求解报告

//结果报告(Solution Report) 4)开启灵敏度分析(Range)功能 5)查看灵敏度分析(Range) 必须先求解才能得到灵敏度分析报告 //目标函数系数范围分析 当目标函数中x1的系数(产品A1的收益)增加不超过8个单位或者减少不超过2.66667个单位时(x2系数维持不变),不需改变生产计划。 //约束条件右边值灵敏度分析

如果牛奶资源的数量增加不超过10桶或者减少不超过6.666667桶(其他模型参数不变),则它将仍然作为紧缺资源; 如果A1生产资源减少超过40个单位(其他模型参数不变),则它将转化为紧缺资源。 4、城市垃圾处理问题(最小吨*公里) 小区供水问题(最大供水收益) 代数式线性规划模型(垃圾运输) 代数式线性规划模型(小区供水)

5、如何表示具有下标的变量: 1)从C语言的类比来理解: 2)具有下标的变量可以看作某种数组变量中的元素; 3)除去下标后的符号可以看作是数组变量的名称; 4)下标可以看作是在数组中的索引值; 5)单下标变量对应于一个一维数组,称为“简单集合”; 6)多下标变量对应于一个多维数组,而多维数组可以看作是多个一维数组的笛卡尔积,称为“派生集合”。 6、Lingo中如何定义具有下标的变量? 1)在Lingo中使用“集合变量”的形式表达规划模型中具有下标的变量 2)定义集合变量需要三个基本要素: 集合的名称 集合的形式(简单集合还是派生集合?集合的元素个数是多少?) 集合变量的名称 7、定义简单集合的语法: 集合名称/下标范围/: 变量列表;(变量之间用“,”分隔) 例:brand/1..6/: a, b;(集合的名称是brand,/1..6/表示这种集合包含6个元素,下标的范围是从1到6,并且定义了两个这种集合形式的变量分别用a、b表示,该语句相当于定义了a1~a6以及b1~b6两组变量) 例:type/1..4/;(也可以只定义集合形式不定义集合变量) 8、定义派生集合的语法: 集合名称(分量集合列表): 变量列表; 1)分量集合列表分别对应于派生集合的每一个维度,定义了每一个维度分别属于哪一种简单集合 2)例:product(brand, type): p, x;(集合的名称是product,该集合的第一个维度与brand集合的类型相同,第二个维度与type 集合的类型相同,并且定义了两个集合变量p和x。如果根据前面对brand和type的定义,product集合是一个6*4的二维派生集合,该语句相当于定义了p11~p64和x11~x64两组变量) 3)例:address(country, state, city)。 9、调用集合变量的语法: 1)变量名称(下标值)”的形式调用集合变量的指定元素:pi→p(i);xij→x(i,j); 例:p(4)、x(2,3)

lingo入门

专题2:Lingo编程介绍 Lingo产品介绍 Lindo 和Lingo 是美国Lindo 系统公司开发的一套专门用于求解最优化问题的软件包。Lindo 用于求解线性规划和二次规划问题,Lingo 除了具有Lindo 的全部功能外,还可以用于求解非线性规划问题,也可以用于一些线性和非线性方程(组)的求解,等等。Lindo 和Lingo 软件的最大特色在于可以允许优化模型中的决策变量是整数(即整数规划),而且执行速度很快。 Lingo 实际上还是最优化问题的一种建模语言,包括许多常用的函数可供使用者建立优化模型时调用,并提供与其他数据文件(如文本文件、Excel电子表格文件、数据库文件等)的接口,易于方便地输入、求解和分析大规模最优化问题。 由于这些特点,Lindo系统公司的线性、非线性和整数规划求解程序已经被全世界数千万的公司用来做最大化利润和最小化成本的分析。应用的范围包含生产线规划、运输、财务金融、投资分配、资本预算、混合排程、库存管理、资源配置等等... Lindo/Lingo 软件作为著名的专业优化软件,其功能比较强、计算效果比较好,与那些包含部分优化功能的非专业软件相比,通常具有明显的优势。此外,Lindo/Lingo 软件使用起来非常简便,很容易学会,在优化软件(尤其是运行于个人电脑上的优化软件)市场占有很大份额,在国外运筹学类的教科书中也被广泛用做教学软件。 Lingo的程序规范 1.Lingo能求解的优化模型 优化模型 连续优化整数规划 优化模型二次规划非线性规划

2. 编写一个简单的lingo 程序 例1 用Lingo 解决一个二次规划问题 2 2 1211221212 12m ax 982770.32100..2,0x x x x x x x x s t x x x x +---+≤?? ≤?? ≥?为整数 解:在lingo 命令行中输入如下代码, x1+x2<=100; !一个简单例子; max=98*x1+277*X2-x1*x1-0.3*X1*x2-2*X2*x2; x1-2*x2<=0; @gin(x1);@gin(x2); 按求解键 得到结果如下, Global optimal solution found. Objective value: 11077.50 Extended solver steps: 0 Total solver iterations: 44 Variable Value Reduced Cost X1 35.00000 -8.500002 X2 65.00000 -6.500004 在这个例子里要注意如下一些细节: ①每一行语句结尾要有分号; ②注释行以!号开头,;号结尾 ③Lingo 中的变量不区分字母大小写 ④系数和变量之间要有运算符相连 ⑤“max=”或“min=”表示目标函数 ⑥Lingo 的语句顺序并不重要 ⑦以@开头的语句表示调用Lingo 自带的函数,本例中@gin(x1)表示x1为整数 ⑧Lingo 中以默认了所有变量都非负 对本例结果的解释: 找到全局最优解,使得目标函数值为11077.50,对应变量1x , 2x 的值分别为35和65,对应变量1x ,2x 的影子价格分别为8.500002-, 6.500004-。 所谓的影子价格,就是指对应的变量增加1单位,其他变量无变化时目标函数改变的 单位数。

相关主题
文本预览
相关文档 最新文档